TCL在EDA工具中的拓展與應(yīng)用
通過對Design Object的分析,了解和學(xué)習(xí)DC獲取電路并進(jìn)行解析的方法

常見指令
get_ports
語法格式:get_ports portsName
指令功能:返回design中對應(yīng)的port object
如何查看deign當(dāng)中有沒有一個叫做CLK的port?
get_portsCLK{CLK}
如何查看deign當(dāng)中有沒有一個port叫做SPI?
get_ports SPI
No object Found!
查看design當(dāng)中所有的port(*可以統(tǒng)配任何字符)
get_port *
{A B C D CLK OUT[0] OUT[1]}
假設(shè)port名字交{CLKA CLKB OUTA OUT B INA INB},如何得到所有C開頭的port?
get_ports C*
{CLKA CLKB}
get_cells
語法格式:get_cells cellsName
指令功能:返回design中對應(yīng)的cell的instance name object

查看是否有一個叫U4的cell
get_cells U4
{U4}
查看所有cell
get_cells *
{U1 U2 U3 U4}
查看以3結(jié)尾的cells
get_cells *3
{U3}

get_nets
語法格式 :get_nets netsName
指令功能:返回design中net的object
查看INV開頭的net
get_nets? INV*
{INV0 INV1}
查看所有net
get_nets *
{A B C D CLK BUS0 BUS1 INV0 INV1 OUT[0 OUT[1]]}
查看有多少個net
llength [get_object_name [get_nets *]]
sizeof_collection [get_nets *]

get_pins
語法格式:get_pin pinsName
指令功能:返回design中pin的object
查看叫Z的pin
get_pins */Z
{INV0/Z INV1/Z}
查看Q開頭的pin
get_pins */Q*
{ENCODER/Q0 ENCODER/Q1 REGFILE/Q[1] REGFILE/Q[0]}
數(shù)據(jù)類型
數(shù)據(jù)類型:”object(對象)“及其“屬性”
說明:
object使tcl的一個重要拓展
常見對象有四種cell、net、port、pin
每種object有他的屬性
任何一個屬性都可以用get_attribute得到
list_attribute -class *可以得到object的屬性
部分屬性可以用set_attribute來設(shè)置
Cell object
屬性ref_name:用來保存器map到reference cell名稱
get_attribute[get_cell -h U3] ref_name
{INV}

Pin object
屬性owner_net:用來保存與之相連的net的名稱
get_attribute [get_pins U2/A] owner_net
{BUS0}
Port object
屬性direction:用來保存port方向
get_attribute [get_ports A] direction
{in}
get_attribute [get_ports OUT[1]] direction
{out}
Net object
屬性 full_name:用來保存net的名稱
get_attribute [gets_nets INV0]
{INV0}
get_object_name [get_nets INV0]
{INV0}
get_attribute INV0 full_name
Error:No attribute found
理解屬性以后,就可以完成更多的任務(wù):
get_* -f:-f這個option可以用來過濾屬性,以得到我們想要的object
得到所有方向是input的port
get_ports * -f "direction==in"
{A B C D CLK}
得到所有方向是output的pin
get_pins * -f "direction==out"
{U1/Q0 U1/Q1 U2/Z U3/Z REGFILE/Q[0] REGFIEL/Q[1]}
得到所有ref_name是INV的cell
get_cells * -f "ref_name==INV"
{U2 U3}