第六章Design Exploration 工具

Design Information

Design Information 窗口显示与 target 相关的树节点。target 可以是一个模块或实例,也可以是一个或多个 task、属性或信号;如果选中多个信号,窗口显示的是这些信号 COI 的并集。指标分为四类:

尺寸的表示约定:x(y) 中 x 是总数、y 是 bit 数之和;flop 用 x(y)(z property flop bits),其中 z 是为 SVA 和 PSL 属性生成的 observer flop 的 bit 数之和。

这项计算在你点击节点时才开始,所以点击后可能有短暂延迟——逻辑规模越大延迟越明显。

Complexity Manager

Complexity Manager 显示设计统计数据,帮你了解 COI(cone of influence)并找出复杂度来源和潜在的抽象候选。它可以针对整个设计,也可以针对一个或多个属性的 COI,或一个 task 中所有属性的合并 COI。

打开方式:主窗口的 Window 菜单(整设计范围)、Property Table 右键菜单(一个或多个属性的 COI 范围)、Task Tree 右键菜单(task 中所有属性的合并 COI,含 assumption 的逻辑)、session 标签页右键菜单(整设计范围)。
统计口径要注意:分析整设计时 Complexity Manager 会忽略 soft 和 hard stopat;分析属性时则会尊重对应属性 COI 中的 hard stopat、instance stopat 和 soft stopat。

Formal Profiler

一般很难说清形式引擎为什么卡住、设计中哪些结构对引擎而言是难点。Formal Profiler 帮你理解引擎把力气花在了设计的哪些部分,从而把复杂度削减工作聚焦到那些地方。

使用上的几个约束:Formal Profiler 一次只跑一个属性,以后台 proof 的方式运行;它的结果与 Property Table 中显示的内容无关;它会复用部分 proof 设置(例如 time limit),但可能为提升 profiling 容量而自行调整设置;每完成一个 bound 就报告一次 effort,跑完后随时可以查询结果;结果不会被清除,只有再次运行命令时才被替换。另外,Formal Profiler 一次只支持一个窗口

复杂度管理方法论

什么时候需要关注复杂度

不是每个设计都需要复杂度管理。以下信号出现时,说明你需要 Design Exploration 工具:

诊断流程

1Design Information 看规模

打开 Design Information 的 Metrics pane 查看设计规模指标,先对量级有个概念。

2Complexity Manager 找瓶颈

用 Complexity Manager 查看统计 pane 的 nets / gates / registers 等列,找出复杂度来源和潜在的抽象候选。它比 Design Info 更贴近送进引擎的内部建模(Design Info 更接近设计综合的视角),因此会呈现更多来自内部变量的信息。可以直接从 Property Table 右键针对某个属性的 COI 打开,判断复杂模块是否真的参与了你要验证的属性。

3决定黑盒/抽象

不参与当前属性逻辑的复杂模块 → 黑盒化。参与但数据路径太宽 → 数据抽象。这一步需要你结合 Complexity Manager 给出的统计自行判断。

4Formal Profiler 看引擎把力气花在哪

挑出最难的那个属性,对它单独跑 Formal Profiler(一次只能跑一个属性)。报告会按 bound 给出引擎 B 或 M 的 effort 百分比,指出设计的哪些部分吃掉了引擎的算力。据此决定加抽象、加 helper assertion 还是做 reduction。

经验法则:复杂度控制不是一次性工作,而是迭代过程。黑盒一个模块 → 重跑 → 如果结果改善,继续优化;如果出现假反例,说明黑盒过度,回退。

来源文档

  • jaspergold_apps_userguide.pdf Ch.10