一、Formality Terminology 原理
1.形式验证定义
目的是为了检查操作前后的逻辑等价性和功能等价性,一般是在综合之后以及对Design做修改之后进行检查。
2.所需文件
(1)Reference Design 既然是做验证,那么就需要一个golden文件,该文件即用做参考的设计,一般是DC之前的RTL代码
(2)Implementation Design 是指待验证的设计文件,一般就是综合后的网表代码。
(3)Containers 指容器,其中包含所需的库文件,用于对应Design中的cell。
3.形式验证
【1】首先需要确定Reference Design是功能正确无误的。
【2】验证Implementation Design是不是等价于Reference Design 如果不相等要报出report。
【3】Formality是静态验证所以不需要测试向量。
4.Formality底层原理
简单来说就是通过对input的内容判断output结果,列出所有的可能性,与RTL的结果对比来验证功能性。但是当芯片的规模增加后需要计算的可能性是成2的指数增长,因此需要通过把Design 分散成Logic Cones和Compare Point的组合穷举该组合下结果以对比功能性。
5.Formality Flow
1.导入Reference Design 和 Implementation Design 分别将其拆分为Logic Cones和Compare Point。
2.对两个Design 中的Logic Conest和Compare Point进行match比较
3.对相匹配的Compare Point 进行功能对比
4.根据输出的report 进行debug
5.分析match匹配的结果
(1)Reference Design 中存在但是Implementation Design中没有,可能是综合过程中优化掉了。
(2)Implementation Design中存在,Reference Design不存在,一般是添加了DFT模块,不影响整体的功能性。
(3)两边存在匹配不上的问题,需要人工修改。
6.验证结果分析
(1)pass cone match 通过的逻辑锥
(2)fail cone 功能性不同的逻辑锥
(3)unmatch cone 不影响功能性的DFT cell
(4)give up cone 太过复杂工具放弃的cone
7.debug
找出fail cone中导致功能性不同的原因
6.Formality 运行流程
TIPS:
启动Formality TCL:fm_shell -f runname.fms | tee runname.log
SVF文件很重要,来源于DC,逻辑综合结束后工具会自动生成一个.SVF文件,该文件会将DC过程中所有的信息都记录下来,提供给Formality工具,将大大降低验证时间及通过率;
我们导入design时,一般都是选择顶层模块,因为顶层模块包含所有的子模块;
”Setup”过程是设置一些Formality的约束信息,比如某个input信号只会是1,不会是0,这样就可以大大减低工具运行时间;如果没有就不用设置;
SVF File 内容
1.Object name changes 目标名称改变
2.Constant register optimizations 基础寄存器的优化
3.Duplicate and marged registers 寄存器的复制和合并
4。Multiplier and divider architecture types 乘除法器架构类型改变
5.Datapath transformations 数据路径改变
6.FSM re_encoding(must be enabled in Formality to ve used)
7.Retiming 重新调整时序内容
8.Register phase inversion 寄存器相位反转记录
SVF 导入
DC工具会自动生成一个默认的SVF文件,如果不想用,可以在DC前,自己用”set_svf file.svf”设置一个,这样工具就会保存到该文件里;导入到Formality中的命令是一样的;
Auto Setup Mode (ASM)
Auto Setup Mode:这个模式的意思就是,让DC工具自动把一些设置内容保存到SVF文件中,这样FM工具就可以直接读取相对应的设置而不用人工设置,保持两边设置的一致性;(其实这就类似于我们在使用一些软件如PS时,希望可以一键把当前的所有软件设置保存,并在另一台设备上读取进去,而不用在设置一次)
Read Commands
读取文件时的一些命令,注意”-r”与”-i”的区别,要记得两次设计文件都需要设置顶层;
讲一下这一步是什么意思:我们现在在做综合优化时,基本都会用到一些DesignWare Lib,该设计是工具厂商集成在DC中的,因此在做FM时需要告诉工具DesignWare lib的位置在哪里(在DC的安装目录中),我们把DC的安装目录给到hdlin_dwroot这个变量即可,否则会报错;
Read Reference Design
读参考设计;
Read IMP design
读IMP设计;
文件路径选择:-VCS
我们实际在做FM时,会有很多的设计文件等,可以用一些命令来协助我们找文件位置;
Container相关
container文件就和ddc文件类似;
Session文件
Session文件用于FM验证fail后,我们不想立刻debug,或者需要别人帮我们debug,我们可以用”save_session -replace xxxxxx_file”保存当前的一些错误相关文件,后面再次打开时,不用再跑一遍FM了,直接在FM中打开session.fss文件即可;