You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在检测到测试夹具问题时向Questa Vsim返回状态码?

需求背景与问题

我原本使用基于Icarus Verilog的测试bench,目前正在切换到Questa模拟器。这些测试bench支持单独调用或批量执行。Icarus有扩展特性允许返回非零状态码,我通过头文件中的Verilog宏来处理不同模拟器的差异,宏定义如下:

// Allow modsim/questa and other simulators to run.
// $finish_and_return iverilog extention allows *FAIL* status to halt
// make.  This will pause unit tests.  Otherwise, the output must be
// buffered (and non-real time).
`ifdef __ICARUS__
 `define RETURN_STAT(status) $finish_and_return(status)
`else
 `define RETURN_STAT(status) $finish()
`endif

`ifdef QUESTA
 `define TRACE(name) "\"name.vcd\""
`else
 `define TRACE(name) "\"name.lxt\""
`endif

多数单元测试在两款模拟器下表现一致,但某款测试在Questa中存在差异(此为背景,非本次核心问题)。我现在需要修改RETURN_STAT宏,使其在Questa环境下也能返回状态码。测试bench由TCL脚本调用,脚本内容如下:

# Simulate the design.
vsim -coverage -voptargs="+cover=bcesfx" $test_name -do "coverage save -onexit coverage.cov; run -all"

随后通过vsim.exe -c -do questa.tcl启动仿真,最终需要将状态码返回给make工具。

此前有类似的VHDL相关问题,但不确定是否适用于Verilog。注释中提到的“否则输出必须被缓冲(非实时)”,指的是通过$display()打印'PASS'或'FAIL',再在Makefile中用grep捕获结果,但我需要保留所有仿真输出。另外,测试bench中还有一个名为run_failed的reg变量,如果Vsim能将这个变量的值传递给TCL脚本或系统环境变量,我也可以利用这种方式实现状态码返回。

内容的提问来源于stack exchange,提问作者artless-noise-bye-due2AI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:25:16