属性(attribute)是中后端流程中非常重要的概念。像port,pin,cell或是design,lib_cell之类的概念都可以算作object,而每个object都存在若干属性。以port为例,其输入输出方向in/out就是port的一项属性。
在design compiler中,可以用过list_attribute -applicaton来列出工具支持的所有attribute
如下图,可以简单看下port相关的属性。
port的attribute大概有700多个。
不同object对应的attribute是不同的,通过get_*可以获取object。如下图,列一下工具中包含哪些object:
与设计相关的,clock,design,reference(相当于instance),cell,pin,port,net;
与库相关的,lib,lib_cell,lib_pin。
我们可以通过report_attribute来看某个object有哪些有效的(active) attribute,并通过get_attribute来获取该attribute的数值(value)。
attribute的最主要用法是get_cells或get_pins时,对工具返回的collection进行过滤(filter)。filter的用法如下图,可以通过man filter_collection进一步查看。
不过有一些常用的属性并不在attribute list中,比如pin或port的direction。如下图。
而且比较有趣的是,get_port也可以抓hierarchy pin,但是attribute value和get_pin完全相反,使用时需要注意。
另一个常用的是design和instance的关联,找到某个design的instance或是返回某个instance的design。
其中,属性ref_name也不存在list_attribute中。