如何确定验证的完备性指标(coverage goals)?

解读

面试官问“怎么定 coverage goals”,并不是想听“把代码覆盖率跑到 100 %”这种口号,而是考察三件事:

  1. 你能否把“设计规格 → 验证目标 → 可量化指标”这条逻辑链讲清楚;
  2. 你能否结合国内项目节奏(流片窗口紧、人力有限、后端/DFT 并行)给出“够用且可 sign-off”的权衡;
  3. 你能否把功能覆盖率、代码覆盖率、断言覆盖率、场景覆盖率、性能/功耗/协议覆盖率等多维指标有机整合,并说明“何时停仿”。
    一句话:让面试官相信“给你一块新 IP,你能在四周内交出一份可评审的 coverage plan,并且知道什么时候敢在评审表上签字”。

知识点

  1. 验证计划 V-plan:条目化提取 spec 中的 feature,用“可测性动词”描述(支持、拒绝、触发、清空…),每条 feature 对应至少一个 covergroup 或 assertion。
  2. 覆盖率分类与主次:
    • 功能覆盖率(function/sequence/fsm/assertion)—— 主指标,直接映射 feature;
    • 代码覆盖率(line/toggle/branch/FSM)—— 兜底指标,发现实现遗漏;
    • 性能/功耗/协议覆盖率 —— 进阶指标,PCIe 眼图、AXI 死周期、memory bandwidth 等;
    • 场景覆盖率 —— 用例组合,如“高低温 + 电压 corners + 反压 + 错误注入”同时命中。
  3. 国内常用的“3+2” sign-off 阈值:
    • 功能覆盖率 ≥ 95 % 且所有 covergroup 的 cross 命中“must-hit”仓;
    • 代码覆盖率 ≥ 98 %,剩余 2 % 需给出“不可达”分析报告,经设计/验证/项目经理三方评审留痕;
    • 断言覆盖率 100 %(assertion 写多少就覆盖多少);
    • 性能/功耗指标在 5 % 裕量内;
    • bug 曲线收敛(7 天内无新 critical bug,low bug ≤ 1 个/周)。
  4. 收敛策略:
    • 随机约束逐步放松(biased → random → stress);
    • 定向用例(diagonal case)补 cross 空洞;
    • 形式工具(Formal)对深度状态做穷举,补动态仿真无法触发的 corner;
    • FPGA 原型跑真实业务,收集 long-run coverage,与仿真数据 merge。
  5. 风险留痕:对 coverage hole 建立“风险等级 + 规避措施 + 后端/软件兜底方案”,评审通过后可 waiver,避免无休止拖期。

答案

“确定 coverage goals 我分四步,简称 F-A-C-T:
Feature 提取 → 量化 Aim → 收敛 Convergence → 留痕 Trace。
第一步,把设计 spec 拆成可测 feature 列表,用 Excel+Jira 管理,每条 feature 对应唯一 ID,再映射到 covergroup/assertion,确保‘可追踪、可评审’。
第二步,依据公司/项目质量等级设定量化阈值:数字 IP 采用‘3+2’标准——功能覆盖率 95 %、代码 98 %、断言 100 %,性能/功耗在 5 % 裕量内;车规或安全类 IP 则提高到 99 %/100 %,并加 fault-injection 覆盖。
第三步,用随机+formal+FPGA 三路收敛:仿真阶段先 biased random 快速冲 80 %,再放松约束补 cross 空洞;深度状态用 formal 做穷举;最后 FPGA 跑一周现网流量,把 long-run toggle 数据 merge 回仿真,确保‘零新增低概率事件’。
第四步,所有 coverage hole 必须挂 waiver,写明风险等级、触发条件、后端/软件能否兜底,评审留痕。只有 PM、设计经理、验证经理三方签字,才算达到 sign-off 条件。这样既保证质量,也符合国内流片窗口紧的节奏。”

拓展思考

  1. 对超大 SoC,coverage 数据量动辄上百 G,如何 nightly 合并、如何与后端 timing eco 版本对齐?可提及“覆盖率数据库分片 + 版本哈希 + Jenkins 自动 diff”方案。
  2. AI/DSA 这类“算法正确性”难以用传统 covergroup 描述,可引入“算法黄金参考模型 + 统计采样”方法,把输出向量空间降维到 20 个关键数学指标,再设 99 % 置信区间作为 coverage goal。
  3. 车规 ISO 26262 要求“故障覆盖率”,需把永久故障+瞬态故障注入结果也转成 coverage 条目,最终形成“双 90 %”指标(DC 90 % + Fault 90 %),如何在 UVM 环境里把故障列表与 covergroup 自动关联,是值得深入准备的加分点。