1、验证带DFT网表:首先要disable scan logic和Bist功能
2、可以将所有的代码、网表,包括所有的子模块、顶层的全部读入,在read过程中针对top使用set_top,有关环境设置不急于读入,完成后,可以保存该阶段性为*.fss格式文件(下次restore_session该文件即可,库、网表、设计不需要重复读入)。
脚本主要过程如下:
source ./variable.tcl#设计顶层、路径等变量设置
source ./target_lib.tcl#设计中用到的所以库文件,可能需要lib2db,链接:#http://blog.csdn.net/a670449625/article/details/72459459
#脚本内容:read_db "$LIB_PATH/lib_name.db ... ..."
source ./read.tcl#读入ref和impl设计
#脚本内容:read_verilog -container r -libname WORK $REF_LIST
#set_top r:/WORK/TOP
#read_verilog i:/WORK/TOP
#save_seesion r_i_load.fss
#此时采用自底向上的策略,假设顶层TOP下有两个子模块A和B
#验证子模块A
set_reference_design r:/WORK/A
set_implementation_design i:/WORK/A
current_design r:/WORK/A
source ./ref_setup.tcl#针对ref container的一些设置,eg:constants、black_box、dont_verify_points等
current_design i:/WORK/A
source ./impl_setup.tcl#针对impl container的一些设置,eg:constants、black_box、dont_verify_points等,涉#及到DFT、时钟树方面的,设置方面会多余针对ref的设置
match
set result [verify]#此时会显示出:Reference deisgn is 'r:/WORK/A' Implementation design is 'i:/WORK/A'
if (result ==0)
analyze_points -all > ./analyze_points.log#分析所有failing points
source ./report.tcl#打印验证结果,包括:failing、pasing points、user constants、report_status等等
else
source ./report.tcl
#至此,子模块A的验证工作完成,此时对fm_shell来说,停留在verify mode下
setup#将模式更改为setup
set_reference_design r:/WORK/B
set_implementation_design i:/WORK/B
#之后步骤类似子模块A,在子模块B验证完成后,fm_shell仍停留在verify mode下
setup
set_reference_design r:/WORK/TOP
set_implementation_design i:/WORK/TOP
source ./top_setup.tcl#将子模块A和B设置为黑盒子、Interface only等
#剩余步骤跟子模块验证相同。