2013-08-27 93 views

回答

1

它們產生不同的輸出,當#5延遲之前in切換到了。無論in切換多快,無阻塞分配總是會將in延遲#5

EDA遊樂場上的例子。注意模擬輸出的差異。

3

​​3210塊5個時間單位的下一個操作。它會阻止監控下一個@(in),直到5個時間單位過去。如果您在分配前後添加$display聲明,則會看到5個時間單位已過。

always @(in) begin 
    $display("enter @ %0t",$realtime); 
    out = #5 in; 
    $display("exit @ %0t",$realtime); 
end 
/******************* 
* Example output: 
* enter @ time 10 
* exit @ time 15 
*******************/ 

out <= #5 in;時間表的分配發生在未來的5個時間單位,並允許下一個操作開始,而無需等待任務完成。

always @(in) begin 
    $display("enter @ %0t",$realtime); 
    out <= #5 in; 
    $display("exit @ %0t",$realtime); 
end 
/******************* 
* Example output: 
* enter @ time 10 
* exit @ time 10 
*******************/ 

工作示例在EDA遊樂場:http://www.edaplayground.com/s/6/114

+0

謝謝你的解釋,它幫助!相關問題:#5 out = in;'與'#5 out <= in;'完全相同嗎?我用你的edaplayground的例子試了一下,他們似乎給出了相同的入口 - 出口時間(也是'out'的相同波形)。不過,我想知道是否還有其他差異。 – dhrumeel

+0

語句的延遲前面總是被視爲阻塞語句。基本上Verilog推斷分號; '#5 out ...'與#5相同;出... ...。阻塞('=')和非阻塞('<=')差異仍然適用:http://stackoverflow.com/questions/4653284/how-to-interpret-blocking-vs-non-blocking-assignments-in-的Verilog – Greg