2017-02-21 28 views
-1

私はwait文の正確な意味を混同しています。システムVerilog-待機文

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

ブロッキングwait文です:この場合はどうなり

@(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; )ウェイト式の評価がtrueの場合にのみ実行されますか? vif.clkposedgeがあるまで発現(vif.xn_valid == 1'b1)までこの場合

答えて

0

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

ループブロックが真、それブロックです。

waitステートメントは、条件が真になるまでブロックします。条件が既に真である場合、実行は直ちに実行されます。この場合

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

ループブロックvif.clkposedgeがあるまで発現(vif.cyc_tic == 1'b1)が真、それブロックになるまで。それは同じです:

forever begin 
    wait(vif.cyc_tic == 1'b1); 
    @(posedge vif.clk); 
    #0 fact_log2_samp_t = vif.fact_log2_samp; 
end 
関連する問題