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

Axe*_*ega 3 verification modelsim system-verilog

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

我从命令行运行Modelsim:

vsim -c test_bench -do "run -all"
Run Code Online (Sandbox Code Playgroud)

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

##1 assert(cb_module.dat_o == 4'h0) else $finish;
Run Code Online (Sandbox Code Playgroud)

dav*_*_59 8

您不想使用$finish退出模拟器 - 这被认为是正常退出.你应该使用$ error或$ fatal:

##1 assert(cb_module.dat_o == 4'h0) else $fatal("dat_o not 0");
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其编入您的-do文件中.在后run命令返回,脚本应该调用runStatusrunStatus -full以确定是否运行终止正常或异常的原因.一旦脚本确定脚本因用户错误而终止,它就可以调用quit -code <n>并返回任何非零数字以指示失败情况.

许多测试不希望在断言失败时退出模拟器,因此它们使用$ error.然后,您可以使用该命令

coverage attribute -name TESTSTATUS
Run Code Online (Sandbox Code Playgroud)

它将返回测试运行期间生成的最严重消息的严重性代码.所以你最终可能想做

quit -code [coverage attribute -name TESTSTATUS -concise]
Run Code Online (Sandbox Code Playgroud)