dc_shell(tcl)中集合(collection)(显示_selxx问题),数组(array),列表(list)的区别及操作

目录

1.集合(collection)

1.1 打印集合中所有元素

 2.数组(array)

3.列表(list)


首先集合的操作和数组以及列表是不一样的,集合无法直接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语言笔记:TCL中的数组_weixin_30649641的博客-CSDN博客一、介绍Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念。数组的存取速度要比列表有优势,数组在内部使用散列表来存储,每个元素存取开销几乎相同,而列表的存取数据花非时间与其长度成正比。二、数组的定义与格式数组索引是由圆括号()来指定的,每个数组元素变量名的格式是“数组名(索引值)”。数组元素...https://blog.csdn.net/weixin_30649641/article/details/99855589?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-99855589-blog-79995805.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-99855589-blog-79995805.pc_relevant_default&utm_relevant_index=2数组可以使用foreach遍历

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遍历列表

tcl脚本学习十三:列表命令集 - 用不着为这点小事烦恼 - 博客园lesson 13 : 列表命令集 list arg1 arg2 ... 创建一个列表lindex list index 返回列表 list 中的第 index 个元素(element)值llengticon-default.png?t=N7T8https://www.cnblogs.com/gold-life/p/5738224.html

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值