dbGet


dbGet是Innovus/Encounter DBTCL命令的一種。除了dbGet,DBTCL的命令還包括以下幾種:

1. dbSet

2. setDbGetMode/getDbGetMode

3. dbSchema

4. dbTransform

5. dbQuery

這其中,最常用的就是dbGetdbSchema

 

當我們在Innovus中敲擊dbGet以后,然后按<Tab>鍵,出現的是下面3個初始的object.

 

[DEV]innovus 2> dbGet

head  selected  top

 

其實,dbGet是基於一種樹狀的結構圖,如下圖所示。head是最原始的parent,然后我們需要尋找的object就藏在這每一個一級一級的分支下。selected和top其實也屬於head的一個分支,只不過它們比較常用,所以就單獨列出作為一個原始分支。我數了下,現在各種object一共加起來有64個,我們需要做的就是找准路線,一擊必中,把“指針”找出來。

我們首先來看最簡單的selected分支,當你選中一個object,然后敲擊下面命令:

[DEV]innovus 4> dbGet selected

0x2b3753cae120

 ox開頭的是選中objectt的指針 不是亂碼

如果你沒選中任何東西,敲擊這個命令:

[DEV]innovus 5> dbGet selected

0x0

這個0x0代表返回0,也就是工具找不到結果

 

那如何知道選中的這個object有什么屬性呢?Innovus/Encounter中通過"."來trace下一級。敲上“.”以后,按<Tab>鍵

[DEV]innovus 6> dbGet selected.

 

 

 

(太長了,我不一一列出來了)

 

或者使用下面“.”加一個問號,這兩者應該是相同功能,但前者排列的更清楚

[DEV]innovus 7> dbGet selected.?

 

 

 

大家可以看到,選中的object下面有很多屬性可以得到,每個屬性下面又有很多子屬性。比如,我們想知道選中的object的名字,可以使用下面命令

[DEV]innovus 8> dbGet selected.name

SUB_Sh4Lmi_PH/f4h22Tc3000a_0

 

 

如果我們想知道一次每個屬性的值,可以使用下面命令:兩個問號

[DEV]innovus 9> dbGet selected.??

它會把這個object下面的所有屬性值都列出來,但有時候你可能不知道一些屬性值代表的意思,比如說box_sizex和box_llx有什么區別呢?我們的Innovus/Encounter提供了解釋這些屬性的功能,敲擊下面命令:問號后面跟一個h

[DEV]innovus 11> dbGet selected.?h

 

當然dbGet也支持同時對多個object操作

[DEV]innovus 12> dbGet selected.

0x2b37527dd230 0x2b37575c02d0 0x2b3753cae120

 

那我們如何trace到當前object的下層屬性呢?

其實很簡單,只要敲“.”加上它的下一層屬性即可

[DEV]innovus 14> dbGet selected.cell.name

sf230 sf240 f4h22Tc

那selected是最簡單的屬性,適合剛開始使用dbGet的新人學習,它的不方便之處在於你必須去選中這個object。而我們很多時候用dbGet,是為了搜索某樣東西,我們並不知道怎么去選中它。這時候你就要用到另外兩個object——tophead

 

top指的是當前design中object

head指的是整個design database中的object

 

這兩個object很好地展現了樹狀結構的描繪。我們來看一個最簡單的例子:

[DEV]innovus 15> dbGet top.insts.cell.name

AND2 OR2 INV1 AND2 …

 

上訴dbGet命令會返回design中所有cell的name。其中,

top代表top cell的指針

insts代表top cell下面所有insts的指針

cell代表每個inst對應的master cell的指針

name代表master cell的名字

 

那前面提到的如何在design中去搜索某個object呢?在后面跟你想要的cell名字就行,簡單吧,經常用來過濾篩選結果

[DEV]innovus 16> dbget top.insts.cell.name BFHVTX4

BFHVTX4 BFHVTX4 BFHVTX4...

 

最基本的用法就是如此,一級一級trace下去,關鍵的難點在於熟悉理解64個object屬性的意思.

 

dbGet的用法就像Tcl一樣,是很靈活多變的,體現在它這個命令本身具有很多option

dbGet 
[-p num ] 
[-u] 
[-regexp] 
[-d] 
{ obj | objList | head | top | selected} 
[. objType ]…[. attrName | .? | .?? | .?h]   
[ pattern ] 
[expression] 
[-v] 
[-e] 
[-i] 

 

-p是我們經常用到的option。p指point,有時我們使用dbGet篩選得到我們所想要的結果。但更多時候,這些結果會被用來做另一個層級的dbGet指令。這時候就要用到-p,來返回指針。

[DEV]innovus 42> dbget top.insts.cell.name BFHVTX4 -p

0x2afa58513390

 

-p還可以跟不同的數字-p2,-p3...分別代表着倒數多少個object的屬性。

 

如下圖所示,該命令返回了design中所有在M1上的insts pin layer。

如果用-p, 返回的就是所有M3 layer的指針:

[DEV]innovus 56> dbGet -p top.insts.instTerms.layer.name M3

0x2afa583dc000 0x2afa583dc000 ...

 

-p2的話,返回的就是所有在M3上的insts pin的指針;

[DEV]innovus 57> dbGet -p2 top.nets.instTerms.layer.name M3

0x2afacc5fa118 0x2afacc48ee38 ...

 

-p3的話,返回的就是所有在M3上的insts pin上接的insts的指針;

[DEV]innovus 58> dbGet -p3 top.nets.instTerms.layer.name M3

0x2afacc3e6be8 0x2afacc3e6be8...

 

如果我們想要知道所有在M3上的insts pin的名字:

[DEV]innovus 59> dbGet [dbGet -p2 top.insts.instTerms.layer.name M3].name

SUB_PH/buf_input_datax2x/A REPEATER_datax2x/Z...

 

-u

這個option比較簡單,就是對結果進行排序,只取不重復的值,比如:

[DEV]innovus 60> dbGet top.nets.instTerms.layer.name M1

M1 M1 M1 M1 M1 M1...

[DEV]innovus 60> dbGet top.nets.instTerms.layer.name M1 -u

M1

 

-regexp

dbGet也支持正則表達式匹配,類似tcl那樣,

比如:找到design中所有以d結尾的net名字

[DEV]innovus 65> dbGet -regexp top.nets.name {d$} 

SUB_Sh/output_crypto_sh4_valid SUB_PH/inst_0/clk_gated

 

找到design中所有以數字結尾的net名字

[DEV]innovus 65> dbGet -regexp top.nets.name {\d$}

FE_OFN166_tst_all_92 FE_OFN155_bscnet_192

 

 

-d

dbGet的結果采用db的單位,而不是我們正常的location單位。這個option沒什么大用,大概是用來和DEF文件單位匹配吧

[DEV]innovus 67> dbGet top.nets.box

{5409.615 8429.245 5409.615 8429.245}

[DEV]innovus 68> dbGet top.nets.box -d

{5409615 8429245 5409615 8429245}

 

 

pattern

dbGet支持通配符的匹配,這會非常方便。比如說我們想在design中尋找中間有clk字樣的net,采用如下命令:

[DEV]innovus 69> dbget top.nets.name *clk*

FE_OFN5372_rng_clk_mon FE_OFN49_pad_muclk_en...

 

expression

我們也可以通過判斷條件來篩選結果,使用{條件}

比如:找到design library中所有input < 10, PGTerm > 2的cell

[DEV]innovus 85> dbGet [dbGet head.allCells {.numInputs < 10 && .numPGTerms > 2 }].name

BD4_2V5_LIN BD2S_2V5_STAG BD2S_2V5_LIN

 

-v 取反

v就是大家常見的取反

[DEV]innovus 85>dbGet top.nets.instTerms.layer.name M1 -v

M2 M3 M4...

 

-e

這個option就是當design中找不到結果時,返回空字符,而不是0x0

[DEV]innovus 90> dbGet top.nets.instTerms.layer.name M9 -e

[DEV]innovus 91> dbGet top.nets.instTerms.layer.name M9

0x0

 

 

-i num

這個option可以只列出第num個結果,第一個結果以0開頭
[DEV]innovus 97> dbGet [dbGet head.allCells {.numInputs < 10 && .numPGTerms > 2 }].name

BD4_2V5_LIN BD2S_2V5_STAG BD2S_2V5_LIN

[DEV]innovus 97> dbGet [dbGet head.allCells {.numInputs < 10 && .numPGTerms > 2 }].name -i 0

BD4_2V5_LIN

 

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM