【发布时间】:2021-11-30 18:32:06
【问题描述】:
I2C clock specifications fpga 的时钟是 100MHz,我需要以 400kHz 运行它,所以为了制作 400kHz 时钟,我划分了 100MHz/(2^8)=390625(接近 400kHz)(请告诉我一个时钟分频器的更优化方式)这里 8 是没有。位,所以我做了一个计数器(8 到 0)并将其第 8(索引)位作为 i2c 通信过程(vhdl)的时钟。 请指导我如何生成所需的时钟。 谢谢
signal count:std_logic_vector(8 downto 0);
signal sign:std_logic;
process(clk,rst)
begin
if rst='1' then
count<=(others=>'0');
elsif rising_edge(clk) and rst='0' then
count<=count+1;
end if;
sign<=count(8);
end process;
【问题讨论】:
-
请注意,如果您从某种逻辑(如您接受的答案中)生成时钟,则您可能会在综合过程中看到错误。时钟不像任何逻辑信号。我需要特别照顾。在许多 FPGA 中,它必须由特定设备(PLL、时钟发生器……)生成和/或通过特定缓冲器,以使其电气特性与其时钟角色兼容。因此,请注意您的错误/警告消息,如果您遇到与时钟相关的问题,请打开 FPGA 的文档并搜索“时钟”或“时钟发生器”或“时钟管理器”。
-
例如,在 Xilinx FPGA 中,您可能需要用正确配置的数字时钟管理器 (DCM) 模块替换自定义逻辑时钟发生器,该模块将 100MHz 时钟作为输入并生成 400kHz 时钟从中。然后可以将生成的时钟路由到带有时钟缓冲器的时钟网络,并被设计的其他部分用作常规时钟。