第二章FPV App 流程与 GUI 导览

FPV App 完整流程

Formal Property Verification (FPV) App 是 JasperGold 最核心的应用,也是其他 App 的基础。FPV 的标准工作流程如下:

  1. 启动 FPV Appjg -fpv
  2. 分析设计:使用 analyze 命令加载 Verilog/VHDL/SVA 文件
  3. 细化设计:使用 elaborate -top <module> 构建设计层次
  4. 指定时钟和复位clock / reset 命令
  5. 配置证明参数:trace length、引擎模式、时间限制等
  6. 运行证明prove -all 或 GUI 中点击证明按钮
  7. 分析结果:查看 proven/failed/bounded 属性,调试反例
  8. 迭代优化:添加约束、调整抽象、增加引擎时间

FPV App GUI 导览

启动 FPV App 后,GUI 主要分为以下区域:

FPV App GUI 界面概览
FPV App GUI 界面概览

证明状态指示器

Property Table 中每个属性旁边有状态图标:

图标/颜色状态说明
🟢 绿色proven属性被完整证明
🔴 红色failed找到反例,属性被违反
🟡 黄色bounded有界证明完成但未完整证明
⚪ 灰色unknown引擎超时,未能确定
🔵 蓝色coveredcover 属性被击中(到达了目标状态)

界面截图

FPV App GUI 界面(第 45 页)
FPV App GUI 界面(第 46 页)

FPV 验证方法论:多轮收敛流程

FPV 不是"跑一次 prove 就结束"的工具,而是一个多轮迭代收敛的过程。理解这个流程是掌握形式验证的关键。

三轮证明策略

1第一轮:快速浅证明

设置较小的 set_max_trace_length(如 10-20),使用默认引擎模式。这一轮的目标不是完整证明,而是快速发现浅层 bug。如果在深度 10 就能找到反例,没必要花时间跑深度证明。

经验:第一轮通常在几分钟内完成,能发现大部分明显的设计错误。

2第二轮:加深证明

增大 trace length(如 50-100),切换到更强的引擎组合(如 {K I N}),设置每个属性的时间限制(如 30s-60s)。这一轮目标是深度证明或找到深层反例

3第三轮:逐个攻克 remaining 属性

第一轮和第二轮后仍未证明的属性,需要逐个分析:是属性本身有问题?约束不够?还是设计太复杂需要抽象?对难证明的属性单独调整引擎、时间限制或添加辅助不变量。

什么算"验证完成"?

FPV 的 signoff 标准不是"prove 跑完了",而是以下条件同时满足:

常见误区:看到所有绿色就认为验证完成。但如果约束过强,形式引擎可能在一个被限制得过小的状态空间内"证明"了属性——这是假 proven。一定要用 cover 属性确认约束空间足够大,合法的场景能被覆盖到。

FPV 的局限性

来源文档

  • jaspergold_apps_userguide.pdf