2017-02-21 9 views
-1

Я смущен о точном значении инструкции wait.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; ) выполняются, если вычисление выражения ожидания верно?

ответ

0

В этом случае

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

блоки циклически, пока выражение (vif.xn_valid == 1'b1) истинно, то он блокирует до тех пор, пока не будет posedge на vif.clk.

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) верно, то он блокирует до тех пор, пока не будет posedge на vif.clk. Это то же самое, что и:

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