我们在做Place & Route时,会经常使用一些database的命令来查找和统计一些数据。这些命令很实用,但是不好记,使用起来有一定的技巧。本文给大家介绍一下这些Object的命令该如何使用。
我们可以通过命令get_*来寻找想要的Object。不同类型的object对应不同的get命令。使用help_attributes
或者get_defined_attributes-return_classes
可以列出所有可以get的object类型。
比如说:如何得到设计中所有名字中含有_clk的net名字
icc2_shell> get_nets *_clk*
{p_aps_clk_data0 p_aps_clk_data1 p_aps_clk_data2}
大部分object都支持创建,删除等操作
创建一个object: create_<object_class>
删除一个object: remove_<object_class >
get_*命令返回的是一个集合,我们称之为collection
icc2_shell> get_nets *clk*
{p_aps_clk_data0}
icc2_shell> puts [get_nets p_aps_clk_data0]
_sel902
很多命令直接支持collection作为对象,比如:
move_objects [collection] 移动指定的collection内的物体
flip_objects [collection] 翻转指定的collection内的物体
rotate_objects [collection] 旋转指定的collection内的物体
query_objects [collection] 咨询指定的collection内的物体
我们也可以对collection进行很多操作,比如:
append_to_collection 添加到一个collection中
remove_from_collection 从某个collection中删除具体一项
compare_collections 比较两个collection内容是否一样
copy_collection 复制一个新的collection
filter_collection 过滤某个collection
sizeof_collection 统计某个collection内的数量
当我们想抓取和某个collection相关的objects时,可以采用-of_objects的选项,如:
抓取net p_aps_clk所连接的pins,可以采用以下命令
icc2_shell> get_pins -of_objects [get_nets p_aps_clk]
{CLK_181}
当object带上层次化关系以后,就会变得复杂起来。
get_cells 返回的是当前逻辑层级的instance 和module,包括standard cell filler
get_cells –hierarchical 返回的是所有层级的instance和module,包括standard cell filler
get_flat_cell 返回的是所有层级的instance,不包括module和standard cell filler
举例如下:
get_cells *mux*
clock_muxA instance
module_muxA module
get_cells –hierarchical *mux*
clock_muxA instance
module_muxA module
HIER1/ clock_muxB instance
HIER2/moduleA/clock_muxC module
get_flat_cells *mux*
clock_muxA instance
HIER1/ clock_muxB instance
get_<object>还支持区域范围内查询object,参照下图
get_cells –at {10, 10} 查询{10 10}这个坐标上的object
{A4}
get_cells –within {{0 0} {10 10}} 查询{0 0} {10 10}这个坐标范围内的object,该object必须完全在范围以内,不包括边沿
{A3}
get_cells –touching {{0 0} {10 10}} 查询{0 0} {10 10}这个坐标范围内的object,该object必须完全在范围以内,包括边沿
{A2 A3}
get_cells –intersect {{0 0} {10 10}} 查询接触{0 0} {10 10}这个边框范围的object
{A1 A2 A4 A6}
Attribute
每个object都有他相关的attributes,比如cell有full_name,area, boundary等,采用命令
list_attributes –application –class cell
可以列出全部attribute
如果我们不知道这些具体attribute具体是什么意思,那我们可以man来查询
如果我们想要得到具体某个attribute的值,可以采用get_attribute来实现:
get_attribute object_list attribute_name
举例:
get_attribute [get_cells InstA] physical_status
placed
同样的,如果想要修改该object上的某个属性,可以采用set_attribute来实现:
set_attribute object_list attribute_name attribute_value
举例:
set_attribute [get_cells InstA] physical_status locked
如果想要把该object的所有属性报出来,可以采用
report_attributes –application [get_cells InstA]
或者可以采用
report_attributes –application [get_selection]
get_attribute还可以得到指定object的子集属性
如:得到cts_inv_4164该insts中所在库里面的电压基本单位
get_attribute [get_cells cts_inv_4164]ref_block.lib.voltage_unit
1.00V