2017-02-21 137 views
-1

我对等待语句的确切含义感到困惑。系统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; )后的代码?

回答

0

在这种情况下

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