相关阅读
Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482
等价性检查的流程
图1概述了使用Formality进行等效性检查的具体步骤。
图1 等价性检查流程
启动Formality(Start Formality)
要启动Formality,请在Linux命令行使用fm_shell命令,如下所示。
% fm_shell
...
fm_shell (setup)>
其中(setup)表示你当前所在的模式,所有的模式包括:guide、setup、preverify、match和verify,启动Formality时默认进入setup模式。
如果希望启动GUI,有下面三种方法:
- 在Linux命令行使用formality命令启动Formality。
- 使用fm_shell命令启动时,添加-gui选项。
- 在fm_shell中使用start_gui命令。
注意:在启动Formality前,需要首先设置环境变量、路径和许可证。
加载指导文件(Load Guidance)
Formality流程中的加载指导文件是一个关键点,在这里可以选择提供关于设计更改的设置信息,这些更改是由设计流程中使用的其他工具(比如Design Compiler)引起的。
下面的命令加载指导文件。
% fm_shell
...
fm_shell (setup)> set_svf default.svf
也可以使用GUI界面加载指导文件,如图2所示。
图2 加载指导
包含指导信息的文件被称为SVF文件,通常具有.svf扩展名。其实svf文件就是由Formality命令构成的文件,第一条命令是guide,进入guide阶段,随后执行guide类命令(比如guide_environment命令)。在svf文件的最后,使用setup命令重新回到了setup阶段。
手动执行guide类命令也是可以的,首先需要使用guide命令进入guide模式,随后执行guide类命令,最后使用setup命令回到setup阶段。
在Synopsys设计实现流程中,推荐提供指导文件,而在验证由第三方工具修改的设计时,提供指导则是可选的。
加载设计(Load Designs)
为了执行验证,首先需要将两个设计提供给Formality:第一个设计是黄金设计(golden design),已知在功能上是正确的设计,又称参考设计(reference design);第二个设计是参考设计的修改版本,称为实现设计(implementation design),这是希望与参考设计进行验证的设计。
下面的命令读取top.v文件,并放入参考设计容器中。
% fm_shell
...
fm_shell (setup)> read_verilog -r top.v
也可以使用GUI界面加载设计,如图3所示。
图3 加载设计文件
Formality可用于验证两个RTL设计之间的等效性,两个门级设计之间的等效性,或者一个RTL设计与一个门级设计之间的等效性。
加载到Formality中的设计文件只能是可综合的SystemVerilog、Verilog或VHDL代码,或者可以是Synopsys内部数据库格式(.db、.ddc或Milkyway数据库)。
注意:在加载设计文件后,通常要设置顶层设计。
执行设置(Perform Setup)
设置步骤涉及向Formality提供信息,以解决在指导步骤中未自动处理的特定问题,以下是一些需要设置的情况:
- 内部扫描(internal scan)
- 边界扫描(boundary scan)
- 时钟门控(clock-gating)
- 有限状态机(FSM)重新编码(re-encoding)
- 黑盒(black boxes)
- 流水线重定时(pipeline retiming)
下面的命令设置了参考设计扫描端口为常量0。
% fm_shell
...
fm_shell (setup)> set_constant -type port r:/WORK/top/scanmode 0
也可以使用GUI界面执行设置,如图3所示。
图3 执行设置
可以在加载指导文件前设置Automated Setup Mode模式,这样可以减少设置阶段的任务,甚至跳过设置阶段,详细见下面的博客。
匹配比较点(Match Compare Points)
在这个步骤中,Formality工具会尝试将参考设计中的每个比较点与实现设计中的相应比较点进行匹配(其实不止比较点,所有应该匹配的点都在这个阶段进行匹配)。准确的匹配是确保验证准确性的关键,匹配确保没有不匹配的逻辑锥,并验证实现设计的功能性。
比较点包括:黑盒输入引脚、循环断开点、多驱动线网、Cut-Point、输出端口、D触发器和锁存器。
下面的命令进行匹配。
% fm_shell
...
fm_shell (setup)> match
也可以使用GUI界面执行设置,如图4所示。
图4 进行匹配
验证与解释结果( Verify and Interpret Results**)**
验证在加载、设置和比较点匹配步骤之后进行。
% fm_shell
...
fm_shell (match)> verify
在验证的结束或在过程中断,验证结果将报告为:
- PASS(所有比较点是等效的)
- FAIL(一些比较点不等效)
- INCONCLUSIVE(一些比较点要么未验证,要么已终止)
调试(Debug)
如果设计验证不成功,则需要进行调试。在调试过程中,将使用验证结果来定位失败或未得出结论的结果,此步骤有助于确定结果不成功的位置以及可能的原因。
设计失败可能是由于设置问题或设计之间的逻辑差异导致的,不同的失败原因需要不同的调试解决方案,因此Formality提供了多种调试策略。这些策略包括从手动匹配未匹配的比较点到通过基于GUI的分析进行调试,对于未得出结论的验证也是如此。
工作模式
之前已经说到,Formality的模式包括:guide、setup、preverify、match和verify,这些模式分别支持不同的命令。
guide模式
guide模式用于执行guide类命令,例如guide_mark、guide_uniquify等,可以在setup模式(前提是在读取除工艺库外的设计文件之前)使用guide命令进入guide模式,能够在setup模式使用set_svf命令(前提是在读取除工艺库外的设计文件之前)读取指导文件是因为svf文件中的第一条命令就是guide。
在等价性检查的流程中,加载指导文件(Load Guidance)就是在guide模式进行的。
setup模式
setup模式用于执行setup类命令,例如set_constant、set_black_box等,可以在guide模式或preverify模式使用setup命令进入setup模式。如果在match模式或verify模式使用setup命令,则会抛弃所有的匹配和验证结果并进入setup模式。
在等价性检查的流程中,加载设计(Load Designs)和执行设置(Perform Setup)就是在setup模式进行的。
preverify模式
setup类命令本质上是基于实例的。在preverify模式下,可以访问最终的实例对象。最终实例对象是应用了UPF、SVF和ECO等修改的设计实例。只能执行不修改设计数据库的设置命令,任何更改设计数据库的设置命令在preverify模式下不可用,若使用这些命令,工具将发出错误消息,如下所示。
fm_shell (preverify)> remove_design r
Error: 'remove_design' can only be executed in SETUP mode. First execute 'setup'. (FM-336)
在setup模式使用preverify命令进入preverify模式时,Formality会处理guide类命令(svf文件)。使用match命令或verify命令(因为使用verify命令会自动执行match命令)会自动执行preverify命令。如果在preverify、match或verify模式使用preverify命令会重新处理svf文件并抛弃所有的匹配和验证结果并进入preverify模式。
match模式
在setup模式或preverify模式使用match命令进入match模式,会根据比较点将实现设计与参考设计进行匹配,匹配完成后会报告匹配结果。在verify模式使用match命令不会切换模式,但仍然会进行匹配。
可以增量地执行比较点匹配,这在自动匹配失败时非常有用,通常是因为参考设计和实现设计之间的名称或结构差异。如果匹配过程被中断,工具将保留部分匹配结果,重新运行match命令可以继续进行匹配。
执行verify命令之前不必先执行match命令,因为如果没有执行匹配,verify命令会自动执行match命令。report_unmatched_points和report_matched_points等命令只能在match模式和verify模式下使用。
在等价性检查的流程中,匹配比较点(Match Compare Points)就是在match模式进行的。
verify模式
在setup模式、preverify模式或match模式下使用verify命令进入verify模式,并在判断设计是否可比,并尝试证明它们的功能等效性。如果验证两个设计时,所有比较点都证明相等,则Formality会报告这些设计为功能等效(验证通过)。如果任何比较点在验证中失败或在验证过程中中止,Formality会报告这两个设计为功能不等效(验证失败)。
在等价性检查的流程中,验证与解释结果(Verify and Interpret Results)就是在match模式进行的。