第六章Design Exploration 工具
Design Information
Design Information 窗口显示与 target 相关的树节点。target 可以是一个模块或实例,也可以是一个或多个 task、属性或信号;如果选中多个信号,窗口显示的是这些信号 COI 的并集。指标分为四类:
- Module Source Info:RTL 实例数、内嵌属性及其类型、代码行数
- Structural Metrics(结构指标):设计逻辑结构方面的信息,例如寄存器、输入输出端口、门数
- Functional Metrics(功能指标):设计的功能组件,例如计数器、有限状态机(FSM)、多维数组(含 FIFO)
- Current Task Metrics:当前 task 中的 stopat 数量
尺寸的表示约定: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。
- 统计 pane:有 nets、gates、registers 等列
- 详情 pane:包含 Signal Table 和 Functional View 两部分
- Functional Type Icons:Functional View 标签页中每个条目名称左边的图标,标示结构类型,共四种——FSM、FIFO、Multidimensional array(多维数组)、Counter(计数器)。鼠标悬停有 tooltip 说明类型
统计口径要注意:分析整设计时 Complexity Manager 会忽略 soft 和 hard stopat;分析属性时则会尊重对应属性 COI 中的 hard stopat、instance stopat 和 soft stopat。
Formal Profiler
一般很难说清形式引擎为什么卡住、设计中哪些结构对引擎而言是难点。Formal Profiler 帮你理解引擎把力气花在了设计的哪些部分,从而把复杂度削减工作聚焦到那些地方。
- 它针对某一个特定属性分析形式引擎的活动,并按 bound 逐个报告引擎 B 或 M 所花的 effort。百分比数值越高,表示该引擎在这里花的力气越大
- 用得到的信息来决定:加抽象、加 helper assertion、做 reduction 等等
复杂度管理方法论
什么时候需要关注复杂度
不是每个设计都需要复杂度管理。以下信号出现时,说明你需要 Design Exploration 工具:
- 证明超时(time limit exceeded)且没有明确原因
- 内存爆炸(out of memory)
- 引擎无法收敛(跑了很久 still running 无进展)
- 少量属性 remaining,其他都 proven 了但这几个怎么都过不去
诊断流程
打开 Design Information 的 Metrics pane 查看设计规模指标,先对量级有个概念。
用 Complexity Manager 查看统计 pane 的 nets / gates / registers 等列,找出复杂度来源和潜在的抽象候选。它比 Design Info 更贴近送进引擎的内部建模(Design Info 更接近设计综合的视角),因此会呈现更多来自内部变量的信息。可以直接从 Property Table 右键针对某个属性的 COI 打开,判断复杂模块是否真的参与了你要验证的属性。
不参与当前属性逻辑的复杂模块 → 黑盒化。参与但数据路径太宽 → 数据抽象。这一步需要你结合 Complexity Manager 给出的统计自行判断。
挑出最难的那个属性,对它单独跑 Formal Profiler(一次只能跑一个属性)。报告会按 bound 给出引擎 B 或 M 的 effort 百分比,指出设计的哪些部分吃掉了引擎的算力。据此决定加抽象、加 helper assertion 还是做 reduction。
来源文档
jaspergold_apps_userguide.pdf Ch.10