我正在尝试使用时钟块cb_module
在SystemVerilog中构建测试平台。
我从命令行运行Modelsim:
vsim -c test_bench -do "run -all"
一切正常但我无法弄清楚如果像这样的断言失败,如何让Modelsim退出并返回非零退出代码:
##1 assert(cb_module.dat_o == 4'h0) else $finish;
答案 0 :(得分:7)
您不希望使用$finish
退出模拟器 - 这被视为正常退出。
你应该使用$ error或$ fatal:
##1 assert(cb_module.dat_o == 4'h0) else $fatal("dat_o not 0");
然后您可以将其编入您的-do文件中。在run
命令返回后,脚本应调用runStatus
或runStatus -full
以确定运行是否因正常或异常原因而终止。一旦脚本确定脚本因用户错误而终止,它就可以调用quit -code <n>
并返回任何非零数字以指示失败情况。
许多测试不希望在断言失败时退出模拟器,因此他们使用$ error。 然后,您可以使用命令
coverage attribute -name TESTSTATUS
它将返回测试运行期间生成的最严重消息的严重性代码。所以你最终可能想做
quit -code [coverage attribute -name TESTSTATUS -concise]
答案 1 :(得分:1)
如果您因某种原因必须致电$ finish(例如,在您的测试框架内调用它,而您无法对其进行修改),您可以使用&#将退出代码发送给调用者34; onfinish stop&#34;。例如:
Cannot resolve symbol '@string/action_search' less... (Ctrl+F1)
Validates resource references inside Android XML files
(我使用的是Modelsim 10.3d;我不确定它是否适用于旧版本。)
答案 2 :(得分:0)
我认为你真的无法控制它。我认为退出代码更多地与程序是否成功执行或遇到内部错误有关。这可能是大多数回归工具解析日志文件和grep错误消息以确定运行是否失败的原因。