DC_Lab5笔记
使用前的检查:
1、检查lab5目录下是否有: common_setup.tcl文件
2、检查lab5目录下是否有: dc_setup.tcl文件
3、检查lab5目录下是否有: .synopsys_dc.setupl文件(有的可能没有,没有的话自己编写一下)
一、查看处理器核心数量:
./num_cores.sh
如图:
二、以topo模式运行DC 并将报告输出到tee.log中
dc_shell -topo | tee -i dc.log
使用快捷键CTRL+SHIFT+N新建一个lab5下的终端。在script目录下创建dc.tcl文件,后续每一个步骤的dc命令都粘贴在这个tcl文件里面
touch scripts/dc.tcl
如图:
三、在读取RTL文件之前,先建立一个.svf文件。用于存放后面的时序优化信息
set_svf STOTO.svf
如图
四、读取、链接、检验设计;加载检验脚本
1、读取rtl文件:
read_verilog ./rtl/STOTO.v
窗口信息如下:
2、设置STOTO为TOP文件
current_design STOTO
窗口信息如下:
3、链接文件:
link
窗口信息如下:
4、检验设计:
check_design
窗口信息如下:
5、加载scripts文件夹下的STOTO.con脚本:
source TOTO.con
6、检验脚本规定的时序:
check_timing
窗口信息如下:
7、加载scripts文件夹下的STOTO.pcon脚本(这个脚本是用来对LAYOUT进行位置约束)
source STOTO.pcon
窗口信息如下:
五、参考Design Specification 的步骤1-6,执行如下命令进行约束:
group_path -name clk -critical 0.21 -weight 5
group_path -name INPUTS -from [all_inputs ]
group_path -name OUTPUTS -to [all_output]
group_path -name COMBO -from [all_inputs] -to [all_output]
set_ungroup [get_designs “INPUT”] false
set_dont_retime [get_cells I_MIDDLE/I_DONT_PIPELINE] true
set_optimize_registers true -design PIPELINE
set_dont_retime [get_cells I_MIDDLE/I_PIPELINE/z_reg*] true
对命令用法的解释:
group_path -name clk -critical 0.21 -weight 5
#创建一个clock相关的group path 从reg到reg
group_path -name INPUTS -from [all_inputs ]
#从INPUT到reg
group_path -name OUTPUTS -to [all_output]
#从reg到OUTPUT
group_path -name COMBO -from [all_ inputs] -to [all output]
#INPUT到OUTPUT
set_ungroup [get_designs “INPUT”] false
#保留,不分组
set_dont_retime [get_cells I_MIDDLE/I_DONT_PIPELINE] true
#前后一致,不进行PIPELINE(不改变寄存器的位置与数量)
set_optimize_registers true -design PIPELINE
#能改变寄存器的位置与数量
set_dont_retime [get_cells I_MIDDLE/I_PIPELINE/z_reg* ] true
# I_MIDDLE/I_PIPELINE/z_reg*这个寄存器不能做PIPELINE(retiming)
六、保存.ddc文件(这里如果报错了就在lab5里面新建一个unmapped文件夹,重新执行,就可以保存了)
write -f ddc -hier -out unmapped/STOTO.ddc
七、设定编译时使用多少处理器核心,我这里用4个
set_host_options -max_cores 4
八、编译
compile_ultra -scan -timing -retime
补充:
-scan:会插入一些扫描寄存器
-timing:以约束时间为主要目的
-retime:告诉工具可以进行retiming
九、报告没有被编译的一些层次化结构
report_hierarchy -noleaf
十、生成约束报告:
redirect -tee -file rc_compile_ultra.rpt {report_constraint -all}
十一、生成时序报告:
redirect -tee -file rc_compile_ultra.rpt {report_timing}
十二、保存.ddc文件(先新建一个map文件夹)
write -f ddc -hier -out mapped/STOTO.ddc
十三、停止SVF文件记录
set_svf -off
十四、输入以下命令,查看被移除的寄存器
get_cells -hier *r_REG*_S*
hierarchy 层次化结构
十五、输入以下命令,查看被移动的寄存器
get_cells -hier R_*
十六、查看layout图像:
打开图形化界面
gui_start
打开window->New Layout Window查看layout
移动鼠标查看坐标是否满足约束
在Object栏中,选择Placement Blockage以及cell栏中的standard查看标准单元摆放情况。
十七、退出DC
exit
点击OK
十八、补充内容
.synopsys_dc.setup文件的内容
#History #
history keep 200
# Aliases
#
alias h history
alias rc "report_constrain -all_violators"
alias rt report_timing
alias ra report_area
alias rq report_qor
alias page_on {set sh_enable_page_mode true}
alias page_off {set sh_enable_page_mode false}
alias fr "remove_design -designs"
#
#
# Other lab specific settings
#
#
set_app_var alib_library_analysis_path .. ; #Common Alib location
define_design_lib WORK -path ./work ; #Location of "analyzed" files
suppress_message "LINT-99 CMD-041 TFCHK-049 TFCHK-050 TFCHK-084 MWLIBP-300 MWLIBP-301 MWLIBP-324" ; #Message irrelemant
#
#
# Additional Setup Files
#
source common_setup.tcl
source dc_setup.tcl
#
#Verify Settings
#
echo "\n============================================================"
echo "\nLibrary Settings:"
echo "search_path: $search_path"
echo "link_library: $link_library"
echo "target_library: $target_library"
echo "symbol_library: $symbol_library"
echo "mw_reference_library: $mw_reference_library"
echo "mw_design_library: $mw_design_library"
echo "\n============================================================"
echo "\nI am read ...\n"
STOTO.pcon的内容
第一行:设置电路大小
第二行:规定的位置不可以摆放期间
dc.tcl的内容
set_svf STOTO.svf
read_verilog ./rtl/STOTO.v
current_design STOTO
link
check_design
source STOTO.con
check_timing
source STOTO.pcon
group_path -name clk -critical 0.21 -weight 5
group_path -name INPUTS -from [all_inputs ]
group_path -name OUTPUTS -to [all_output]
group_path -name COMBO -from [all_inputs] -to [all_output]
set_ungroup [get_designs "INPUT"] false
set_dont_retime [get_cells I_MIDDLE/I_DONT_PIPELINE] true
set_optimize_registers true -design PIPELINE
set_dont_retime [get_cells I_MIDDLE/I_PIPELINE/z_reg* ] true
write -f ddc -hier -out unmapped/STOTO.ddc
set_host_options -max_cores 4
compile_ultra -scan -timing -retime
report_hierarchy -noleaf
redirect -tee -file rc_compile_ultra.rpt {report_constraint -all}
redirect -tee -file rc_compile_ultra.rpt {report_timing}
write -f ddc -hier -out mapped/STOTO.ddc
set_svf -off
get_cells -hier *r_REG*_S*
get_cells -hier R_*
gui_start