如何在 vhdl 中将信号延迟几个时钟周期
how to delay a signal for several clock cycles in vhdl
我正在尝试将信号延迟五个时钟周期..
process (read_clk)
begin
if (rising_edge(read_clk)) then
rd_delay <= rd_en;
end if;
end process;
delay3 <= not(rd_en) and rd_delay;
通过边缘检测技术,这将给我一个时钟周期的延迟,但我需要五个时钟周期。
谢谢大家
你的信号delay3
是不是信号rd_en
的延迟版本,它是一个'1'
一个时钟的脉冲在信号 rd_en
上的 下降沿 之后的循环。
如果你只是想延迟rd_en
五个时钟周期,那么添加5个触发器:
process (read_clk)
begin
if rising_edge(read_clk) then
rd_en_d5 <= rd_en_d4;
rd_en_d4 <= rd_en_d3;
rd_en_d3 <= rd_en_d2;
rd_en_d2 <= rd_en_d1;
rd_en_d1 <= rd_en;
end if;
end process;
(或者,如果您具有 VHDL 知识,可以使用数组和 for 循环做一些更优雅的事情。)
如果您还想检测下降沿,请继续使用与您问题中的过程类似的东西。
Matthew 提议的稍微更优雅的版本可能是,例如:
constant dn: positive := 5;
signal delay: std_ulogic_vector(0 to dn - 1);
...
process (read_clk)
begin
if rising_edge(read_clk) then
delay <= rd_en & delay(0 to dn - 2);
end if;
end process;
rd_en_d5 <= delay(dn - 1);
我正在尝试将信号延迟五个时钟周期..
process (read_clk)
begin
if (rising_edge(read_clk)) then
rd_delay <= rd_en;
end if;
end process;
delay3 <= not(rd_en) and rd_delay;
通过边缘检测技术,这将给我一个时钟周期的延迟,但我需要五个时钟周期。
谢谢大家
你的信号delay3
是不是信号rd_en
的延迟版本,它是一个'1'
一个时钟的脉冲在信号 rd_en
上的 下降沿 之后的循环。
如果你只是想延迟rd_en
五个时钟周期,那么添加5个触发器:
process (read_clk)
begin
if rising_edge(read_clk) then
rd_en_d5 <= rd_en_d4;
rd_en_d4 <= rd_en_d3;
rd_en_d3 <= rd_en_d2;
rd_en_d2 <= rd_en_d1;
rd_en_d1 <= rd_en;
end if;
end process;
(或者,如果您具有 VHDL 知识,可以使用数组和 for 循环做一些更优雅的事情。)
如果您还想检测下降沿,请继续使用与您问题中的过程类似的东西。
Matthew 提议的稍微更优雅的版本可能是,例如:
constant dn: positive := 5;
signal delay: std_ulogic_vector(0 to dn - 1);
...
process (read_clk)
begin
if rising_edge(read_clk) then
delay <= rd_en & delay(0 to dn - 2);
end if;
end process;
rd_en_d5 <= delay(dn - 1);