如何在合成verilog中包含时间延迟?

时间:2013-06-28 09:34:13

标签: verilog timedelay

我正在尝试用verilog编写一个可综合的代码,其中我需要包含几秒钟的时间延迟。我使用#delay完成了模拟,但合成器无法接受。

在合成FSM的过程中,改变其状态不是基于某些条件而是在几秒钟的延迟之后,我想要上述时间延迟方法。 FSM必须在4秒后将状态从state_1切换到state_2,在2秒后切换到state_2到状态_3等等。

2 个答案:

答案 0 :(得分:7)

如果您知道您的时钟频率是x Hz,并且您想等待y秒,那么只需使用计数器并等到数字x * y。

e.g。对于1kHz的时钟和3秒的延迟,该代码将在延时后触发do_something。

`define CLOCK_FREQ 1000
`define TIME_DELAY 3

reg [31:0] count=0;

assign do_something = (count==`CLOCK_FREQ*`TIME_DELAY);

always @(posedge clk)
begin
   count <= count + 1'b1;
end

答案 1 :(得分:2)

为了在延迟一段时间后切换状态,我希望这段代码有所帮助。

current_state=state_1;
for(i=0;i<=timedelay*freq;i=i+1)
@posedge;
current_state=state_2;