在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 18623|回复: 10

[原创] Innovus dbGet常用命令合集

[复制链接]
发表于 2020-11-25 15:51:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 ic_learners 于 2020-11-25 16:19 编辑


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

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

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

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

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

image.jpg


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

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

  • 列出设计中所有place的instance

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

  • 列出设计中所有fix的instance

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

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

      get_cells -hierarchical -filter "is_fixed == true"

  • 列出block io端口terminal所用的layer

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

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

      dbGet head.rules.name
      report_routing_rules (ICC)

  • 列出某条net的route rule

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

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


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

     dbGet [dbGetInstByName instName].pStatus
     dbGet selected.pstatus

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


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

      dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1

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

      dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1

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

  • 选中出设计中的所有hard blockage

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

  • 获得方形routing blockage的坐标

      dbGet top.fplan.rBlkgs.shapes.rect

  • 获得多边形routing blockage的坐标

     dbGet top.fplan.rBlkgs.shapes.poly

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

     dbGet -u top.insts.cell.name


  • 获得 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

  • 获得 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'b0和1‘b1都练到tie cell,而非直接连接到VSS和VDD

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

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

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

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

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

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

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

  • 获得设计的状态

     dbGet top.statusIoPlaced
     dbGet top.statusPlaced
     dbGet top.statusClockSynthesized
     dbGet top.statusRouted
     dbGet top.statusRCExtracted
     dbGet top.statusPowerAnalyzed

  • 列出某条net所用到的layer

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

  • fix某条net的shape

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

  • 选中某条net的shielding net

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

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


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

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

  • get library中特定cell name的size

     dbGet [dbGetCellByName cellName].size

  • 列出设计中所有clock net

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

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


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

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

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

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

  • get database units

     dbGet head.dbUnits

  • get  the manufacturing grid

     dbGet head.mfgGrid

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

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

  • 获得 Dont Touch instances:

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

  • 获得database中所有Dont Use cells

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

  • 获得JTag elements

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

  • 获得所有 spare instances

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

  • get 特定instance的pg pin

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


  • 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> ]

  • get到某个module中的所有sequential cell

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

  • 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]"

  • 列出cell某个pin的所有layer

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

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

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

     dbShape -output area [dbGet selected.boxes]

  • 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

  • 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]"}

  • 找出包含特定属性的所有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]"

  • 找出设计中非clock ports

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

  • get到设计中tech site相关信息

     dbGet head.sites.name
     dbGet head.sites.size
     dbIsTechSiteVDDOnBottom [dbGet head.sites.name <name> -p]

  • 得到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

  • 打印出设计中所有module名字

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

  • Get 到设计中所有leaf cells

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

  • 给选中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
     }

  • Skip routes hierarchical hard macro nets

      proc skiproutesOnHmsNets {hmInstPattern} {
        deselectAll
        selectInst *$hmInstPattern*
        dbset selected.hinst.hnets.net.skipRouting 1
        deselectAll
       }

针对某些不想让工具绕线的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                          
    }

  • get到设计中非power的via数量

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

  • 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]"
     }

  • 得到设计中所有直接将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 "
     }
   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童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标


image.png





发表于 2021-11-2 21:17:55 | 显示全部楼层
thks  
发表于 2022-3-19 22:01:25 | 显示全部楼层
真不错,顶!!!!!
发表于 2022-3-19 22:41:15 | 显示全部楼层
thanks
发表于 2022-3-19 23:37:54 | 显示全部楼层
支持楼主
发表于 2022-7-6 10:40:52 | 显示全部楼层
学到了,多谢!!
发表于 2023-8-23 11:16:43 | 显示全部楼层
不错!谢谢
发表于 2023-8-26 22:37:17 | 显示全部楼层

学到了,多谢!!
发表于 2024-1-12 16:24:43 | 显示全部楼层
多谢分享~
发表于 2024-2-27 20:11:46 | 显示全部楼层
cadence官网材料翻译官
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 18:43 , Processed in 0.024766 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表