2017-02-21 189 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