Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >innovus | dbGet 一文打尽

innovus | dbGet 一文打尽

作者头像
老秃胖驴
发布于 2020-12-17 09:05:11
发布于 2020-12-17 09:05:11
8.3K0
举报
文章被收录于专栏:陌上风骑驴看IC陌上风骑驴看IC

有驴友在后台问Innovus 的dbGet, 老驴是从Common UI 开始学习Innovus 的,所以并不熟悉dbGet, Common UI 的get_db 也很好用。在support.cadence.com 上有两篇写dbGet 的文章,简单明了都不用翻译的,有需要的可以看一下—— 其实老驴今天打算发另一些东西,但是因为资料还没消化,时间又紧凑,就把这两篇文章搬运一下充个数。。。

List all unplaced instances in the design

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

List all placed instances in the design

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

List all fixed instances in the design

  • dbGet [dbGet -p top.insts.pStatus fixed].name

List the metal layers on which the I/O pins of the block reside

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

List the non default rules (NDR) in the design

  • dbGet head.rules.name

List the NDRs applied on a specified net

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

List net names with specific max or min voltage

  • dbGet [dbGet top.nets.maxVoltage value –p].name
  • dbGet [dbGet top.nets.minVoltage value –p].name

Get the placement status of an instance

  • dbGet [dbGetInstByName instName].pStatus

To avoid splitting of a specified multibit flop, during multibit Optimization

  • dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1

To avoid merging of a specified multibit flop, during multibit Optimization

  • dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1

Get the coordinates of a rectangular routing blockage

  • dbGet top.fplan.rBlkgs.shapes.rect

Get the coordinates of a rectilinear routing blockage

  • dbGet top.fplan.rBlkgs.shapes.poly

List all cell types used in the design

  • dbGet -u top.insts.cell.name
  • Note: The "-u" parameter filters out the duplicate objects.

Get the size of block placement halos

  • 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

Get the size and top/bottom layers of 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

Ensure all your tiehi/tielo connections have tie cells (and are not connected to a rail instead)

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

The previous commands should return "0x0" if all connections have tie cells. If "1s" are returned, use the following commands to find the terms that still need a tie cell:

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

Get all instTerm names that are tied to tieLo cells

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

Change the routing status of a net (for example, from FIXED to ROUTED)

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

Get the status of the design

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

List the layers used in a net

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

Selecting Shield Nets of a net

  • dbSelectObj [dbget [dbget -p [dbGet -p top.nets.name net -p2]
  • NOTE: $net is the net for which you want to select the shield.

Find all instances of a certain cell type

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

Determine the size of a cell in the library, but not necessarily in the current design

  • dbGet [dbGetCellByName cellName].size

List the nets marked in the db as clock net

  • dbGet [dbGet -p top.nets.isClock 1].name
  • Note: Before running the previous command, build a timing graph using the timeDesign command.

Set all instances with a particular pattern in the name to fixed status

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

Get top and bottom routing layers for a 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

Get physical only cells such as filler cell, end cap cell, and so on

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

Report Dont Touch instances:

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

Report Dont Use cells in the database

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

Report JTag elements:

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

Report spare instances:

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

Filter all PG pins with direction bidi of a specific instance

  • dbGet [dbGet -p [dbGet -p top.insts.name instName].pgCellTerms.inOutDir bidi].name

Get PG pins connections of a specific instance

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 :

}

Get class and subClass of a cell

  • dbGet [dbGetCellByName cellName].baseClass
  • dbGet [dbGetCellByName cellName].subClass

Selecting all Macros/Blocks of a particular module (or Hierarchical instance)

  • selectInst [dbGet [dbGet top.hInst.allTreeInsts.cell.baseClass block -p2].name <specify_module_name> ]

Get all the sequential cells of a particular module

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

Get the instname / cellname of the driver driving a specific net

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

List all layers for the pin of a cell

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

Report points of the polygon that forms the die area

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

Get Verilog module ports

  • dbGet [ dbGet -p1 top.hInst.allTreeInsts.name $moduleInstName].hInstTerms.hTerm.name

To query top level term pin coordinates and 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

Query max_cap for a list of cells

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

Find all instances with a specify property name "myProp" (string property type) and value "xyzzy"

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

Find non-clock ports in a design

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

To get information on all tech sites in the design

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

Identify and report ‘physical only’ types of cells (well tap, tie hi/lo, filler, endcap/decap) You can query the subclass for a cell to check whether it is welltap, tiehigh, tielow or end cap:

  • dbGet [dbGet -p head.libCells.subClass <subClassName>].name
  • For example, to get names of well tap cells (specified as ‘CLASS CORE WELLTAP ‘ in LEF), you can use the following command:
  • dbGet [dbGet -p head.libCells.subClass coreWellTap].name

Similarly, to get names of tie high / tie low cells (specified as ‘CLASS CORE TIEHIGH’ or ‘CLASS CORE TIELOW’ in LEF), use the following command:

  • dbGet [dbGet -p head.libCells.subClass coreTieHigh].name OR
  • dbGet [dbGet -p head.libCells.subClass coreTieLow].name

To report endcap cells (specified as ‘CLASS ENDCAP’ in LEF), use the following command:

  • dbGet [dbGet -p head.libCells.subclass coreEndCap*].name

Similarly, to query filler cells with ‘CLASS CORE SPACER’ in the LEF syntax, you can use the following command (similar to other physical-only cells):

  • dbGet [dbGet -p head.libCells.subClass coreSpacer].name

Print all module names in the design

foreach module_name [dbGet top.hInst.treeHInsts.cell.name] {

Puts "$module_name"

}

This will not include the top module name. To get the top module name, run the following command:

  • dbGet top.name

Get all leaf cells used in the design

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

}

Apply set_dont_touch on selected instances, Select the instances on which to apply set_dont_touch. For example, select all level-shifter instances with the "LS" prefix:

  • dbGet top.insts.name LS*

Then, run the following command:

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

}

Removing nets over the Macros along with pitches and vias, Incase some nets are routed over the Hard Macros, you can remove such nets along with pitches and vias using following command:

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

editDelete -selected -type Signal -use SIGNAL

}

Get the number of vias that are not power in a routed design

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

Break the DFM flow if metal fills are not added to design using run_pvs_metal_fill.

Report instance pin shape mask

Report latency of all memories in the design, Following script prints the latency of all memories with cell name *RAM* and clock pin name *CLK. You can change *RAM* with cell name of the desired memories, or as per your design.

Report all flop instances with reset pin connected to the supply

To get the status of a design:

encounter> dbGet top.?? status* // reports the list of status at particular stage

statusClockSynthesized: 0

statusGRouted: 0

statusIoPlaced: 1

statusPlaced: 1

statusPowerAnalyzed: 0

statusRCExtracted: 0

statusRouted: 1

statusScanOpted: 0

Create SDP(structured data path) groups of clock gates and flops, The following script will find the clock gates and the flops connected to the clk pin in the design and group them together using createSdpGroup

Note: Please use cell name and clock pins name(cgc and clk used for example) as per the library specifications.

Using "." with dbGet: This returns the value of the specified object attribute. dbGet uses "." as a separator for object/attribute traversal.

dbGet top.insts.cell.name

AND2 OR2 INV1 AND2 …

  • top is a cell pointer for the top cell
  • insts is the list of inst pointers in top
  • cell is the master cell pointers for each inst
  • name is the master cell name

Using "?" with dbGet: This returns a list of the available objects and attributes for the last object in the query.

dbGet head.?

Using "??" with dbGet: Returns a list of the objects and attributes, and their values, for the last object in the query.

dbGet head.??

Using ".?h" with dbGet: This returns a list of the available objects and attributes for the last object in the query, and also includes; a short description for each object and attribute, the type for each object, the legal enum values for each attribute, and whether the attribute value can be set (whether it is editable).

dbget head.?h

Pattern matching with dbGet:

  • Can be used to match field names or values
  • Simple wildcard matching used by default (* and ?)
  • use -regexp option for regular expression matching
  • Value matching

dbGet top.nets.name *clk* -> a_clk1 clk2 clk3 clk[1] clk_2

dbGet top.nets.name *clk? -> a_clk1 clk2 clk3

  • Field name matching (for .? .?? .?h) also useful to get just one field

dbGet top.insts.?h pstat*

pStatus(settable): enum(cover fixed placed unplaced), Instance placement status

Using "pointer": This specifies one or more object pointers as the starting point.

dbGet 0x1b03dbb0.name #0x1b03dbb0 is pointer to top cell DTMF_CHIP

Using "head": This specifies the pointer for the root or head of the design as the starting point.

  • To get the database units in the design:

dbGet head.dbUnits -> 2000

  • To get the manufacturing grid in the design:

dbGet head.mfgGrid -> 0.005

  • To get a list of NONDEFAULT rules in the design:

dbGet head.rules.name

Using "top": This specifies the pointer to the top cell in the design as the starting point.

  • To get a list of all occurrences in the design:

dbGet top.insts

  • To get a list of all occurrences of names in the design:

dbGet top.insts.name

  • To get a list of all occurrences that belong to TDSP_CORE_INST:

dbGet top.insts.name DTMF_INST/TDSP_CORE_INST/*

  • To get a list of all instance pointers of the previous occurrences:

dbGet –p top.insts.name DTMF_INST/TDSP_CORE_INST/*

Using "selected": This specifies that the selected objects are the starting point.

selectInst DTMF_INST/RESULTS_CONV_INST/r770_reg_9

  • To get the pointer of selected objects:

dbGet selected -> 0x1b340ac0

  • To get the name of a selected object:

dbGet selected.name -> DTMF_INST/RESULTS_CONV_INST/r770_reg_9

  • To get the cell name of a selected occurrence:

dbGet selected.cell.name -> SDFFNX1

Using "-p" with dbGet: This specifies the level to traverse back through the specified objects for the query.

–p | -p2 | -p3 … levels for back traversal of objects (p = 1 level, p2 = 2 levels, and so on).

The –p2 option goes back 2 levels of objects, -p3 goes back 3 levels, and so on.

Note: –p | -p2 | -p3 .... option returns the pointer of the object.

  • To get the pointer of instTerm i_160/Y, use option "-p" for 1 level.

innovus 21> dbGet top.insts.instTerms.name -p i_160/

  • To get the pointer of the instance of term i_160/Y , use option "-p2" for 2 level.

innovus 22> dbGet top.insts.instTerms.name -p2 i_160/Y

  • To get the net name associate with this term:

innovus 23> dbGet [dbGet top.insts.instTerms.name -p i_160/Y].net.name

  • To get the cell name of this instance:

innovus 24> dbGet [dbGet top.insts.instTerms.name -p2 i_160/Y].cell.name

Using "-u" with dbGet: This removes duplicate objects from the query results and the results list only contains unique entries. Sometimes, the results list can have the same entry multiple times, such as cell name.

dbGet top.insts.cell.name -> AND2X1 DFFHQX1

You can use the -u parameter to filter the results, and the software only returns a unique list of different cell names.

dbGet -u top.insts.cell.name -> BUFX4 AND2X1

Using "-d" with dbGet: By default, dbGet returns values in user units rather than dbu (use –d for dbu).

dbGet top.fplan.pblkgs.shapes.rect -> {337.92 668.64 587.4 935.76}

dbGet -d top.fplan.pblkgs.shapes.rect -> {675840 1337280 1174800 1871520}

Command chaining with dbGet:

set instPtr [dbGet -p top.insts.name F1] -> 0x179df5d8

dbGet $instPtr.cell.isSequential -> 1

dbGet [dbGet -p top.insts.name F1].cell.isSequential -> 1

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陌上风骑驴看IC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
【Innovus】记录后端的一些小心得
当pin宽度等于最小线宽且不与grid对齐时,可能会引导起iobuf与pin不route。
ExASIC
2022/12/06
2.4K0
DC中常用到的命令(示例)总结
本文将描述在Design Compliler中常用到的命令,这些命令按照流程的顺序进行嵌套讲解,主要是列举例子;大概的讲解布局如下所示:
数字芯片社区
2020/07/20
8.7K0
DC中常用到的命令(示例)总结
《数字集成电路静态时序分析基础》笔记③
例如,统计时钟数量,人数显然不合理,可以用脚本语言统计,但是可以更加简单,直接用Synopsys Tcl的拓展命令更加便捷
空白的贝塔
2020/06/24
1.5K0
《数字集成电路静态时序分析基础》笔记③
用python实现网表分模块统计面积
虽然dc也有report_area -hier命令来报告各级模块的面积,本python方案看似有点造轮子,但还是有一定的便利性。一、不受网表类型的限制,综合网表、DFT网表、APR都可以。二、可以过滤面积小于指定值的小模块,比如工具自动插入的ICG模块。三、还可以根据面积占比做排序,方便分析面积的瓶颈。
ExASIC
2022/12/06
7810
用python实现网表分模块统计面积
P&R | 物理设计流程概述
题记,VLSI System Design 上的这篇文章其实没什么实质性的内容,只是一个特别特别笼统的概述,而且由于年久失修,某些地方的概念欠完备,但该文趣味十足,尤其是文中的手图——阐释了什么叫『简约美』,沉溺于这几张手图,所以一定要转一下,文章前半部分做了非一一对应的翻译,后半部分翻译过来比译制片都搞笑,还是看原文把,或者只看图就可以了。
老秃胖驴
2020/03/13
3K0
FPGA时序约束之Tcl命令的对象及属性
  在前面的章节中,我们用了很多Tcl的指令,但有些指令并没有把所有的参数多列出来解释,这一节,我们就把约束中的Tcl指令详细讲一下。
猫叔Rex
2020/06/30
1.4K0
FPGA时序约束之Tcl命令的对象及属性
跟老驴一起学PR | 数据的输入
前文《跟老驴一起学PR | Innovus 输入》阐述了 Innovus 所需要的输入数据有哪些,今天来学习如何将这些数据读入Innovus. 以前熟悉的工具,不论是综合、formal 还是STA 读入数据大多都是read_xxx 命令读入,思维定势之前以为Innovus 也是用一坨read_xxx 的命令读入,然而并不是。
老秃胖驴
2020/10/29
3.6K0
跟老驴一起学PR | 数据的输入
综合对象及环境属性
如果设置面积的约束为0, DC将为面积做优化直到再继续优化也不能有大的效果,这时,DC将中止优化。
数字芯片社区
2022/09/19
7670
综合对象及环境属性
Innovus 小技巧 | Innovus 中如何验证低功耗设计
此处论及的低功耗设计是指带IEEE1801 或CPF 的设计,即有多个电压域的设计,对于这样的设计,power mesh 跟placement 做完后,通常需要检查:
老秃胖驴
2019/05/30
3.2K0
PnR | Innovus 中的Soft Guide, Guide, Region, Fence
后端概念好繁琐,自从开始做ispatial 就被后端各种概念搞得七荤八素,挫败!挫败!挫败!在做物理综合时,除了LEF, DEF 概念搞懂之外,最常用到的就是各种 "guide" 了,在Innovus 中有以下四种.
老秃胖驴
2020/04/08
6.4K0
PnR | Innovus 中的Soft Guide, Guide, Region, Fence
论P&R | Pin Density 跟 Congestion
在《论综合:为什么做physical aware synthesis》中论及做Physical 综合的二分之一原因是Congestion 优化;Congestion 是一个硬指标,因为前面做的再好,如果congestion 太严重线绕不通还是要重头再来。跟功耗的优化类似,设计本身对Congestion 影响最大,如果设计已经足够优化,Coding Style 对Congestion 足够友好;那FloorPlan 对Congestion 的影响就至关重要,如果FloorPlan 也足够优化,也都按着数据流精细调整过;那剩下解Congestion 的办法就十分有限,目前在综合阶段可用的办法不外乎:
老秃胖驴
2019/11/21
3.4K0
【分享】升级Vivado工程脚本
Vivado可以导出脚本,保存创建工程的相关命令和配置,并可以在需要的时候使用脚本重建Vivado工程。脚本通常只有KB级别大小,远远小于工程打包文件的大小,因此便于备份和版本管理。 脚本里指定了Vivado的版本、器件的型号,IP的版本。如果导出脚本时的相关版本,和恢复工程时的相关版本不一样,会导致创建工程失败。可以通过手工检查和修改相关版本信息,升级Vivado工程脚本,使新的Vivado也能恢复出对应的工程。 目前我电脑中只有Vivado 2020.2。但是得到了一份Vivado 2020.1为开发板vck190 es的创建的工程脚本。下面以把前述脚本升级到Vivado 2020.2为例,讨论如何升级Vivado工程脚本。
hankfu
2021/03/03
2.2K0
【附录A SDC】静态时序分析圣经翻译计划
SDC语法是基于TCL的格式,即所有命令都遵循TCL语法。一个SDC文件会在文件开头包含SDC版本号,其次是设计约束,注释(注释以字符#开始,并在行尾处结束)在SDC文件中可以散布在设计约束中。设计约束中较长的命令行可以使用反斜杠(\)字符分成多行。
空白的贝塔
2021/01/28
1.7K0
【分享】MicroBlaze大内部存储器(AXI BRAM)设计
MicroBlaze可以使用AXI BRAM存放数据和指令。有些客户软件很大,需要把AXI BRAM的空间做到最大。AXI BRAM底层是Block RAM或者Ultra RAM。器件的Block RAM或者Ultra RAM个数,决定了AXI BRAM的大小。
hankfu
2020/07/27
2K0
Vivado中用于时钟操作的几个Tcl命令
理论上,使用Tcl可以在Vivado上完成一切操作,但是没必要,因为命令太多,很难记忆,我们只需要知道几个常用的即可,方便我们使用Vivado。
Reborn Lee
2021/10/11
9220
【Innovus】做postmask功能ECO需要分几步
一般Postmask功能ECO流程分成以下几步:修改RTL和验证、修改网表(LEC)、后端工具里ECO Route。如下图:
ExASIC
2021/12/02
2.3K0
【Innovus】做postmask功能ECO需要分几步
论PR | Innovus 中cell density计算解析
在Innovus 中可用如下命令来report density, 不同命令的应用场景和计算方式有所不同。
老秃胖驴
2019/10/21
8.5K0
Innovus 小技巧 | Innovus 对multibit 的支持
目前主流先进工艺库都有multibit cell, 在《论功耗:动态功耗优化》中有陈诉multibit cell 的好处及在综合时如何实现。如果在综合阶段没有做multibit merge, 或综合阶段由于缺失物理信息multibit cell merge 不合理,那就需要PR 工具做multibit merge 或split. 
老秃胖驴
2019/05/30
3K0
P&R | 汽车电子,Functional Safety 在place阶段的特别处理
Functional Safety 是汽车电子的独特之处,在P&R 阶段有以下几点需要特别处理:
老秃胖驴
2020/06/16
1.1K0
用python实现分模块按cell类型统计cell个数并降序排列
有同学想看看综合网表里某模块里and、or、inv等cell的个数,谁最多谁最少。虽然用dc的各种命令组合也可以实现,但今天我们用python来实现。
ExASIC
2022/12/06
9070
相关推荐
【Innovus】记录后端的一些小心得
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档