目录
首先集合的操作和数组以及列表是不一样的,集合无法直接echo显示,直接echo会输出_selxxx
集合无法像数组和列表一样使用foreach,而是使用foreach_in_collection来遍历。下面重点介绍集合的概念。
1.集合(collection)
一个collection是库,引脚,cells(单元)设计工程的集合,你可以用Synopsys命令来创建,查看,修改collection。在dc_shell中常有get_***,all_**产生,它的每一个元素里面包含很多属性。
举例如下:
dc_shell> set mem_collec get_cell *mem*
{a_mem_0 b_mem_1}
dc_shell> echo ${mem_collec}
_selxxx
dc_shell> query_objects [index_collection ${mem_collec} 0]
a_mem_0
虽然运行 get_cell命令显示{a_mem_0 b_mem_1},但直接echo ${mem_collec}的输出为_selxxx是得不到真正的元素。
实际上这两个元素都是包含很多属性的。假设a_mem_0的moduleName为xxx_256x64_wrap, b_mem_1的moduleName为xxx_128x32_wrap,则运行一下命令:
dc_shell> get_attr ${mem_collec} ref_name
{xxx_256x64_wrap xxx_128x32_wrap}
可以得到ref_name的值。
1.1 打印集合中所有元素
在dc_shell中 get_**,all_**命令得到的都是集合,运行这些命令的同时会显示集合元素的name,但是可能只显示一部分,而且元素name之间不换行,显示效果较差,使用下面的proc就可以按行打印所有元素的name
proc cop {collection} {
foreach_in_collection tmp ${collection} {
set full_name [get_attr ${tmp} full_name]
echo ${full_name}
}
}
cop [all_clocks]
#显示结果如下
clk_a
clk_b
clk_c
clk_d
对于集合的其他操作可参考以下文章:
tcl 集合的操作(Working With Collections)Tcl With Synopsys Tools 第四章中译_ocenic的博客-CSDN博客_tcl 集合
2.数组(array)
概念比较常见,这里不详细解释,参考文章:
Tcl数组遍历__荣耀之路_的博客-CSDN博客_tcl遍历数组数组遍历https://blog.csdn.net/asty9000/article/details/90607107
3.列表(list)
set gates [list AND OR NOT NAND NOR];
set gates [{AND} {OR} {NOT} {NAND} {NOR}];
set gates [split "AND.OR.NOT.NAND.NOR" "."];
以上三种方法都可以创建一个Tcl列表,从上例可以看出:
其中list为列表创建的关键词;
列表也可以使用foreach遍历列表