IC 验证周报|2026 年第 41 周
信息覆盖范围
- 时间范围:2026-10-05 00:00 至 2026-10-11 23:59(北京时间,ISO 2026 年第 41 周)。
- 收录原则:仅收录覆盖期内合入官方上游主线、能从原始页面核对时间且与数字 IC 验证直接相关的内容。
- 事实边界:本期条目均为开发主线提交,不等同于稳定版本发布;工程建议与影响分析均为编辑判断。
本周速览
本周没有值得单独收录的验证标准发布,但开源验证栈出现了几项很实用的主线变化。Verilator 补齐 type_option.merge_instances 的覆盖率语义,并修复一类可能让 SVA 本应失败却不报错的问题;cocotb 修正大规模 LogicArrayObject 初始化时的性能回退。工程侧,OpenTitan 的两个提交分别展示了如何避免 UVM phase 收尾反复消耗 drain time,以及如何让暂停/恢复指令进入一致的 scoreboard 与功能覆盖模型;Caliptra SS 则把缩短后的 USB 状态测试提升到 L0 提交门禁。共同信号是:覆盖率数字、断言结果和回归耗时都需要被当作可验证的产品行为,而不是工具链的黑盒输出。
标准与方法学
Verilator 支持按实例并集计算 covergroup 类型覆盖率
已确认事实(主线合入时间:2026-10-07,北京时间):Verilator 官方仓库提交 704ec556 实现 type_option.merge_instances,并新增 --coverage-merge-instances 开关。官方文档说明:默认仍按 IEEE 1800-2023 对实例覆盖率求平均;启用合并后,类型覆盖率按各实例 bin 的并集计算,并同步影响 get_coverage()、特定条件下的 get_inst_coverage() 和 verilator_coverage 报告。提交还加入了 coverpoint、cross、权重、忽略 bin 和非法配置等回归用例。
编辑判断:从商业仿真器迁移覆盖率门禁时,不能只比较百分比。团队应明确 merge_instances 的默认值、bin 合并规则和权重口径,并用同一组小型 covergroup 在两端核对分子、分母与 API/报告结果;否则配置差异可能被误判为覆盖率退化或提升。
工具与开源项目
Verilator 修复多周期前件之后布尔析取不失败的问题
已确认事实(主线合入时间:2026-10-09,北京时间):Verilator 官方仓库提交 fdba2fd 修复了多周期 antecedent 后的布尔析取 consequent 永不失败的问题,覆盖 |->、|=>、延迟、or / ||、顶层析取及相关否定场景,并为仍不支持的拓扑保留显式报错。
编辑判断:这是会造成“断言假通过”的高风险修复。使用 Verilator 执行 SVA 的项目,应把包含多周期前件、析取后件且预期触发失败的负向用例加入工具升级验收;只有正向用例通过,无法证明 assertion engine 真正检测到了违例。
cocotb 延迟创建位索引缓存以修复句柄性能回退
已确认事实(主线合入时间:2026-10-10,北京时间):cocotb 官方仓库提交 417d9d3 将 LogicArrayObject 的子句柄字典改为按需创建。提交说明指出,许多 std_logic_vector 或 packed array 从未被逐 bit 索引,初始化时为每个对象预建字典会产生无效开销。
编辑判断:Python testbench 的启动成本会随句柄数量放大。性能回归不应只测单个 testcase 的仿真时长,还应分别记录 elaboration 后句柄发现、Python 对象包装、首个 bit 访问和稳态读写的耗时,才能判断惰性初始化是在降低固定成本,还是把成本转移到热路径。
工程实践
OpenTitan 避免 UVM 收尾 objection 重复消耗 drain time
已确认事实(主线合入时间:2026-10-08,北京时间):OpenTitan 官方仓库提交 44808ef 修改 rom_ctrl_scoreboard::phase_ready_to_end,只在 scoreboard 启用且确实还要等待 pwrmgr_complete 时 raise objection。提交说明称,旧逻辑在无需等待时仍立即 raise/drop,每次 drop 都会重启 run phase drain 并再次调用 phase_ready_to_end,最多重复 UVM 的 20 次 ready-to-end 迭代;默认 2 μs drain 下会额外消耗 40 μs,嵌入该环境的芯片级测试也会受影响。
编辑判断:在 phase_ready_to_end 中,objection 应代表真实的未完成条件,而不是无条件的收尾模板。回归性能分析可增加“测试主体结束到 run phase 真正结束”的单独指标,并检查同一组件的 raise/drop 次数,快速定位此类固定尾延迟。
OpenTitan 将 WFI 暂停语义纳入 scoreboard 与功能覆盖
已确认事实(主线合入时间:2026-10-08,北京时间):OpenTitan 官方仓库提交 7f520a4 修复 OTBN WFI 用例在开启功能覆盖的 nightly 回归中稳定失败的问题。提交把 WFI 加入指令 mnemonic 与 pairwise cross 覆盖,允许恢复时因状态同步延迟而在 PAUSED 状态观察到受限的指令序列,并在执行或暂停期间连续跟踪指令对。
编辑判断:带暂停、时钟门控或握手恢复的设计,scoreboard 的抽象状态往往比 RTL 可观察事件晚若干拍。可靠做法是把允许的过渡窗口写成范围明确、计数受限的协议,而不是放宽为“暂停时忽略检查”;同时,覆盖模型也要保持跨暂停边界的序列连续性。
Caliptra SS 将缩短后的 USB 状态测试提升到 L0 门禁
已确认事实(主线合入时间:2026-10-09,北京时间):Caliptra SS 官方仓库提交 0c5afb2 将 hs_dev1_get_status 的轮询超时从 10000 调整为 3000,并把该定向测试从 nightly/L1 提升到 L0 Promote 回归,同时更新主测试清单和生成的回归配置。
编辑判断:将高价值定向测试前移到提交门禁时,应同时压缩“等待上限”而不是删减检查点。适合 L0 的用例应能用明确超时快速失败、保持确定性,并保留在更高层回归中的同一测试身份,方便跨层追踪 flaky 与性能变化。
行业与岗位动态
本周暂无值得单独收录的更新。
本周推荐
推荐阅读 OpenTitan 的 UVM phase 收尾修复。它用很小的代码改动解释了一个常被忽略的回归耗时来源:立即 raise/drop objection 并不等于“没有等待”,因为 drop 会重启 drain 并再次触发 phase_ready_to_end。这类检查可以直接迁移到多数 UVM 环境,尤其适合排查固定尾延迟和芯片级环境中被子环境放大的收尾成本。
来源与说明
本期采用 6 个一手来源页面,均为覆盖期内合入官方仓库主线的提交:
- Verilator:支持合并 covergroup 实例覆盖率(主线合入时间:2026-10-07,北京时间)。
- Verilator:修复多周期前件之后布尔析取不失败(主线合入时间:2026-10-09,北京时间)。
- cocotb:修复
LogicArrayObject性能回退(主线合入时间:2026-10-10,北京时间)。 - OpenTitan:仅在确需等待时 raise end-of-test objection(主线合入时间:2026-10-08,北京时间)。
- OpenTitan:在覆盖率收集中处理 WFI 指令(主线合入时间:2026-10-08,北京时间)。
- Caliptra SS:缩短 USB 状态测试并提升到 L0 Promote(主线合入时间:2026-10-09,北京时间)。
本期没有发现覆盖期内值得单独收录的标准发布、稳定工具版本或可靠岗位动态。上述变更均可能在后续稳定版本前继续调整;生产环境采用前应锁定提交、阅读后续 release notes,并在隔离回归中验证。