; .autoAbgen template file ; ; Please see the README for usage information, requirements, ; limitations, and options information. ; ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- (procedure (MyModify cvID ) (let () (if (equal cvID~>cellName "iocorner") (let () (foreach prop cvID~>prop (printf "Cell prop name: %s, Value: " prop~>name) (print dbGet(cvID prop~>name)) (printf "\n") ) dbSetq(cvID "corner" "placementClass") dbSetq(cvID "corner" "prCellType") dbSetq(cvID "topLeftEndcap" "prCellClass") ) nil) (foreach thisterm cvID~>terminals (if (or (equal thisterm~>name "gnd!") ) (let () dbSetq(thisterm "ground" "termType") (foreach thispin thisterm~>pins dbSetq(thispin "ground" "termType") )) nil) (if (or (equal thisterm~>name "vdd!")) (let () dbSetq(thisterm "power" "termType") (foreach thispin thisterm~>pins dbSetq(thispin "power" "termType") )) nil) ) ) ) autoAbgenInitProps() ; This must always be called first ;-------------------------------------------------------------------- ; set up library information ; 'libName is used to determine the directory to output log files ; and is the default library when loading a cellist file. aabsSetProp('libName "vlsi2") let((poly diff m1 m2 m3 vP1 vD1 v12 v23 size) ;---------------------------------------------------------------------- ; autoAbgen derived layers: The following properties must be defined ; or may be nil. autoAbgen uses these layers for extraction and as names ; for pins and blockages in the LEF file. See the README file for how to ; specify poly pins or other special options. By default, you do not ; specify the poly or diffusion layers that correspond to vD1 or vP1 ; and autoAbgen does not trace connectivity through these layers. m1 = "met1" m2 = "met2" m3 = "met3" vD1 = "mcon" vP1 = "mcon" v12 = "via" v23 = "via2" aabsSetProp('m1Name m1) ; m1 routing layer aabsSetProp('m2Name m2) ; m2 routing layer aabsSetProp('m3Name m3) ; m3 routing layer aabsSetProp('vD1Name vD1) ; diff to m1 cut layer aabsSetProp('vP1Name vP1) ; poly to m1 cut layer aabsSetProp('v12Name v12) ; m1 to m2 cut layer aabsSetProp('v23Name v23) ; m2 to m3 cut layer ;------------------------------------------------------------------- ; -- Width, Spacing, Enclosure, and Interlayer Rules ; create the following set of properties for each defined pin layer. ; See the README file for a detailed description of these properties. ; The following is standard spacing and width values. ; Specify nil if not applicable aabsSetProp('polyWidth nil) aabsSetProp('polySpacing nil) aabsSetProp('m1Width .90) aabsSetProp('m1Spacing .90) aabsSetProp('m2Width .9) aabsSetProp('m2Spacing 0.9) aabsSetProp('m3Width 1.5) aabsSetProp('m3Spacing 0.9) ; Poly cut rules needed only if you have poly pins aabsSetProp('vP1Width nil) aabsSetProp('vP1polyEnclosure nil) aabsSetProp('vP1m1Enclosure nil) aabsSetProp('v12Width .6) aabsSetProp('v12m1Enclosure .3) ; enclosure around cut aabsSetProp('v12m2Enclosure .3) ; enclosure around cut aabsSetProp('v23Width .60) aabsSetProp('v23m2Enclosure .3) ; enclosure around cut aabsSetProp('v23m3Enclosure .3) ; enclosure around cut ; Interlayer spacing rules for cut layers. Note, if you do not ; have these rules (i.e. can stack cut layers arbitrarily), set ; values to nil so that cut layers are modelled properly. aabsSetProp('v12TovP1 .6) ; interlayer spacing rule aabsSetProp('v12TovP1Stack nil) ; interlayer stacking rule (nil/t) aabsSetProp('v12TovD1 .6) ; interlayer spacing rule aabsSetProp('v12TovD1Stack nil) ; interlayer stacking rule (nil/t) aabsSetProp('v23Tov12 .6) ; interlayer spacing rule aabsSetProp('v23Tov12Stack nil) ; interlayer stacking rule (nil/t) ;---------------------------------------------------------------- ; The following props are used to generate the routing grid ; for pins and obstructions. Poly pin grid is always same as m1. ; Offset is from lowerLeft of prBoundary. ; (Note - use the symbols 'm1 'm2 'm3 for these properties) ; now we set the properties aabsSetPropL('routingPitch 'm1 2.7) aabsSetPropL('routingOffset 'm1 0.0) aabsSetPropL('routingPitch 'm2 2.4) ; size = aabsPropL('routingPitch 'm2) ; aabsSetPropL('routingOffset 'm2 (size/2)) aabsSetPropL('routingOffset 'm2 1.2) aabsSetPropL('routingPitch 'm3 2.7) aabsSetPropL('routingOffset 'm3 0.00) ; Specify pitch based on 'm1-horizontal, 'm2-vertical, and 'm3-horizontal ; (HVH) preferred routing direction. If you need something different, ; contact your Cadence representative. Offset are almost always zero ; or 1/2 of the pitch value. This is important for dot model so that ; cells can be flipped symetrically in x or y. ; Be sure the offset used matches the Plan.RGrid.M<1-6>Offset you ; specify for the initialize floorplan command. By default, it assumes ; all layers have Offset of 1/2 the pitch (which is -1 default value), ; however, in most cases the 'm1 and 'm3 are a zero offset value. ;------------------------------------------------------------------ ; Power pin options ; aabsSetProp('powerNetNames list("vdd!" "gnd!" "vddin" "gndin" "gndm1a!" "gndm2a!" "ngnd!" )) aabsSetProp('powerNetNames list("vdd!" "gnd!" )) size = aabsProp('m1Width) * 3.0 ; tripple min width usually works aabsSetProp('powerMinSize size) ; See README for more information. ; aabsSetPropL('powerStyle "standard" list('minSize 'boundary)) ; aabsSetPropL('powerStyle "standard" list('preset 'boundary)) ; aabsSetPropL('powerStyle "IO" list('preset 'boundary)) ; ; DO NOT demote Metal 2 pins for the MSU library. The only M2 we ; have should be promoted. aabsSetPropL('demotePins "standard" nil) ; ;------------------------------------------------------------------ ; Special options - Put all special options here. See the autoAbgen ; README file for a description of special options. aabsSetPropL('specialTargetOutput "standard" 'asNeeded ) ; aabsSetProp('userCallPostAutoAbgen 'MyModify) ; ;------------------------------------------------------------------ ; Special function to load technology and abgen rules information ; Note: specify all options before first call to autoAbgenLoadTechFile. autoAbgenLoadTechFile() ; This must be called AFTER all options are set ; For multiple libraries, use autoAbgenLoadTechFile("libName") ; for each additional library. Do not change options between calls. autoAbgenTechSummary() ; This prints a summary of P&R technology ;------------------------------------------------------------------ ; The option 'libName is also used to determine the directory to output ; autoAbgen log files. When using selected set, library is derived from ; the selected object. Note that library name can be specified explicitly ; on commands when specifying cellnames by file or in an IL list argument. ; )