dbGet是innovus/encounter工具自带的"database access command"命令中的一部分,它几乎可以用来获取设计相关的一切信息。
输入dbGet 按[Tab]键,能看到三个选项,分别是head / top /selected。这三个选项所代表的意义如下:
head --- 工艺信息,读入的库的信息
top --- 设计相关的 inst cell net fplan等等
selected --- 获取选中的object的属性
以dbGet selected为例,选中一个instance后,输入dbGet selected [Tab]后出现instance相关所有的属性名称。
如果这时候敲[Enter],就会输出一串字符。
innovus > dbGet selected
9x7f763d0f2770
这串字符我们叫它指针,它所代表的就是dbGet selected选中的instance。所以dbGet selected能执行的操作这段字符串都能执行,就比如报告选中instance名字的操作。
innovus > dbGet 0x7f763d0f2770.name
clk48M0div_reg
新手入门最大的疑惑是不知道如“name”一般每个属性所代表的意义,那么我就从这方面入手。
获取这些属性的详细说明可以使用dbGet selected.?h
如果想展示选中instance所有这些属性的信息可以使用dbGet selected.??
有没有更直观的方式,就像是“Q”一下看属性,当然有,快捷键"V",打开DB Browser,跟dbGet selected.??展示的内容一样,只不过更赏心悦目些。
讲到这里dbGet selected你是不是就会用了呢?接下来就去看看进阶用法。dbGet有很多option,具体都是干嘛的,怎么用,做个简单介绍。
innovus > dbGet -d -e -i -p -p0 -p1 -p2 -p3 --p4 -p5 -p6 -regexp -u -v
按顺序来讲:
-d 的意思是返回database整数,而一般我们用的是浮点数,database整数可以参考DEF里的单位去输出。
innovus > dbGet selected.box
{3.0 7.2 10.0 8.4}
innovus > dbGet selected.box -d
{3000 7200 10000 8400}
-e 的意思是输出为空指针时不显示0x0,而是空字符串。
innovus > dbGet selected.rHaloTopLayer
0x0
innovus > dbGet selected.rHaloTopLayer -e
innovus >
-i 是仅输出第几个结果,从0开始,也就是第一个结果对应-i 0
innovus > dbGet selected.instTerms.name
clk480Mdiv_reg/CK clk480Mdiv_reg/D clk480Mdiv_ reg/Q clk48Mdiv_ reg/R
innovus > dbGet selected.instTerms.name -i 0
clk480Mdiv_reg/CK
-p ... -p9,-p是最常用的option,-p和-p0 -p1是一个东西,-p x它代表从后往前推第x个选项,与-p搭配使用的pattern也是必须的。
举例来说,dbGet selected.inst terms.name clk480Mdiv_reg/CK,这里clk480Mdiv_reg/CK就是pattern。
dbGet selected.instTerms.name clk480Mdiv_reg/CK -p
输出的结果就是dbGet selected.instTerms中对应clk480Mdiv_reg/CK的指针,-p2就是倒数第二个选项,dbGet selected.instTerms.name clk480Mdiv_reg/CK -p2对应的就是dbGet selected。
innovus > dbGet selected.instTerms
0x7f763d76e960 0x7f763d76e990 0x7f763d76e9c0 0x7f763d76e9f0
innovus > dbGet selected.instTerms.name clk480M_13div_reg/CK -p
0x7f763d76e960
innovus > dbGet selected.instTerms.name clk480Mdiv_ reg/CK -p2
0x7f763d0f2770
innovus > dbGet selected
0x7f763d0f2770
-regexp是正则表达式的意思,dbGet支持用正则表达式筛选结果。
举例来说,要抓取instTerm中的CK PIN可以用如下命令。
dbGet selected.instTerm.name -regexp {CK}
-u是去重的意思,结果中重复性的内容被过滤掉
innovus 64> dbGet [ dbGet selected .instTerms].inst.name
clk480Mdiv_reg clk480Mdiv_reg clk480Mdiv_reg clk480Mdiv_reg
innovus 65> dbGet [ dbGet selected. instTerms].inst.name -u
clk48mdiv_reg
-v是取反的意思,如下例子,这个选中的instance一共四个pin,当用regexp筛选CK pin后只获得CK pin,加上-v取反后就返回的值就是除CK pin以外的其他三个pin
innovus > dbGet selected.instTerms.name- regexp CK
clk480Mdiv_reg/CK
innovus > dbGet selected.instTerms.name -regexp CK -v
clk480Mdiv_ reg/D clk480Mdiv_ reg/Q clk480Mdiv_ reg/R