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

问题描述 投票:0回答:3

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

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

verilog timedelay
3个回答
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

2
投票

对于延迟一段时间后切换状态,我希望这段代码有帮助。

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


0
投票

如果您有某个频率的时钟,您可以使用重复语句。如果您的时钟周期为 1.25 纳秒,并且您想要模拟 100 纳秒的延迟。那么您需要 1.25 * 100 = 125 个时钟周期。然后你就可以这样做:

repeat (125) begin
    @(posedge clk);
end
// do stuff now
© www.soinside.com 2019 - 2024. All rights reserved.