数字芯片设计中的 Simulation、Formal Verification、Verification、Emulation、Prototype Validation 与 Nightly Regression

本文全部依据 Cadence ASK 技术文档整理。文中的“工作流关系”和“适用场景”是对这些文档的归纳,引用均来自 ask.cadence.com

一、整体工作流

数字芯片验证可以理解为一个由验证计划驱动、多种执行引擎共同提供证据、再通过回归和覆盖率分析完成收敛的过程。

flowchart TD
    VP["Verification Plan / vPlan<br/>验证目标、功能点、覆盖率目标"]

    VP --> SIM["Simulation<br/>Xcelium"]
    VP --> FV["Formal Verification<br/>Jasper"]
    VP --> EMU["Emulation<br/>Palladium Z3"]
    VP --> PROTO["FPGA Prototyping / Prototype Validation<br/>Protium X3"]

    SIM --> RM["Regression Management<br/>Verisium Manager"]
    FV --> RM
    EMU --> RM
    PROTO --> RM

    RM --> COV["Coverage、失败分析、进度评估"]
    COV --> VP

其中:

  • Verification 是覆盖整个项目的验证活动,包括验证计划、测试平台、断言、测试用例、覆盖率、回归、失败分析和验证收敛。
  • Simulation、Formal Verification、Emulation、FPGA Prototyping 是产生验证证据的不同执行方式。
  • Regression 是批量、重复执行测试并持续判断设计质量的组织方式。
  • vPlan 与覆盖率 用来判断验证目标是否完成,而不仅是判断某一次测试是否通过。

Cadence 的多引擎覆盖率流程可以把 Xcelium 仿真、Jasper formal 和 Palladium emulation 的覆盖率结果合并,并映射到统一的层次化验证计划中。Cadence ASK:Multi-Engine Coverage


二、六类工作场景对照

工作场景 主要任务 主要输入 主要输出 Cadence 工具
Simulation 按时间和事件执行 RTL 与 testbench RTL、testbench、激励、seed 日志、波形、断言结果、覆盖率 Xcelium
Formal Verification 数学化证明属性,或寻找反例 RTL、formal property、约束 proven、counterexample、bounded、unknown 等 Jasper
Verification 按验证计划构建激励、检查和覆盖率体系 vPlan、UVM testbench、assertion、testcase 功能结果、覆盖率、缺陷和验证进度 Xcelium、Jasper、vManager 等
Emulation 在专用硬件平台上高速运行大规模设计 可综合 DUT、testbench/软件、外部接口 长时间运行结果、硬件波形、软硬件协同结果 Palladium Z3
Prototype Validation 将设计映射到 FPGA 原型,运行固件、驱动和系统场景 RTL、FPGA 编译结果、软件、物理接口 系统验证结果、软件验证结果、接口测试结果 Protium X3
Nightly Regression 夜间批量运行测试与多个 seed testlist、配置、seed、资源策略 pass/fail、覆盖率、失败聚类、趋势 Verisium Manager、Xcelium 等

1. Simulation:仿真

1.1 定义

Simulation 是由仿真器按照 HDL 的时间语义和事件调度规则,执行设计模型与 testbench 的过程。

在 Xcelium 流程中,典型阶段包括:

  1. 编译 Verilog、SystemVerilog 或 VHDL。
  2. elaboration:建立完整的设计层次、参数和连接关系。
  3. 生成可运行的 simulation snapshot。
  4. 执行 snapshot。
  5. 输出日志、波形、断言和覆盖率数据。

Xcelium 使用统一仿真内核,将编译代码仿真与事件驱动仿真结合。常用入口为 xrun;对应的底层工具包括 xmvlogxmvhdlxmelabxmsim。仿真可以生成 SHM、VCD 等波形数据。Cadence ASK:Introduction to the Xcelium Simulator

1.2 Simulation run 是什么

一次 simulation run 通常由以下内容共同决定:

1
2
3
4
5
6
7
Design版本
+ Testbench版本
+ Testcase
+ 编译/运行参数
+ 配置
+ Random Seed
= 一次可识别、可复现的仿真运行

同一个 testcase 使用不同 seed 执行,会形成不同的随机化激励路径,因此通常被视为不同的 run。

1.3 Simulation 适合的工作

  • RTL 功能调试。
  • UVM testbench 开发。
  • 时序和协议行为检查。
  • assertion 执行。
  • 波形观察。
  • 功能覆盖率和代码覆盖率采集。
  • 针对具体 testcase 和 seed 的问题复现。

2. Formal Verification:形式验证

2.1 定义

Formal Verification 使用数学方法分析设计的全部可能状态和输入组合。验证人员描述需要满足的 property,并为环境建立必要约束;formal engine 随后尝试证明 property,或者生成能够违反 property 的 counterexample。

Jasper 平台包含通用 Formal Property Verification,也包括连接性、寄存器等面向特定问题的自动化应用。部分应用能够自动生成 formal property。Cadence 将其描述为可以进行 exhaustive verification,并且不要求传统仿真 testbench。Cadence ASK:Jasper Platform and Formal Property Verification App User Guide

2.2 Formal 的组成

一个 formal 验证任务通常包含:

  • DUT:需要验证的 RTL。
  • Property:需要证明或覆盖的设计性质。
  • Constraint:对合法输入和环境行为的限制。
  • Clock/Reset 定义:建立设计运行条件。
  • Proof configuration:proof engine、深度、资源和运行策略。
  • Proof result:证明结果及对应证据。

2.3 Jasper 的结果状态

Jasper 将运行状态和 property 的有效性结果分开表示。

运行过程可能处于:

  • unprocessed
  • queued
  • processing
  • processed

property 结果可能包括:

结果 含义
Proven property 已完成证明
Covered cover property 已找到满足路径
Counterexample / CEX 找到违反 property 的执行路径
Unreachable cover 目标不可达
Bounded Proven 在当前分析边界内成立
Undetermined 当前资源或方法尚未得到最终结论
Unknown 尚无确定结果
Error 分析过程出现错误

Jasper 还提供 vacuity 相关指示,用于识别前提不可达或约束过强等情况。Cadence ASK:Proof Run and Validity Status Indicators

2.4 Formal 适合的工作

  • 控制逻辑和状态机性质证明。
  • FIFO 不溢出、不下溢等安全属性。
  • 仲裁器互斥、公平性等属性。
  • 连接性和寄存器验证。
  • 低概率、深状态问题分析。
  • 仿真难以覆盖的状态空间分析。

Formal 的重点是 property、环境约束和证明完整性。它通常不以随机 seed 作为探索状态空间的核心机制。


3. Verification:验证体系与 Xcelium/UVM 动态验证

3.1 定义

Verification 是确认设计是否满足功能规格和验证目标的完整工程活动。它覆盖:

  • Verification Plan。
  • testbench 架构。
  • testcase 和 sequence。
  • constrained-random stimulus。
  • assertion。
  • scoreboard 和 checker。
  • functional coverage。
  • code coverage。
  • regression。
  • failure triage。
  • coverage closure。

Xcelium 是执行动态验证的重要仿真引擎;UVM 是组织 SystemVerilog 验证环境的标准方法之一。

3.2 UVM 验证环境

Cadence 的 UVM 文档将 UVC 分为 interface、module 和 system 等层级。典型 UVM agent 包含:

  • Sequencer:调度 sequence 和 transaction。
  • Driver/BFM:把 transaction 转换为引脚或接口行为。
  • Monitor:被动采集接口活动。
  • Coverage collector:统计功能覆盖率。
  • Checker/Scoreboard:比较实际结果和预期结果。
  • Virtual sequencer:协调多个 interface agent。

Agent 可以工作在 active 或 passive 模式。System UVC 可以包含 virtual sequencer 和 scoreboard。Sequence 表示一系列 data item,也就是 transaction 流。Cadence ASK:UVC Architecture

3.3 Test、Testcase、Sequence 和 Transaction

术语 作用
Testlist 一批需要执行的 testcase 及其配置
Test/Testcase 某个具体验证目标的运行入口
Sequence 按一定策略产生的一串 transaction
Transaction / Sequence Item 一次抽象协议操作或数据项
Driver 将 transaction 驱动到 DUT 接口
Monitor 观察 DUT 接口行为
Scoreboard 比较实际结果和参考结果
Coverage 统计验证空间中已经到达的部分

4. Seed:随机种子

4.1 Seed 的定义

Seed 是随机数生成器的初始化值。相同的设计、testbench、配置和 seed 通常用于复现相同的随机激励过程。

Xcelium SystemVerilog 随机化支持:

1
2
-svseed <number>
-svseed random

如果没有指定 -svseed,默认值为 1。Testbench 可以调用 $get_initial_random_seed() 读取当前仿真使用的初始 seed。-svseed 会覆盖全局 -seed 对 SystemVerilog 随机化的设置。Cadence ASK:Setting Randomization Seeds

4.2 为什么一个 testcase 要运行多个 seed

Constrained-random testcase 描述的是一组约束和生成规则。不同 seed 会让随机求解器产生不同的合法 transaction、时序和组合,因此可以探索更多状态空间。

例如:

1
2
3
4
testcase = cache_random_test
seed = 1001  → 运行 A
seed = 1002  → 运行 B
seed = 1003  → 运行 C

三个 run 使用同一个 testcase,但可能产生不同的地址、数据、延迟、并发关系和协议交错。

4.3 Seed 与复现

完整复现信息通常包括:

1
2
3
4
5
6
7
8
RTL/Testbench版本
Testcase名称
Seed
编译参数
运行参数
配置文件
工具版本
运行环境

失败报告中保存 seed,可以针对同一随机路径重新运行,并打开更详细的日志、断言或波形。

4.4 Verisium Manager 中的 seed

Verisium Manager 的 sv_seed 属性支持:

  • 单个 seed。
  • seed 列表。
  • seed 范围。
  • random
  • gen_random
  • positive_gen_random

vManager 会把 seed 导出到 BRUN_SV_SEED。运行脚本需要显式地将其传给 Xcelium,例如:

1
xrun -svseed $BRUN_SV_SEED ...

sv_seedcountrepetitions 会共同影响最终生成的 run 数量。文档同时说明:vManager 属性可以产生 32 位或 64 位 seed,而 Xcelium 的 -svseed 接受 32 位值;传入不符合要求的值时,Xcelium 会给出警告并使用默认 seed 1。Cadence ASK:Test and Group Container Attributes—sv_seed


5. Emulation:Palladium Z3

5.1 定义

Emulation 将可综合设计映射到专用验证硬件平台,在比软件 RTL 仿真更高的执行性能下运行设计。

Palladium Z3 是 Cadence 的 verification computing platform,支持 Software Acceleration 和 In-Circuit Emulation 等工作流。Cadence ASK:Overview of Palladium

5.2 In-Circuit Emulation

在 ICE 流程中:

  • 可综合设计整体运行在 Palladium 上。
  • 可以连接实际或虚拟 target system。
  • 使用 xeCompile 编译设计。
  • 使用 xeDebug 运行和调试。
  • 支持静态和动态 target。
  • 支持 STB、LA、VD 等运行模式。

这类场景适合协议接口、外部设备交互以及长时间系统运行。

5.3 Software Acceleration

在 Software Acceleration 流程中:

  • 可综合 DUT 运行在 Palladium 硬件上。
  • 非综合或行为级 testbench 运行在主机上的 Xcelium 中。
  • DUT 与 testbench 之间通过加速接口通信。
  • 编译流程可以使用 IXCOM 或 xrun

这种分工保留了仿真 testbench 的灵活性,同时让 DUT 获得硬件加速。

5.4 调试能力

Palladium 提供:

  • dynamic probes。
  • FullVision。
  • InfiniTrace。
  • hardware waveform。
  • 触发与信号追踪。
  • 长时间运行中的问题定位。

5.5 典型应用

  • 大规模 SoC 验证。
  • 操作系统启动。
  • Firmware 和 driver 验证。
  • 长时间协议流量。
  • 软件与硬件协同验证。
  • 仿真运行时间较长的系统级场景。

6. Prototype Validation:Protium X3

6.1 定义

Protium X3 是基于 FPGA 的原型验证平台。设计 RTL 会被编译、分区并映射到一个或多个 FPGA 中,随后以硬件原型的形式运行。

Protium X3 使用 AMD Versal Premium VP1902 FPGA,可用于 SoC/ASIC 硬件验证、固件开发和软件开发。系统由工作站控制,并支持虚拟接口和物理接口。Cadence ASK:Introduction to the Protium X3 System

6.2 原型构建流程

典型流程为:

1
2
3
4
5
6
7
8
9
10
11
12
13
RTL
  ↓
编译与综合
  ↓
多 FPGA 分区
  ↓
Placement / Routing
  ↓
生成每颗 FPGA 的 bit file
  ↓
下载到 Protium
  ↓
运行固件、驱动、应用软件和系统测试

Protium 支持对 RTL 信号进行观察、调试和追踪,也支持对模型化存储器进行 backdoor read/write。Cadence ASK:Overview of Protium System

6.3 Prototype Validation 的重点

  • 在接近实际硬件的执行环境中运行设计。
  • 提前启动 firmware、driver、bootloader 和操作系统开发。
  • 验证高速接口与外围设备。
  • 运行较长的软件 workload。
  • 进行系统性能和软硬件集成验证。
  • 支持远程软件调试。

Protium X3 SpeedBridge Adapter 支持最多四个 High-Density SpeedBridge 连接,并可提供 UART、JTAG 等 DUT 与外部调试器之间的连接。Cadence ASK:Protium X3 SpeedBridge Adapter Overview

6.4 Palladium Z3 与 Protium X3 的工作关系

维度 Palladium Z3 Protium X3
平台类型 专用 verification computing / emulation 平台 FPGA-based prototyping 平台
主要阶段 硬件验证、软硬件协同验证 原型验证、软件开发、系统验证
调试重点 深度硬件可见性、波形、触发和 trace FPGA 原型运行、接口连接、软件调试
Testbench 支持 ICE 和 Software Acceleration 侧重在 FPGA 原型上运行系统与软件
典型负载 验证场景、长时间硬件运行、OS boot firmware、driver、OS、应用 workload
编译结果 Palladium 可执行映射 每颗 FPGA 对应的 bit file

Cadence 文档说明 Protium 与 Palladium Z2/Z3、SpeedBridge 兼容,可以把 emulation 环境进一步迁移到快速 FPGA prototype 环境。Cadence ASK:Overview of Protium System


7. Nightly Regression:夜间回归

7.1 Regression 的定义

Regression 是按照一个 testlist 批量执行 testcase,并汇总 pass/fail、覆盖率和失败信息的过程。

Verisium SimAI 文档把 regression 描述为面向特定目的组织的 testlist,例如:

  • check-in regression。
  • nightly regression。
  • weekly regression。
  • bug hunting。
  • coverage closure。

这些 regression 可以包含相同或重叠的 testcase,主要差异之一是每个 testcase 分配的权重,也就是运行多少个 seed。Cadence ASK:Introduction to Verisium SimAI

7.2 Nightly Regression 的典型过程

flowchart LR
    A["准备 nightly testlist"] --> B["展开 testcase、配置和 seed"]
    B --> C["提交到计算资源"]
    C --> D["执行多个 simulation runs"]
    D --> E["收集日志与覆盖率"]
    E --> F["识别 pass / fail"]
    F --> G["失败聚类与 rerun"]
    G --> H["覆盖率和趋势分析"]

7.3 Session、Run 与 Regression

Verisium Manager 的组织关系为:

1
2
3
4
5
Regression
└── 一个或多个 Session
    └── 一个或多个 Run
        ├── Passed
        └── Failed

Regression Portal 可以查看 session、run 和相关信息。Cadence ASK:Regression Portal

7.4 Verisium Manager 的作用

Verisium Manager 可以:

  • 管理包含数千个 run 的 session。
  • 通过分布式资源管理系统提交运行。
  • 收集和分析日志。
  • 对失败进行筛选和分组。
  • 重新执行 failed tests。
  • 分析覆盖率和其他验证指标。
  • 通过 GUI、命令行或 batch 模式管理验证任务。
  • 使用 RCL 管理 session 和指标。Cadence ASK:Verisium Manager Overview

7.5 Nightly、Check-in 与 Weekly Regression

类型 典型目标 Test 数量与 seed
Check-in Regression 快速发现新提交引入的基本问题 数量较少、执行时间短、seed 较少
Nightly Regression 每晚检查主要功能和随机场景 更完整的 testlist,每个 testcase 可运行多个 seed
Weekly Regression 更深入的长时间检查和覆盖率增长 更多 testcase、更多 seed、更高资源投入
Bug Hunting 扩大特定问题附近的随机搜索 提高相关 testcase 的 seed 权重
Coverage Closure 填补尚未覆盖的验证目标 根据 coverage hole 调整 testcase 和 seed 分配

表中的组织方式依据 Cadence 对 regression purpose、testlist 和 testcase weight/seed 的定义归纳。Cadence ASK:Introduction to Verisium SimAI


8. Verification Plan:验证计划

8.1 Verification Plan 包含什么

验证计划将设计规格转换为可检查、可度量的验证目标。典型内容包括:

  • Feature 和 sub-feature。
  • 验证目标。
  • 验证方法。
  • 对应 testcase。
  • 对应 assertion/property。
  • functional coverage。
  • code coverage。
  • 目标覆盖率。
  • 负责人和计划状态。
  • 完成标准。

8.2 vPlan 与验证指标的映射

Verisium Manager 支持将 coverage metric 映射到 vPlan element,并支持:

  • 一个指标映射到多个计划项。
  • 多个指标映射到一个计划项。
  • 从 session 加载指标数据。
  • flexible mapping。
  • logical-instance mapping。
  • bin filter。

可映射的指标包括:

8.3 vPlan Grade

Verisium Manager 可以计算:

  • overall grade。
  • goal-relative grade。
  • completion grade。
  • planned element 状态。
  • section 加权结果。

文档列出的 grade 来源包括 block、branch、statement、expression、toggle、FSM、covergroup、assertion 和 testcase 等指标。每个目标可以设置 0 到 100 的 goal,再根据实际结果评估完成程度。Cadence ASK:vPlan Grading


9. Coverage:验证进度的度量

9.1 Code Coverage

Code coverage 描述 RTL 结构的执行情况,例如:

  • block。
  • statement。
  • branch。
  • expression。
  • toggle。
  • FSM state/transition/arc。

它反映设计代码是否被执行或激活。

9.2 Functional Coverage

Functional coverage 描述验证计划定义的功能场景是否到达,常见形式包括:

  • covergroup。
  • coverpoint。
  • cross coverage。
  • assertion coverage。
  • testcase metric。

它用于衡量规格定义的功能空间。

9.3 多引擎覆盖率

Cadence 的多引擎覆盖率流程能够把以下结果纳入统一分析:

1
2
3
4
Xcelium Simulation Coverage
+ Jasper Formal Coverage
+ Palladium Emulation Coverage
= 映射到统一 vPlan 的验证进度

这样可以从验证目标角度观察不同验证引擎共同提供的结果。Cadence ASK:Multi-Engine Coverage


10. 工具选择速查

需要完成的任务 推荐工作方式 Cadence 工具
查看 RTL 在具体激励下的波形 Simulation Xcelium
运行 UVM testcase Dynamic Verification / Simulation Xcelium
使用多个随机 seed 扩大场景覆盖 Regression + Simulation Verisium Manager + Xcelium
证明 property 对所有合法状态成立 Formal Verification Jasper
获取违反 property 的反例 Formal Verification Jasper
运行大规模 SoC 和长时间系统场景 Emulation Palladium Z3
将行为 testbench 与硬件 DUT 协同运行 Software Acceleration Xcelium + Palladium
提前启动 firmware、driver 和 OS FPGA Prototyping Protium X3
连接 JTAG、UART 或实际外围设备 Prototype Validation Protium X3 + SpeedBridge
管理 nightly regression Regression Management Verisium Manager
统一查看 simulation、formal 和 emulation 覆盖率 Multi-Engine Coverage Verisium Manager/vPlan
判断验证计划是否完成 vPlan Grading / Coverage Closure Verisium Manager

11. 术语理解

  • Simulation:让 RTL 和 testbench 在仿真器中按时间与事件规则运行。
  • Formal Verification:让证明引擎探索状态空间,对 property 给出证明或反例。
  • Verification:用计划、激励、检查、覆盖率和回归确认设计符合规格。
  • Emulation:把大规模设计放到专用验证硬件上高速运行。
  • Prototype Validation:把设计实现到 FPGA 原型上,运行软件并连接系统接口。
  • Nightly Regression:每天夜间批量运行 testcase 和多个 seed,持续监控质量与覆盖率。
  • Seed:决定随机激励生成路径的初始值,也是随机失败复现的重要标识。
  • Verification Plan:把规格拆解为验证目标,并将 testcase、property 和 coverage 映射到这些目标。
  • Coverage Closure:根据尚未完成的验证目标,继续补充测试、seed、property 或其他验证活动,直至达到计划目标。