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

时间:2017-07-20 14:56:23

标签: 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;

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

谢谢大家。

2 个答案:

答案 0 :(得分:3)

马修的提案略显优雅,例如:

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);

答案 1 :(得分:1)

您的信号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循环。)

如果您想要检测到下降沿,那么请继续使用与您问题中的过程类似的内容。