VERDVANA'S BLOG Verdvana

DC常用命令


1 前言

        总结以下DC常用命令。


2

        检查脚本文件:

dcprocheck  ../filename.tcl

        查看当前设计文件:

list_designs

        清除当前设计中的文件:

remove_design -hierarchy

        指定设计顶层文件:

current_design  design_file_name

        检查设计语法:

check_design

        检查时序:

check_timing

        清除全部约束:

reset_design

        把例化的多个模块转化成唯一的模块名字,这样优化时可以针对每个模块做优化而不影响其它模块:

uniquify

        设置理想网络一般只对port和pin而言,如果想设置net:

set_ideal_network  -no_propagate  [get_nets CTRL]

        尽最大努力做优化:

compile -map_effort high -area_effort high

        优化编译:

compile_ultra 

        使劲优化时序编译:

compile_ultra -timing_high_effort_script

        如果三个串联的寄存器之间两个寄存器之间的路径时序违例二中间和最后一个寄存器之间的路径时序宽松,使用下面的命令将这条路径中间的组合逻辑分配一部分到第二个寄存器的后面:

compile_ultra -retime

        相反,不想这么优化:

set_dont_retime <cells or designs> ture

        例如输出端口的寄存器不想在输出之后还有组合逻辑:

set_dont_retime [get_cells U_pipeline/P3_reg*] ture

        循环优化:

compile_ultra -incremental

        报告约束违例:

report_constraint -all_violators

        报告最差路径:

report_timing -delay_type   max

        查看多(例:3)条比较差的路径(不是最差,是从每个不同的寄存器终点的路径中挑出一个最差的):

report_timing -max_paths  3

        查看多(例:3)条最差的路径:

report_timing -nworst 2 -max_paths  3

        报告端口约束:

report_ports    -verbose

        报告时钟:

report_clock 

        如果设计中有多个clock,DC会自动将不同clock下的DFF分组,用以下命令查看分组:

report_path_group 

        DC如果优化设计中的关键路径失败,则会放弃对其他路径的优化;如果将各个路径分组,假如某一组中的关键路径优化失败,DC并不会放弃优化其他组的关键路径。分组举例:

group_path  -name   INPUTS  -from [all_inputs]
group_path  -name   OUTPUTS  -to [all_outputs]
group_path  -name   COMBO  -from [all_inputs] -to [all_outputs]

        如果关键路径已无法优化,但仍想优化次关键的几条路径,例如优化这样一组路径:

  • 最关键路径的权重为5,其次为2,一般为1;
  • 最关键路径超出0.2ns而其余路径超出的时间都在0.2ns以内:
group_path  -name   CLK  -critical 0.2 -weight 5

        DC官方文件給出的weight一般為5,2,1;critical不要超出時鐘週期的10%。

        检查tcl脚本语法错误:

dcprocheck  ../filename.tcl

        查看库名称:

list_libs

        查看工艺库:

report_lib library_name

        禁止DC将设计打散(compile命令默认是允许):

        若要禁用子设计上的自动取消打散,在编译前执行:

set_ungroup  <reference or cells>  false

        若要禁用顶层设计上的自动取消打散,在编译前执行:

set_app_var  compile_ultra_ungroup_de false

        完全禁用自动取消打散,执行:

compile_ultra -no_autoungroup

        综合成带MUX的寄存器来模拟DFT时的情况,但实际并未形成寄存器链 :

compile     -map_effort hign    -area_effort    high    -scan 

        对流水线寄存器做优化:

set_optimize_registers  ture
compile_ultra ……

        多端口连线,是指综合完之后的网表有可能会出现一个net连接多个输出等状况,网表代码中就会出现“assign”这样的赋值,需要在这些直连的线当中插入buffer来避免:

set_fix_multiple_port_nets  -all    -buffer_constants

        把“tri”变“wire”再写入网表:

compile ……

set_app_var  verilogout_no_tri  ture
write  -f  verilog  -out  <netlist_name>

        把“\bus[N]”还原成“bus[N:0]”再写入网表:

compile ……

change_names    -rules  verilog  -hier
write  -f  verilog  -out  <netlist_name>

        多核综合(没看懂是干啥的):

# 先看看有几个核
report_host_options 
# 多核综合(假如有五个核)
set_host_options    -max_core 5
compile_ultra ……

        告辞