2

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

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

4

2 回答 2

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
于 2013-06-28T10:16:05.530 回答
2

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

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

于 2013-07-01T04:52:01.357 回答