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定位问题 → 覆盖率工具合并数据 → 签核报告输出结论。形式验证和静态检查则在关键属性上提供补充证据,减少对随机仿真的过度依赖。
四、一个可执行的交付检查示例
为了让“交付物清单”不流于形式,下面给出一个模块级验证签核前的检查表示例。字段和阈值可根据项目实际调整,但结构应保持可追溯:
| 检查项 | 证据来源 | 示例阈值/要求 | 判断方式 |
|---|---|---|---|
| 定向用例通过率 | 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。这样每次回归和签核都能快速定位证据,减少沟通成本。