Documente Academic
Documente Profesional
Documente Cultură
Problem Statement
Robust and easy y to use db access mechanisms p play ya huge role in defining how productive users of design systems can be Historically, Hi t i ll E Encounters t db access h has b been powerful f l and fast, but a bit cryptic and difficult to learn In 7.1, , a new db access mechanism was introduced which minimizes the need to peruse the 2000+ FE-TCL commands and condenses them into 2 commands: dbGet and dbSet
Cadence Confidential
dbGet: Goals
Make it easy for a new user to explore a design interactively
Make it a self-documenting API
query which fields are available from any object query fields for short description and legal enumerated values
Query all field values of an object at one time Present P t the th data d t in i user units it by b d default f lt (or ( optionally ti ll i in db units) it )
Approach Use a methodology similar to what is available to DFII-SKILL with the ~> operator Enhance it with some new options not found in SKILL
3 June 28, 2011 Cadence Confidential
Cadence Confidential
Cadence Confidential
dbGet Examples:
Cadence Confidential
dbGet Examples: p
.?h
Similar to .? but includes type, legal enum values, and a short description For obj or objList includes objType Note, , objType j yp field itself is suppressed pp as too long, g, with comment how to see it Alphabetical
encounter 1> dbGet top.insts.?h ================================ inst: Instance - canonical (flat), equivalent to DEF COMPONENT. Points to a libCell or ptnCell. p -------------------------------box: rect, Bounding box of the instance pt(settable): pt, Location of the instance instTerms: objList(instTerm), List of pointers to instance terminals orient(settable): enum(MX MX90 MY MY90 R0 R180 R270 R90), Instance placement orientation pStatus(settable): enum(cover fixed placed unplaced), Instance placement status
Cadence Confidential
Value matching
encounter 1> dbGet top.nets.name *clk* a_clk1 clk2 clk3 clk[1] clk_2 encounter 2> dbGet top.nets.name *clk? a clk1 clk2 clk3 a_clk1
Field name matching (for .? .?? .?h) also useful to get just one field
encounter 1> dbGet top.insts.?h pstat* pStatus(settable): enum(cover fixed placed unplaced), Instance placement status
Cadence Confidential
Cadence Confidential
10
Cadence Confidential
If the user only wanted the unique list of different cells they can use u
encounter 2> dbGet -u top.insts.cell.name INV AND2 OR2 encounter 3> dbGet u top.insts.cell 0x1111 0x2222 #one ptr to each cell used in design
11
Cadence Confidential
12
Cadence Confidential
Empty fields return 0x0 Illegal field name gives Error msg but still return 0x0, so list of mixed j still ok objects 0x0 in objList is silently allowed, so list of mixed objects is still ok
and instTerm
>dbGet $n.allTerms.name #$n is clk net attached to term clk i1/i2/clkIn #combo of terms and instTerms >set i [dbGet $n.allTerms.inst] $n allTerms inst] ERROR: "inst" - Invalid obj/attribute for term 0x0 0x111111 #term has no inst field, so 0x0 >dbGet $i.name 0x0 i1/i2x #no error msg from 0x0.name >dbGet $i.name i1* i1/i2x >dbGet $i.name *x* #0x0 is not a name, so *x* does i1/i2x >dbGet $i.name 0* #no name was matched at all, so 0x0
returned
14
Cadence Confidential
15
Cadence Confidential
By default, all distance values in um rather than dbu (use d for dbu) A few object names have been changed to align better with Virtuoso and OpenAccess terminology. For example:
term in dbGet is FTerm in the FEDB (dbForEachCellFTerm) instTerm in dbGet is Term in the FEDB (dbForEachInstTerm)
16
Cadence Confidential
17
Cadence Confidential
> dbGet top.fplan.pblkgs.shapes.rect #returns list of lists {100.1 0 100.3 0.2} {200.0 100.0 220.0 110.0} >dbGet d top.fplan.pblkgs.shapes.rect {100100 0 100300 200} {200000 100000 220000 110000} >set b [lindex [dbGet top.fplan.pblkgs.shapes] 0] 0x222222 >set c [dbGet d $b.rect] #still a list of lists {100100 0 100300 200} >join $c #flatten the list 100100 0 100300 200
pt and ptList objTypes are similar, with ptList a list of lists of lists
18
Cadence Confidential
19
Cadence Confidential
dbSet
dbSet allows editing of appropriate attribute fields, but not t pointers i t Does not support creation or deletion of objects Currently very limited: only a few attributes supported
placement status, halo values, gap values dbget .?h descriptions show (settable) for attributes that can be changed using sing dbSet
20
Cadence Confidential
dbSchema
dbSchema provides a way to find the attributes available for an object type when you dont don t have the pointer already dbSchema allows filtering to simplify output and look for objects with a common attribute
Syntax: dbSchema [-help] [objNamePattern [objAttrNamePattern]] Example: Find out which objects contain object or attributes that match the *ptn* pattern.
encounter> dbSchema * *ptn* =================================================== hInst: Hierarchical instance (derived from netlist) =================================================== ptn: obj(ptn), Pointer to the partition =============================== head: Root/Head of the database =============================== ptns: objList(ptn), p j p List of p pointers to p partitions in the design g
22
Cadence Confidential
23
Cadence Confidential
24
Cadence Confidential
Summary
It would be impossible p to p provide native functionality y to suit every need that might arise, so db access commands are useful in bridging the gap between tool functionality and whats what s needed to get chips implemented dbGet and dbSet provide a simple, consistent way to programmatically probe and tweak the database We welcome your suggestions for improvement to dbGet and hope you find it useful
25
Cadence Confidential