clk_even_divdier.vhd
来自「常用2、4、6及任意偶数分频器的VHDL代码实现(原创)」· VHDL 代码 · 共 88 行
VHD
88 行
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 + =
减小字号Ctrl + -
显示快捷键?