Monday 27 January 2014

Encounter Quick Tip: Finding Available Cell Masters with dbGet


When you first start using dbGet, many of your queries branch off the "top" keyword and then traverse to "insts" or "nets". These searches return a list of all the instances or nets in the design. But sometimes it's necessary to query the available cell masters -- some of which may or may not be instantiated.
Common reasons for needing this are for finding things like well taps, end caps, antenna diodes and filler cells. You have a hunch what these cells are called for the library you're working on and you'd like to search through all of the cell masters currently loaded in the design.
Say for example you want to tell the tool which cells should be used as fillers. (Fillers are physical-only instances added after placement to fill gaps between standard cells to provide standard cell rail and well continuity). You can have a hunch they're called FILL-"something". Here's how to use dbGet to find the names of all the cell masters available that match FILL*:

encounter 1> dbGet head.allCells.name FILL*
FILL1 FILL16 FILL2 FILL32 FILL4 FILL64 FILL8


You can pass the output directly to setFillerMode, then call addFiller to add the instances to the design:

encounter 2> setFillerMode -core [dbGet head.allCells.name FILL*]
 

encounter 3> addFiller

Although "top" is by far the common dbGet starting point, the "head" pointer provides a link to technology information like layers, vias and more. Give it a look next time you're seeking to find technology information rather than design-specific data.
For more information on dbGet check out this post on Getting Started with dbGet.
Hope this helps.

Additional I/O Pins HOW to GET ...

How to get an additional pin to an existing one to have an I/O pin for the same net on different places.
There is no menu command or text command to do that. You can just do it by modifying a DEF or Floorplan-File in the following way (DEF shown):
 
PINS 2 ;
- netout + NET netout + DIRECTION INPUT + USE SIGNAL
 + LAYER Metal2 ( -280 0 ) ( 280 560 )
 + FIXED ( 23100 60000 ) S ;
- netout.extra1 + NET netout + DIRECTION INPUT + USE SIGNAL
 + LAYER Metal2 ( -280 0 ) ( 280 560 )
 + FIXED ( 24100 60000 ) S ;
END PINS

If bus pins have to be doubled the syntax is the following (the extra1 extension has to be added before the bus number):
 
PINS 2 ;
- netout<0> + NET netout + DIRECTION INPUT + USE SIGNAL
 + LAYER Metal2 ( -280 0 ) ( 280 560 )
 + FIXED ( 23100 60000 ) S ;
- netout.extra1<0> + NET netout + DIRECTION INPUT + USE SIGNAL
 + LAYER Metal2 ( -280 0 ) ( 280 560 )
 + FIXED ( 24100 60000 ) S ;
END PINS

Read in the modified DEF and you will see the additional pin.