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

dev*_*nja 2 verilog timedelay

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

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

Pet*_*vaz 7

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

例如,对于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
Run Code Online (Sandbox Code Playgroud)