zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    c++ STL
    unix network programming(3rd)Vol.1 [第1章]《读书笔记系列》
    [面试题] BloomFilter 无序40亿不重复 uint 整数, 给予任意的数,求是否在这40亿之中 + 无序数组中找2个相同的值
    stm32 DAC输出音频
    Go语言项目的错误和异常管理 via 达达
    值传递
    FireFox、chrome通过插件使用IE内核,IE Tab v2
    linux cross toolsChain 交叉编译 ARM(转)
    rfc all download
    VS2005 工程在win7下使用管理员权限运行
  • 原文地址:https://www.cnblogs.com/lelin/p/11154689.html
Copyright © 2011-2022 走看看