概述
题目描述
(1)完成一个0~15之间循环计数的计数器,能在时钟信号的上升沿和下降沿都实现计数值的加1动作。
(2)完成一个0~8之间循环计数的计数器,能在时钟信号的上升沿和下降沿都实现计数值的加1动作。
(3)在(2)的基础上,产生进位信号。
代码实现
第一题
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY erer1 IS
PORT( CLK:IN STD_LOGIC;
Q1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END;
ARCHITECTURE bhv OF erer1 IS
signal cnt: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal cnt1: STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
process(clk) begin
if clk'event and clk='1' then
cnt1 <= cnt + 1;
end if;
end process;
process(clk) begin
if clk'event and clk='0' then
cnt <= cnt1 + 1;
end if;
end process;
process(clk) begin
if clk = '1' then
Q1 <= cnt1;
else
Q1 <= cnt;
end if;
end process;
end bhv;
第二题
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY erer1 IS
PORT( CLK:IN STD_LOGIC;
Q1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END;
ARCHITECTURE bhv OF erer1 IS
signal cnt: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal cnt1: STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
process(clk) begin
if clk'event and clk='1' then
if cnt<8 then
cnt1 <= cnt+1;
else
cnt1 <= "0000";
end if;
end if;
end process;
process(clk) begin
if clk'event and clk='0' then
if cnt1<8 then
cnt <= cnt1+1;
else
cnt <= "0000";
end if;
end if;
end process;
process(clk) begin
if clk = '1' then
Q1 <= cnt1;
else
Q1 <= cnt;
end if;
end process;
end bhv;
第三题
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY erer2 IS
PORT( CLK:IN STD_LOGIC;
Q1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
cout:out STD_LOGIC
);
END;
ARCHITECTURE bhv OF erer2 IS
signal cnt: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal cnt1: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal cout1,cout2: STD_LOGIC;
begin
process(clk) begin
if clk'event and clk='1' then
if cnt1 < 8 then
cnt <= cnt1 + 1;cout1 <= '0';
else
cnt <= "0000"; cout1 <= '1';
end if;
end if;
end process;
process(clk) begin
if clk'event and clk='0' then
if cnt < 8 then
cnt1 <= cnt + 1;cout2 <= '0';
else
cnt1 <= "0000"; cout2 <= '1';
end if;
end if;
end process;
process(clk) begin
if clk = '1' then
Q1 <= cnt1;
else
Q1 <= cnt; end if;
if clk = '1' then
cout <= cout2;
else
cout <= cout1;
end if;
-- 出现毛刺可以换成
-- cout <= cout1 OR cout2;
end process;
end bhv;
最后
以上就是开放火为你收集整理的VDHL-双边沿计数器的全部内容,希望文章能够帮你解决VDHL-双边沿计数器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复