第三章SEC 时序等价检查

概述

时序等价检查形式化地比较两个 RTL 设计——规格(specification,简称 spec)与实现(implementation,简称 imp)——以验证二者等价。

术语说明:JasperGold SEC 全程使用 specimp 这两个术语。文档中 spec 偶尔也被称作 "Golden" 模型,但命令选项一律写作 -spec / -imp

SEC App Use Models

任何比较活动都可以算作一般意义上的 SEC 用例。以下是文档列出的常见使用模型:

SEC 工作流程

  1. 加载两个设计(spec 和 imp)
  2. 使用 Setup Wizard 配置
  3. 检查接口(Interface Check)
  4. 精化映射(Mapping)
  5. 生成验证环境
  6. 运行等价证明
  7. 签核(Signoff)
check_sec -setup -spec_top uart_top ...
check_sec -auto_map_reset_x_values on
check_sec -interface
check_sec -map -spec {wb_adr_i[4:0]} -imp {uart_top_imp.wb_address_i[4:0]} \
               -respect_connections_during_reset -global
check_sec -gen
check_sec -prove
check_sec -signoff
SEC App 主窗口:Signal Browser 并排显示 Spec 与 Imp 两侧设计层次,右下为 Signal Mapping 面板
SEC App 主窗口:Signal Browser 并排显示 Spec 与 Imp 两侧设计层次,右下为 Signal Mapping 面板

Setup Wizard

在 Designs 区域,可以选择 Different spec and imp designs(分别指定 Spec design top name 和 Imp design top name),或 Same spec and imp design(为两者指定同一个 Top)。

Options 区域可接受默认设置,或勾选以下选项:

另可用 Load global setup file 指定一个 elaborate 之前的 Tcl 设置脚本。

接口检查(Interface Check)

check_sec -interface

# 常用变体
check_sec -interface -mapped
check_sec -interface -imp
check_sec -interface -ignore_user_stopats

接口检查用于评估模型映射的完整性。一对被映射的信号,意味着这两个信号应当被"假定相等"或"验证相等"。例如边界输出映射(Boundary outputs mapping)会检查所有输出和黑盒输入是否都已映射。

映射精化

层级别名规则(Hierarchy Aliasing Rules)

层级别名不是通过独立命令创建的,而是在 GUI 中定义后由命令应用:使用 Spec expressionImp expression 字段定义要映射的 spec/imp 层级名或子名,点击 Add Rule,然后运行命令应用该规则:

check_sec -map -auto

高级映射选项

高级映射选项对话框提供的是时序与功能上下文相关的选项,包括 clocking_eventdisable_cond_expressionspec_cond_exprimp_cond_exprspec_cond_delay_valueimp_cond_delay_value,以及 RegExp / Inverse / Init / Bit blast / Speculative 等复选框。

Expert / Non-Expert View

SEC 提供两种视图模式:

证明优化

Proof Cache

# Proof cache 默认是关闭的,需显式启用
set_sec_autoprove_use_proof_cache true

# 可选:指定缓存路径
set_sec_autoprove_proof_cache_path <path>

AutoProve 策略

SEC 的证明策略通过 check_sec -prove -strategy 指定,共有四种

check_sec -prove -strategy basic
check_sec -prove -strategy proof
check_sec -prove -strategy bug_hunting
check_sec -prove -strategy design_style

也可以用变量 set_sec_autoprove_strategy 设置。

Failure Extension

Failure Extension 是一项能力,而不是一组策略。SEC App 在 basic 和 bug-hunting 两种 AutoProve 策略下都支持它:

check_sec -prove -strategy basic -failure_extension

SEC 等价检查界面

SEC 验证方法论

SEC 适用场景

时序等价检查(SEC)在以下场景中不可或缺:

SEC 比较的是两个 RTL 设计(spec 与 imp)。它属于时序等价检查(Sequential Equivalence Checking),与组合等价检查器是不同的工具类别。

映射策略

SEC 的核心是建立 spec(原始)和 imp(修改后)之间的信号映射

不等价结果分析

当 SEC 报告不等价时,按以下顺序排查:

  1. 映射错误:检查自动映射是否正确配了信号(最常见原因)
  2. 接口不匹配:spec 和 imp 的端口列表是否一致?用 check_sec -interface
  3. 复位/X 值差异:未初始化寄存器处理不同?用 -auto_map_reset_x_values on
  4. 真的不等价:映射确认正确后,看反例波形找到差异点——这是真正的修改 bug
Proof Cache:SEC 在迭代调试时特别有用——每次修改后重跑,Proof Cache 缓存已证明等价的点对,只有修改影响的部分需要重新证明,大幅加速迭代。

来源文档

  • jaspergold_sec_userguide.pdf
  • example_jaspergold_apps/SEC/