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

vhdl中从100MHz到1Hz代码的时钟分频器,vhdl,fpga,clock,Vhdl,Fpga,Clock,我编写了这段代码,用于将时钟划分为nexys4 fpga,默认情况下,该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

我编写了这段代码,用于将时钟划分为nexys4 fpga,默认情况下,该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;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体数字时钟是
端口(clk1:标准_逻辑中;
时钟:输出标准逻辑
);
完数码钟;;
digi_clk的架构是
信号计数:整数:=0;
信号b:std_逻辑:='0';
开始
--时钟生成。对于100 MHz时钟,它生成1 Hz时钟。
过程(clk1)
开始
如果(上升沿(clk1)),则

计数代码看起来正常。然而,现有的代码将产生一个略低于1赫兹的输出频率。要获得精确的100000000:1比率,您需要将条件语句更改为:

如果(计数=50000000),则
。。。致:

如果(计数=50000000-1),则

程序似乎正确,但您应该将内部信号(计数)声明为整数。那么您的代码应该能够成功编译。但是您将在testbech模拟中得到一些警告并发现一些问题。为了避免这种情况,您需要将内部信号(计数)声明为:信号计数:std_逻辑_向量(25到0);因为100MHz编码为26位。我更喜欢将50000000转换为十六进制格式,它应该可以毫无问题地工作。

通常,在FPGA中不建议使用逻辑来创建分割时钟。它应该会生成时钟使能。从技术上讲是正确的,但我敢打赌,误差远低于OP板上振荡器的容差。如果他的板上有一个50ppm的时钟,那就太幸运了。