Tcl在EDA工具中的扩展与应用
综合软件当中TCL的常见指令
1.获取端口信息
语法格式: get_ports portsName
指令功能:返回design中对应的ports object
1.如何查看design当中有没有一个port叫做CLK?
命令 get_ports CLK
{CLK}
2.我们想查看design当中所有的port (*可以通配任何字符)
Shell>2. get_ports *
{A B C D CLK OUT[0] OUT[1]}
3.假设我们有port名字叫 {CLKA CLKB OUTA OUTB INA INB}
如果我们想得到所有C开头的port 怎么做?
命令 get_ports C*
{CLKA CLKB}
2.获取单元信息
语法格式: get_cells cellsName
指令功能:返回设计中对应的cell的instance name object(指的是例化名字)
回顾几个概念:
什么是reference name(ref_name)?
{ENCODER INV REGFILE}
什么是instance name?
{U1 U2 U3 U4}
1.我们想查看design当中有没有一个cell叫做U4?
Shell> get_cells U4
{U4}
2.我们想查看design当中以3为结尾的cells
Shell> get_cells *3
{U3}
3.获取网表信息
语法格式: get_nets netsName
指令功能:返回design中net的object
查看design当中有没有一个net以INV开头?
命令 get_nets INV*
{INV0 INV1}
我们想查看design当中所有的nets
命令 get_nets *
{A B C D CLK BUS0 BUS1 INV0 INV1 OUT[0] OUT[1]}
我们想查看design当中有多少个net?
Shell> llength [get_object_name [get_nets *]]
11
Shell> sizeof_collection [get_nets *]
11
注意两条指令的区别噢!
3.获取引脚信息
语法格式:get_pins pinsName
指令功能:返回design中pin的object
查看design当中有哪些pin的名字叫做Z?
Shell> get_pins */Z (/之前的*代表它属于哪个单元的pin)
{INV0/Z INV1/Z}
查看design当中有哪些pin的名字以Q开头?
Shell> get_pins */Q*
{ENCODER/Q0 ENCODER/Q1 REGFILE/Q[1] REGFILE/Q[0]}
4.常见属性
任何一个属性都可以用get_attribute得到,
list_attribute –class * 可以得到所有object 的属性,
部分属性可以用set_attribute来设置。
(1)Cell object
属性 ref_name : 用来保存其map到的reference cell名称
Shell> get_attribute [get_cells –h U3] ref_name
{INV}
(2)Pin object
属性 owner_net : 用来保存与之相连的net的名称
Shell> get_attribute [get_pins U2/A] owner_net
{BUS0}
(3)Port object
属性 direction : 用来保存port 的方向
Shell> get_attribute [get_ports A] direction
{in}
Shell> get_attribute [get_ports OUT[1]] direction
{out}
(4)Net object
属性 full_name : 用来保存net的名称
Shell> get_attribute [get_nets INV0] full_name
{INV0}
Shell> get_object_name [get_nets INV0]
{INV0}
(5)get_* -f
-f 这个option可以用来过滤属性,以得到我们想要的object
例子-1:
想得到所有方向是input的port
Shell> get_ports * –f “direction==in”
{A B C D CLK}
例子-2:
想得到所有方向是output的pin
Shell>get_pins * -f “direction ==out”
{U1/Q0 U1/Q1 U2/Z U3/Z REGFILE/Q[0] REGFILE/Q[1]}
例子-3:
想得到所有ref_name 是INV的 cell
Shell>get_cells * -f “ref_name == INV”
{U2 U3}
(6)get_* [object]-of
-of 这个option可以用来得到与你指定object相连接的object
object的连接关系:
--port object <-> net object
>get_nets –of [get_port A]
A
--net object <-> port object / pin object
> get_net –of [get_pin U2/A]
BUS0
--pin object <-> net object
> get_pin -of [get_net INV1]
U3/Z
--cell object <-> pin object
>get_pins –of [get_cell U4]
{U4/D0 U4/D1 REGFILE/Q1 REGFILE/Q2}
以上内容均来自哔站的邸老师