用DC难免会用到各种各样的TCL命令,对其有一个熟练的了解,可以在做综合的时候事半功倍
注意:DC的TCL是在标准TCL上定制的。所以会和标准TCL有一定的不同,比如:DC-TCL会有物集的概念
详细的DC-TCL信息可以查看synopsys的dc tool commands
1.获取整个设计所有的register数目
set reg_num 【all_register】 ;#all_register可以报出整个design的register 例化名
sizeof_collection $reg_num ;#sizeof_collection统计出当前集合下事物的数量
query_objects $reg_num ;#把register列表再罗列出来
2.design整个设计单元数目,面积信息
report_reference -nosplit ;# nosplit 不分行
3.用get_* 和all_*命令产生物集
如 get_ports clk*
set myclocks [all_clocks]
get_cells get_clocks get_designs get_libs get_nets get_pins get_ports
all_clcoks all_designs all_inputs all_outputs all_registers
4.从物集中去除或添加
#去除
set all_inputs_except_clk [remove_from_collection [all_inputs] [get_ports clk]];#从all_inputs里面去除clk
#添加
set ports [get_ports "a*"]
set ports [add_to_collection $ports [get_ports "b*"]] ;#把ports填充为a*和b*开始的ports
5.用filter_collection 或者get_cells -filter 在物集中找到需要的物体
值得注意的是:filter_collection 比 get_cells 用的命令更强大,前者可以实施在任意的物集命令前面,后面只适用在get_cells
get_cells "U*" -filter "ref_name == NAND2_X2M_A9TL40"
get_cells "sum*" -filter "ref_name == DFFRPQ_X4M_A9TL40"
filter_collection [get_cells "sum*"] "ref_name == DFFRPQ_X4M_A9TL40 "
filter_collection [all_registers "sum*"] "ref_name == DFFRPQ_X4M_A9TL40 "
6、如何获取某个design下指定cell的面积详情
foreach_in_collection bbb [get_cells {ip*}] {echo [get_attribute $bbb name] [get_attribute $bbb area] [get_attribute $bbb cell_footprint] [get_attribute $bbb cell_leakage_power]}
在指定cell集合里,找出指定refrence,并打印出来相关信息,这里用到了filter,和正则表达式来模糊匹配=~
7、dc只能报当前层次下的一些cell信息,如果需要切换到下面层次,需要设置下current_design,然后再报一些cell的信息
8、report_cell可以获取cell更详细的信息
9、list_designs
可以先list_designs,然后找到想看的design,再用current_design xxx去看里面的构成
10、list_instances -hierarchy -max_level 2