⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clk_even_divdier.vhd

📁 常用2、4、6及任意偶数分频器的VHDL代码实现(原创)
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;



entity clk_even_divdier is
	generic(N:integer:=6); --定义任意偶数N分频值
port
	(
		clk_in: in std_logic;
		
		clk_div_2: buffer std_logic; --2分频输出
		clk_div_4: buffer std_logic; --4分频输出
		clk_div_6: buffer std_logic; --6分频输出
		clk_div_N: out std_logic --任意N(偶数)分频输出
		
	);
end clk_even_divdier;



architecture clk_even_divdier_body of clk_even_divdier is
	signal temp:integer;
begin
	
	------用触发器原理实现2分频-----------
	div_2:process(clk_in)
	begin
		if clk_in='1' and clk_in'event then
			clk_div_2<=not clk_div_2;
		end if;
	end process div_2;
	---------------------------------------
	
	
	------用触发器原理实现4分频-----------
	div_4:process(clk_in)
	begin
		if clk_in='1' and clk_in'event then
			if clk_in='1' and clk_in'event then
				 clk_div_4<=not clk_div_4;
			end if;
		end if;
	end process div_4;
	---------------------------------------
	
	
	------用触发器原理实现6分频-----------
	div_6:process(clk_in)
	begin
		if clk_in='1' and clk_in'event then
			if clk_in='1' and clk_in'event then
				if clk_in='1' and clk_in'event then
					 clk_div_6<=not clk_div_6;
				end if;
			end if;
		end if;
	end process div_6;
	---------------------------------------
	
	
	
	--------用通用的计数器原理来实现偶数N分频(!!!)----------
	--对于分频数较低的偶数分频,可以用上面进程中的触发器原理来实现
	--但是对于分频数较大,如10分频,100分频,显然用上面的方法就不合理
	--以下用通用的计数器原理来实现偶数N分频:
	div_N:process(clk_in)
	begin
		if clk_in='1' and clk_in'event then
			if temp<N-1 then --取N-1
				temp<=temp+1;
			else
				temp<=0;
			end if;
			
			if temp<N/2 then --取N/2
				clk_div_N<='1';
			else
				clk_div_N<='0';
			end if;
		end if;
	end process div_N;
	-----------------------------------------------------
	
end clk_even_divdier_body;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -