我正在嘗試使用時鐘模塊cb_module
在SystemVerilog中建立測試臺。我該如何讓Modelsim以SystemVerilog的指定退出碼退出
我在命令行中運行的ModelSim:
vsim -c test_bench -do "run -all"
一切工作正常,但我無法弄清楚如何獲得的ModelSim退出,並與一個非零退出代碼返回,如果這樣的斷言失敗:
##1 assert(cb_module.dat_o == 4'h0) else $finish;
我正在嘗試使用時鐘模塊cb_module
在SystemVerilog中建立測試臺。我該如何讓Modelsim以SystemVerilog的指定退出碼退出
我在命令行中運行的ModelSim:
vsim -c test_bench -do "run -all"
一切工作正常,但我無法弄清楚如何獲得的ModelSim退出,並與一個非零退出代碼返回,如果這樣的斷言失敗:
##1 assert(cb_module.dat_o == 4'h0) else $finish;
您不想使用$finish
退出模擬器 - 這被認爲是正常退出。 您應該使用$錯誤或$致命:
##1 assert(cb_module.dat_o == 4'h0) else $fatal("dat_o not 0");
然後你可以編寫腳本到您的待辦事宜文件。 run
命令返回後,腳本應調用runStatus
或runStatus -full
以確定運行是否因正常或異常原因而終止。一旦腳本確定腳本由於用戶錯誤而終止,它就可以調用quit -code <n>
並返回任何非零數字來指示失敗情況。
許多測試不希望在斷言失敗時退出模擬器,因此它們使用$ error。 然後,您可以使用命令
coverage attribute -name TESTSTATUS
,它會返回一個嚴重性代碼爲測試運行期間產生的最嚴重的消息。所以,你可能最終想要做
quit -code [coverage attribute -name TESTSTATUS -concise]
我不認爲你真的有任何控制權。我認爲退出代碼更多的與程序執行是否成功或遇到內部錯誤有關。這可能是大多數迴歸工具分析日誌文件和grep查找錯誤消息以判斷運行是否失敗的原因。
如果你必須調用$完成出於某種原因(例如,它是從你的測試框架中調用,並且無法修改它),你可以出來讓你退出代碼來電者使用「onfinish stop」。例如:
vsim -c test_bench -do "onfinish stop; run -all"
(我用的ModelSim 10.3d;我不知道這是否是可用的舊版本。)