2013-07-28 58 views

回答

2

當您使用的是always塊,你需要在你的initial塊之一$finish語句來完成的SIM卡。

固定碼:

module test; 

    reg clk; 

    initial begin 
    clk = 0; 
    $display("Hello"); 
    $finish(); // <-- FIX 
    end 

    always #10 clk = ~clk; 

endmodule 

辛結果在這裏:http://www.edaplayground.com/s/4/16

也就是說,如果你也有一個SystemVerilog的program在你的環境中,SIM卡會自動畢竟initial代碼完成在你program塊完成。從IEEE 1800-2012標準部分24.3:

當一個程序中的所有初始程序已經達到了他們的目的, 該程序將立即終止該程序內的 初始過程的所有後代線程。如果在至少一個程序塊內至少有一個初始程序,那麼在所有線程及其所有後代 線程都源自所有初始程序之後,通過隱式調用$finish 系統任務,整個模擬應終止在所有節目 已結束。

+1

那邊的漂亮網站。 – e19293001

+0

'$ stop'語句可能很有用 – Qiu

+0

@Qui,'$ stop'語句不會結束sim,但暫停它。從標準:_ $ stop系統任務導致模擬暫停._以下是[EDA Playground](http://www.edaplayground.com/s/4/18)上的測試。也就是說,像VeriWell這樣的一些模擬器會在調用'$ stop'時完成模擬。 –

1

initialalways之間沒有根本的區別:always只是initial forever。只要有計劃將來執行任何事情,那麼仿真將繼續(除非明確停止);你的陳述不斷重新安排時鐘分配,所以模擬不會停止。真的有什麼都沒有特別關於initial:它甚至不保證在任何always塊之前運行。

這不是一個SV問題(我對此一無所知),但我有興趣看到VL關於在初始代碼完成時自動完成SIM的評論。這會打破Verilog的兼容性,而且我很有興趣看到一個確認這一點的LRM參考。

+0

我在回答中添加了LRM參考。 –

相關問題