附录 DProof Accelerator 选型指南

先分清两类 PA

选型之前必须先理解官方对 PA 的分类,这是最容易搞错的一点:

新手常犯错误:把 jasper_model_fifo 当成"FIFO 检查器"去找上溢/下溢。 它不检查任何东西——它是用来替换大 FIFO 的抽象模型,目的是让 scoreboard 的数据完整性证明跑得动。 真正做检查的是与它配套的 scoreboard / datapath 类 PA。

选型决策树

先问"我要证明什么",再问"设计里有什么结构挡住了证明":

第一步:选验证组件(做检查的)
├── 要证明数据穿过设计不丢失/不重复/不乱序/不损坏
│   ├── 数据包或 data beat 穿过桥接/队列/FIFO → jasper_datapath
│   ├── 最多 8 个 initiator 到最多 8 个 target   → jasper_datapath_1port
│   ├── 同上,且 initiator 与 target 时钟不同     → jasper_datapath_1port_2clk
│   ├── 最多 8 个 initiator 到 8 个 target,异时钟 → jasper_scoreboard
│   ├── initiator/target 数量任意,异时钟         → jasper_scoreboard_2
│   │      (可配置成按序或乱序传输验证)
│   ├── 单个 initiator 到单个 target              → jasper_scoreboard_3
│   ├── 输入数据被约束、或被 DUV 当控制信号用     → jasper_scoreboard_free
│   │      (与 scoreboard_2 类似,但对被检查数据无限制)
│   └── 每个包优先级不同,需在同优先级内保序     → jasper_scoreboard_priority
└── 要证明 cache 对主存接口是透明的               → jasper_cache

第二步:选抽象组件(让证明收敛的)
├── 数据通路里的大 FIFO 拖垮了证明
│   ├── 普通情形                                  → jasper_model_fifo
│   ├── 需要保留包的优先级信息                    → jasper_model_fifo_priority
│   └── 需求由 DUV 中的 FIFO 逻辑驱动             → jasper_datapath_fifo
├── 用来缓存数据包的大存储器拖垮了证明
│   ├── 普通情形                                  → jasper_model_mem
│   ├── 需要保留包的优先级信息                    → jasper_model_mem_priority
│   └── 需求由 DUV 中的存储器逻辑驱动             → jasper_datapath_mem
├── COI 里的存储器让属性不可解
│   ├── 单端口                                    → jasper_model_ram
│   └── 多端口                                    → jasper_model_mpram
├── COI 里的乘法器/除法器让属性不可解
│   ├── 乘法器                                    → jasper_model_multiplier
│   └── 除法器                                    → jasper_model_divider
└── cache 的 tag/data RAM 成为瓶颈                → jasper_model_cache_way
       (与 jasper_cache 配合使用)

其他
├── 低功耗流程中驱动设计走完上电/掉电序列        → jasper_power_sequencer
└── 多时钟域下快慢时钟比值需要在区间内浮动        → jasper_model_frequency_jitter

使用方法

使用 Proof Accelerator 的一般步骤:

  1. 在 Tcl 脚本中用 analyze -verilog -req 读入 PA(需求文件)
  2. connect 把 PA 的端口连接到 DUT 的对应信号
  3. 验证组件内部带断言,连接好后即可 prove;抽象组件不产生断言,只负责替换结构让证明收敛

可参考 proof_accelerators/tutorial_scoreboard_priority/tutorial_scoreboard_2/ 两个官方教程, 详细解读见第七篇第 15 节

各 PA 概览

PA类别官方描述要点
jasper_cache验证组件证明数据穿过 cache 的完整性;用于验证 cache 对主存接口是透明
jasper_datapath验证组件证明数据包 / data beat 穿过 DUV 的完整性;适用于桥接、队列、FIFO,确保传输中数据不丢失、不损坏、不重复
jasper_scoreboard验证组件最多 8 个 initiator 到最多 8 个 target、且两侧时钟不同;验证数据不被丢弃、重复、乱序或损坏
jasper_scoreboard_2验证组件initiator 与 target 数量任意、两侧时钟不同;可配置为按序或乱序传输验证。使用限制:只能对设计中不参与流控(flow control)的包字段做数据完整性检查——只有被 DUV "盲传"的数据字段才能接到本 PA 的 data 端口
jasper_scoreboard_3验证组件单个 initiator 到单个 target;通过 data_integrity 断言检查进出数据是否一致
jasper_scoreboard_free验证组件与 scoreboard_2 类似,但对被检查的数据没有限制;用于输入数据被约束或被 DUV 用作控制的场合
jasper_scoreboard_priority验证组件每个包的优先级可以不同,保证同一优先级内保序;适用于桥接、队列、FIFO
jasper_model_fifo抽象组件替换数据通路中存包的大 FIFO,只保留 scoreboard 工作所需的行为,缓解状态空间爆炸
jasper_model_mem抽象组件替换用于缓冲数据包的大存储器,同样只保留 scoreboard 所需行为
jasper_model_ram / jasper_model_mpram抽象组件把存储器抽象成更简单的模型;存储器在 COI 中会让属性对形式工具不可解,抽象后更易得到证明或提高有界证明的界
jasper_model_multiplier抽象组件对乘法器做灵活抽象,使含乘法器逻辑的属性能拿到完整、无界的证明(否则通常不可解)
jasper_model_divider抽象组件对除法器做同样的抽象,使含除法器逻辑的属性能拿到完整、无界的证明
jasper_model_cache_way抽象组件对 cache 中的 tag RAM 与 data RAM 建模;与 jasper_cache 配合,是 cache 透明性属性收敛的关键
jasper_power_sequencer其他用于低功耗验证流程:实现一个简单状态机,驱动电源感知设计走完典型的掉电与上电序列
jasper_model_frequency_jitter其他为多时钟域设计建模频率抖动:让快慢时钟的比值可以在给定区间内变化,而不是固定不变

来源文档

  • proof_accelerators/jasper_cache.pdf
  • proof_accelerators/jasper_datapath.pdf
  • proof_accelerators/jasper_datapath_1port.pdf
  • proof_accelerators/jasper_datapath_1port_2clk.pdf
  • proof_accelerators/jasper_datapath_fifo.pdf
  • proof_accelerators/jasper_datapath_mem.pdf
  • proof_accelerators/jasper_model_cache_way.pdf
  • proof_accelerators/jasper_model_divider.pdf
  • proof_accelerators/jasper_model_fifo.pdf
  • proof_accelerators/jasper_model_fifo_priority.pdf
  • proof_accelerators/jasper_model_frequency_jitter.pdf
  • proof_accelerators/jasper_model_mem.pdf
  • proof_accelerators/jasper_model_mem_priority.pdf
  • proof_accelerators/jasper_model_mpram.pdf
  • proof_accelerators/jasper_model_multiplier.pdf
  • proof_accelerators/jasper_model_ram.pdf
  • proof_accelerators/jasper_power_sequencer.pdf
  • proof_accelerators/jasper_scoreboard.pdf
  • proof_accelerators/jasper_scoreboard_2.pdf
  • proof_accelerators/jasper_scoreboard_3.pdf
  • proof_accelerators/jasper_scoreboard_free.pdf
  • proof_accelerators/jasper_scoreboard_priority.pdf