2017-08-29 102 views
-4

據我所知,不建議混合阻塞和非阻塞。但如果確實存在,a,b,c的值是什麼?a,b,c的值是什麼?

module TB; 
reg a, b, c; 
initial begin 
    a = 3; 
    b = 4; 
    $display ("a = %d, b = %d, c=%d\n", a, b, c); 
    c <= a + b; 
    $display ("a = %d, b = %d, c=%d\n", a, b, c); 
    a <= 10; 
    b <= 2; 
    c = a + b; 
    $display ("a = %d, b = %d, c=%d\n", a, b, c); 
end 
endmodule 
+0

當你試圖模擬這段代碼時,你是否得到意想不到的結果?有一些免費的SystemVerilog在線模擬器,如[EDA遊樂場](https://www.edaplayground.com/),您應該可以使用它。 – AndresM

+0

你應該能夠從程序的輸出中回答你的問題。只是模擬它。 – Serge

回答

1
module TB; 
reg ***[2:0]*** a, b, c; 
initial begin 
    a = 3; 
    b = 4; 
$display ("a = %d, b = %d, c=%d\n", a, b, c); 
c <= a + b; 
$display ("a = %d, b = %d, c=%d\n", a, b, c); 
a <= 10; 
b <= 2; 
c = a + b; 
$display ("a = %d, b = %d, c=%d\n", a, b, c); 
end 
endmodule 

A = 3,B = 4,C = 7

的Verilog定時隊列被分成四個部分: 活動區 - >無效 - > NBA - >緩行 阻塞賦值獲得評估並在ACTIVE區域中與$ display()一起分配。雖然非阻塞分配在活動區域​​中進行評估並在非阻塞指派(NBA)區域中進行分配。因此,對a,b,c所做的任何更新都不會使用顯示語句來打印。您可以使用在延期區域執行的$ monitor。

+0

謝謝'Rottenengg'修復代碼和解釋! –

相關問題