dbGet是Innovus/Encounter DBTCL命令的一种。除了dbGet,DBTCL的命令还包括以下几种:

1. dbSet

2. setDbGetMode/getDbGetMode

3. dbSchema

4. dbTransform

5. dbQuery

这其中,最常用的就是dbGet和dbSchema

当我们在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——top和head

 

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


dbGet的更多相关文章

  1. dbGet (二)

    dbGet是由它基本的语法加上各种object的attribute的组合构成的.大家在熟悉基本语法之后,就应该去学习各个object的attribute了.说实话,这很难,因为attribute很多, ...

  2. dbGet net trace instant pin

    proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...

  3. dbGet(三)

    inst flat design下的instance Parent Object group, hInst, instTerm, io, pBlkg, ptn, rBlkg, sdp, topCell ...

  4. dbGet(二.一)hinst

    hinst hierarchical insts Parent Object bndry,group,hInstTerm,hTerm, inst,ptn,topCell,vCell Child Obj ...

  5. Asterisk manager API(AMI)文档(中文版)

    Asterisk控制接口(AMI)允许管理客户端程序连接到一个asterisk实例并且可以通过TCP/IP流发送命令或读取事件.这在试图跟踪asterisk的状态或其中的电话客户端状态时很有用,AMI ...

  6. TP框架常用(一)

    25.显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确 echo $this->db->last_query();//如:select * from pt_ ...

  7. 用Qt Creator 对 leveldb 进行简单的读写

    #include <iostream> #include <string> #include <leveldb/db.h> #include <boost/l ...

  8. PHP数据库操作:使用ORM

    之前我发了一篇博文PHP数据库操作:从MySQL原生API到PDO,向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的.本文介绍如 ...

  9. LevelDB库简介

    LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...

随机推荐

  1. 题解【洛谷P5767】[NOI1997]最优乘车

    题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...

  2. 2级搭建类202-Oracle 18c SI ASM 静默搭建(OEL7.7)公开

    Oracle 18c 单实例 ASM UDEV 方式在 OEL 7.7 上的安装

  3. Java连载85-集合的Contains和Remove方法

    一.包含与删除两种方法解析 1.boolean contains(Object o);判断集合中是否包含某个元素. package com.bjpowernode.java_learning; imp ...

  4. POJ3723(最小生成树,负权)

    题目描述 温迪有一个国家,他想建立一支军队来保护他的国家.他收留了N个女孩和M个男孩,想把她们收留成他的士兵.征兵无特权,必须交纳一万元.女孩和男孩之间有一些关系,温迪可以利用这些关系来降低他的成本. ...

  5. linux-mysql-主从同步

    什么是二进制日志binlog:记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!二进制日志有哪些功能:数据复制和数据恢复的功能 查看网络状态:netstat -natp查看mas ...

  6. 专项:Vuejs面试题集合

    参考网络资源:https://segmentfault.com/a/1190000012315822 1.active-class是哪个组件的属性? 答:active-class是vue-router ...

  7. springboot项目集成activity

    1.按照上一篇博客,新建好springboot项目后,在项目pom.xml文件中添加activity依赖 <dependency> <groupId>org.activiti& ...

  8. Linux常用命令: zip、unzip 压缩和解压缩命令

    zip基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] 常用参数: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源 ...

  9. 互联网的“ip分组交换技术”

    (1)从名字分析 从“ip分组交换”这个名字中,我们看看涉及哪些事情. 1)交换 主要涉及两类交换. · 交换机:负责网内部数据交换 · 路由器:负责网间的数据交换. ip分组交换技术的核心就是路由器 ...

  10. 2019-08-09 纪中NOIP模拟B组

    T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷. 每条木板被分为M个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一 ...