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

断言触发但Questasim覆盖率报告中Pass计数为0的原因排查咨询

断言触发但Questasim覆盖率报告中Pass计数为0的原因排查咨询

嘿,我来帮你拆解这个让人摸不着头脑的问题——明明看到断言的前后件都触发了打印日志,覆盖率里的Pass计数却始终是0,这种情况确实挺绕的。

先理清楚你的核心现象:

  • 第一次运行时,断言的前件、后件打印都正常输出,说明断言逻辑确实触发且成功通过,但覆盖率报告里Pass Count是0,Vacuous Count(空成功计数)是4,Attempt Count(总尝试次数)是5。
  • 把后件改成1!=1后,断言触发了错误日志,覆盖率里Failure Count直接变成了1,完全符合预期。

核心原因:恒真后件被Questasim归类为「空成功」

Questasim的断言覆盖率统计规则里,Pass Count只统计非空成功(Non-Vacuous Pass)——也就是那些真正验证了设计信号状态的成功断言。而如果你的断言后件是一个不依赖任何设计信号的恒真表达式(比如1==1),哪怕前件匹配成功,Questasim也会把这次成功判定为空成功,计入Vacuous Count而非Pass Count。

为什么会有这种区分?因为空成功本质上没有验证任何设计行为,只是因为表达式本身恒真而通过,不属于有效功能验证的范畴。反过来,当你把后件改成恒假的1!=1时,这是一个明确的失败判定,属于非空失败,所以会被正常计入Failure Count。

验证方法

你可以修改后件,让它依赖一个实际的设计信号,比如把:

(1==1, $display("consequent happended at time=%t", $time))

改成:

(EN == 1, $display("consequent happended at time=%t", $time))

在你的测试用例中,EN始终为1,所以断言依然会成功,但这次后件实际验证了设计信号的状态。重新运行覆盖率统计,你会看到Pass Count变成1,Vacuous Count则减少为3。

额外说明

你断言里的逗号操作符用法是没问题的——SVA中(表达式, 系统任务)的写法会先执行表达式判断,再执行系统任务(比如打印),整个结构的真值由前面的表达式决定,所以前件匹配后触发后件评估的逻辑是完全符合预期的。

备注:内容来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:14:37