如何在 vhdl 中将信号延迟几个时钟周期

VJK*_*RAN 1 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;
Run Code Online (Sandbox Code Playgroud)

通过边缘检测技术,这会给我一个时钟周期的延迟,但我需要五个时钟周期。

谢谢你们。

Ren*_*let 5

马修提议的稍微优雅的版本可以是,例如:

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);
Run Code Online (Sandbox Code Playgroud)

  • 不确定我明白你的意思。我还在答案中使用了 `std_ulogic`(向量)。无论如何,关于你对“signed”和“unsigned”的评论正在解决,请注意VHDL2008(最终)标准化了“ieee.numeric_std.unresolved_signed”和“ieee.numeric_std.unresolved_unsigned”。它还定义了 `u_signed` 和 `u_unsigned` 别名。 (2认同)