真实面经题目 · 原创解析
SVA 中 assert 和 cover 有什么区别,断言结果在仿真中有哪些状态?
这题考断言的检查和覆盖两种用途,回答要区分 assert 用于发现违反属性的错误,cover 用于统计属性场景是否发生。
真实面经题目 · 原创解析
这题考断言的检查和覆盖两种用途,回答要区分 assert 用于发现违反属性的错误,cover 用于统计属性场景是否发生。
assert property 是检查性质是否被违反,重点是发现 bug;cover property 是统计某个时序场景是否发生,重点是覆盖率和激励是否打到。对于 concurrent assertion,仿真中常见结果可以说成失败、非空成功、空成功以及被 disable 条件屏蔽。失败会触发 error/action block;成功可能是 antecedent 触发并满足 consequent,也可能 antecedent 根本没发生导致 vacuous success;cover 只有场景真正匹配才计数,所以它能帮助判断 assert 没失败到底是设计真的对,还是激励没覆盖到。
assert 描述设计必须满足的时序关系,例如请求后若干周期内必须响应。当前仿真轨迹违反该关系时,断言失败并触发报告或 action block,用于尽早定位协议、时序和控制逻辑错误。
cover property 关注某个序列或性质是否出现过,常用于补充功能覆盖。它不把未发生当错误,而是告诉验证人员激励是否打到了关键场景,例如一次完整握手、边界长度传输或异常恢复流程。
并发断言常有 antecedent 和 consequent。若 antecedent 发生且 consequent 满足,是非空成功;若 antecedent 没发生,很多蕴含属性会 vacuous success。只看没有失败不够,还要结合 cover 或覆盖率确认前提确实发生过。
reset 或 disable iff 条件成立时,断言可被屏蔽,不应误判为通过。若信号存在 X/Z,不同工具和写法会影响匹配与失败表现,工程上要让复位、采样时钟和未知值策略明确。
因为属性可能从未真正被触发,assert 不报错只是前提没发生。没有 cover 或覆盖率辅助,容易误以为协议已被验证。
不能完全替代。assert 适合局部时序和协议性质,scoreboard 更适合端到端数据一致性、乱序匹配和复杂参考模型比较。
要看断言、功能覆盖、代码覆盖、错误注入和回归日志是否对应题目里的关键路径;如果只是组件能跑起来,但没有覆盖目标状态和异常分支,验证价值是不够的。