形式验证的目的是比较功能的一致性,比对综合后的网表(netlist)和RTL设计的功能是否一致,比对PR后的网表和综合后网表功能是否一致。两处比对一致则代表最终PR后的网表功能符合设计者意图。在所有的IC设计中,想要最终成功的设计者都不会放弃做形式验证,且至少需要两次形式验证,第一次是RTL和综合后的网表的比对(这次比对简记为前FM),第二次是综合后的网表和PR后的网表的比对(这次比对简记为后FM)。
1 FM的逻辑框架
不论是前FM还是后FM,做形式验证的思路是一样的,需要的东西如下:
1 参考文件,就是那个被定义为永远正确的文件,这里用ref来表示,这里的ref文件就是RTL设计文件;(原因:RTL经过功能仿真验证,被认为RTL是符合设计者意图的正确设计)
2 用于比较的文件,这里用imp来表示,这里imp文件就是综合后的网表文件;(原因:在综合过程中,综合软件会对设计进行优化,有些地方的优化可能不符合设计者意图,从而导致功能错误)
3 明白ref文件和imp文件的底层表达,ref文件是RTL的代码文件,而imp文件是用具体器件表示的网表,因此两者之间需要读入具体的器件的db文件,软件才能明白文件具体想表达的意思。与此同时,在综合过程中进行了优化,也需要把优化的记录文件(.svf文件)读入,软件才能比对优化处的功能;
2 FM的简单实现
下面给出一个简单的FM的脚本,在进行复杂的芯片验证时,可在此基础框架上增删修改。
步骤1:设置顶层文件名字(这个可以给自己提示该脚本是用于那个项目/模块的)
set top_design_name top_design_name
步骤2:设计FM的约束条件(最开始约束条件可以不用设置,用默认设置,debug的时候可以加上。约束条件还有很多或者多种用法,可参见使用手册和使用man指令)
set verification_failing_point_limit 0
set hdlin_warn_on_mismatch_message {FMR_ELAB-147 FMR_VLOG-091}
set verification_clock_gate_hold_mode any
set hdlin_ignore_full_case false
set hdlin_ignore_parallel_case false
set hdlin_unresolved_modules black_box
……
步骤3:读入相应的db文件
read_db "../../xxx.db"
步骤4: 读入综合后的优化文件
#set_synopsys_setup true
set_svf ../../../../xxxx.svf
步骤5:读入RTL设计文件到-r container里
read_verilog -container r -libname WORK {module_a.v module_b.v module_c.v}
set_top r:/WORK/$design_top_name
set_refernce r:/WORK/$design_top_name
set hdlin_unresolved_modules black_box
步骤6:读入网表文件到-i container里
read_verilog -i libname WORK -05 ../../xxxxx.vg
set_top i:/WORK/$design_top_name
set_implementation i:/WORK/$design_top_name
步骤7:将i-container和r-container里的内容进行匹配比对
match
report_unmatched_points
set_dont_verify {r:/work/xxx/xxx/xx/xxx/shift_x_reg70/\*dff.00.7\*}
verify
analyze_points failing
report_constants
report_dont_verify_points
report_failing_points > ../rpt/failing_points.rpt
report_aborted_points > ../rpt/aborted_points.rpt
report_unverified_points ? ../rpt/unverified_points.rpt
注1:查找使用的命令用man,比如 man read_verilog,就会出来具体命令的使用方法
注2:关于formality的使用手册可在eetop社区里找到,如下链接,简单的应用框架在第81页。
Formality® User Guide 2022-03 - 后端资料区 - EETOP 创芯网论坛 (原名:电子顶级开发网) -
注3:formality的用户手册里可以找到相应的脚本模板
3 start_gui(debug工具)
可以通过FM的gui界面进行debug,这个界面上存在问题分析、可能原因定位、电路的比较图,对于debug很友好。
用户手册里也有很大的篇幅介绍debug的方法技巧,可直接学习用户手册。
笔记一定要及时整理啊,不然时间久了,真的会忘记的………………笔记就简单整理到这里,如有不妥之处,欢迎大家批评指正