1. 验证项目交付全景

数字验证不是芯片研发流程中一个孤立的“测试环节”,而是贯穿规格冻结到流片签核的证据生产系统。它的核心任务不是“跑完仿真”,而是用可复现、可追溯、可评审的方式,证明RTL实现与设计规格一致,并把残余风险量化到项目可以接受的水平。理解这一点,才能理解为什么验证交付物必须成体系,也才能理解Synopsys工具链为什么以“协同”而非“单点工具”的方式存在。

一、数字验证在芯片项目中的定位

从项目阶段看,数字验证大致横跨四个区间:规格与架构阶段建立验证计划和覆盖率模型;RTL开发阶段并行搭建验证平台、编写激励与参考模型;集成与回归阶段执行定向测试、随机回归和覆盖率收敛;签核阶段完成回归冻结、覆盖率评审、问题清零与交付归档。验证不是等RTL写完才开始,而是与设计同步推进,甚至在规格阶段就通过验证计划反向约束设计接口和时序假设。

从交付责任看,验证团队最终要向项目交付三类东西:功能正确的证据(测试通过、覆盖率达标、断言无失败)、可复现的环境(脚本、配置、种子、版本记录)、可评审的结论(验证报告、覆盖率报告、遗留问题清单)。这三类东西缺一不可,否则“验证完成”只是一句无法审计的口号。

二、交付物清单:从计划到签核

一个可交付的数字验证项目,通常包含以下核心交付物。它们不是文档堆砌,而是彼此引用、逐层收敛的证据链:

  • 验证计划(Verification Plan):把规格拆成可验证特性,标注测试意图、覆盖点、优先级和责任人。
  • 验证平台(Testbench):包括激励生成、参考模型、记分板、断言、覆盖率收集和回归脚本。
  • 测试用例集(Testcases):定向用例覆盖边界和异常,随机用例覆盖组合空间,回归列表定义每次提交必须跑通的集合。
  • 覆盖率报告(Coverage Report):代码覆盖率、功能覆盖率、断言覆盖率,以及未覆盖项的原因说明。
  • 回归结果与失败分析:每次回归的通过率、失败用例、失败根因、修复状态。
  • 签核报告(Sign-off Report):覆盖率收敛结论、遗留风险、已知限制、版本与种子记录。
  • 可复现资产:Makefile/脚本、文件列表、编译选项、仿真种子、工具版本、库版本。

这些交付物之间有一条清晰的引用关系:验证计划定义“要验什么”,测试用例和覆盖率模型回答“验到了什么”,回归结果回答“是否稳定”,签核报告回答“能否放行”。如果其中任何一环缺失,后续评审就无法判断验证是否真正完成。

三、Synopsys工具链在交付流程中的角色与协同

Synopsys数字验证工具链不是单一仿真器,而是一条从激励产生到覆盖率签核的协同链路。典型角色分工如下:

  • VCS:编译与仿真引擎,负责把SystemVerilog/UVM测试平台和RTL一起编译,执行仿真并产生波形、日志和覆盖率数据。
  • Verdi:调试与波形分析平台,用于加载FSDB波形、追踪信号、查看断言失败、分析覆盖率漏洞。
  • VC Formal / VC SpyGlass:形式验证与静态检查,用于证明特定属性、检查跨时钟域、发现不可达代码或结构问题。
  • VCS NLP / 覆盖率合并工具:把多次回归的覆盖率数据合并,生成统一覆盖率报告,支撑收敛判断。
  • UVM方法学:不是工具,但作为验证平台的组织框架,与VCS/Verdi协同,决定激励、序列、记分板和覆盖率的结构。

协同关系可以概括为:UVM搭建平台 → VCS执行仿真 → Verdi定位问题 → 覆盖率工具合并数据 → 签核报告输出结论。形式验证和静态检查则在关键属性上提供补充证据,减少对随机仿真的过度依赖。

数字验证交付全景:证据链与Synopsys工具链协同 从验证计划到签核报告,每一层交付物都由工具链中的具体环节支撑 交付物证据链 验证计划 特性拆解 · 覆盖点 · 优先级 验证平台与用例 UVM · 激励 · 记分板 · 断言 回归结果 通过率 · 失败根因 · 修复状态 覆盖率报告 代码 · 功能 · 断言 · 未覆盖说明 签核报告 收敛结论 · 遗留风险 · 版本记录 可复现资产 脚本 · 种子 · 工具版本 · 文件列表 Synopsys工具链协同 UVM 方法学框架 sequence · driver · monitor · scoreboard VCS 编译与仿真 compile · simulate · FSDB · log Verdi 调试分析 波形 · 信号追踪 · 断言失败定位 VC Formal / SpyGlass 形式证明 · 静态检查 · CDC 覆盖率合并与报告 merge · report · 收敛判断 阶段推进与放行判断 规格冻结 验证计划评审通过 RTL开发并行 平台搭建 · 定向用例通过 回归收敛 通过率稳定 · 失败清零 覆盖率评审 功能覆盖达标 · 未覆盖有说明 签核放行 报告归档 · 风险确认 放行判断依据 回归通过率 ≥ 目标值 功能覆盖率 ≥ 收敛阈值 无未解释的断言失败 虚线表示交付物与工具链环节的支撑关系;实线表示阶段推进方向

四、一个可执行的交付检查示例

为了让“交付物清单”不流于形式,下面给出一个模块级验证签核前的检查表示例。字段和阈值可根据项目实际调整,但结构应保持可追溯:

检查项 证据来源 示例阈值/要求 判断方式
定向用例通过率 VCS回归日志 100%通过 检查回归报告中fail数量为0
随机回归稳定性 最近10轮回归结果 通过率≥99%,无新增失败 对比每轮fail列表,确认无反复出现项
功能覆盖率 覆盖率合并报告 ≥95%,未覆盖项有书面说明 逐项检查coverpoint和cross
断言失败 VCS仿真日志 无未解释的assertion failure Verdi加载FSDB定位失败时刻
可复现性 脚本与种子记录 指定种子可复现同一结果 用记录种子重跑失败用例
形式验证补充 VC Formal报告 关键属性证明通过 检查property列表和证明状态

这张表的价值在于:它把“验证完成”翻译成可检查的条目。每个条目都有明确的证据来源和判断方式,评审时不需要争论“感觉差不多了”,而是逐项核对。

五、工具链协同中的常见误区

第一个误区是把VCS当成验证的全部。VCS负责执行,但激励质量、覆盖率模型和参考模型才决定验证深度。第二个误区是覆盖率达标就签核。覆盖率是必要条件,不是充分条件;未覆盖项如果没有合理解释,覆盖率数字再高也不能放行。第三个误区是调试与回归脱节。Verdi定位到的问题必须回写到测试用例或断言中,否则同类问题会在后续回归中重复出现。

实践建议:在项目启动阶段就建立统一的目录结构和命名规范,例如verif/plan、verif/tb、verif/tests、verif/regress、verif/cov、verif/signoff。这样每次回归和签核都能快速定位证据,减少沟通成本。