如何生成具有这些规格的 I²C 时钟?

How do I generate an I²C clock with these specs?

I2C clock specifications 来自 fpga 的时钟是 100MHz,我需要 运行 它在 400kHz,所以为了制作 400kHz 时钟,我将 100MHz/(2^8)=390625(close到 400kHz)(请告诉我一个更优化的时钟分频器方式)这里 8 是 no。位,所以我做了一个计数器(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;

您只需将 clk 除以 250 即可得到 400kHz 的 clk。大致如下:

signal count : integer range 0 to 250;
signal clk400 : std_logic; 
process (clk100, rst)
begin 
    if rst ='1' then 
        count  <= 0;
        clk400 <= '0'; 
    elsif rising_edge(clk100) then
       count <= count +1;
       if count = 249 then 
           count  <= 0;
           clk400 <= not clk400;
       end if;
    end if;
end process;

或者,根据您的 FPGA 和工具,您可以使用 PLL。