不同 ModelSim 版本中“断言计数”的行为

Behaviour of `assertion count` in different ModelSim versions

我已经在 TCL 中为 ModelSim 编写了测试自动化脚本,它在本质上运行

vcom -work work -2002 -explicit -source -cover sbce3 something.vhd
# ...
vsim -assertcover -t 10ps -cover -displaymsgmode both -msgmode both "work.something" -quiet

一旦模拟结束,我验证所有断言都通过

set assertion_count [ assertion count -fails -r / ]
if {$assertion_count} {
    # failed...
} else {
    # success
}

这对于一些较旧的 ModelSim 版本(特别是 PE 6.5b)来说工作正常,但在切换到 PE 10.4 之后,assertion_count 总是 0,因此我的测试总是 "pass"!

现在 ModelSim PE 命令参考手册(不幸的是,modelsim_pe_ref.pdf 在 Mentor 登录墙后面),甚至没有提到 assertion ... 命令, HTML 手册(例如 here)确实提到了它。

最近 ModelSim 中有什么改变打破了上述模式,我是否错误地使用了它(例如,缺少 vsim 的参数)或者是否有更好的选择?

例如,我可以使用 coverage reportcoverage report -assert -detail,但随后我需要解析输出

# NEVER FAILED: 97.0%  ASSERTIONS: 105

我相信 Modelsim 已经更改了新版本断言的日志参数的默认值。

在以前的版本中,断言的默认配置似乎是启用了日志选项,但是在10.4中,所有断言在加载测试台时都不会记录,并且在触发断言时会报告但是它没有在断言面板上注册(视图 – 覆盖率 – 断言)

我通过调用断言的日志功能修复了这个错误:

断言失败-登录-递归/

似乎在序列开始时调用此命令足以启用日志记录进程,并且它修复了断言计数命令的问题。

ModelSim支持官方回复:

The "assertion count" command is not expected to work on Modelsim PE, as it is not supposed to have assertion coverage metrics enabled. Generate and parse a coverage report instead.