赞
踩
通过前面三讲,相信大家已经熟悉dbGet的用法了吧。那下面给大家介绍几个具体的例子,希望通过这些例子,能进一步加深大家对dbGet的印象。亲们,可以打开一个hierarchical的design,边看边练~~
如何用dbGet命令在design中寻找到一个inst的前后一级instance?
这个其实用timing tcl的命令<add_fanin><all_fanout>很简单就能得到,但是大家知道怎么用dbGet来实现这个功能吗?
假设我们需要得到名字为FE_OFC5681_bex1x这个inst的前后级instance,还是要从这个instance入手,但是前级和后级需要用不同的操作方法。首先我们来看如何去得到前一级instance?
思路是:
(1)找到instance的指针
(2)找到instance的input pin指针,因为前级instance连在input pin上
(3)找到该input pin连接的net
(4)找到该net的另一个term,就是output端
(5)找到该term对应的instance,就是需要找的前级instance
实际操作:
> dbGet top.insts.name FE_OFC5681_bex1x -p
0x2b228c192050 得到该instance的指针
> dbGet 0x2b228c192050.instTerms.isInput 1 -p
0x2b229bba0050 得到instance的input pin指针
> dbGet 0x2b229bba0050.net.name
central_s02_targ_bex1x 得到input pin连接的net
> dbGet 0x2b229bba0050.net.name central_s02_targ_bex1x -p
0x2b229bded5d0 得到input pin连接的net的指针
> dbGet 0x2b229bded5d0.instTerms.isOutput 1 -p
0x2b22d1f258c0 得到该net的另一个term,即output端
> dbGet 0x2b22d1f258c0.inst.name
s02_targ_bex1x 得到前级instance的名字
当然实际写的时候完全不用这样分开写,可以简单点写成一句命令,这样也方便于写脚本
> dbGet [dbGet [dbGet [dbGet top.insts.name -p FE_OFC5681_bex1x].instTerms.isInput 1 -p].net.instTerms.isOutput 1 -p].inst.name
s02_targ_bex1x
得到后一级instance方式一样,只是把isInput和isOutput的顺序对换一下,如下所示:
> dbGet [dbGet [dbGet [dbGet top.insts.name -p FE_OFC5681_bex1x].instTerms.isOutput 1 -p].net.instTerms.isInput 1 -p].inst.name
input_stbus_wrap_bex1x
2.如何得到设计中含有超过5个input以上的非clock net?
这个比较简单了,我们使用条件匹配就可以了。
> dbGet [dbGet top.nets {.isClock == 0 && .numInputTerms > 5}].name
FE_OFN5626_dvo_eth_pad_en FE_OFN5615_dvo_pad_en FE_OFN5614_dvo_pad_en FE_OFN5520_tst_scanmode
这里需要注意的是格式,nets后面需要空格。
3. 怎么得到设计中的dont use , dont touch cell?
这个也是比较有用的一个功能,虽然有直接的命令可以取得。但是dbGet也不是很复杂,来学一些吧
dont touch cell
> dbGet [dbGet top.insts.cell.isDontTouch 1 -p].name -u
CBUFLHVTX4 st230 f4h22Tc3000a sbatm_dpreg_32x64 secure_sp64kuhd_1024x64b1
dont use cell
> dbGet [dbGet top.insts.cell.isDontUse 1 -p].name -u
CLOCKTREE CBUFLHVTX4 st230 f4h22Tc3000a sbatm_dpreg_32x64
4. 找到设计中状态是fixed的,cell名字是BFHVTX4的instance
同样的需要分几步来描述
(1)先找到cell是BFHVTX4的instance
(2)然后在找到状态是fixed的instance
(3)最后取得这些instance的名字
先找到cell是BFHVTX4的instance
> set a [dbGet top.insts.cell.name BFHVTX4 -p2]
0x2b228c18ee00 0x2b228c18ee70 0x2b228c18eee0 0x2b228c18ef50
找到状态是fixed的instance
> set b [dbGet $a.pstatus fixed -p]
0x2b228c18ee00 0x2b228c18ee70 0x2b228c18eee0 0x2b228c18ef50
取得这些instance的名字
> dbGet $b.name
aaa,bbb,ccc,ddd
也可以直接用一个命令搞定
> dbGet [dbGet [dbGet top.insts.cell.name BFHVTX4 -p2].pstatus fixed -p].name
5. 如何得到一个instance所在的power domain名字?
> dbget [dbget top.insts.name PSO_177_1634_549-p].pd.name
DSP1_PD
好像例子蛮难举的,想了半天也就想了5个。其实也不难,只要把抓东西的先后顺序搞清楚,然后再一步一步嵌套下去,就能得到想要的东西了。主要还是多练多用,平时尽量不要用Find Form,重复超过3遍的东西,就一定要说服自己写脚本完成。看似会降低工作速度,其实等你熟练了以后,你就比别人又多了一项技能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。