2014-08-27 92 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;我不知道这是否是可用的旧版本。)