我试图在verilog中编写一个可综合的代码,其中我需要包含几秒钟的时间延迟.我已经使用#delay完成了模拟,但合成器无法接受.
在合成FSM的过程中,改变其状态不是基于某些条件而是在几秒的时间延迟之后,我想要上述时间延迟方法.FSM必须在4秒后将状态从state_1切换到state_2,在2秒后切换到state_2到state_3,依此类推.
如果您知道您的时钟频率是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)