vhdl 中的时钟分频器,从 100MHz 到 1Hz 代码

Clock divider in vhdl from 100MHz to 1Hz code

我写了这段代码来将时钟分频到一个 nexys4 fpga,它的集成时钟默认为 100Mhz 频率,我需要将它分频为 1hz。有人可以告诉我它是否正确,如果不正确需要更改什么?

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;


entity digi_clk is
port (clk1 : in std_logic;
       clk : out std_logic
     );
end digi_clk;

architecture Behavioral of digi_clk is

signal count : integer :=0;
signal b : std_logic :='0';
begin

 --clk generation.For 100 MHz clock this generates 1 Hz clock.
process(clk1) 
begin
if(rising_edge(clk1)) then
count <=count+1;
if(count = 50000000) then
b <= not b;
count <=0;

end if;
end if;
clk<=b;
end process;
end;

代码看起来不错。然而,现有代码将产生略低于 1 Hz 的输出频率。要获得精确的 100000000:1 比率,您需要更改条件语句:

    if(count = 50000000) then

...至:

    if(count = 50000000-1) then

程序似乎正确,但您应该将内部信号(计数)声明为整数。然后你的代码应该编译成功。但是你会得到一些警告,并会在测试平台模拟中发现一些问题。为避免这种情况,您需要将内部信号 ( count ) 声明为: signal count : std_logic_vector (25 downto 0);因为 100MHz 编码为 26 位。我更喜欢将 50000000 转换为十六进制格式,它应该可以正常工作。