System Verilog-等待语句

System Verilog- Wait statements

我对 wait 语句的确切含义感到困惑。

在这种情况下会发生什么:

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end

等待语句是否阻塞?是

@(posedge vif.clk)

无论等待表达式的求值如何,每次在循环内执行?

在这种情况下:

forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end

是等待后的代码(#0 fact_log2_samp_t = vif.fact_log2_samp; ) 仅在等待表达式的计算结果为真时才执行?

在这种情况下

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end

循环阻塞直到表达式 (vif.xn_valid == 1'b1) 为真,然后它阻塞直到 vif.clk.

上有一个 posedge

A wait 语句块,直到条件为真。如果条件已经为真,则立即执行。

在这种情况下:

forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end

循环阻塞直到表达式 (vif.cyc_tic == 1'b1) 为真,然后它阻塞直到 vif.clk 上有一个 posedge。等同于:

forever begin
    wait(vif.cyc_tic == 1'b1);
    @(posedge vif.clk);
    #0 fact_log2_samp_t = vif.fact_log2_samp;
end