形式验证与formality基本流程

2021-11-15 11:18:46 浏览数 (2)

形式验证

形式验证是为了验证RTL代码与综合后的门级网表之间的逻辑等价性。功能是否等价,与时序无关。

形式验证在设计流程中的位置

  • 在综合后:在综合的流程中通常会插入DFT,这样综合出的结果的逻辑关系可能会与RTL代码的等效逻辑不一致,因此利用利用形式验证来保证综合过程没有出错,逻辑正确。
  • 后端布局布线后:使用综合网表和和布局布线后网表进行比较。
  • 设计形式发生变化,则需要做形式验证。

形式验证的应用

  • 综合的网表与RTL对比做形式验证。保证综合过程没有逻辑错误。保证综合后的网表正确。
  • 后端网表与综合后的网表对比做形式验证。保证后端没有引入逻辑错误。
  • 做ECO的时候,ECO后的网表与ECO后的RTL做形式验证。(ECO当芯片已经流片出去了,工厂只做了一个底层,但金属层还没做可以做metalECO,发现某些容易修的bug后可以利用一些冗余的cell改变某些连线来修掉这个Bug,修改后端网表的同时对RTL也进行相应修改,然后将这两个文件进行LEC比较)

formality验证流程

Guidance > Reference > Implementation > Setup > Match > Verify >Debug

gui界面启动

输入fm或者formality

0.Guidance

添加.svf文件,其为DC综合生成的文件,内含综合时的一些优化记录。

1. Reference

读入rtl设计文件,read design file > verlog > load files

设置DC工具路径:otpion>browse

读取db文件,read DB libraries> DB > load files

设置顶层文件:set top design > set top

2. Implememtation

读入网表文件,read design file > verlog > load files

设置顶层文件:set top design > set top

3.Setup

设置常量

4.Match

验证Reference和Implememtion的逻辑功能是否匹配

match>run matching

match completed

可以看到match和unmatch的points

5.Verify

验证rtl和门级网表功能是否相同

verify> verify

verification succeeded!

6.Debug

如果功能不一致,进行debug。

双击可以进去看到设计的原理图,进行对比debug。

end

最后跑完,打印出结果,可以看到Passing (equivalent)和Failing (not equivalent),这里我们可以看出验证是一致的。

TCL脚本运行

//run_form文件

source run_form

代码语言:javascript复制
fm_shell -file form_check.tcl  //后台运行
#fm -gui -file form_check.tcl //gui界面运行

//form_check.tcl文件

代码语言:javascript复制
set_svf -append {/home/IC/soc/form_test/svf/test.svf}
read_verilog -container r -libname WORK -05 { /home/IC/soc/form_test/rtl/verilog_test.v } 
set hdlin_dwroot /opt/Synopsys/DC2015 
read_db { /home/IC/soc/form_test/db/fast.db } 
set_top r:/WORK/verilog_test 
set_top r:/FAST/ACCSHCINX2 
read_verilog -container i -libname WORK -05 { /home/IC/soc/form_test/netlist/netlist_test.v } 
set_top i:/WORK/netlist_test 
set_top i:/FAST/ACCSHCINX4 
match 
verify 

0 人点赞