我是靠谱客的博主 开放火,最近开发中收集的这篇文章主要介绍VDHL-双边沿计数器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

(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-双边沿计数器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部