25 / 37 · 概念
验证计划、覆盖率与独立参考模型
区分测试通过与规格满足,将边界、交叉条件及最小反例纳入验证计划。
课时内容可免费阅读,选课后可保存学习进度。
验证计划把规格转为可检查的断言
不要只写“工作正常”,而应写明复位后的状态、正常输入的输出、暂停时保持、非法输入的处理及完成时刻等具体要求。为每个要求至少关联一个测试和观察点,更容易发现遗漏条件。
| 功能断言 | 激励 | 观察 |
|---|---|---|
| reset 优先 | reset 与 enable 同时为 1 | 下一状态为初值 |
| 保持数据顺序 | 连续输入非对称模式 | 所有输出数值与 valid |
| 准确边界回绕 | 最大状态前后 | M-1→0,无越界值 |
| 暂停时保持 | 改变输入,accept=0 | 存储状态不变 |
| 允许重叠模式 | 10101 | 在第 3、5 个接受输入时检测 |
为什么需要独立参考模型
若将移位拼接 RTL 的同样切片切片 从向量中选取连续比特范围的运算。所选范围决定结果位宽和位顺序。了解更多复制到参考模型,索引错误也可能一并复制。采用整数乘法与取模模型,或字符串后缀比较等不同形式实现规格,有助于相互核查。但形式不同并不会自动证明独立性,还需手算小例子确认。
覆盖率不是通过次数
某行代码被执行的覆盖率,不等于某个功能情况已被验证。reset×enable、state×input、full×push×pop 等交叉条件往往会暴露错误。不要只依赖随机测试,应为罕见而重要的组合增加定向测试。
N 输入组合电路可穷举 种输入,而时序电路还存在输入的时间序列。必须分析各状态是否可达、不变式不变式 所有允许的执行过程中都必须始终成立的条件。例如,深度为 4 的 FIFO 中,存储条目数必须始终在 0 到 4 之间。是否在每次转移中成立。不能把有限次仿真通过记录描述为无限时间的数学证明。
应从规格独立构造参考答案,而非复制实现。发现失败时,不仅记录实际值,还要记录此前的输入与状态。
- 规格与激励: 选择边界及交叉条件
- 独立参考模型: 计算预期值与有效时刻
- 与 DUT 比较: 在同一观察时刻对照
- 记录首次不匹配: 保留最小反例与随机种子
缩小失败并记录
保存首次 mismatch 的旧状态、输入、预期值和实际值。删去无关激励,构造仍能复现失败的最小反例,再进行修复。不要只让修改后的测试通过,还应对原有边界与复位复位 将状态恢复为规定初值的控制。必须同时规定其同步或异步性质,以及相对于其他控制的优先级。了解更多测试一起运行回归。
自己试试
RTL 代码覆盖率达 100%,一万次随机测试全部通过,但从未产生 reset 与 enable 同时为 1 的情况,还应补充什么?
阅读解释
先从规格确认该交叉条件,再从能揭示优先级的非零初态加入定向测试。代码覆盖率或测试次数不能代替特定功能条件的验证。