tcl 集合的操作(Working With Collections)Tcl With Synopsys Tools 第四章中译

本文为Tcl With Synopsys Tools 第四章中文翻译建议配合原文使用
原文档链接:
https://download.csdn.net/download/weixin_41464428/12321725

tcl collection的操作;

一个collection是库,引脚,cells(单元)设计工程的集合,你可以用Synopsys命令来创建,查看,修改collection,这一章将描述如何用Synopsys命令配合tcl命令操作collection;
note
你可以man pages 获得更多关于collection的信息;

创建collection

你可以使用Synopsys命令中的 get_ and all_ 命令来创建collection;
de_shell> get_ports

你可以创建一个collection,他可以是持续一个时期,或者仅在一条命令的范围内;如果你设置一个集合命令的结果是一个变量,那么这个collection会持续留存;
例如
dc_shell> set myports [get_ports]
当使用de_shell时,集合命令的结果是这个工程的collection #我在说些什么?

形式匹配

大多数创建集合的命令允许你使用一列表的形式,这个形式包涵下面的通配符;

  • 匹配任何次序字符串
    ? 匹配任何单个字符
    更多的字符约束请看链接;
展示一个collection中的对象

当在命令提示符下使用该命令时,所有创建集合的命令都会隐式查询该集合;但是,为了获得更大的灵活性,可以使用query_objects命令显示集合中的对象。
query_objects命令生成类似于report命令的输出;这个质问结果会以list的形式输出,你可以直接利用这些结果;
例如展示所有以in为开头的port,输入以下命令:
dc_shell> query_objects [get_ports in*]
{in0 in1 in2}

query_objects命令也允许直接搜索设计数据库,比如,接下来的这条命令会返回与上一条命令相同的信息,
dc_shell>query_objects -class port in*
{in0 in1 in2}

为了控制展示要素的个数,使用-truncate(截短)选项;如果显示内容被截短了,你会看到省略号在要素的后面,如果发生了默认的截短,会出现一条说明所展示要素个数的信息;
你可以改变默认截短,通过设置collection_result_display_limit的值;默认值是100;你可以通过man pages 获得更多关于collection_result_display_limit的信息;

从collection中选择对象

使用collection命令中的-filter选项,或者 filter_collection命令;去从collection中选择特定的object,两条命令都是通过使用过滤表达式来限定最终的collection;

使用 filter expression 过滤表达式

filter expression是一组逻辑表达式的集合;这些逻辑表达式用来描述你想放入collection中的约束;一个filter expression 会用relational operator关系运算符比较属性名(比如area或者direction)与其值(比如43或者inoput);

比如:下面的filter expression挑选了所有面积属性小于12个单位的hierarchical objects
“is_hierarchical==true && area <12”

表4-1 展示了你可以在filter expression中使用的关系表达式:
你可以联合关系表达式by 使用逻辑与(and or &&)或者逻辑或(OR or ||),你可以利用圆括号,将逻辑表达式分组,迫使他们顺序执行,否则就默认从左到右的顺序.

当将filter expression 当做命令的输入参数时,需要将整个filter expression用引号或花括号括起来;如果你在逻辑表达式中使用了字符型的参数,千万不要将他们用引号括起来;
比如;
“is_hierarchical == true && dont_touch == true”

一个filter expression会编译失败可能的原因有:
无效的语法
无效的属性名
来自属性和其值的错误匹配;

-filter选项的使用

许多创建collection的命令都支持-filter的选项,将一个filter expression当做命令的参数;例如,下面这条命令是获取拥有hierarchical属性的单元:
dc_shell set hc [get_cells -filter is_hierarchical == true]

filter_collection命令的使用

filter_collection命令以collection或则filter expression作为参数,其结果返回一个新的collection;如果没有符合标准的object 会返回一个空的字符串;
例如:
dc_shell> filter_collection [get_cells]
is_hierarchical == true

为collection添加object

用add_to_collection命令为collection添加objects,命令会创建新的collection包括新objects和原来的collection;加入新的object原始的collection并没有被修改.

比如;创建一个包含所有I开头的ports 的collection 将clock ports加到此collection种,输入以下命令:

dc_shell> xports [get_ports I*]
de_shell> add_to_collection $reports [get_ports CLOCK]

只有在他们拥有相同的object class时才可以进行add的操作,比如,你不能将ports collection添加到 cell collection中;

你可以创建包含collection handles的列表,这些handles 包含数个collection的参考,例如:
dc_shell> set a [get_ports P*]
{port0 port1}
dc_shell> set b [get_cells reg*]
{reg0 reg1}
dc_shell> set c “$a $b”
{port0 port1 reg0 reg1}

从一个collection中移除object

你可以使用,remove_from_collection命令从collection中移除object,和add_to_collection一样,同样是创建新的collection,不对原来的collection做修改;

例如:set cPorts [remove_from_collection [all inputs] clock]
{in1 in2}

你可以一次性删除一个list的object,#后面一句废话不想翻;

比较collection;

使用compare_collections 比较两个collection的内容;如果相同,命令返回0;否则返回非零值;
比如:
dc_shell> compare_collection [get_cells *] [get_cells *]

空的collection也可以用来比较,collection中objects 的次序是不影响比较的,你可以使用选项 -order_dependent来使比较对次序敏感;

iterating over a collection(遍历集合)

使用foreach_in_collection命令来遍历collection;这个命令可以嵌套到其他命令中;包含另一个foreach_in_collection;

在遍历时设置一个精确的目标,任何接收collection的命令,都接收遍历变量,记住不能用他直接遍历集合;
example4-1:foreach_in_collection

dc_shell> foreach_in_collection itr [get_cells*]
{if {[get_attribute $itr is_hierarchical]==“true”}
{remove_wire_load_model $itr}
Remove wire load model from cell ‘i1’
Remove wire lode model from cell ‘i2’

复制 collection

使用copy_collection命令复制一个集合,到一个新的collection中;原来的collection仍然是没有改变的,复制collection不同于将多个collection的reference放到相同的集合中;

例如:你创建了一个collection,然后将它的reference存在变量collection1中
然后我们将collection1的值赋给collection2,并创建第二个reference;

dc_shell> set collection1 [get_cells “U1*”]
{U10 U11 U12}
dc_shell> set collection2 $collection1
{U10 U11 U12}
dc_shell> printvar collection1
collection1 ="_sel2"
dc_shell> printvar collection2
collection2 ="_sel2"

note:printvar输出显示相同的collection handle作为两个变量的值; collection handle是在使用collection命令生成的;collection handle指向collection,用于后续访问集合对象.之前的命令并没有创建新的collection,只有copy_collection命令会创建新的collection是原来collection的复制;

下面的命令展示了copy_collection的结果
dc_shell> set collection1 [get_cells “U1*”]
{U10 U10 U12}
dc_shell> printvar collection1
collection1 = “_sel4”

dc_shell> set collection2 [copy_collection $collection1]
{U10 U10 U12}
dc_shell> printvar collection2
collection2 = “_sel5”

dc_shell>compare_collections &collection1 &collection2
0

从集合中提取对象

index_collection 命令创建一个对象的集合,该对象是另一个集合中的第n个对象。集合中的对象是数字0到n-1;

dc_shell> set c1 [get_cells {u1 u2}]
{u1 u2}
dc_shell> query_objects [index_collection $c1 0]
{u1}

  • 10
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺脆兵兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值