2014-08-27 71 views
2

我正在嘗試使用時鐘模塊cb_module在SystemVerilog中建立測試臺。我該如何讓Modelsim以SystemVerilog的指定退出碼退出

我在命令行中運行的ModelSim:

vsim -c test_bench -do "run -all" 

一切工作正常,但我無法弄清楚如何獲得的ModelSim退出,並與一個非零退出代碼返回,如果這樣的斷言失敗:

##1 assert(cb_module.dat_o == 4'h0) else $finish; 

回答

7

您不想使用$finish退出模擬器 - 這被認爲是正常退出。 您應該使用$錯誤或$致命:

##1 assert(cb_module.dat_o == 4'h0) else $fatal("dat_o not 0"); 

然後你可以編寫腳本到您的待辦事宜文件。 run命令返回後,腳本應調用runStatusrunStatus -full以確定運行是否因正常或異常原因而終止。一旦腳本確定腳本由於用戶錯誤而終止,它就可以調用quit -code <n>並返回任何非零數字來指示失敗情況。

許多測試不希望在斷言失敗時退出模擬器,因此它們使用$ error。 然後,您可以使用命令

coverage attribute -name TESTSTATUS 

,它會返回一個嚴重性代碼爲測試運行期間產生的最嚴重的消息。所以,你可能最終想要做

quit -code [coverage attribute -name TESTSTATUS -concise] 
0

我不認爲你真的有任何控制權。我認爲退出代碼更多的與程序執行是否成功或遇到內部錯誤有關。這可能是大多數迴歸工具分析日誌文件和grep查找錯誤消息以判斷運行是否失敗的原因。

1

如果你必須調用$完成出於某種原因(例如,它是從你的測試框架中調用,並且無法修改它),你可以出來讓你退出代碼來電者使用「onfinish stop」。例如:

vsim -c test_bench -do "onfinish stop; run -all" 

(我用的ModelSim 10.3d;我不知道這是否是可用的舊版本。)