等不到那人,回不到人间——dbGet(四)

640?wx_fmt=gif

通过前面三讲,相信大家已经熟悉dbGet的用法了吧。那下面给大家介绍几个具体的例子,希望通过这些例子,能进一步加深大家对dbGet的印象。亲们,可以打开一个hierarchical的design,边看边练~~

1

如何用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

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

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

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

5. 如何得到一个instance所在的power domain名字?

> dbget [dbget top.insts.name PSO_177_1634_549-p].pd.name

DSP1_PD


好像例子蛮难举的,想了半天也就想了5个。其实也不难,只要把抓东西的先后顺序搞清楚,然后再一步一步嵌套下去,就能得到想要的东西了。主要还是多练多用,平时尽量不要用Find Form,重复超过3遍的东西,就一定要说服自己写脚本完成。看似会降低工作速度,其实等你熟练了以后,你就比别人又多了一项技能。


640?wx_fmt=jpeg

往期回顾

简历请戳邮箱:taozhang3260@163.com

觉得有用的话,给我点个好看吧640?wx_fmt=gif

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值