dbGet
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的更多相关文章
- dbGet (二)
dbGet是由它基本的语法加上各种object的attribute的组合构成的.大家在熟悉基本语法之后,就应该去学习各个object的attribute了.说实话,这很难,因为attribute很多, ...
- dbGet net trace instant pin
proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...
- dbGet(三)
inst flat design下的instance Parent Object group, hInst, instTerm, io, pBlkg, ptn, rBlkg, sdp, topCell ...
- dbGet(二.一)hinst
hinst hierarchical insts Parent Object bndry,group,hInstTerm,hTerm, inst,ptn,topCell,vCell Child Obj ...
- Asterisk manager API(AMI)文档(中文版)
Asterisk控制接口(AMI)允许管理客户端程序连接到一个asterisk实例并且可以通过TCP/IP流发送命令或读取事件.这在试图跟踪asterisk的状态或其中的电话客户端状态时很有用,AMI ...
- TP框架常用(一)
25.显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确 echo $this->db->last_query();//如:select * from pt_ ...
- 用Qt Creator 对 leveldb 进行简单的读写
#include <iostream> #include <string> #include <leveldb/db.h> #include <boost/l ...
- PHP数据库操作:使用ORM
之前我发了一篇博文PHP数据库操作:从MySQL原生API到PDO,向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的.本文介绍如 ...
- LevelDB库简介
LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...
随机推荐
- 题解【洛谷P5767】[NOI1997]最优乘车
题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...
- 2级搭建类202-Oracle 18c SI ASM 静默搭建(OEL7.7)公开
Oracle 18c 单实例 ASM UDEV 方式在 OEL 7.7 上的安装
- Java连载85-集合的Contains和Remove方法
一.包含与删除两种方法解析 1.boolean contains(Object o);判断集合中是否包含某个元素. package com.bjpowernode.java_learning; imp ...
- POJ3723(最小生成树,负权)
题目描述 温迪有一个国家,他想建立一支军队来保护他的国家.他收留了N个女孩和M个男孩,想把她们收留成他的士兵.征兵无特权,必须交纳一万元.女孩和男孩之间有一些关系,温迪可以利用这些关系来降低他的成本. ...
- linux-mysql-主从同步
什么是二进制日志binlog:记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!二进制日志有哪些功能:数据复制和数据恢复的功能 查看网络状态:netstat -natp查看mas ...
- 专项:Vuejs面试题集合
参考网络资源:https://segmentfault.com/a/1190000012315822 1.active-class是哪个组件的属性? 答:active-class是vue-router ...
- springboot项目集成activity
1.按照上一篇博客,新建好springboot项目后,在项目pom.xml文件中添加activity依赖 <dependency> <groupId>org.activiti& ...
- Linux常用命令: zip、unzip 压缩和解压缩命令
zip基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] 常用参数: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源 ...
- 互联网的“ip分组交换技术”
(1)从名字分析 从“ip分组交换”这个名字中,我们看看涉及哪些事情. 1)交换 主要涉及两类交换. · 交换机:负责网内部数据交换 · 路由器:负责网间的数据交换. ip分组交换技术的核心就是路由器 ...
- 2019-08-09 纪中NOIP模拟B组
T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷. 每条木板被分为M个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一 ...