系统Verilog-等待陈述

时间:2017-02-21 06:55:06

标签: system-verilog

我对等待陈述的确切含义感到困惑。

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

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; )只有在等待表达式的计算结果为真时才执行?

1 个答案:

答案 0 :(得分:1)

在这种情况下

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

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

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)为真,然后阻塞直到posedge上有vif.clk。它与:

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