基础知识
在布图规划(Floorplan)或布局(Layout)之前,线负载模型可以用来估计电容、电阻和互连线的面积开销。可以用线负载模型(Wireload Model)基于扇出的数量估计线的长度。线负载模型依赖于块(Block)的面积,不同面积的设计可以采用不同的线负载模型。线负载模型也可以把预估的线长映射为电阻、电容以及由于走线产生的面积开销。
在库中有不同的线负载模型
目标库在编译期间用于创建特定于技术的门级网表,DC优化选择满足所需 DRC、时序和逻辑功能的最小门
不仅有target_library,还有一些IP的加密文件等(.db格式,.ddc格式)
1 set_app_var link_library "* $target_library IP.db"
例如在读取verilog文件的时候,如果没有指定具体的文件路径,dc会在search_path中去寻找
1 set_app_var search_path "$search_path libs cons"
1 2 3 4 5 6 read_verilog {top.v a.v b.v} # 一般默认第一个是顶层 read_verilog top.v read_verilog a.v read_verilog b.v # 默认最后一个是顶层 current_design top # 设置真正的顶层文件
1 check_design -html check_design.html
verilog如下,带有parameter
1 2 3 4 5 6 module MY_TOP(A, B, ...); parameter A_WIDTH 2 ; parameter B_WIDTH 4 ; input [A_WIDTH-1 : 0 ] A; input [B_WIDTH-1 : 0 ] B; endmodule
此时在dc中可以指定对应的parameter
1 2 3 4 analyze -format verilog {a.v b.v} elaborate MY_TOP # 不用再运行 current_design 和link elaborate MY_TOP -parameters "A_WIDTH=9,B_WIDTH=16"
1 read_ddc {decode.ddc encode.ddc}
读取命令采用 RTL 代码并在 DC 内存中构建“GTECH”设计 - 即转换为未映射的 ddc 格式
大型设计的 RTL 到 ddc 转换可能需要一些时间
将来可能需要在将来重新读取未编译的设计
好的做法:保存未映射的 ddc - 读取 ddc 更快
源文件修改后记得重新再保存要给ddc,下一次只要读取ddc就行
1 2 3 4 5 6 read_verilog {a.v b.v top.v} curren_design top link check_design write -format ddc -hier -output unmapped/my_top.ddc source top.con
1 2 3 4 5 check_timing compile_ultra change_name -rule verilog -hier # 更改名字 write -format verilog -hier -output mapped/my_top_net.v write -format ddc -hier -output mapped/my_top.ddc
my_top_net.v:后仿或者不是synopsys公司的工具
my_top.ddc:synopsys公司的后仿真使用,DFT等
set_app_vr的使用更加安全,因为会提示报错信息,如果敲错了,例如search_path 打成了serch_path
1 2 3 4 # 后面紧跟变量名 Printvar var_name get_app_var var_name echo $var_name
1 2 3 4 5 list_designs # 查看所有的设计 remove_design -hierarchy # 清除设计 analyze -format verilog [list counter_4bit.v] elaborate -architecture verilog counter_4bit # 会自动进行link check_design
1 dcprocheck /home/zero/synopsys/syn/script/top_dc.tcl # 在终端,不是dc_shell
1 report_timing -delay_type max
.tcl的运行结果会保存到compile.log中
1 redirect -tee -file ${WORK_PATH} /compile.log {source -echo -verbose dc_top.tcl}
此时模块之间的连接信号消失
原来未插入扫描链的寄存器
1 2 # 使用下面指令插入扫描链 compile -map_effort high -area_effort high -sacn
寄存器修改为带选择器的寄存器,但是相互之间并没有连接成扫描连
1 report_timing -delay_type max
1 report_timing_requirements -ignored
1 2 set_isolate_ports -type buffer [all_outputs]
tcl 脚本示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 set root_path [sh pwd ]sh mkdir -p mapped sh mkdir -p report sh mkdir -p unmapped sh mkdir -p work set RTL_PATH /home/icer/workspace/git_prj/vip_ahb2apb_dv/rtlset DC_PATH /opt/Synopsys_2022/syn/U-2022.12 -SP7-3 set STD_LIB_PATH /home/icer/ic_lib/SMIC_55nm/STD/SCC55NLL_HD_RVT_V2p1a/liberty/0.9 vset_app_var search_path [list $search_path . $RTL_PATH $STD_LIB_PATH ] set_app_var target_library scc55nll_hd_rvt_ss_v0p81_125c_basic.db set_app_var link_library [list $target_library ] set_svf mapped/ahb2apb_bridge.svf set verilogout_show_unconnected_pins trueset verilogout_no_tri trueset verilogout_equation falseset verilogout_higher_designs_first trueset enable_page_mode falseset top_design ahb2apb_bridgedefine_design_lib work -path work/ set rtl_vf [list ]set filelist_fp [open scripts/filelist.f r]while {[gets $filelist_fp line] >= 0 } { set line [string trim $line ] if {$line eq "" } { continue } if {[string match "#*" $line ]} { continue } lappend rtl_vf $line } close $filelist_fp analyze -format verilog -library work $rtl_vf elaborate $top_design -architecture verilog -update link remove_unconnected_ports [get_cells * -h] check_design uniquify write -f verilog -h -output unmapped/${top_design} .v write -f ddc -h -output unmapped/${top_design} .ddc redirect -tee -file report/timing.rpt {source scripts/timing_syn.sdc} set_max_area 0 simplify_constants -boundary_optimization set_fix_multiple_port_nets -all -buffer_constants compile_ultra set_svf off write -format verilog -h -output mapped/${top_design} .v write -format ddc -h -output mapped/${top_design} .ddc write_sdc -nosplit mapped/${top_design} .sdc redirect -tee -file report/setup.rpt {report_timing -delay_type max} redirect -tee -file report/hold.rpt {report_timing -delay_type min} redirect -tee -file report/qor.rpt {report_qor} redirect -tee -file report/vio.rpt {report_constraint -all_vio}