如何生成具有这些规格的 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。
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。