当前位置:   article > 正文

Innovus dbGet常用命令合集

innovus dbget

文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。

最近陆续收到不少小伙伴们的私信,提到初学者应该如何快速学习掌握dbGet的用法。对于习惯了S家的命令后,乍一看dbGet是不是觉得脑袋瓜都要炸了?的确是这样的,小编第一个项目刚用innovus的时候也有这种感觉。第一次用小编想要去get到一颗buffer都不会,好尴尬。这么丢脸的事情怎么要说出来呢。

其实刚开始不会,一点都不丢脸。如果一直持续不会下去,那才是真的丢脸。很多小伙伴经常私信,抱怨某些专题很难,学不会。每当看到这些信息,小编都会劝他们并抛出一句话。这句话是“世上无难事,只怕有心人”。

即便再难学的东西,看一遍不会,继续看第二遍,第二遍看不懂继续看第三遍,一直这样重复下去,小编不相信有搞不定的问题。在这个过程中可能大脑时不时会告诉自己这个太难了,太枯燥了,搞不定等等信息。所以只要你不被大脑发出的这些干扰信息所影响,你就一定能够成功(这个方法小编不轻易告诉别人的哦)。

所有成功的背后都意味着无数的汗水,没有人能够随随便便就优秀的,所有优秀的背后一定是蓄谋已久的。
吾爱IC社区已经为你们提供了让你足够优秀的基础条件,包括各种培训资料,各种技术干货,各类技术问答,EDA环境,甚至都提供了各种项目案例。所以只要你用心,假以时日想不牛都困难。
在这里插入图片描述

下面为innovus floorplanning的test case教学案例,需要的小伙伴们可以前往小编知识星球下载。

在这里插入图片描述

OK,今天小编将分享数字IC后端实现Innovus dbGet常用的命令。好好理解掌握每个命令的用法后,你也能够熟练应用了。Let’s Go!
列出设计中所有unplace的instance

  dbGet [dbGet -p top.insts.pStatus unplaced].name
  • 1

列出设计中所有place的instance

  dbGet [dbGet -p top.insts.pStatus placed].name
  • 1

列出设计中所有fix的instance

  dbGet [dbGet -p top.insts.pStatus fixed].name
  select_obj [dbGet top.insts.pstatus fixed -p]
  • 1
  • 2

那么,ICC/ICC2中如何get到所有fixed cell呢?

  get_cells -hierarchical -filter "is_fixed == true"
  • 1

列出block io端口terminal所用的layer

  dbGet top.terms.pins.allShapes.layer.name
  • 1

列出设计中的non default rules (NDR)

  dbGet head.rules.name
  report_routing_rules (ICC)
  • 1
  • 2

列出某条net的route rule

 dbGet [dbGet -p top.nets.name netName].rule.name
  • 1

有的时候我们对某些net设置一个special net rule后,想查看是否设成功了,可以通过这个命令来实现。对于很多net的情况,可以foreach循环来实现。

获得某个/选中instance的pStatus信息

 dbGet [dbGetInstByName instName].pStatus
 dbGet selected.pstatus
  • 1
  • 2

instance的pStatus有unplace,placed,fixed,cover,softfixed四种属性。在Innovus中如果cell有fix属性,那么这颗cell的边框会比较粗。典型的cell,比如有tapcell,endcap和寄存器等cell。

避免特定multibit寄存器被拆分(debanking)

  dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1
  • 1

避免特定multibit寄存器被合并(banking)

  dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1
  • 1

吾爱IC社区之前推送过低功耗设计实现中一些方法,其中有个专题就是讨论如何在DC综合和APR阶段利用Multibit Reg来做低功耗实现。Multibit reg通常有2bit,4bit,8bit等情况。具体使用哪种需要前期做好PPA评估再定方案。

选中出设计中的所有hard blockage

  select_obj [dbGet top.fplan.pBlkgs.type hard -p]
  • 1

获得方形routing blockage的坐标

  dbGet top.fplan.rBlkgs.shapes.rect
  • 1

获得多边形routing blockage的坐标

 dbGet top.fplan.rBlkgs.shapes.poly
  • 1

列出设计中用到的所有cell类型

 dbGet -u top.insts.cell.name
  • 1

获得 block/memory的placement halos大小 (block包括memory)

 dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloTop
 dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloBot
 dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloLeft
 dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloRight
  • 1
  • 2
  • 3
  • 4

获得 block routing halos大小和最低最高层

 dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloSideSize
 dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloBotLayer.name
 dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloTopLayer.name
  • 1
  • 2
  • 3

确认所有的1’b0和1‘b1都练到tie cell,而非直接连接到VSS和VDD

 dbGet top.insts.instTerms.isTieHi 1
 dbGet top.insts.instTerms.isTieLo 1
  • 1
  • 2

如果都有tie cell,那么命令执行后应该返回0X0。如果返回值是其他值,那么可以继续使用下面的命令找出需要加tie cell的instTerms。

 dbGet [dbGet -p top.insts.instTerms.isTieHi 1].name
 dbGet [dbGet -p top.insts.instTerms.isTieLo 1].name
  • 1
  • 2

get所有连接到tie cell的instTerm名字

 dbGet [dbGet -p [dbGet -p2 top.insts.cell.subClass coreTieLo].instTerms.net.allTerms.isInput 1].name
  • 1

更改net的route属性(比如从 FIXED 到ROUTED)

 dbSet [dbGet -p top.nets.name netName].wires.status route
  • 1

获得设计的状态

 dbGet top.statusIoPlaced
 dbGet top.statusPlaced
 dbGet top.statusClockSynthesized
 dbGet top.statusRouted
 dbGet top.statusRCExtracted
 dbGet top.statusPowerAnalyzed
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

列出某条net所用到的layer

 dbGet [dbGet -p top.nets.name netName].wires.layer.name
  • 1

fix某条net的shape

 dbSet [dbGet -p top.nets.name netName].wires.status fixed
  • 1

选中某条net的shielding net

       dbSelectObj [dbget [dbget -p [dbGet -p top.nets.name $net].shieldNets.name GND].sWires.shieldNet.name $net -p2]
  • 1

在PR实现中对于高速时钟信号,通常都需要加shielding来消除crosstalk。有的时候即便加了shielding net,pt中依然发现有若干ps的crosstalk,那么此时可以通过选中victim net的shielding vss net来进一步分析。

CRPR能补偿crosstalk吗?

get到特定cell name (ref name)的所有instance

 dbGet [dbGet -p2 top.insts.cell.name cellName].name
  • 1

get library中特定cell name的size

 dbGet [dbGetCellByName cellName].size
  • 1

列出设计中所有clock net

 dbGet [dbGet -p top.nets.isClock 1].name
  • 1

Note: 执行这句命令前,需要先做timeDesign。

如何在Innovus中做好Clock Tree Synthesis?

将包含特定关键词clk的所有instance选中,设置成fix属性

 dbSet [dbGet –p top.insts.name *clk*].pStatus fixed
 select_obj [dbGet [dbGet top.insts.name *clk* -p].name]
  • 1
  • 2

获得特定route_type的最高层和最低层

 dbGet [dbGet -p head.routeTypes.name routeTypeName].topPreferredLayer.num
 dbGet [dbGet -p head.routeTypes.name routeTypeName].bottomPreferredLayer.num
  • 1
  • 2

get database units

 dbGet head.dbUnits
  • 1

get the manufacturing grid

 dbGet head.mfgGrid
  • 1

获得所有的physical only cell,比如filler cell, endcap cell和tapcell等

 dbGet [dbGet -p top.insts.isPhysOnly 1].name
  • 1

获得 Dont Touch instances:

 dbGet [dbGet -p top.insts.dontTouch true].name
  • 1

获得database中所有Dont Use cells

 dbGet [dbGet -p head.libCells.dontUse 1].name
  • 1

获得JTag elements

 dbGet [dbGet -p top.insts.isJtagElem 1].name
  • 1

获得所有 spare instances

      dbGet [dbGet -p top.insts.isSpareGate 1].name
  • 1

get 特定instance的pg pin

    dbGet [dbGet top.insts.name $instName -p ].pgInstTerms.name
  • 1

get特定instance的pg连接关系

proc getInstPGConnect {c} {
set inst [dbget -p top.insts.name $c]
puts “PG connection of instance $c:”
foreach PGT [dbget $inst.pgCellTerms.name] {
puts “\tPin : $PGT --> Net: [dbget [dbPGTermNet [dbGetPGTermByName $inst $PGT]].name]” }
}

Example:

getInstPGConnect u_mmu_vir_top/mult_x_12/U821

PG connection of instance u_mmu_vir_top/mult_x_12/U821:
Pin : VSS --> Net: VSS
Pin : VDD --> Net: VDD_cpu
Pin : VBP --> Net: VDD
Pin : VBN --> Net: VSS

选中包含特定module name的所有memory或hierarchy module

 selectInst [dbGet [dbGet top.Inst.subClass block -p2].name <specify_module_name> ]
  • 1

get到某个module中的所有sequential cell

selectModule <module_name>
dbGet [dbGet selected.insts.cell.isSequential 1 -p2].name
  • 1
  • 2

get到指定net driver的instance name和cell name

set netName netName
set inst [dbGet [dbGet -p [dbGet -p top.nets.name $netName].allTerms.isOutput 1].inst]
Puts "Net: $netName, driving inst name: [dbGet $inst.name], driving cell name: [dbGet $inst.cell.name]"
  • 1
  • 2
  • 3

列出cell某个pin的所有layer

 dbGet [dbGet -p selected.cell.terms.name pinName].pins.allShapes.layer.extName
  • 1

get到die area/选中boxes的polygon和面积

 dbShape -output polygon [dbGet top.fPlan.boxes]
 dbShape -output polygon [dbGet selected.boxes]

 dbShape -output area [dbGet selected.boxes]
  • 1
  • 2
  • 3
  • 4

get top level term pin坐标和layer number

 lindex [dbGet [dbGet top.hinst.hinstTerms.term.name <pin_name> - p].pins.allShapes.shapes.rect] 0
 dbGet [dbGet top.hinst.hinstTerms.term.name <pin_name>  -p].pins.allShapes.layer.num
  • 1
  • 2

get到cell的max cap信息

 set cellPtrList [dbGet -p head.allCells.name *BUF*]
 foreach cellPtr $cellPtrList {puts "[dbGet $cellPtr.name] [dbFTermMaxCap [dbGet -p $cellPtr.terms.name termName] 1]"}
  • 1
  • 2

找出包含特定属性的所有instance

 set inst_ptrs [dbGet -p top.insts.props {.name == "myProp" && .value == "xyzzy"]
 Puts "Instances with property myProp and value xyzzy: [dbGet $inst_ptrs.name]"
  • 1
  • 2

找出设计中非clock ports

 dbGet [dbGet -p [dbGet -p2 top.terms.net.isClock 0].isInput 1].name
  • 1

get到设计中tech site相关信息

 dbGet head.sites.name
 dbGet head.sites.size
 dbIsTechSiteVDDOnBottom [dbGet head.sites.name <name> -p]
  • 1
  • 2
  • 3

得到physical only类型的cell (well tap, tie hi/lo, filler, endcap/decap)

 dbGet [dbGet -p head.libCells.subClass <subClassName>].name
 dbGet [dbGet -p head.libCells.subClass coreWellTap].name
 dbGet [dbGet -p head.libCells.subClass coreTieHigh].name
  • 1
  • 2
  • 3

打印出设计中所有module名字

 foreach module_name [dbGet top.hInst.treeHInsts.cell.name] {
     Puts "$module_name"
  }
  • 1
  • 2
  • 3

Get 到设计中所有leaf cells

 foreach leaf_name [dbGet -u top.insts.cell.name] {
        Puts "$leaf_name"
 }
  • 1
  • 2
  • 3

给选中instance设置dont touch属性

 select_obj [dbGet top.insts.name LS* -p]

 foreach term [dbGet selected.instTerms.net.term –e] {
   set_dont_touch [dbGet $term.net.name] true
 }
  • 1
  • 2
  • 3
  • 4
  • 5

Skip routes hierarchical hard macro nets

  proc skiproutesOnHmsNets {hmInstPattern} {
    deselectAll
    selectInst *$hmInstPattern*
    dbset selected.hinst.hnets.net.skipRouting 1
    deselectAll
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

针对某些不想让工具绕线的net,可以通过设置skipRoute选项来实现。不过值得注意的是,这个操作存在一定风险。如果后续要对这些net进行eco,那么这条net可能会是open net。

不过即便出现open,我们也有办法解决。通过将这些net的skipRoute属性改成0,然后再单独绕这些net。这样的解法也是非常完美的。

删掉macro身上的信号走线

 foreach c [dbGet [dbGet -p2 top.insts.cell.baseClass block].name] {            
   set j [dbGet -p top.insts.name $c ]                                          
   dbSelectObj  [dbQuery -area  [dbGet $j.box ] -objType regular]                                
   puts "Deleting object at [dbGet $j.box ] within Block [dbget $j.name]"
   editDelete -selected  -type Signal  -use SIGNAL                          
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

get到设计中非power的via数量

 llength [dbGet [dbGet -p top.nets.isPwrOrGnd 0].vias]
  • 1

get设计中memory的latency值

 set mem_pin [dbget [dbget top.insts.cell.name *RAM* -p2].instTerms.name *CLK]
 foreach i $mem_pin {
   puts "$i [get_property [get_pins $i] actual_latency_late_rise_max]"
 }
  • 1
  • 2
  • 3
  • 4

得到设计中所有直接将reset连接到VSS的flop数量,instance name和ell name

setPreference CmdLogMode 1
 # output file name:
 set ofile "flop_with_tied_rst.rpt"
 set ecofp [ open $ofile w ]

set cnt [llength [dbGet [dbGet [dbGet top.nets.name $VSS_name -p].instTerms.cellTerm.name $RSTport -p2 ].inst.name ]]
 set insts  [dbGet [dbGet [dbGet top.nets.name $VSS_name -p].instTerms.cellTerm.name $RSTport -p2 ].inst ]
 set cnt2 [llength $insts]

 puts $ecofp "Total: $cnt $cnt2"
  #foreach inst_ptr [dbGet [dbGet [dbGet top.nets.name $VSS_name -p].instTerms.cellTerm.name $RSTport -p2 ].inst ]
 foreach inst_ptr $insts {
   set inst_name [dbGet $inst_ptr.name]
   set cell_ptr [dbInstCell $inst_ptr]
   set cell_name [dbGet $cell_ptr.name]
   set rst_port [dbGet $inst_ptr.instTerms.cellTerm.name $RSTport -p2]
   set net [dbGet $rst_port.net.name]
   puts $ecofp "$inst_name $cell_name "
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

close $ecofp
}

好了,今天的内容分享就到这里。如果你比较有心,我相信你会想着整理一份S家对应命令汇总,那就赶紧去做吧!如果小编的分享对你有所帮助,帮忙点击“在看”并转发给你的朋友,算是对小编的一点帮助。

小编知识星球简介(如果你渴望进步,期望高薪,喜欢交流,欢迎加入):

在这里,目前已经规划并正着手做的事情:
ICC/ICC2 lab的编写
基于arm CPU的后端实现流程
利用ICC中CCD(Concurrent Clock Data)实现高性能模块的设计实现
基于ARM 四核CPU 数字后端Hierarchical Flow 实现教程
时钟树结构分析
低功耗设计实现
定期将项目中碰到的问题以案例的形式做技术分享
基于90nm项目案例实现教程(ICC和Innovus配套教程)
数字IC行业百科全书

吾爱IC社区知识星球星主为公众号”吾爱IC社区”号主,从事数字ic后端设计实现工作近八年,拥有55nm,40nm,28nm,22nm,14nm等先进工艺节点成功流片经验,成功tapeout过三十多颗芯片。

这里是一个数字IC设计实现高度垂直细分领域的知识社群,是数字IC设计实现领域中最大,最高端的知识交流和分享的社区,这里聚集了无数数字ic前端设计,后端实现,模拟layout工程师们。

在这里大家可以多建立连接,多交流,多拓展人脉圈,甚至可以组织线下活动。在这里你可以就数字ic后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良性循环。每个月小编会针对活跃用户进行打赏。

最重要的是在这里,能够借助这个知识社群,短期内实现年薪百万的梦想!不管你信不信,反正已经进来的朋友肯定是相信的!相遇是一种缘分,相识更是一种难能可贵的情分!如若有缘你我一定会相遇相识!知识星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有680位星球成员,感谢这680童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/717769
推荐阅读
相关标签
  

闽ICP备14008679号