📄 clk_even_divdier.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 + -