如何使用SystemVerilog中的指定退出代码退出Modelsim

时间:2014-08-27 17:43:32

标签: verification system-verilog modelsim

我正在尝试使用时钟块cb_module在SystemVerilog中构建测试平台。

我从命令行运行Modelsim:

vsim -c test_bench -do "run -all"

一切正常但我无法弄清楚如果像这样的断言失败,如何让Modelsim退出并返回非零退出代码:

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

3 个答案:

答案 0 :(得分:7)

您不希望使用$finish退出模拟器 - 这被视为正常退出。 你应该使用$ error或$ fatal:

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

然后您可以将其编入您的-do文件中。在run命令返回后,脚本应调用runStatusrunStatus -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错误消息以确定运行是否失败的原因。