VC Formal(下简称VCF)工具是Synopsys厂开发的一个用于静态分析验证的商业EDA工具。
VCF有很多种应用模式,比如FRV(Formal Register Verification), FPV(Formal Property Verification), FCA(Formal Coverage Analysis), SEQ(Sequential Equivalence Checking)等等。
本文主要介绍FPV的启动脚本。FPV是基于断言属性的静态检查。相对于动态仿真验证,其优势在于能够遍历所有的输入可能性。
启动命令:vcf -f ./start_fpv.tcl 如果想要GUI模式启动,可以用vcf -verdi -f ./start_fpv.tcl启动
================ start_fpv.tcl ================
set_app_var fml_mode_on true ## 设置VCF工作模式
read_file -top dut -format sverilog -sva -vcs {-full64 -sverilog -f ../filelist/dut.f -f ../filelist/tb.f +define+......} ## 读取源文件进行编译
create_clock LCLK -period 833 ## 创建时钟
create_clock FCLK -period 555
create_reset RESETn -low ## 创建复位
set_constant PWROK -value 1 ## 设置常量信号
sim_run -stable ## 让Formal run若干个cycle, 达到稳定的初始状态
sim_save_reset ## 保存初始状态
check_fv ## 开始做断言属性静态检查
report_fv -list ## 报告静态检查的情况
save_session ##保存数据库,以后可以用vcf -restore直接打开
===============================================
可以将DUT相关的文件路径在dut.f中指定,将断言等平台相关的文件在tb.f中指定。断言可以通过bind的方式绑定到DUT中。可以写个xxx_bind.sv并加入到tb.f中。
============== xxx_bind.sv =========
bind dut assertion_module assert_inst(
.clk(sys_clk),
.reset(sys_reset),
......
);
.....
================================
上面的例子中,dut是module名,assertion_module是断言模块的module名,assert_inst是断言模块的例化名。bind实现的功能就是相当于在DUT模块内部例化一个断言模块,并按指定的关系进行信号绑定。比如上面这个例子,就是将DUT的sys_clk信号与断言模块的clk信号进行了绑定,将DUT的sys_reset信号与断言模块的reset信号进行了绑定。