gpdk180 DRM PDF
gpdk180 DRM PDF
gpdk180 DRM PDF
Table of Contents
Revision History 2
Nburied rules 4
Nwell rules 5
Pwell rules 6
Oxide Rules 7
N+ Implant rules 9
P+ Implant rules 10
POLY Rules 11
Contact rules 12
Metal rules 13
VIA rules 14
Capacitor Metal 15
Passivation rules 16
Latch-up rules 17
Antenna Rules 18
Density rules 22
Connectivity Definition 23
Resistors 25
Capacitors 29
Inductor 31
Bipolars 32
Nmos 34
HV Nmos 35
RF Nmos 36
RF Pmos 38
Sep 24, 2008 page ii
...contents...
Diodes 39
Junction Varactors 40
Callbacks 48
mosSimInfoRF 63
CDF Definitions 69
MOS Transistor 69
nmos3 69
nmos 71
nmos3hv 73
nmoshv 75
nmosrf 77
pmos3 79
pmos 81
pmos3hv 83
Sep 24, 2008 page iii
...contents...
pmoshv 85
pmosrf 87
PCells 89
MOS Abutment 89
Metal Coverage 90
PCell Macros 91
mos (macro) 91
nmos3 124
pmos3 124
nmos3hv 124
pmos3hv 124
nmos 125
Sep 24, 2008 page iv
...contents...
pmos 125
nmoshv 126
pmoshv 126
nmosrf 127
pmosrf 127
Callbacks 133
...contents...
resPrim 152
resPrim2 153
resPrim3 154
Resistors 155
polyres 155
polyhres 157
nplusres 159
pplusres 161
nwellres 163
mxres 165
...contents...
mimcap 204
...contents...
Capacitor 205
Callbacks 218
mimcap 218
Pcell 219
mimcap 219
ndio 242
pdio 243
inductor 244
vpnp 247
npn 250
pnp 253
nmoscap 262
nmoscap3 263
pmoscap 264
pmoscap3 265
diode 267
Sep 24, 2008 page viii
...contents
inductor 268
bipolar 269
ndio 272
pdio 273
inductor 274
npn 277
pnp 280
vpnp 283
Taps 291
Appendix A A1
Appendix B B1
Sep 24, 2008 page 1
GPDK 180 nm
Mixed Signal
Process Spec
REV 3.3
DISCLAIMER
STATEMENT OF USE
Generator Information
Sample runset for 180 nm
technology
Revision History
DRC Revision History
--------------------------------------------------------------------------------
VERSION v3.3
--------------------------------------------------------------------------------
Changes:
1. gpdk180 OA22 library built natively with IC6.1.3.1 release code
2. gpdk090 CDB library built natively with IC5.10.41_USR5.90.69 release code
3. Added missing 64bit context files (CCR 568109)
4. Renamed LEFDefaultRouteSpec to LEFDefaultRouteSpec_gpdk180 (CCR 594263)
5. Techfile updates made in preparation for IC6.1.3 release
6. Removed CDF extraneous simulation MOS parameters (CCR 595042)
7. Created new QRC database with 3d field solver information
8. Updated stream maps to include fill layer purpose
9. Updated DRC and Extract decks to merge drawing and fill layer purposes
--------------------------------------------------------------------------------
VERSION v3.2
--------------------------------------------------------------------------------
Changes:
1. gpdk180 OA22 library built natively with IC6.1.1 preFCS code
2. Added parasitc AD/AS/PD/PS calculations to the Assura extract rules
3. Added ignore of "simM" to the CPH lam file to solve back annotation problem
4. Updated Circuit prospector libInit settings to match new format
5. Corrected names in the resistor model file for ADS
6. Modified libInit to prevent overwrite of simulation model setup information
7. Modified Assura RF LVS files for VPCM inductor extraction
8. Modified Assura RF LVS files to save additional recognition layers
9. Modified Assura RF LVS files to add dummy device filtering
10. Modified Assura RF LVS files to avoid double counting of contact resistances
11. Added switch to Assura RF LVS files control amount of saved extracted layers
12. Modified SCparameters.cds file for RF kit
13. Updates made to the display.drf file for layout productivity
14. Updates made to the techfile layer display sections for layout productivity
--------------------------------------------------------------------------------
VERSION v3.1
--------------------------------------------------------------------------------
Changes:
1. Gpdk180 OA22 library built natively with IC6.1.0 FCS code
2. Removed DBU settings in the library cdsenv file
3. Updated the CPH Lam file with VXL ignore check parameters
4. Added a PDK version print statement to the library libinit file
5. Added Circuit Prospector default settings in PDK init files
...
Sep 24, 2008 page 3
Nburied rules
Nburied Nburied
1.0 1.0
0A 0B
Sep 24, 2008 page 5
Nwell rules
Nwell Nwell
1.0 1.0
1A 1B
Nburied
Nwell
0.3
1C
Sep 24, 2008 page 6
Pwell rules
Pwell Pwell
1.0 1.0
1D 1E
Nburied
Pwell
0.3
1F
Sep 24, 2008 page 7
Oxide Rules
Oxide Oxide
0.4 0.3
2A 2B
Nwell Pwell
Oxide Oxide
0.5 0.5
2C 2C
0.5 0.5
2D 2D
Oxide Oxide
Sep 24, 2008 page 8
ThickOxide ThickOxide
0.5 0.4
2.5A 2.5B
ThickOxide Oxide
0.25
2.5D
Poly
0.4
2.5E
0.4
2.5F
Poly
0.25
2.5C
Sep 24, 2008 page 9
N+ Implant rules
Nimp Nimp
0.4 0.4
3A 3B
Nimp Nburied
0.2 0.6
3C 3D
Oxide Nimp
Sep 24, 2008 page 10
P+ Implant rules
Pimp Pimp
0.4 0.4
4A 4B
Pimp Nburied
0.2 0.6
4C 4D
Oxide Pimp
Sep 24, 2008 page 11
POLY Rules
Poly Poly
0.18 0.3
5A 5B
Poly
0.2
5C
Oxide
0.4
5D
0.2
5E
Sep 24, 2008 page 12
Contact rules
Cont Cont
0.2 0.2x0.2
6B 6A
Nimp
Oxide
Cont
0.2
6C
Cont
0.2 0.1
6E 6G
0.2
Pimp
Poly 6H
Cont Cont
0.2 0.1
6D 6F
Sep 24, 2008 page 13
macro
Macro Table
$layer1 $layer2 $id1 $id2 $id3
Metal1 Cont 7A 7B 7C
Metal2 Via1 9A 9B 9C
Metal3 Via2NoCapInd 11A 11B 11C
Metal4 Via3 15A 15B 15C
Metal5 Via4 17A 17B 17C
Metal6 Via5 19A 19B 19C
$layer2
0.3 0.3
$id1 $id2
0.1
$id3
Sep 24, 2008 page 14
macro
Macro Table
$layer1 $layer2 $id1 $id2 $id3
Metal1 Via1 8A 8B 8C
Metal2 Via2 10A 10B 10C
Metal3 Via3 14A 14B 14C
Metal4 Via4 16A 16B 16C
Metal5 Via5 18A 18B 18C
$layer2 $layer2
0.3 0.2x0.2
$id2 $id1
$layer1
$layer2
0.1
$id3
Sep 24, 2008 page 15
Capacitor Metal
CapMetal
CapMetal
0.3
12D
0.5
12A
Metal3
Passivation rules
Bondpad Bondpad
45.0 10.0
20A 20B
macro
Latch-up rules
Nwell
NWVIA
PSDarea
<= 10.0 inTub Nwell
13A1
Nburied
! NPNdummy
! PNPdummy
PWNBVIA
NSDarea
<= 10.0 inTub Nburied
13A2
! Nburied
! Pwell
! Nwell
SUBVIA
NSDarea
<= 10.0 inTub !Nburied
13A3
! Nburied
Pwell
! Nwell
PWVIA
NSDarea
<= 10.0 inTub !Nburied
13A3
Sep 24, 2008 page 18
Antenna Rules
switch CHECK_ANTENNA
Antenna Antenna
FIELD_POLY1 Metal6
FIELD_POLY1_CONNECT Via5
Poly Metal5
Via4
ALL_GATES Metal4
Via3
Metal3
Via2NoCapInd
Antenna
Metal2
Ratio <= 200.0 Via1
Metal1
Metal1
Cont
Cont
Poly
Poly
ALL_GATES
ALL_GATES
Sep 24, 2008 page 19
switch CHECK_ANTENNA
Antenna Antenna
Metal2 Metal3
Via1 Via2NoCapInd
Metal1 Metal2
Cont Via1
Poly Metal1
Cont
ALL_GATES Poly
ALL_GATES
Antenna
Metal5
Ratio <= 200.0
Via4
Metal4 Metal4
Via3 Via3
Metal3 Metal3
Via2NoCapInd Via2NoCapInd
Metal2 Metal2
Via1 Via1
Metal1 Metal1
Cont Cont
Poly Poly
ALL_GATES ALL_GATES
Sep 24, 2008 page 20
switch CHECK_ANTENNA
Antenna
Via5dum
Via5
Metal5
Via4
Metal4
Via3
Metal3
Antenna
Via2NoCapInd
Poly Poly
ALL_GATES ALL_GATES
Sep 24, 2008 page 21
switch CHECK_ANTENNA
Antenna Antenna
Via1dum Via2dum
Via1 Via2NoCapInd
Metal1 Metal2
Cont Via1
Poly Metal1
Cont
ALL_GATES Poly
ALL_GATES
Antenna
Via4dum
Ratio <= 20.0
Via4
Via3dum
Metal4
Via3 Via3
Metal3 Metal3
Via2NoCapInd Via2NoCapInd
Metal2 Metal2
Via1 Via1
Metal1 Metal1
Cont Cont
Poly Poly
ALL_GATES ALL_GATES
Sep 24, 2008 page 22
Density rules
switch CHECK_DENSITY
Density
Metal6
Sep 24, 2008 page 23
Connectivity Definition
Connectivity
M6term
Via5
M5term
Via4
M4term
Via3
M3term
Via2NoCapInd Via2Cap
CapMetal
M2term
Via1 INDterm1Cont INDterm2Cont
INDterm1 INDterm2
M1term
POLYcont PSDcont NSDcont
POLYterm NSDterm
NWVIA
PSDterm
NWELLterm
JVARterm PWVIA PWNBVIA SUBVIA
NBVIA
Resistors
RESISTOR
name polyres cellview "polyres ivpcell gpdk180"
type polyres model polyres ivpcell gpdk180
Device Terminals
POLYterm POLYterm
term1 PLUS
term1 POLYRES term2
term2 MINUS
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $poly_rho*length/width
RESISTOR
name polyhres cellview "polyhres ivpcell gpdk180"
type polyhres model polyhres ivpcell gpdk180
Device Terminals
POLYterm POLYterm
term1 PLUS
term1 POLYHRES term2
term2 MINUS
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $polyh_rho*length/width
Sep 24, 2008 page 26
Resistors (cont.)
RESISTOR
name nplusres cellview "nplusres ivpcell gpdk180"
type nplusres model nplusres ivpcell gpdk180
Device Terminals
term1 PLUS NSDterm NSDterm
term2 MINUS term1 NSDRES term2
bulk B PSUB
bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nplus_rho*length/width
RESISTOR
name nplusres cellview "nplusres ivpcell gpdk180"
type nplusres model nplusres ivpcell gpdk180
Device Terminals
term1 PLUS
NSDterm NSDterm
term2 MINUS
term1 ISONSDRES term2
bulk B
ISOPWELL
bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nplus_rho*length/width
Sep 24, 2008 page 27
Resistors (cont.)
RESISTOR
name pplusres cellview "pplusres ivpcell gpdk180"
type pplusres model pplusres ivpcell gpdk180
Device Terminals
term1 PLUS PSDterm PSDterm
term2 MINUS term1 PSDRES term2
bulk B NWELLterm
bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $pplus_rho*length/width
RESISTOR
name nwellres cellview "nwellres ivpcell gpdk180"
type nwellres model nwellres ivpcell gpdk180
Device Terminals
term1 PLUS
term2 MINUS
NWELLterm NWELLterm
term1 NWELLRES term2
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nwell_rho*length/width
Sep 24, 2008 page 28
Resistors (cont.)
macro
Macro Table
$cell $rho $layer1 $layer2
m1res $m1_rho M1term M1res
m2res $m2_rho M2term M2res
m3res $m3_rho M3term M3res
m4res $m4_rho M4term M4res
m5res $m5_rho M5term M5res
m6res $m6_rho M6term M6res
RESISTOR
name $cell cellview "$cell ivpcell gpdk180"
type $cell model $cell ivpcell gpdk180
Device Terminals
term1 PLUS
term2 MINUS
$layer1 $layer1
term1 $layer2 term2
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $rho*length/width
Sep 24, 2008 page 29
Capacitors
CAPACITOR
Device Terminals
plus PLUS
CapMetal
minus MINUS
plus
MIMCAP
M2term
minus
Device Parameters
w ((perimeter*0.25) + 0.5*sqrt( (0.25*perimeter^2) - (4*area) ))*1e-6
l ((perimeter*0.25) - 0.5*sqrt( (0.25*perimeter^2) - (4*area) ))*1e-6
c area*1e-15 + perimeter*1e-16
area area*1e-12
perim perimeter*1e-6
PMOS
POLYterm
DESCRIPTION: gate
Pchannel device PSDterm PSDterm
configured as capacitor source PMOSCAP drain
NWELLterm
Device Parameters
bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6
Sep 24, 2008 page 30
Capacitors (cont.)
NMOS
Device Terminals
source S
gate G
drain D
bulk B
POLYterm
gate
DESCRIPTION: NSDterm NSDterm
Nchannel device
source NMOSCAP drain
configured as capacitor PSUB
Device Parameters bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6
NMOS
POLYterm
DESCRIPTION: gate
Nchannel device NSDterm NSDterm
configured as capacitor source ISONMOSCAP drain
ISOPWELL
Device Parameters
bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6
Sep 24, 2008 page 31
Inductor
BOX
DESCRIPTION:
Inductor. Modelled as Box for
Dracula
Sep 24, 2008 page 32
Bipolars
PNP
Device Terminals
collector C
base B
emitter E PSDterm
emitter
VPNP
DESCRIPTION: NWELLterm
Substrate PNP. collector
base
connects... PSUB
Device Parameters collector
area area
PNP
Device Terminals
collector C
PSDterm
base B
emitter
emitter E
PNP
NWELLterm
base
DESCRIPTION: Pwell
Bipolar PNP.
collector
Nburied
Device Parameters
area area
Sep 24, 2008 page 33
Bipolars (cont.)
NPN
Device Terminals
collector C
base B
NSDterm
emitter E
emitter
NPN
Pwell
DESCRIPTION:
Bipolar NPN. base
Nburied
Nmos
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOS drain
PSUB
DESCRIPTION: bulk
Nchannel device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOS shared)
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOS drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOS...
Sep 24, 2008 page 35
HV Nmos
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOSHV drain
PSUB
DESCRIPTION: bulk
Nchannel HV device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSHV...
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOSHV drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel HV
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOSHV...
Sep 24, 2008 page 36
RF Nmos
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOSRF drain
PSUB
DESCRIPTION: bulk
Nchannel RF device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSRF shared)
NMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOSRF drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel RF
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOSRF shared)
Sep 24, 2008 page 37
PMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOS drain
NWELLterm
DESCRIPTION: bulk
Pchannel device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOS shared)
PMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOSHV drain
NWELLterm
DESCRIPTION: bulk
Pchannel HV device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSHV shared)
Sep 24, 2008 page 38
RF Pmos
PMOS
Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOSRF drain
NWELLterm
DESCRIPTION: bulk
Pchannel RF device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSRF shared)
Sep 24, 2008 page 39
Diodes
DIODE
Device Terminals
anode PLUS
cathode MINUS NSDterm
cathode
NDIODE
PSUB
N type Diode anode
Device Parameters
area area*1e-12
DIODE
Device Terminals
anode PLUS
cathode MINUS PSDterm
anode
PDIODE
NWELLterm
P type Diode cathode
Device Parameters
area area*1e-12
Sep 24, 2008 page 40
Junction Varactors
DIODE
Device Terminals
anode ANODE
cathode CATHODE JVARanode
bulk BULK anode
JVARNF
NWELLterm
P type Diode cathode
PSUB
bulk
Device Parameters
nf (perimeter - 85.2) / 3.6
DIODE
Device Terminals
anode ANODE
cathode CATHODE JVARanode
bulk BULK anode
JVARW40
NWELLterm
P type Diode cathode
PSUB
bulk
Device Parameters
w (perimeter - 134.8) / 2.0 * 1e-6
Sep 24, 2008 page 41
;*********************
;***** LVS RULES *****
;*********************
lvsRules(
;***************
;*** MOSFETS ***
;***************
;*****
;combine parallel MOS devices (mosfets with different l’s are not combined)
;*****
procedure(parallelMOS(m1 m2)
prog((mt)
mt = ncons(nil)
when( and(m1->l m2->l)
unless(abs(m1->l - m2->l) < .005e-6
return("doNotCombine")
)
)
when( and(m1->w m2->w)
unless(m1->m
m1->m = 1
)
unless(m2->m
m2->m = 1
)
mt->w = m1->w * m1->m + m2->w * m2->m
mt->m = 1
mt->l = m1->l
)
return(mt)
)
)
;*****...
Sep 24, 2008 page 42
avCompareRules(
fileVer = "2.3"
fileDate = "Aug 2005"
libType = "GENERIC PDK Process"
libVer = "version 2.3"
refDoc1 = "Library Specification No. GPDK, Version 2.3"
switch !IC61
CDF parameters
name "lxComponentType"
prompt "Virtuoso XL Component Types"
defValue "(((\"cells\" (\"gpdk180 nmos3\" \"gpdk180 nmos\")) (\"type\" \"nmos\")
(\"lxActiveLayer\" \"Oxide drawing\")
(\"lxMOSDeviceType\" \"NMOSHV\") (\"lxDeviceWidth\" \"w\") (\"lxMaxWidth\" 1e-05))
((\"cells\" (\"gpdk180 pmos3\" \"gpdk180 pmos\")) (\"type\" \"pmos\")
(\"lxActiveLayer\" \"Oxide drawing\")
(\"lxMOSDeviceType\" \"PMOS\") (\"lxDeviceWidth\" \"w\") (\"lxMaxWidth\" 1e-05)))"
type "string"
display "nil"
dontSave "nil"
CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "netName"
paramSimType "DC"
paramEvaluate "t nil nil nil nil"
paramDisplayMode "parameter"
Sep 24, 2008 page 44
Global Parameters
mos_msDiff {2B} Minimum diffusion spacing
mos_mxGate {5C} Minimum gate extension
mos_msGate {5B} Minimum gate spacing
mos_meDiffGate {5D} Minimum diffusion enclosure of gate
mos_msGateCont {6E} Minimum gate to contact spacing
mos_mwPoly {5A} Minimum poly width on field
mos_msDiffPoly {5E} Minimum diffusion to poly spacing
mos_mwCont {6A} Minimum & maximum contact width
mos_msCont {6B} Minimum contact spacing
mos_masCont {6B} Minimum contact array spacing
mos_meDiffCont {6C} Minimum diffusion enclosure of contact
mos_meeDiffCont {6C} Minimum diffusion end enclosure of contact
mos_mePolyCont {6D} Minimum poly enclosure of contact
mos_meePolyCont {6D} Minimum poly end enclosure of contact
mos_mwM1 {7A} Minimum metal 1 width
mos_msM1 {7B} Minimum metal 1 spacing
mos_meM1Cont {7C} Minimum metal 1 enclosure of contact
mos_meeM1Cont {7C} Minimum metal 1 end enclosure of contact
Sep 24, 2008 page 46
Global Parameters
nmos_meImplDiff {4C} Minimum implant enclosure of diffusion
nmos_meImplGate 0.12 Minimum implant enclosure of gates
nmos_meeImplGate 0.12 Minimum implant end enclosure of gates
nmos_meImplPoly 0.12 Minimum implant enclosure of field poly
nmos_meImplCont 0.0 Minimum implant enclosure of contact
nmos_meVoltDiff {2.5C} Minimum thick oxide enclosure of thin oxide diffusion
nmos_meVoltImpl nil Minimum thick oxide enclosure of implant
nmos_meWellDiff {2C} Minimum wellbody enclosure of diffusion
nmos_meWellVolt 0.0 Minimum wellbody enclosure of thick diffusion
nmos_meVthDiff 0.0 Minimum high-vt implant enclosure of diffusion
nmos_meVthGate 0.0 Minimum high-vt implant enclosure of gates
nmos_meeVthGate 0.0 Minimum implant end enclosure of gates
nmos_meNtnDiff 0.0 Minimum NTN enclosure of thin oxide diffusion
nmos_meNtnImpl 0.0 Minimum NTN enclosure of implant
nmos_meWellNtn 0.0 Minimum wellbody enclosure of NTN
Global Parameters
pmos_meImplDiff {4C} Minimum implant enclosure of diffusion
pmos_meImplGate 0.12 Minimum implant enclosure of gates
pmos_meeImplGate 0.12 Minimum implant end enclosure of gates
pmos_meImplPoly 0.12 Minimum implant enclosure of field poly
pmos_meImplCont 0.0 Minimum implant enclosure of contact
pmos_meVoltDiff {2.5C} Minimum thick oxide enclosure of thin oxide diffusion
pmos_meVoltImpl nil Minimum thick oxide enclosure of implant
pmos_meWellDiff {2C} Minimum wellbody enclosure of diffusion
pmos_meWellVolt 0.0 Minimum wellbody enclosure of thick diffusion
pmos_meVthDiff 0.0 Minimum high-vt implant enclosure of diffusion
pmos_meVthGate 0.0 Minimum high-vt implant enclosure of gates
pmos_meeVthGate 0.0 Minimum implant end enclosure of gates
Sep 24, 2008 page 47
Global Parameters
tap_nmos_msTapDiff 0.0 Minimum tap diffusion to device diffusion spacing
tap_nmos_msTapImpl {3C} Minimum tap diffusion to device implant spacing
tap_nmos_meTimpTap {4C} Minimum tap implant enclosure of tap diffusion
tap_nmos_msTimpDiff 0.0 Minimum tap implant to device diffusion spacing
tap_nmos_msTimpImpl 0.0 Minimum tap implant to device implant spacing
tap_nmos_maTap 0.16 Minimum tap diffusion area
tap_nmos_maTimp 0.36 Minimum tap implant area
tap_nmos_meWellTap 0.0 Minimum well enclosure of tap diffusion
tap_nmos_msTapVolt 0.25 Minimum tap diffusion to thick oxide spacing
tap_nmos_mwItap 0.50 Minimum width of integrated tap
tap_nmos_msItapGate 0.50 Minimum integrated tap spacing to gate
tap_nmos_maItimp 0.36 Minimum integrated tap implant area
tap_nmos_meItimpItap {4C} Minimum integrated tap implant enclosure of tap
tap_nmos_meItimpCont 0.10 Minimum integrated tap implant enclosure of contact
tap_nmos_msTapNtn 0.0 Minimum tap diffusion to NTN spacing
Global Parameters
tap_pmos_msTapDiff 0.0 Minimum tap diffusion to device diffusion spacing
tap_pmos_msTapImpl {3C} Minimum tap diffusion to device implant spacing
tap_pmos_meTimpTap {4C} Minimum tap implant enclosure of tap diffusion
tap_pmos_msTimpDiff 0.0 Minimum tap implant to device diffusion spacing
tap_pmos_msTimpImpl 0.0 Minimum tap implant to device implant spacing
tap_pmos_maTap 0.16 Minimum tap diffusion area
tap_pmos_maTimp 0.36 Minimum tap implant area
tap_pmos_meWellTap {2C} Minimum well enclosure of tap diffusion
tap_pmos_msTapVolt 0.25 Minimum tap diffusion to thick oxide spacing
tap_pmos_mwItap 0.50 Minimum width of integrated tap
tap_pmos_msItapGate 0.50 Minimum integrated tap spacing to gate
tap_pmos_maItimp 0.36 Minimum integrated tap implant area
tap_pmos_meItimpItap {4C} Minimum integrated tap implant enclosure of tap
tap_pmos_meItimpCont 0.10 Minimum integrated tap implant enclosure of contact
Global Parameters
mos_perimGateEdge t Use four sides to calculate ps, pd
mos_aggregateFingers nil Aggregate fingers: affects simM, as,ad,ps,pd
Sep 24, 2008 page 48
Callbacks
CDF Callback
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Perforce: $File$
; $Revision$
; $DateTime$
; $Change$
; $Author$
;
; Description: MOS Transistor CDF Callback
;
; Author: Amir Kouchekinia <[email protected]>
; Created: Nov 6 16:41 02
; Modified: Nov 6 16:41 02 14419 amir
; Language: Skill
; Package: Primitive_mos
; MainFun: gpdk180_mosCB
; Status: Experimental (Do Not Distribute)
;
; (C) Copyright 2002, Cadence Design Systems, all rights reserved.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
let(
(
cdfId cellName libName procName paramId
dpt grid scale sGrid doList
applyThresh mode min max value
fingers w fw threshold
)
caseq( concat(cdfId~>type)
( ( cellData baseCellData userCellData )
cellName = cdfId~>id~>name
libName = cdfId~>id~>lib~>name
)
( instData
cellName = cdfId~>id~>master~>cellName
libName = cdfId~>id~>master~>libName
)
( t...
Sep 24, 2008 page 49
CDF parameters
name "model"
prompt "Model Name"
defValue gpdk180_mosValue( ’model ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’model)"
editable "nil"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’m )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "simM"
prompt "Simulation Multiplier"
defValue gpdk180_mosValue( ’simM ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 50
CDF parameters
name "l"
prompt "Length"
units "lengthMetric"
defValue gpdk180_mosValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "w"
prompt "Total Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’w ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’w )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "fw"
prompt "Finger Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’fw ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’fw )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 51
CDF parameters
name "simW"
prompt "Simulation Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’simW ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "fingers"
prompt "Fingers"
defValue gpdk180_mosValue( ’fingers ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’fingers )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "threshold"
prompt "Threshold"
units "lengthMetric"
defValue gpdk180_mosValue( ’threshold ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’threshold )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "applyThresh"
prompt "Apply Threshold"
defValue nil
type "boolean"
display "t"
callback "gpdk180_mosCB( ’applyThresh )"
Sep 24, 2008 page 52
CDF parameters
name "connectGates"
prompt "Gate Connection"
defValue "None"
choices ’("None" "Top" "Bottom" "Both" "Alternate")
type "radio"
display "t"
CDF parameters
name "connectSD"
prompt "S/D Connection"
defValue "None"
choices ’("None" "Source" "Drain" "Both")
type "radio"
display "gpdk180_mosDisplay(’connectSD)"
CDF parameters
name "sdMtlWidth"
prompt "S/D Metal Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’sdMtlWidth ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’sdMtlWidth)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 53
CDF parameters
name "mtlCvg"
prompt "Metal Coverage"
defValue ""
type "string"
display "nil"
callback "gpdk180_mosCB( ’mtlCvg )"
CDF parameters
name "switchSD"
prompt "Switch S/D"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’switchSD)"
callback "gpdk180_mosCB( ’switchSD )"
CDF parameters
name "leftAbut"
prompt "Left Abutment"
defValue 0
type "int"
display "nil"
editable "t"
callback "gpdk180_mosCB( ’leftAbut)"
CDF parameters
name "rightAbut"
prompt "Right Abutment"
defValue 0
type "int"
display "nil"
editable "t"
callback "gpdk180_mosCB( ’rightAbut)"
Sep 24, 2008 page 54
CDF parameters
name "tap"
prompt "Bodytie Type"
defValue "None"
choices ’( "None" "Integrated" "Detached" )
type "cyclic"
display "t"
callback "gpdk180_mosCB( ’tap)"
CDF parameters
CDF parameters
name "tapExtension"
name "tapCntRows"
prompt "Tap Extension"
prompt "Tap Contact Rows"
defValue ""
defValue 1
type "string"
type "int"
display "gpdk180_mosDisplay( ’tapExtension )"
display "gpdk180_mosDisplay( ’tapCntRows )"
callback "gpdk180_mosCB( ’tapExtension )"
Sep 24, 2008 page 55
CDF parameters
name "showSimParams"
prompt "Show Sim Parameters"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’showSimParams)"
CDF parameters
name "editAreaPerim"
prompt "Edit Area & Perim"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’editAreaPerim)"
callback "gpdk180_mosCB( ’editAreaPerim )"
CDF parameters
name "ad"
prompt "Drain diffusion area"
defValue gpdk180_mosValue( ’ad ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’ad)"
callback "gpdk180_mosCB( ’ad )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "as"
prompt "Source diffusion area"
defValue gpdk180_mosValue( ’as ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’as)"
callback "gpdk180_mosCB( ’as )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 56
CDF parameters
name "pd"
prompt "Drain diffusion periphery"
units "lengthMetric"
defValue gpdk180_mosValue( ’pd ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’pd)"
callback "gpdk180_mosCB( ’pd )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "ps"
prompt "Source diffusion periphery"
units "lengthMetric"
defValue gpdk180_mosValue( ’ps ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’ps)"
callback "gpdk180_mosCB( ’ps )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "nrd"
prompt "Drain diffusion res squares"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’nrd )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "nrs"
prompt "Source diffusion res squares"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’nrs )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 57
CDF parameters
name "ld"
prompt "Drain diffusion length"
units "lengthMetric"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’ld )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "ls"
prompt "Source diffusion length"
units "lengthMetric"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’ls )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "off"
prompt "Device initially off"
type "boolean"
display "gpdk180_mosDisplay( ’off )"
Sep 24, 2008 page 58
CDF parameters
name "Vds"
prompt "Drain source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vds )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "Vgs"
prompt "Gate source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vgs )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "Vbs"
prompt "Bulk source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vbs )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "trise"
prompt "Temp rise from ambient"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’trise )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 59
CDF parameters
name "rdc"
prompt "Additional drain resistance"
units "current"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’rdc )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "rsc"
prompt "Additional source resistance"
units "current"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’rsc )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "dtemp"
prompt "Temperature difference"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’dtemp )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "geo"
prompt "Source/drain selector"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’geo )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 60
CDF parameters
name "pasUpdateParamList"
prompt "PAS Update Param List"
defValue "l"
type "string"
display "nil"
editable "nil"
switch !IC61
CDF parameters
name "lxIgnoredParamsForCAS"
prompt "lxIgnoredParamsForCAS"
defValue "connectGates connectSD mtlCvg leftAbut rightAbut showSimParams switchSD ad as pd ps"
type "string"
display "nil"
editable "nil"
CDF properties
formInitProc "PasCdfFormInit"
doneProc "PasCdfDone"
buttonFieldWidth 340
fieldHeight 35
fieldWidth 500
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "voltage"
paramSimType "DC"
paramEvaluate "nil nil nil t nil"
paramDisplayMode "parameter"
modelLabelSet "vto kp gamma"
opPointLabelSet "id vgs vds gm"
paramLabelSet "-model w l m"
Sep 24, 2008 page 61
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Width Length As Ad Ps Pd Nrd Nrs ld ls _M Trise)
componentName nil
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil Width simW Length l As as Ad ad Ps ps Pd pd Nrd nrd Nrs nrs _M simM Trise trise Region region)
typeMapping nil
uselib nil
CDF siminfo
simulator ams
propMapping ( nil m simM w simW )
namePrefix ""
isPrimitive t
instParameters (w l as ad ps pd nrd nrs ld ls m trise model)
otherParameters (model)
CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (M L W)
propMapping (nil M m L l W w)
namePrefix "M"
CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (m l w)
permuteRule "(p D S)"
namePrefix "M"
Sep 24, 2008 page 62
CDF siminfo
simulator spectre
propMapping ( nil m simM w simW )
namePrefix ""
otherParameters (model)
instParameters (w l as ad ps pd nrd nrs ld ls m trise)
termMapping (nil D \:d G \:g S \:s B \:b)
Sep 24, 2008 page 63
mosSimInfoRF
CDF macro mosSimInfoRF
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Width Length fingers simM)
componentName nil
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil Width simW Length l)
typeMapping nil
uselib nil
CDF siminfo
simulator ams
propMapping ( nil w simW )
namePrefix ""
isPrimitive t
instParameters (w l fingers simM)
otherParameters (model)
CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (M L W)
propMapping (nil M m L l W w)
namePrefix "M"
CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (m l w)
permuteRule "(p D S)"
namePrefix "M"
Sep 24, 2008 page 64
CDF siminfo
simulator spectre
propMapping ( nil w simW )
namePrefix ""
otherParameters (model)
instParameters (w l fingers simM)
termMapping (nil D \:d G \:g S \:s B \:b)
Sep 24, 2008 page 65
CDF siminfo
simulator ads
termOrder (D G S bulkn)
CDF siminfo
simulator ams
termOrder (D G S bulkn)
extraTerminals ((nil name "bulkn" direction "inputOutput" netExpr "[@bulkn:%:gnd!]"))
CDF siminfo
simulator ads
termOrder (D G S bulkp)
CDF siminfo
simulator ams
termOrder (D G S bulkp)
extraTerminals ((nil name "bulkp" direction "inputOutput" netExpr "[@bulkp:%:vdd!]"))
CDF siminfo
simulator auLvs
componentName "nmos"
CDF siminfo
simulator auCdl
componentName nil
modelName "nmos"
CDF cellview
symbol pas_std nmos3 symbol
auCdl pas_std nmos3 spectre
auLvs pas_std nmos3 spectre
spectre pas_std nmos3 spectre
ads pas_std nmos3 spectre
Sep 24, 2008 page 71
nmos
CDF gpdk180 nmos
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "nmos"
CDF cellview
symbol pas_std nmos4 symbol
auCdl pas_std nmos4 symbol
auLvs pas_std nmos4 symbol
spectre pas_std nmos4 symbol
ads pas_std nmos4 symbol
ivpcell $lib $cell symbol 5
nmos3hv
CDF gpdk180 nmos3hv
CDF siminfo
simulator auLvs
componentName "nmoshv"
CDF siminfo
simulator auCdl
componentName nil
modelName "nmoshv"
CDF cellview
symbol pas_std nmos3_hv symbol
auCdl pas_std nmos3_hv spectre
auLvs pas_std nmos3_hv spectre
spectre pas_std nmos3_hv spectre
ads pas_std nmos3_hv spectre
Sep 24, 2008 page 75
nmoshv
CDF gpdk180 nmoshv
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"
CDF cellview
symbol pas_std nmos4_hv symbol
auCdl pas_std nmos4_hv symbol
auLvs pas_std nmos4_hv symbol
spectre pas_std nmos4_hv symbol
ads pas_std nmos4_hv symbol
ivpcell $lib $cell symbol 5
nmosrf
CDF gpdk180 nmosrf
CDF device params
grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos_rf" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"
CDF cellview
symbol baseline_gpdk nmosrf symbol
auCdl baseline_gpdk nmosrf symbol
auLvs baseline_gpdk nmosrf symbol
spectre baseline_gpdk nmosrf symbol
ads baseline_gpdk nmosrf symbol
ivpcell $lib $cell symbol 5
pmos3
CDF gpdk180 pmos3
CDF siminfo
simulator auLvs
componentName "pmos"
CDF siminfo
simulator auCdl
componentName nil
modelName "pmos"
CDF cellview
symbol pas_std pmos3 symbol
auCdl pas_std pmos3 spectre
auLvs pas_std pmos3 spectre
spectre pas_std pmos3 spectre
ads pas_std pmos3 spectre
Sep 24, 2008 page 81
pmos
CDF gpdk180 pmos
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"
CDF cellview
symbol pas_std pmos4 symbol
auCdl pas_std pmos4 symbol
auLvs pas_std pmos4 symbol
spectre pas_std pmos4 symbol
ads pas_std pmos4 symbol
ivpcell $lib $cell symbol 5
pmos3hv
CDF gpdk180 pmos3hv
CDF siminfo
simulator auLvs
componentName "pmoshv"
CDF siminfo
simulator auCdl
componentName nil
modelName "pmoshv"
CDF cellview
symbol pas_std pmos3_hv symbol
auCdl pas_std pmos3_hv spectre
auLvs pas_std pmos3_hv spectre
spectre pas_std pmos3_hv spectre
ads pas_std pmos3_hv spectre
Sep 24, 2008 page 85
pmoshv
CDF gpdk180 pmoshv
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"
CDF cellview
symbol pas_std pmos4_hv symbol
auCdl pas_std pmos4_hv symbol
auLvs pas_std pmos4_hv symbol
spectre pas_std pmos4_hv symbol
ads pas_std pmos4_hv symbol
ivpcell $lib $cell symbol 5
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"
CDF cellview
symbol baseline_gpdk pmosrf symbol
auCdl baseline_gpdk pmosrf symbol
auLvs baseline_gpdk pmosrf symbol
spectre baseline_gpdk pmosrf symbol
ads baseline_gpdk pmosrf symbol
ivpcell $lib $cell symbol 5
case( event
( 1 ;; compute abutment offset
0.0
)
( 2 ;; adjust pcell for abutment
apA = pA~>abutParam
apB = pB~>abutParam
avA = get(iA apA)
avB = get(iB apB)
;; save current state
dbReplaceProp( group
sprintf(nil "abutInfo_%s" iA~>name)
"list"
list(
list(concat(apA) avA)
))
dbReplaceProp( group
sprintf(nil "abutInfo_%s" iB~>name)
"list"
list(
list(concat(apB) avB)
))
case( connection
( 1 ;; no third connection, remove both contacts
delta = pB~>gateWidth - pA~>gateWidth
cond(
( delta > epsilon
avA = 6
avB = 2
)
( delta < -epsilon
avA = 2
avB = 6
)
( t
avA = 4
avB = 4
)
)
)...
Sep 24, 2008 page 90
)
( t
top = top - inc
)
) ; ** cond not **
)
) ; ** caseq handle **
unless( and(zerop(top) zerop(bot))...
Sep 24, 2008 page 91
PCell Macros
mos (macro)
1: include deviceProps
meDiffCont = dpt->meDiffCont
meeDiffCont = dpt->meeDiffCont || meDiffCont
meDiffGate = dpt->meDiffGate
msGateCont = dpt->msGateCont
msDiffPoly = dpt->msDiffPoly
msDiffGate = dpt->msDiffGate || msDiffPoly
mePolyCont = dpt->mePolyCont
meePolyCont = dpt->meePolyCont || mePolyCont
mxGate = dpt->mxGate
msGate = dpt->msGate
mwCont = dpt->mwCont
msCont = dpt->msCont
mwM1 = dpt->mwM1
msM1 = dpt->msM1
meM1Cont = dpt->meM1Cont
meeM1Cont = dpt->meeM1Cont || meM1Cont
Sep 24, 2008 page 92
4: include
6: include
1: if not( dogbone )
alDiff = gw
dwDiff = max( msGate ( cntSpan + ( 2.0 * msGateCont ) ) ) swDiff = dwDiff
2: if dogbone
alDiff = mlDiff
dwDiff = cntSpan + ( 2.0 * meDiffCont ) swDiff = dwDiff
8: include
10: include
gate[1]
Poly
diffg[1]
Oxide
gw
gw
gl
gl boolean lxBlockExtractCheck = t
ref
boolean lxBlockOverlapCheck = t
Sep 24, 2008 page 95
11: for f 2 gc
1: if not(dogbone)
gate[f]
diff[f-1]
Poly
diffg[f-1]
Oxide diffg[f]
Oxide Oxide
gw
alDiff gw
gl
gl
cwDiff
boolean lxBlockOverlapCheck = t
boolean lxBlockExtractCheck = t
1: if dogbone
gate[f]
diff[f-1]
Poly
diffg[f-1]
Oxide diffg[f]
Oxide Oxide Oxide Oxide
gw
gw alDiff gw gw
gl
gl
cwDiff
cwStep
cwStep
boolean lxBlockOverlapCheck = t
0.0 bhStep 0.0 bhStep
boolean lxBlockExtractCheck = t
Sep 24, 2008 page 96
12: include
diff[0] diff[0]
diffg[1] diffg[1]
Oxide Oxide
Oxide Oxide Oxide
tmp alDiff gw
lwDiff lwDiff
lwStep
0 bhStep
diff[gc] diff[gc]
diffg[gc]
diffg[gc] Oxide Oxide
Oxide Oxide
Oxide
tmp gw alDiff
rwDiff rwDiff
0 bhStep
rwStep
Sep 24, 2008 page 97
13: include
1: include
diff[0] diff[0]
Oxide Oxide
tmp = if( connectS then 0 else gc ) tmp = if( connectD then 0 else gc )
diff[gc] diff[gc]
Oxide Oxide
14: include
for f 0 gc
2: if f == 0 2: if f != 0
diff[f] diff[f]
awM1 awM1
Oxide Oxide
Metal1 Metal1
alM1 alM1
metal[f] metal[f]
xSep botSep xSep botSep
Sep 24, 2008 page 99
mtlCvg
3: include
mwCont
rightSep meeM1Cont
int col = f
int cols = gc + 1
space msCont msCont float minLength = mlM1
float maxLength = xlM1
mwCont
leftSep meeM1Cont
param mtlCvg
metal[f]
relative y
mwCont userFunc "gpdk180_mtlCvgUserFunc"
4: if isSource 4: if not(isSource)
tmp = if( connectS then 0 else f ) tmp = if( connectD then 0 else f )
for f 0 gc
metal[f]
"D" inOut
awSDM
xSep 0 none
must group drain[0]
car(delta) + msM1
Metal1
botMx[f]
topMx[f]
Metal1
cadr(delta) + msM1
metal[f]
Metal1
Sep 24, 2008 page 101
connectSD
if connectS connectS
1: include
bi = if( switchSD then 1 else 0 )
ei = if( PasXor( evenp( gc ) switchSD ) then gc else gc - 1 )
2: include
<-Metal1->
0 awSDM
Metal1 Metal1
topMx[bi] topMx[ei]
"S" inOut
left right top
must group source[0]
if connectD connectD
1: include
bi = if( switchSD then 0 else 1 )
ei = if( PasXor( evenp( gc ) switchSD ) then gc - 1 else gc )
2: include
Metal1 Metal1
botMx[bi] botMx[ei]
<-Metal1->
0 awSDM
"D" inOut
left right bottom
must group drain[0]
Sep 24, 2008 page 102
2: include
3: for f 1 gc polyExtLoop
topSep = if( alternateGC && f == gc && oddp(f) then mxGate else topExt )
botSep = if( alternateGC && ( f ==1 || ( f == gc && evenp(f) ) ) then mxGate else botExt )
topGx[f]
Poly gate[f]
Poly
botGx[f]
topSep Poly
gl botSep
boolean lxBlockOverlapCheck = t gl
Sep 24, 2008 page 103
polyExtLoop
topPinExt botPinExt
gl gl
2: if connectTG || alternateGC
3: for f 1 ei connectGLoop
connectGLoop
topGC[f]
mwCont
<-Poly->
Cont[] Cont[]
mwCont mwCont
<-Metal1->
Poly Poly
"G" inOut
left right top
topGx[f] must group gct[f] topGx[index]
leftSep 0
hSep vSep meeM1Cont meM1Cont
rightSep awPoly
mwCont
space msCont msCont
Cont[] Cont[]
mwCont mwCont
<-Metal1->
<-Poly->
mwCont
botGC[f]
2: include
meImplDiff = dpt->meImplDiff
meImplPoly = dpt->meImplPoly
meImplGate = dpt->meImplGate
meeImplGate = when( meImplGate dpt->meeImplGate || meImplGate )
meImplCont = dpt->meImplCont
20: include
1: include preImplant
1: include
3: include
test = if( onep(gc) then lwDiff + lwStep + leftSep + gl + rwDiff + rwStep + rightSep > epsilon else t )
2: if test implant
rightSep topSep
<-$pcLayer1->
Oxide Oxide
diff[0]
diff[gc]
leftSep botSep
Sep 24, 2008 page 106
implant
leftSep = cond(
( leftAbut ==0 polyEnc->left + ( meImplPoly || meImplGate ) )
( abs( leftAbut ) < 3 lwDiff + meImplDiff )
( abs( leftAbut ) > 5 lwDiff - meImplDiff )
( t lwDiff ) )
rightSep = cond(
( rightAbut ==0 polyEnc->right + ( meImplPoly || meImplGate ) )
( abs( rightAbut ) < 3 rwDiff + meImplDiff )
( abs( rightAbut ) > 5 rwDiff - meImplDiff )
( t rwDiff ) )
Sep 24, 2008 page 107
implantGate
2: include
<-$pcLayer1->
Poly Poly
rightSep topSep
leftSep tmp
topGx[1] topGx[gc]
3: include
rightSep botSep
<-$pcLayer1->
Sep 24, 2008 page 108
mos_rf (macro)
pcell macro mos_rf
2: include
meRfDiff = dpt->meVoltDiff
meRfImpl = dpt->meVoltImpl
1: if meRfImpl
2: include
<-RFdummy->
Oxide Oxide
rfEnc->left botRfSep diff[0]
rfEnc->right topRfSep
diff[gc]
Sep 24, 2008 page 109
mos_volt (macro)
pcell macro mos_volt
2: include
meVoltDiff = dpt->meVoltDiff
meVoltImpl = dpt->meVoltImpl
1: if meVoltImpl
2: include
<-ThickOxide->
Oxide Oxide
voltEnc->left botSep diff[0]
voltEnc->right topSep
diff[gc]
Sep 24, 2008 page 110
mos_volt_tap (macro)
pcell macro mos_volt_tap
2: include
msTapVolt = dpt->msTapVolt
mos_volt
3: include
2: include
meWellDiff = dpt->meWellDiff
40: include
<-$pcLayer1-> well
Oxide Oxide
meWellDiff botSep diff[0]
meWellDiff topSep
diff[gc]
Sep 24, 2008 page 111
2: include
40: include
$tapEnc $tapEnc
$tapEnc $tapEnc
$tapEnc $tapEnc
$tapEnc $tapEnc
$diffEnc botSep
$tapEnc $tapEnc
rightTap
"B" inOut
botTap
none $tapEnc $tapEnc diff[gc]
Sep 24, 2008 page 112
mosItap (macro)
2: include
mwItap = dpt->mwItap || 0
msItapGate = dpt->msItapGate
maItimp = dpt->maItimp
meItimpCont = dpt->meItimpCont
meItimpItap = dpt->meItimpItap
leftItap = tap == "Integrated" && leftTap && leftAbut == 0
rightItap = tap == "Integrated" && rightTap && rightAbut == 0
7: if leftItap || rightItap
if leftItap
if rightItap
preImplant
2: if leftItap 2: if rightItap
leftSep = meM1Cont
rightSep = meM1Cont + mwCont
if leftItap
mwCont
Metal1
leftSep meeM1Cont
metal[0] mwCont
if rightItap
mwCont
Metal1
metal[gc] mwCont
Sep 24, 2008 page 114
15: include
if leftItap if rightItap
<-Metal1-> <-Metal1->
metal[0] metal[gc]
Metal1 Metal1
"B" inOut "B" inOut
left top bottom left top bottom
xSep = meItimpItap
2: if maItimp
3: if leftItap 4: if rightItap
<-$pcLayer1-> <-$pcLayer1->
Oxide Oxide
diff[0] diff[gc]
mosTap (macro)
1: if deTap
msTapDiff = dpt->msTapDiff
meTimpTap = dpt->meTimpTap
msTapImpl = dpt->msTapImpl || 0.0
msTimpDiff = dpt->msTimpDiff || 0.0
msTimpImpl = dpt->msTimpImpl || 0.0
maTap = dpt->maTap
7: if deTap
if topTap || bottomTap
connectS
3: if topTap
connectD
3: if bottomTap
30: if deTap
1: include
1: include
tmp = max(
msDiffPoly
if( meImplPoly then meImplPoly + meTimpTap + msTimpImpl else meTimpTap )
)
tapSp = PasConstrainSpacing( tapSp ?top ( polyEnc->top + tmp )
?bottom ( polyEnc->bottom + tmp ) )
2: include
if topTap
param tapExtension
lySep = tapSp->top + lhStep relative y
dispName Top Tap Separation
rySep = tapSp->top + rhStep
dispExpr tapExt->top
userData list( nil ’side ’top )
userFunc "gpdk180_mosTapUserFunc"
<-Oxide-> topTap
diff[gc]
if bottomTap
Oxide Oxide
diff[gc]
diff[0]
botTap
param tapExtension
lySep = tapSp->bottom + lhStep relative y
dispName Bottom Tap Separation
rySep = tapSp->bottom + rhStep
dispExpr tapExt->bottom
userData list( nil ’side ’bottom )
userFunc "gpdk180_mosTapUserFunc"
Sep 24, 2008 page 118
if leftTap
<-Oxide->
tapSp->left tySep
Oxide
param tapExtension
diff[0]
relative x
dispName Left Tap Separation
dispExpr tapExt->left
userData list( nil ’side ’left )
userFunc "gpdk180_mosTapUserFunc" tapSp->left + tapWidth bySep
leftTap
if rightTap
<-Oxide->
tapSp->right tySep
rightTap
Sep 24, 2008 page 119
if topTap
xSep ySep
<-Oxide->
<-Metal1->
Cont[] Cont[]
mwCont mwCont
"B" inOut
all
xSep ySep mwCont mwCont
topTap
meeM1Cont meM1Cont
if bottomTap
meeM1Cont meM1Cont
space msCont msCont
botTap
xSep ySep
Cont[] Cont[]
mwCont mwCont
"B" inOut
<-Metal1-> xSep ySep
all
<-Oxide->
mwCont mwCont
meeM1Cont meM1Cont
Sep 24, 2008 page 120
if leftTap
mwCont
leftTap
<-Oxide->
xSep tySep
Cont[]
mwCont
meM1Cont tcSep
"B" inOut
all
space msCont msCont
<-Metal1->
mwCont
xSep bySep
mwCont
Sep 24, 2008 page 121
leftRightTap
if rightTap
mwCont
rightTap
<-Oxide->
xSep tySep
Cont[]
mwCont
meM1Cont tcSep
"B" inOut
all
space msCont msCont <-Metal1->
Cont[]
meM1Cont bcSep
mwCont
xSep bySep
mwCont
Sep 24, 2008 page 122
mosTap_pplus (macro)
pcell macro mosTap_pplus
if topTap if bottomTap
<-Pimp-> <-Pimp->
<-Oxide-> <-Oxide->
if leftTap if rightTap
leftTap rightTap
<-Pimp-> <-Pimp->
<-Oxide-> <-Oxide->
mosTap_nplus (macro)
pcell macro mosTap_nplus
if topTap if bottomTap
<-Nimp-> <-Nimp->
<-Oxide-> <-Oxide->
if leftTap if rightTap
leftTap rightTap
<-Nimp-> <-Nimp->
<-Oxide-> <-Oxide->
PCell Devices
Global Parameters
nplus_rho 50 Sheet Rho for nplusres
pplus_rho 158 Sheet Rho for pplusres
poly_rho 7.5 Sheet Rho for polyres
polyh_rho 352 Sheet Rho for polyhres
nwell_rho 415 Sheet Rho for nwellres
m1_rho 0.01 Sheet Rho for nwellres
m2_rho 0.01 Sheet Rho for nwellres
m3_rho 0.01 Sheet Rho for nwellres
m4_rho 0.01 Sheet Rho for nwellres
m5_rho 0.01 Sheet Rho for nwellres
m6_rho 0.01 Sheet Rho for nwellres
Sep 24, 2008 page 130
Poly Resistor
Global Parameters
rpoly_mwDevice 0.6 Minimum poly resistor width
rpoly_mlDevice 0.6 Minimum poly resistor length
rpoly_mnSquares 1 Minimum number of squares
rpoly_mwRes {5A} Minimum poly width
rpoly_msRes {5B} Minimum poly spacing
rpoly_mwCont {6A} Minimum & maximum contact width
rpoly_msCont {6B} Minimum contact spacing
rpoly_meResCont {6D} Minimum poly enclosure of contact
rpoly_meeResCont {6D} Minimum poly end enclosure of contact
rpoly_mwM1 {7A} Minimum metal 1 width
rpoly_msM1 {7B} Minimum metal 1 spacing
rpoly_meM1Cont {7C} Minimum metal 1 enclosure of contact
rpoly_meeM1Cont {7C} Minimum metal 1 end enclosure of contact
Global Parameters
rnpoly_meImplRes 0.0 Minimum n+ implant enclosure of resistor
rppoly_meImplRes 0.0 Minimum p+ implant enclosure of resistor
rpoly_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
rpoly_meSbRes 0.0 Minimum Sb enclosure of resistor
rpoly_msSbCont 0.0 Minimum Sb to contact spacing
rpoly_msSbRes 0.0 Minimum Sb to poly spacing
rppoly_meWellRes 0.0 Minimum well enclosure of resistor
Sep 24, 2008 page 131
Diffusion Resistor
Global Parameters
rdiff_mwDevice 0.6 Minimum diff resistor width
rdiff_mlDevice 0.6 Minimum diff resistor length
rdiff_mnSquares 1 Minimum number of squares
rdiff_mwRes {2A} Minimum diffusion width
rdiff_msRes {2B} Minimum diffusion spacing
rdiff_mwCont {6A} Minimum & maximum contact width
rdiff_msCont {6B} Minimum contact spacing
rdiff_meResCont {6C} Minimum diff enclosure of contact
rdiff_meeResCont {6C} Minimum diff end enclosure of contact
rdiff_mwM1 {7A} Minimum metal 1 width
rdiff_msM1 {7B} Minimum metal 1 spacing
rdiff_meM1Cont {7C} Minimum metal 1 enclosure of contact
rdiff_meeM1Cont {7C} Minimum metal 1 end enclosure of contact
Global Parameters
rndiff_meImplRes {3C} Minimum n+ implant enclosure of resistor
rpdiff_meImplRes {4C} Minimum p+ implant enclosure of resistor
rdiff_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
rdiff_meSbRes 0.0 Minimum Sb enclosure of resistor
rdiff_msSbCont 0.0 Minimum Sb to contact spacing
rdiff_msSbRes 0.0 Minimum Sb to diff spacing
rpdiff_meWellRes {2C} Minium well enclosure of resistor
Sep 24, 2008 page 132
NWell Resistor
Global Parameters
rnw_mwDevice 1.6 Minimum diff resistor width
rnw_mlDevice 2.0 Minimum diff resistor length
rnw_mnSquares 1 Minimum number of squares
rnw_mwRes {1A} Minimum nwell width
rnw_msRes {1B} Minimum nwell spacing
rnw_mwDiff {2A} Minimum diffusion width
rnw_msDiff {2B} Minimum diffusion spacing
rnw_meResDiff {2C} Minimum nwell enclosure of diffusion
rnw_meImplDiff {3C} Minimum implant enclosure of diffusion
rnw_mwCont {6A} Minimum & maximum contact width
rnw_msCont {6B} Minimum contact spacing
rnw_meDiffCont {6C} Minimum diff enclosure of contact
rnw_meeDiffCont {6C} Minimum diff end enclosure of contact
rnw_mwM1 {7A} Minimum metal 1 width
rnw_msM1 {7B} Minimum metal 1 spacing
rnw_meM1Cont {7C} Minimum metal 1 enclosure of contact
rnw_meeM1Cont {7C} Minimum metal 1 end enclosure of contact
Global Parameters
rnw_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
Sep 24, 2008 page 133
Callbacks
Resistor Callback Procedures
CDF Callback
caseq( concat(cdfId~>type)
( ( cellData baseCellData userCellData )
cellName = cdfId~>id~>name
libName = cdfId~>id~>lib~>name
)
( instData
cellName = cdfId~>id~>master~>cellName
libName = cdfId~>id~>master~>libName
)
( t
PasError("gpdk180_resCB: unexpected CDF data type - %L!" cdfId~>type)
error("\tCallback aborted abnormally!")
)
) ; ** caseq concat **
CDF parameters
name "resType"
prompt "Resistor type"
defValue "$cell"
type "string"
display "nil"
editable "nil"
CDF parameters
name "calculatedParam"
prompt "Calculated Parameter"
defValue "Length"
choices ’("Resistance" "Length")
type "radio"
display "t"
callback "gpdk180_resCB( ’calculatedParam )"
CDF parameters
name "model"
prompt "Model Name"
defValue gpdk180_resValue( ’model ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’model)"
editable "nil"
parseAsCEL "yes"
CDF parameters
name "r"
prompt "Total Resistance"
units "resistance"
defValue gpdk180_resValue( ’r ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Resistance\")"
callback "gpdk180_resCB( ’r )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 136
CDF parameters
name "w"
prompt "Width"
units "lengthMetric"
defValue gpdk180_resValue( ’w ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Width\")"
callback "gpdk180_resCB( ’w )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 137
CDF parameters
name "l"
prompt "Length"
units "lengthMetric"
defValue gpdk180_resValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Length\")"
callback "gpdk180_resCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_resCB( ’m )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "s"
prompt "S Factor"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_resCB( ’s )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 138
CDF parameters
name "l"
prompt "Total Length"
units "lengthMetric"
defValue gpdk180_resValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
editable "nil"
callback "gpdk180_resCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "sl"
prompt "Segment Length"
units "lengthMetric"
defValue gpdk180_resValue( ’sl ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Length\")"
callback "gpdk180_resCB( ’sl )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "effL"
prompt "Effective Length"
units "lengthMetric"
defValue gpdk180_resValue( ’sl ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 139
CDF parameters
name "segments"
prompt "Number of Segments"
defValue gpdk180_resValue( ’segments ?id cdfId ?returnString nil)
type "int"
display "t"
callback "gpdk180_resCB( ’segments )"
CDF parameters
name "connection"
prompt "Connection"
type "cyclic"
defValue gpdk180_resValue( ’connection ?id cdfId )
choices gpdk180_resValue( ’connection ?id cdfId ?type ’choices )
display "t"
callback "gpdk180_resCB( ’connection )"
CDF parameters
name "ssegs"
prompt "Series Segments"
defValue gpdk180_resValue( ’ssegs ?id cdfId ?returnString nil)
type "int"
display "nil"
editable "nil"
callback "gpdk180_resCB( ’ssegs )"
CDF parameters
name "psegs"
prompt "Parallel Segments"
defValue gpdk180_resValue( ’psegs ?id cdfId ?returnString nil)
type "int"
display "nil"
editable "nil"
callback "gpdk180_resCB( ’psegs )"
Sep 24, 2008 page 140
CDF parameters
name "cntRows"
prompt "Contact Rows"
defValue gpdk180_resValue( ’cntRows ?id cdfId ?returnString nil)
type "int"
display "nil"
callback "gpdk180_resCB( ’cntRows )"
CDF parameters
name "leftDummy"
prompt "Left Dummy"
type "boolean"
defValue nil
display "t"
CDF parameters
name "rightDummy"
prompt "Right Dummy"
type "boolean"
defValue nil
display "t"
CDF parameters
name "cntOnDummy"
prompt "Contact on Dummy"
type "boolean"
defValue t
display "gpdk180_resDisplay( ’cntOnDummy )"
Sep 24, 2008 page 141
CDF parameters
name "showTapProps"
prompt "Show Tap Properties"
type "boolean"
defValue nil
display "t"
CDF parameters
name "leftTap"
prompt "Left Tap"
type "boolean"
defValue t
display "gpdk180_resDisplay( ’leftTap)"
CDF parameters
name "rightTap"
prompt "Right Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’rightTap)"
CDF parameters
name "topTap"
prompt "Top Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’topTap)"
CDF parameters
name "bottomTap"
prompt "Bottom Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’bottomTap)"
Sep 24, 2008 page 142
CDF parameters
name "otherParams"
prompt "Show Other Parameters"
type "boolean"
display "gpdk180_resDisplay( ’otherParams)"
CDF parameters
name "rsh"
prompt "Sheet Resistivity"
units "resistance"
defValue gpdk180_resValue( ’rsh ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rsh)"
editable "nil"
callback "gpdk180_resCB( ’rsh )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 143
CDF parameters
name "rbody"
prompt "Body Resistance"
units "resistance"
defValue gpdk180_resValue( ’rbody ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rbody )"
editable "nil"
callback "gpdk180_resCB( ’rbody )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "rcont"
prompt "Contact Resistance"
units "resistance"
defValue gpdk180_resValue( ’rcont ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rcont )"
editable "nil"
callback "gpdk180_resCB( ’rcont )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "rend"
prompt "End Resistance"
units "resistance"
defValue gpdk180_resValue( ’rend ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rend )"
editable "nil"
callback "gpdk180_resCB( ’rend )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 144
CDF parameters
name "tc1"
prompt "Temperature Coefficient 1"
defValue gpdk180_resValue( ’tc1 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’tc1)"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "tc2"
prompt "Temperature Coefficient 2"
defValue gpdk180_resValue( ’tc2 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’tc2)"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 145
CDF parameters
name "vc1"
prompt "Voltage Coefficient 1"
defValue gpdk180_resValue( ’vc1 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’vc1 )"
editable "nil"
parseAsNumber "yes"
CDF parameters
name "vc2"
prompt "Voltage Coefficient 2"
defValue gpdk180_resValue( ’vc2 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’vc2 )"
editable "nil"
parseAsNumber "yes"
CDF parameters
name "dw"
prompt "Delta Width"
units "lengthMetric"
defValue gpdk180_resValue( ’dw ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’dw )"
editable "nil"
callback "gpdk180_resCB( ’dw )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "dl"
prompt "Delta Length"
units "lengthMetric"
defValue gpdk180_resValue( ’dl ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’dl )"
editable "nil"
callback "gpdk180_resCB( ’dl )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 146
CDF parameters
name "trise"
prompt "Temp rise from ambient"
defValue ""
type "string"
display "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "resform"
prompt "Resistance Form"
defValue ""
type "string"
display "gpdk180_resDisplay( ’resform )"
parseAsCEL "yes"
CDF parameters
name "isnoisy"
prompt "Generate noise?"
defValue "yes"
choices ’("yes" "no")
type "cyclic"
display "gpdk180_resDisplay( ’isnoisy )"
parseAsCEL "yes"
CDF parameters
name "scale"
prompt "Scale factor"
defValue ""
type "string"
display "gpdk180_resDisplay( ’scale )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 147
CDF parameters
name "ac"
prompt "AC resistance"
units "resistance"
defValue ""
type "string"
display "gpdk180_resDisplay( ’ac )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "dtemp"
prompt "Temperature difference"
defValue ""
type "string"
display "gpdk180_resDisplay( ’dtemp )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "hrc"
prompt "Capacitance connected"
units "capacitance"
defValue ""
type "string"
display "gpdk180_resDisplay( ’hrc )"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "source"
prompt "Source component"
type "boolean"
display "gpdk180_resDisplay( ’source )"
Sep 24, 2008 page 148
CDF parameters
name "pasUpdateParamList"
prompt "CDF Param Update List"
defValue "w"
type "string"
display "nil"
CDF properties
formInitProc "PasCdfFormInit"
doneProc "PasCdfDone"
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "voltage"
paramSimType "DC"
paramEvaluate "nil nil nil t nil"
paramDisplayMode "parameter"
modelLabelSet "tc1 tc2 coefs"
opPointLabelSet "v i pwr"
paramLabelSet "-resType r w l"
Sep 24, 2008 page 149
CDF siminfo
simulator ams
isPrimitive t
otherParameters (model)
termOrder (PLUS MINUS)
propMapping (nil sl effL)
instParameters (model sl w)
Sep 24, 2008 page 150
CDF siminfo
simulator ams
isPrimitive t
otherParameters (model)
termOrder (PLUS MINUS B)
propMapping (nil sl effL)
instParameters (model sl w)
Sep 24, 2008 page 151
CDF parameters
name "sl"
prompt "Length (m)"
defValue "pPar(\"sl\")"
units "lengthMetric"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 153
resPrim2
CDF gpdk180 resPrim2
CDF cellview
symbol baseline_gpdk res2 symbol
spectre baseline_gpdk res2 symbol
ads baseline_gpdk res2 symbol
Sep 24, 2008 page 154
resPrim3
CDF gpdk180 resPrim3
CDF cellview
symbol baseline_gpdk res3 symbol
spectre baseline_gpdk res3 symbol
ads baseline_gpdk res3 symbol
Sep 24, 2008 page 155
Resistors
polyres
CDF gpdk180 polyres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 157
polyhres
CDF gpdk180 polyhres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 159
nplusres
CDF gpdk180 nplusres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res3 symbol
auCdl baseline_gpdk res3 symbol
auLvs baseline_gpdk res3 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 161
pplusres
CDF gpdk180 pplusres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res3 symbol
auCdl baseline_gpdk res3 symbol
auLvs baseline_gpdk res3 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 163
nwellres
CDF gpdk180 nwellres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 165
mxres
CDF gpdk180 mxres
CDF siminfo
simulator auLvs
componentName "$cell"
CDF siminfo
simulator auCdl
modelName "$cell"
CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 167
PCell Macros
res_uniSeg (macro)
res_poly (macro)
pcell macro res_poly
1: include
dpt = PasGetDeviceProps( cv )
scale = dpt->scale
epsilon = grid / 10.0
mwRes = dpt->mwRes msRes = dpt->msRes
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meResCont = dpt->meResCont meM1Cont = dpt->meM1Cont
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont
msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes
3: include
alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 169
5: include 6: if leftDummy
body[1]
body[0] body[1]
Poly
Poly Poly
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Poly
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 170
9: for i bi ei
if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact
topHead[i]
Poly
topMetal[i]
Metal1 Cont[]
Cont[]
mwCont
alM1
alM1
mwCont
Cont[]
Metal1 Cont[]
botMetal[i]
Poly
botHead[i]
res_poly_nplus (macro)
pcell macro res_poly_nplus
2: include
meImplRes = dpt->meImplRes
10: include
<-NPLUS->
Poly
meImplRes meImplRes
topHead[ei]
Poly botHead[bi]
meImplRes meImplRes
res_poly_pplus (macro)
pcell macro res_poly_pplus
2: include
meImplRes = dpt->meImplRes
10: include
<-PPLUS->
Poly
meImplRes meImplRes
topHead[ei]
Poly botHead[bi]
meImplRes meImplRes
Sep 24, 2008 page 172
res_poly_nw (macro)
pcell macro res_poly_nw
2: include
meWellRes = dpt->meWellRes
10: include
<-Nwell->
Poly
meWellRes meWellRes
topHead[ei]
Poly botHead[bi]
meWellRes meWellRes
res_poly_id (macro)
pcell macro res_poly_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-Resdum->
body[1]
Poly Poly
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 173
res_poly_sb (macro)
pcell macro res_poly_sb
2: include
10: include
1: include
2: if maSb
3: include
<-SiProt->
body[bi]
Poly Poly
body[ei]
Sep 24, 2008 page 174
res_diff (macro)
1: include
dpt = PasGetDeviceProps( cv )
scale = dpt->scale
epsilon = grid / 10.0
mwRes = dpt->mwRes msRes = dpt->msRes
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meResCont = dpt->meResCont meM1Cont = dpt->meM1Cont
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont
msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes
3: include
alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 175
5: include 6: if leftDummy
body[1]
body[0] body[1]
Oxide
Oxide Oxide
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Oxide
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 176
9: for i bi ei
if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact
topHead[i]
Oxide
topMetal[i]
Metal1 Cont[]
Cont[]
mwCont
alM1
alM1
mwCont
Cont[]
Metal1 Cont[]
botMetal[i]
Oxide
botHead[i]
res_diff_nplus (macro)
pcell macro res_diff_nplus
2: include
meImplRes = dpt->meImplRes
10: include
<-NPLUS->
Oxide
meImplRes meImplRes
topHead[ei]
Oxide botHead[bi]
meImplRes meImplRes
res_diff_pplus (macro)
pcell macro res_diff_pplus
2: include
meImplRes = dpt->meImplRes
10: include
<-PPLUS->
Oxide
meImplRes meImplRes
topHead[ei]
Oxide botHead[bi]
meImplRes meImplRes
Sep 24, 2008 page 178
res_diff_nw (macro)
pcell macro res_diff_nw
2: include
meWellRes = dpt->meWellRes
10: include
<-Nwell->
Oxide
meWellRes meWellRes
topHead[ei]
Oxide botHead[bi]
meWellRes meWellRes
res_diff_id (macro)
pcell macro res_diff_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-Resdum->
body[1]
Oxide Oxide
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 179
res_nwell (macro)
1: include
dpt = PasGetDeviceProps( cv )
scale = dpt->scale
epsilon = grid / 10.0
mwRes = dpt->mwRes msRes = dpt->msRes
mwDiff = dpt->mwDiff msDiff = dpt->msDiff || 0
meResDiff = dpt->meResDiff meeResDiff = dpt->meeResDiff || meResDiff
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meDiffCont = dpt->meDiffCont meM1Cont = dpt->meM1Cont
meeDiffCont = dpt->meeDiffCont || meDiffCont meeM1Cont = dpt->meeM1Cont || meM1Cont
meImplDiff = dpt->meImplDiff
3: include three
1: include
alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
tmp = 2.0 * meeResDiff
awDiff = max( ( awBody - tmp ) ( mwRes - tmp ) ( mwCont + ( 2.0 * meeDiffCont ) ) )
awHead = awDiff + tmp
asHead = max( msRes ( msDiff - tmp ) )
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepDM = meeDiffCont - meeM1Cont
ySepDM = meDiffCont - meM1Cont
alM1 = awDiff - (2.0 * xSepDM)
idOffset = meImplDiff - meResDiff
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepDM + meeResDiff
Sep 24, 2008 page 180
three
2: include
5: include 6: if leftDummy
body[1]
body[0] body[1]
Nwell
Nwell Nwell
alBody
alBody
asBody 0.0
ref awBody
awBody
Sep 24, 2008 page 181
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Nwell
awBody
botHead[i] alHead
asBody 0.0
awHead
9: for i bi ei
Nwell Nwell
<-Oxide-> <-Oxide->
topDiff[i] botDiff[i]
topHead[i] botHead[i]
meeResDiff meResDiff meeResDiff meResDiff
Sep 24, 2008 page 182
10: include
meImplDiff meImplDiff
<-NPLUS->
<-Oxide-> <-Oxide->
topDiff[bi]
topDiff[ei]
meImplDiff meImplDiff
meImplDiff meImplDiff
<-NPLUS->
<-Oxide-> <-Oxide->
botDiff[bi]
botDiff[ei]
meImplDiff meImplDiff
Sep 24, 2008 page 183
11: for i bi ei
if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact
topDiff[i]
<-Oxide->
topMetal[i]
Metal1 Cont[]
Cont[]
mwCont
alM1
alM1
mwCont
Cont[]
Metal1 Cont[]
botMetal[i]
<-Oxide->
botDiff[i]
res_nwell_id (macro)
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-ResWdum->
body[1]
Nwell Nwell
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 185
res_connect (macro)
pcell macro res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topMetal[i]
Metal1 Metal1 alM1
Metal1 Metal1
awM1
awM1
alM1
botMetal[i]
if oddp(sc) if evenp(sc)
topMetal[sc] botMetal[sc]
Metal1 Metal1
"PLUS" inOut "PLUS" inOut
right top right bottom
botMetal[1]
Metal1
"MINUS" inOut
left bottom
<-Metal1->
topMetal[1] topMetal[sc]
Metal1 Metal1
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botMetal[1] botMetal[sc]
Sep 24, 2008 page 186
res_m (macro)
pcell macro res_m
1: include
dpt = PasGetDeviceProps( cv )
scale = dpt->scale
epsilon = grid / 10.0
mwRes = dpt->mwRes msRes = dpt->msRes
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meResCont = dpt->meResCont meM1Cont = dpt->meM1Cont
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont
msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes
3: include
alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 187
res_m1 (macro)
pcell macro res_m1
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal1
Metal1 Metal1
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal1
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 188
res_m2 (macro)
pcell macro res_m2
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal2
Metal2 Metal2
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal2
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 189
res_m3 (macro)
pcell macro res_m3
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal3
Metal3 Metal3
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal3
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 190
res_m4 (macro)
pcell macro res_m4
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal4
Metal4 Metal4
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal4
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 191
res_m5 (macro)
pcell macro res_m5
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal5
Metal5 Metal5
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal5
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 192
res_m6 (macro)
pcell macro res_m6
5: include 6: if leftDummy
body[1]
body[0] body[1]
Metal6
Metal6 Metal6
alBody
alBody
asBody 0.0
ref awBody
awBody
7: for i 2 ei 8: for i bi ei
awHead
xSepHB 0.0
alBody
xSepHB 0.0
Metal6
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 193
res_m1_id (macro)
pcell macro res_m1_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M1dummy->
body[1]
Metal1 Metal1
ySep = minus(idOffset)
body[sc]
res_m2_id (macro)
pcell macro res_m2_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M2dummy->
body[1]
Metal2 Metal2
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 194
res_m3_id (macro)
pcell macro res_m3_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M3dummy->
body[1]
Metal3 Metal3
ySep = minus(idOffset)
body[sc]
res_m4_id (macro)
pcell macro res_m4_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M4dummy->
body[1]
Metal4 Metal4
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 195
res_m5_id (macro)
pcell macro res_m5_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M5dummy->
body[1]
Metal5 Metal5
ySep = minus(idOffset)
body[sc]
res_m6_id (macro)
pcell macro res_m6_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M6dummy->
body[1]
Metal6 Metal6
ySep = minus(idOffset)
body[sc]
Sep 24, 2008 page 196
m1res_connect (macro)
pcell macro m1res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal1 Metal1 alM1
Metal1 Metal1
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal1 Metal1
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal1
"MINUS" inOut
left bottom
<-Metal1->
topHead[1] topHead[sc]
Metal1 Metal1
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 197
m2res_connect (macro)
pcell macro m2res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal2 Metal2 alM1
Metal2 Metal2
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal2 Metal2
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal2
"MINUS" inOut
left bottom
<-Metal2->
topHead[1] topHead[sc]
Metal2 Metal2
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 198
m3res_connect (macro)
pcell macro m3res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal3 Metal3 alM1
Metal3 Metal3
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal3 Metal3
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal3
"MINUS" inOut
left bottom
<-Metal3->
topHead[1] topHead[sc]
Metal3 Metal3
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 199
m4res_connect (macro)
pcell macro m4res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal4 Metal4 alM1
Metal4 Metal4
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal4 Metal4
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal4
"MINUS" inOut
left bottom
<-Metal4->
topHead[1] topHead[sc]
Metal4 Metal4
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 200
m5res_connect (macro)
pcell macro m5res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal5 Metal5 alM1
Metal5 Metal5
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal5 Metal5
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal5
"MINUS" inOut
left bottom
<-Metal5->
topHead[1] topHead[sc]
Metal5 Metal5
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 201
m6res_connect (macro)
pcell macro m6res_connect
for i 1 (sc - 1)
if oddp(i) if evenp(i)
topHead[i]
Metal6 Metal6 alM1
Metal6 Metal6
awM1
awM1
alM1
botHead[i]
if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal6 Metal6
"PLUS" inOut "PLUS" inOut
right top right bottom
botHead[1]
Metal6
"MINUS" inOut
left bottom
<-Metal6->
topHead[1] topHead[sc]
Metal6 Metal6
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
botHead[1] botHead[sc]
Sep 24, 2008 page 202
PCell Devices
Poly Resistor High Poly Resistor
pcell gpdk180 polyres pcell gpdk180 polyhres
CDF Definitions
mimcap
CDF gpdk180 mimcap
CDF siminfo
simulator auCdl
componentName "$cell"
instParameters (AREA M)
propMapping (nil AREA area M m)
modelName "$cell"
CDF siminfo
simulator auLvs
componentName "$cell"
instParameters (area m)
CDF siminfo
simulator spectre
instParameters (area perim m scale trise ic tc1 tc2)
componentName "$cell"
CDF cellview
symbol pas_std cap2 symbol
spectre pas_std cap2 symbol
auCdl pas_std cap2 symbol
auLvs pas_std cap2 symbol
ads pas_std cap2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 205
CDF parameters
name "model"
prompt "Model name"
defValue gpdk180_capValue(’model ?id cdfId ?returnString t)
type "string"
display "gpdk180_capDisplay(’model)"
editable "nil"
parseAsCEL "yes"
CDF parameters
name "calcParam"
prompt "Calculate Parameter"
type "cyclic"
choices list("capacitance" "length" "width")
defValue "capacitance"
display "t"
CDF parameters
name "c"
prompt "Capacitance"
units "capacitance"
defValue gpdk180_capValue(’c ?id cdfId ?returnString t)
type "string"
display "t"
editable "cdfgData->calcParam->value!=\"capacitance\""
parseAsNumber "yes"
parseAsCEL "yes"
callback "gpdk180_capCB(’c)"
CDF parameters
name "w"
prompt "Width"
units "lengthMetric"
defValue gpdk180_capValue(’w ?id cdfId ?returnString t)
type "string"
display "t"
editable "cdfgData->calcParam->value!=\"width\""
parseAsNumber "yes"
parseAsCEL "yes"
callback "gpdk180_capCB(’w)"
Sep 24, 2008 page 206
CDF parameters
name "l"
prompt "Length" CDF parameters
units "lengthMetric" name "m"
defValue gpdk180_capValue(’l ?id cdfId ?returnString t) prompt "Multiplier"
type "string" defValue "1"
display "t" type "string"
editable "cdfgData->calcParam->value!=\"length\"" display "t"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"
callback "gpdk180_capCB(’l)"
CDF parameters
name "showSimParams"
prompt "Show Sim Parameters" CDF parameters
defValue nil name "ca"
type "boolean" prompt "Area capacitance (F/M^2)"
display "gpdk180_capDisplay(’showSimParams)" defValue gpdk180_capValue(’ca ?id cdfId)
type "float"
display "gpdk180_capDisplay(’ca)"
CDF parameters
editable "nil"
name "cf"
prompt "Fringe capacitance (F/M)"
defValue gpdk180_capValue(’cf ?id cdfId)
type "float"
display "gpdk180_capDisplay(’cf)"
editable "nil"
CDF parameters
name "area"
prompt "Area"
defValue "iPar(\"w\")*iPar(\"l\")"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
editable "nil"
CDF parameters
name "perim"
prompt "Perim"
defValue "2*iPar(\"w\")+2*iPar(\"l\")"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
editable "nil"
Sep 24, 2008 page 207
CDF parameters
name "ic"
prompt "Initial condition"
units "voltage"
defValue ""
type "string"
display "gpdk180_capDisplay(’ic)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c1"
prompt "Poly Coeff 1"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 1"
display "gpdk180_capDisplay(’c1)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c2"
prompt "Poly Coeff 2"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 2"
display "gpdk180_capDisplay(’c2)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c3"
prompt "Poly Coeff 3"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 3"
display "gpdk180_capDisplay(’c3)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 209
CDF parameters
name "c4"
prompt "Poly Coeff 4"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 4"
display "gpdk180_capDisplay(’c4)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c5"
prompt "Poly Coeff 5"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 5"
display "gpdk180_capDisplay(’c5)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c6"
prompt "Poly Coeff 6"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 6"
display "gpdk180_capDisplay(’c6)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 210
CDF parameters
name "c7"
prompt "Poly Coeff 7"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 7"
display "gpdk180_capDisplay(’c7)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c8"
prompt "Poly Coeff 8"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 8"
display "gpdk180_capDisplay(’c8)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c9"
prompt "Poly Coeff 9"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 9"
display "gpdk180_capDisplay(’c9)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 211
CDF parameters
name "c10"
prompt "Poly Coeff 10"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 10"
display "gpdk180_capDisplay(’c10)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c11"
prompt "Poly Coeff 11"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 11"
display "gpdk180_capDisplay(’c11)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c12"
prompt "Poly Coeff 12"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 12"
display "gpdk180_capDisplay(’c12)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 212
CDF parameters
name "c13"
prompt "Poly Coeff 13"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 13"
display "gpdk180_capDisplay(’c13)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c14"
prompt "Poly Coeff 14"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 14"
display "gpdk180_capDisplay(’c14)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c15"
prompt "Poly Coeff 15"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 15"
display "gpdk180_capDisplay(’c15)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 213
CDF parameters
name "c16"
prompt "Poly Coeff 16"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 16"
display "gpdk180_capDisplay(’c16)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c17"
prompt "Poly Coeff 17"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 17"
display "gpdk180_capDisplay(’c17)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "c18"
prompt "Poly Coeff 18"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 18"
display "gpdk180_capDisplay(’c18)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 214
CDF parameters
name "c19"
prompt "Poly Coeff 19"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 19"
display "gpdk180_capDisplay(’c19)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "qmode"
prompt "Quality type"
defValue "ideal"
choices ’("ideal" "Constant Conductance" "Square Root" "Constant Q")
type "cyclic"
display "gpdk180_capDisplay(’qmode)"
CDF parameters
name "q"
prompt "Quality"
defValue ""
type "string"
display "gpdk180_capDisplay(’q)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 215
CDF parameters
name "freq"
prompt "Frequency"
units "frequency"
defValue ""
type "string"
display "gpdk180_capDisplay(’freq)"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "pasUpdateParamList"
prompt "CDF Param Update List"
defValue "c w l"
type "string"
display "nil"
CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (C M)
termOrder (PLUS MINUS)
propMapping (nil C c M m)
namePrefix "C"
CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (c m)
termOrder (PLUS MINUS)
permuteRule "(p PLUS MINUS)"
namePrefix "C"
CDF siminfo
simulator ams
instParameters (c w l m scale trise ic tc1 tc2)
termOrder (PLUS MINUS)
isPrimitive t
Sep 24, 2008 page 216
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area Periph _M scale Trise ic tc1 tc2)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":minus.P1")
propMapping (nil Area area Periph perim _M m Trise trise)
typeMapping nil
uselib nil
Sep 24, 2008 page 217
CDF properties
formInitProc "PasCdfFormInit"
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instDisplayMode "instName"
instNameType "schematic"
netNameType "schematic"
paramDisplayMode "parameter"
paramEvaluate "nil nil nil t nil"
paramSimType "DC"
termDisplayMode "netName"
termSimType "DC"
opPointLabelSet "i"
paramLabelSet "-model c m"
Sep 24, 2008 page 218
Callbacks
mimcap
CDF Callback
procedure(gpdk180_capCB(param) ;_Feb 13 03 quoc 3858
let((procName cdfId libName cellName dpt grid scale sGrid epsilon
ca cf minW maxW minL maxL todo paramId cap width length
ael_C ael_W ael_L)
procName = "gpdk180_capCB"
cdfId = cdfgData
caseq( concat(cdfId~>type)
((cellData baseCellData userCellData)
libName = cdfId~>id~>lib~>name
cellName = cdfId~>id~>name
)
(instData
libName = cdfId~>id~>master~>libName
cellName = cdfId~>id~>master~>cellName
)
(t
PasAttention()
error("%s: unexpected CDF data type - %L" procName cdfId~>type)
)
) ; ** caseq concat **
(w
paramId = cdfId->w...
Sep 24, 2008 page 219
Pcell
mimcap
pcell gpdk180 mimcap
"MINUS" inOut
PCell formal params
<-Metal2-> all
l float cdf
w*1e6
w float cdf
M2CTMenc M2CTMenc
CapMetal
M3V2enc = {11D} l*1e6
M2V2enc = {10C}
M2CTMenc = {12B} ref
CTMM3enc = {12D} captop
V2w = {10A}
V2sp = {10B}
capbot
M2CTMenc M2CTMenc
<-Capdum->
M2CTMenc M2CTMenc
CapMetal
M2CTMenc M2CTMenc
captop
"PLUS" inOut
all
captop
CTMM3enc CTMM3enc
<-Metal3->
CapMetal
V2w Via2[]
V2w
CTMM3enc CTMM3enc
Sep 24, 2008 page 220
Junction Varactors
Sep 24, 2008 page 222
dpt = PasGetDeviceProps( cv )
co_w = dpt->CwW
co_l = dpt->CwW
co_s = dpt->CwSp
sd_enc_cw_xm = dpt->M1CwEncXm
sd_enc_cw_xp = gpdk180_PDKsnapToGrid((pcl - co_w) / 2 grid)
sd_enc_cw_x = dpt->SDCwEncY
sd_enc_cw_y = dpt->SDCwEncY
m1_ext = dpt->M1Ext
m1_enc_cw_xm = dpt->M1CwEncXm
m1_enc_cw_xp = dpt->M1CwEncXp
mi_enc_sd_x = dpt->MISDEncX
mi_enc_sd_y = dpt->MISDEncY
sd_enc_m1_xm = sd_enc_cw_xm - m1_enc_cw_xm
sd_enc_m1_xp = sd_enc_cw_xp - m1_enc_cw_xp
pi_sd_enc_x = dpt->PISDEncX
pi_sd_enc_y = dpt->PISDEncY
sd_sp = dpt->SDSp
nw_enc_sd_x = dpt->NWSDEncX
nw_enc_sd_y = dpt->NWSDEncY
ri_enc_sd_x = dpt->RISDEncX
ri_enc_sd_y = dpt->RISDEncY
ri2_enc_sd_x = dpt->RI2SDEncX
ri2_enc_sd_y = dpt->RI2SDEncY
m1_sw = dpt->M1SW
msPwNw = 0.5
mwPwGr = 0.6
Sep 24, 2008 page 223
Cont[]
co_l first_sd_reg
ref
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
2: include
Oxide
Cont[]
co_l
finger[1]
pcl sd_enc_m1_xp 0
sd_sp 0
pi_sd_enc_x pi_sd_enc_y
first_sd_reg sd_enc_cw_xp sd_enc_cw_y
Sep 24, 2008 page 224
co_w
Cont[]
sd_reg[f]
co_l
mi_enc_sd_x mi_enc_sd_y
Cont[]
co_l
finger[f]
sd_sp 0 pcl
sd_reg[f]
sd_enc_cw_xp sd_enc_cw_y sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
Sep 24, 2008 page 225
4: include
co_w
space co_s co_s right
pcw
co_w
last_sd_reg
Cont[]
co_l
5: include
"ANODE" inOut
left right top <-Metal1->
pin name "ANODE"
<-Nwell-> jvnw
Oxide Oxide
nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y
0 m1_ext
first_sd_reg last_sd_reg
"CATHODE" inOut 0 m1_ext + m1_sw
left right bottom <-Metal1->
pin name "CATHODE"
Sep 24, 2008 page 226
6: include
0 pi_sd_enc_y
<-Pimp->
"BULK" inOut
<-Oxide-> right top bottom
must group BULK[0]
0 pi_sd_enc_y
0 pi_sd_enc_y
Sep 24, 2008 page 227
7: include
<-JVAR1dummy->
jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
Sep 24, 2008 page 228
xjvar_nf36 pcell
pcell gpdk180 xjvar_nf36
dpt = PasGetDeviceProps( cv )
co_w = dpt->CwW
co_l = dpt->CwW
co_s = dpt->CwSp
sd_enc_cw_xm = dpt->M1CwEncXm
sd_enc_cw_xp = gpdk180_PDKsnapToGrid((pcl - co_w) / 2 grid)
sd_enc_cw_x = dpt->SDCwEncY
sd_enc_cw_y = dpt->SDCwEncY
m1_ext = dpt->M1Ext
m1_enc_cw_xm = dpt->M1CwEncXm
m1_enc_cw_xp = dpt->M1CwEncXp
mi_enc_sd_x = dpt->MISDEncX
mi_enc_sd_y = dpt->MISDEncY
sd_enc_m1_xm = sd_enc_cw_xm - m1_enc_cw_xm
sd_enc_m1_xp = sd_enc_cw_xp - m1_enc_cw_xp
pi_sd_enc_x = dpt->PISDEncX
pi_sd_enc_y = dpt->PISDEncY
sd_sp = dpt->SDSp
nw_enc_sd_x = dpt->NWSDEncX
nw_enc_sd_y = dpt->NWSDEncY
ri_enc_sd_x = dpt->RISDEncX
ri_enc_sd_y = dpt->RISDEncY
ri2_enc_sd_x = dpt->RI2SDEncX
ri2_enc_sd_y = dpt->RI2SDEncY
m1_sw = dpt->M1SW
msPwNw = 0.5
mwPwGr = 0.6
Sep 24, 2008 page 229
Cont[]
co_l first_sd_reg
ref
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
2: include
co_w
pcw space co_s co_s right
co_w
Oxide
Cont[]
co_l
finger[1]
co_w
Cont[]
sd_reg[f]
co_l
mi_enc_sd_x mi_enc_sd_y
Cont[]
co_l
finger[f]
sd_sp 0 pcl
sd_reg[f]
sd_enc_cw_xp sd_enc_cw_y sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
Sep 24, 2008 page 231
4: include
co_w
space co_s co_s right
pcw
co_w
last_sd_reg
Cont[]
co_l
5: include
"ANODE" inOut
left right top <-Metal1->
pin name "ANODE"
<-Nwell-> jvnw
Oxide Oxide
nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y
0 m1_ext
first_sd_reg last_sd_reg
"CATHODE" inOut 0 m1_ext + m1_sw
left right bottom <-Metal1->
pin name "CATHODE"
Sep 24, 2008 page 232
6: include
0 pi_sd_enc_y
<-Pimp->
"BULK" inOut
<-Oxide-> right top bottom
must group BULK[0]
0 pi_sd_enc_y
0 pi_sd_enc_y
Sep 24, 2008 page 233
7: include
<-JVAR2dummy->
jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
Sep 24, 2008 page 234
CDF siminfo
simulator spectre
instParameters (nf m)
otherParameters (model)
termMapping (nil ANODE ":1" CATHODE ":2" BULK ":3")
termOrder (ANODE CATHODE BULK)
componentName subcircuit
CDF cellview
auCdl baseline_gpdk jvar symbol
auLvs baseline_gpdk jvar symbol
spectre baseline_gpdk jvar symbol
symbol baseline_gpdk jvar symbol
ivpcell $lib $cell symbol 5
CDF siminfo
simulator auCdl
namePrefix "X"
CDF properties
termOrder (ANODE CATHODE BULK)
formInitProc ""
instParameters (model nf m)
doneProc ""
netlistProcedure _ansCdlSubcktCall
buttonFieldWidth 340
fieldHeight 35
CDF siminfo fieldWidth 350
simulator auLvs promptWidth 175
namePrefix D paramLabelSet "-model nf m"
termOrder (ANODE CATHODE BULK)
componentName "xjvar_w40"
instParameters (nf m)
netlistProcedure ansLvsCompPrim
Sep 24, 2008 page 236
xjvar_nf36 cdf
CDF siminfo
simulator spectre
instParameters (w m)
otherParameters (model)
termMapping (nil ANODE ":1" CATHODE ":2" BULK ":3")
termOrder (ANODE CATHODE BULK)
componentName subcircuit
CDF cellview
auCdl baseline_gpdk jvar symbol
auLvs baseline_gpdk jvar symbol
spectre baseline_gpdk jvar symbol
symbol baseline_gpdk jvar symbol
ivpcell $lib $cell symbol 5
CDF siminfo
simulator auCdl
namePrefix "X"
CDF properties
termOrder (ANODE CATHODE BULK)
formInitProc ""
instParameters (model w m)
doneProc ""
netlistProcedure _ansCdlSubcktCall
buttonFieldWidth 340
fieldHeight 35
CDF siminfo fieldWidth 350
simulator auLvs promptWidth 175
namePrefix D paramLabelSet "-model w m"
termOrder (ANODE CATHODE BULK)
componentName "xjvar_nf36"
instParameters (w m)
netlistProcedure ansLvsCompPrim
Sep 24, 2008 page 238
procedure(gpdk180_jvCB()
let((bagId libName cellName m nf minF maxF nfVar wVal wVar minW maxW)
minF = bagId->MinF
maxF = bagId->MaxF
minW = bagId->MinW
maxW = bagId->MaxW
; check "m"
if(rexMatchp("^[ ]*$" cdfgData->m->value) then
artError("Multiplier value must be a positive integer - set to default")
m = cdfParseFloatString(cdfgData->m->defValue)
else
m = cdfParseFloatString(cdfgData->m->value)
)
unless((m && floatp(m))
artError("Multiplier value must be a number - setting to default")
m = cdfParseFloatString(cdfgData->m->defValue)
)
if(m < 1 then
artError("Multiplier must be a positive integer - setting to default")
m = cdfParseFloatString(cdfgData->m->defValue)
)
cdfgData->m->value = sprintf(nil "%d" fix(m))
; check "nf"...
Sep 24, 2008 page 239
Diode Macro
CDF parameters
name "w"
prompt "Width (M)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "l"
prompt "Length (M)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()~>cellViewType != \"maskLayout\""
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "area"
prompt "Device area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW*PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "pj"
prompt "Periphery of junction"
defValue sprintf( nil "%g" 2*PasGetPdkParams("$lib" "$cell")~>MinW+2*PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF siminfo
simulator auLvs
namePrefix "D"
termOrder (PLUS MINUS)
componentName "$cell"
instParameters (area m)
netlistProcedure ansLvsCompPrim
CDF siminfo
simulator spectre CDF siminfo
otherParameters (model) simulator ams
instParameters (area pj m) otherParameters (model)
termOrder (PLUS MINUS) instParameters (model area pj m)
termMapping (nil PLUS \:1 MINUS \:2) termOrder (PLUS MINUS)
componentName pdio isPrimitive t
Sep 24, 2008 page 241
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area Periph _M)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":P2")
propMapping (nil Area area Periph pj _M m)
typeMapping nil
uselib nil
CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
modelLabelSet "is rs n"
opPointLabelSet "i v region"
paramLabelSet "-model area m"
Sep 24, 2008 page 242
ndio
CDF parameters
name "model"
defValue "$cell"
CDF cellview
symbol pas_std diode2 symbol
spectre pas_std diode2 symbol
auLvs pas_std diode2 symbol
auCdl pas_std diode2 symbol
ads pas_std diode2 symbol
ivpcell gpdk180 $cell symbol 40
Sep 24, 2008 page 243
pdio
CDF parameters
name "model"
defValue "$cell"
CDF cellview
symbol pas_std diode2 symbol
spectre pas_std diode2 symbol
auLvs pas_std diode2 symbol
auCdl pas_std diode2 symbol
ads pas_std diode2 symbol
ivpcell gpdk180 $cell symbol 40
Sep 24, 2008 page 244
inductor
CDF gpdk180 ind
CDF parameters
name "ind"
prompt "Inductance (H)"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefInd)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF device params
CDF parameters
DefInd 5.95156e-10 private
name "nr"
DefNR 2.5 private
prompt "Number Of Turns"
MinR 20.0u private
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefNR)
MaxR 100.0u private
choices ’("1.5" "2.5" "3.5" "4.5" "5.5" "6.5" "7.5" "8.5" "9.5")
MinS 2.0u private
type "cyclic"
MaxS 10.0u private
callback "gpdk180_indCB()"
MinW 5.0u private
CDF parameters MaxW 20.0u private
name "rad"
prompt "Inner Radius"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinR)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "width"
prompt "Inductor Width"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "space"
prompt "Inductor Space"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinS)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 245
CDF parameters
name "model" CDF device params
prompt "Model" category "ind" private Library Manager Category
defValue "inductor"
type "string" CDF device params
display "nil" grid $grid private MFG Grid
parseAsCEL "yes" scale 1.0e-6 private Dimension scale factor
CDF parameters
name "m"
prompt "multiplier" CDF parameters
defValue "1" name "macro"
type "string" prompt "Model"
display "nil" defValue "iPar(\"model\")"
editable "nil" type "string"
parseAsNumber "yes" display "nil"
parseAsCEL "yes" parseAsCEL "yes"
CDF siminfo
simulator auCdl
modelName "$cell"
componentName ind
namePrefix "I"
propMapping (nil l ind)
termOrder (PLUS MINUS)
instParameters (l)
netlistProcedure ansCdlCompPrim
CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (ind)
componentName "$cell"
termOrder (PLUS MINUS)
namePrefix "I"
CDF siminfo
simulator spectre
propMapping (nil l ind) CDF siminfo
termMapping (nil PLUS \:1 MINUS \:2) simulator ams
instParameters (l) isPrimitive t
termOrder (PLUS MINUS) termOrder (PLUS MINUS)
otherParameters (model) instParameters ind
componentName ind
Sep 24, 2008 page 246
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (L)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":P2")
propMapping (nil L ind)
typeMapping nil
uselib nil
vpnp
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_vpnpCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
propMapping (nil M m EA area)
instParameters (EA M)
namePrefix "Q"
componentName vpnp
termOrder (C B E)
modelName "$cell"
CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"
CDF siminfo
simulator ams
isPrimitive t
termOrder (C B E)
instParameters (area m)
otherParameters (model)
CDF siminfo
simulator spectre
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
instParameters (area m)
otherParameters (model)
Sep 24, 2008 page 249
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil _M m)
typeMapping nil
uselib nil
npn
CDF gpdk180 npn
CDF parameters
name "area"
prompt "Area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_bjtCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "macro"
prompt "Model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"
CDF siminfo
simulator auCdl
modelName "$cell"
termOrder (C B E)
componentName npn
namePrefix "Q"
instParameters (EA)
propMapping (nil EA area)
netlistProcedure ansCdlCompPrim
CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"
CDF siminfo
CDF siminfo
simulator spectre
simulator ams
propMapping (nil area scaleF)
isPrimitive t
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
termOrder (C B E)
instParameters (area m)
instParameters (area m)
propMapping (nil area scaleF)
otherParameters (model)
otherParameters (model)
Sep 24, 2008 page 252
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil Area scaleF _M m)
typeMapping nil
uselib nil
CDF properties
formInitProc "" CDF cellview
doneProc "" symbol pas_std npn3 symbol
buttonFieldWidth 340 spectre pas_std npn3 symbol
fieldHeight 35 auLvs pas_std npn3 symbol
fieldWidth 350 auCdl pas_std npn3 symbol
promptWidth 175 ads pas_std npn3 symbol
modelLabelSet "bf is vaf" ivpcell gpdk180 npn symbol 40
opPointLabelSet "betadc ic vce"
paramLabelSet "-model m area"
Sep 24, 2008 page 253
pnp
CDF parameters
name "Ewidth"
prompt "Emitter width"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
callback "gpdk180_bjtCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "area"
prompt "Area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m" CDF parameters
prompt "Multiplier" name "scaleF"
defValue "1" prompt "Scale Factor"
type "string" defValue "1"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""type "string"
callback "gpdk180_bjtCB()" editable "nil"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"
CDF parameters
name "macro"
prompt "Model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"
CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"
CDF siminfo
simulator auCdl
modelName "$cell"
termOrder (C B E)
componentName pnp
namePrefix "Q"
instParameters (EA)
propMapping (nil EA area)
netlistProcedure ansCdlCompPrim
CDF siminfo
CDF siminfo
simulator spectre
simulator ams
propMapping (nil area scaleF)
isPrimitive t
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
termOrder (C B E)
instParameters (area m)
instParameters (area m)
propMapping (nil area scaleF)
otherParameters (model)
otherParameters (model)
Sep 24, 2008 page 255
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil Area scaleF _M m)
typeMapping nil
uselib nil
CDF properties
formInitProc "" CDF cellview
doneProc "" symbol pas_std pnp3 symbol
buttonFieldWidth 340 spectre pas_std pnp3 symbol
fieldHeight 35 auLvs pas_std pnp3 symbol
fieldWidth 350 auCdl pas_std pnp3 symbol
promptWidth 175 ads pas_std pnp3 symbol
modelLabelSet "bf is vaf" ivpcell gpdk180 pnp symbol 40
opPointLabelSet "betadc ic vce"
paramLabelSet "-model m area"
Sep 24, 2008 page 256
moscap macro
CDF parameters
name "totalC"
prompt "Total Capacitance (F)"
units "capacitance"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefC)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "entryModeC"
prompt "Capacitance Entry Mode"
defValue "Capacitance"
choices ’("Capacitance" "Cap&Length" "Cap&Width" "Length&Width")
type "cyclic"
callback "gpdk180_moscapCB()"
Sep 24, 2008 page 258
CDF parameters
name "entryModeW"
prompt "Width Entry Mode"
defValue "TotalWidth"
choices ’("TotalWidth" "WidthPerFinger")
type "cyclic"
display "cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\""
callback "gpdk180_moscapCB()"
CDF parameters
name "w"
prompt "Width (m)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
editable "( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"TotalWidth\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "fw"
prompt "Width Per Finger (m)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
editable "( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"WidthPerFinger\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 259
CDF parameters
name "fingers"
prompt "Number of Fingers"
defValue "1"
type "string"
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "deGetEditCellView()->cellViewType != \"maskLayout\""
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "simM"
prompt "Simulation Multiplier"
defValue "iPar(\"m\") * iPar(\"fingers\")"
type "string"
display "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "macro"
prompt "macro model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"
Sep 24, 2008 page 260
CDF parameters
CDF parameters CDF parameters
name "connectGates"
name "mtlCvg" name "rightAbut"
prompt "Gate Connection"
prompt "Metal Coverage" prompt "Right Abutment"
defValue "None"
defValue "" defValue 0
choices ’("None" "Top" "Bottom" "Both" "Alternate")
type "string" type "int"
type "radio"
display "nil" display "nil"
display "t"
CDF parameters
name "sdMtlWidth" CDF parameters
prompt "S/D Metal Width" name "tapCntRows"
units "lengthMetric" prompt "Tap Contact Rows"
defValue ".4u" defValue 1
type "string" type "int"
display "nil" display "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "connectSD"
CDF parameters
prompt "S/D Connection"
name "leftTap"
defValue "None"
prompt "Left Tap"
choices ’("None" "Source" "Drain" "Both")
defValue t
type "radio"
type "boolean"
display "gpdk180_mosDisplay(’connectSD)"
display "t"
CDF parameters
CDF parameters
name "bottomTap"
name "rightTap"
prompt "Bottom Tap" CDF parameters
prompt "Right Tap"
defValue nil name "tap"
defValue nil
type "boolean" prompt "Bodytie Type"
type "boolean"
display "t" defValue "Detached"
display "t"
choices ’( "None" "Detached" )
CDF parameters type "cyclic" CDF parameters
name "tapExtension" display "nil" name "topTap"
prompt "Tap Extension"
prompt "Top Tap"
defValue ""
defValue nil
type "string"
type "boolean"
display "nil"
display "t"
Sep 24, 2008 page 261
CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (W L _M)
componentName nil
termOrder (D G S B)
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil W fw L l _M simM)
typeMapping nil
uselib nil
CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
paramLabelSet "-totalC l w fingers"
opPointLabelSet "ids vgs vds vth vdsat"
modelLabelSet "vtho kf beta0"
Sep 24, 2008 page 262
nmoscap
CDF cellview
CDF siminfo
symbol baseline_gpdk nmoscap4n symbol
simulator auCdl
spectre baseline_gpdk nmoscap4n symbol
componentName nmoscap
auLvs baseline_gpdk nmoscap4n symbol
modelName "$cell"
auCdl baseline_gpdk nmoscap4n symbol
ads baseline_gpdk nmoscap4n symbol
ivpcell gpdk180 nmoscap symbol 40
CDF siminfo
simulator auLvs
componentName nmoscap
Sep 24, 2008 page 263
nmoscap3
CDF cellview
CDF siminfo
symbol baseline_gpdk nmoscap4n3 symbol
simulator auCdl
spectre baseline_gpdk nmoscap4n3 symbol
componentName nmoscap
auLvs baseline_gpdk nmoscap4n3 symbol
modelName nmoscap
auCdl baseline_gpdk nmoscap4n3 symbol
ads baseline_gpdk nmoscap4n3 symbol
ivpcell gpdk180 nmoscap3 symbol 40
CDF siminfo
simulator auLvs
componentName nmoscap
Sep 24, 2008 page 264
pmoscap
CDF cellview
CDF siminfo
symbol baseline_gpdk pmoscap4n symbol
simulator auCdl
spectre baseline_gpdk pmoscap4n symbol
componentName pmoscap
auLvs baseline_gpdk pmoscap4n symbol
modelName "$cell"
auCdl baseline_gpdk pmoscap4n symbol
ads baseline_gpdk pmoscap4n symbol CDF siminfo
ivpcell gpdk180 pmoscap symbol 40 simulator auLvs
componentName pmoscap
Sep 24, 2008 page 265
pmoscap3
CDF cellview
CDF siminfo
symbol baseline_gpdk pmoscap4n3 symbol
simulator auCdl
spectre baseline_gpdk pmoscap4n3 symbol
componentName pmoscap
auLvs baseline_gpdk pmoscap4n3 symbol
modelName pmoscap
auCdl baseline_gpdk pmoscap4n3 symbol
ads baseline_gpdk pmoscap4n3 symbol CDF siminfo
ivpcell gpdk180 pmoscap3 symbol 40 simulator auLvs
componentName pmoscap
Sep 24, 2008 page 266
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; determine whether the test value is a string or non string and whether it
;;; it has a blank value
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; print an error message if a blank value is encountered
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diode
CDF Callback
procedure( gpdk180_diodeCB()
let((MinL MinW MaxL MaxW
cell grid scale sGrid libName deviceName device
lVal wVal mult areaVal lVar wVar multVar perimVal
)
MinL = device->MinL
MinW = device->MinW
MaxL = device->MaxL
MaxW = device->MaxW
lVar = nil
wVar = nil
multVar = nil
lVal = cdfParseFloatString(cdfgData->l->value)
wVal = cdfParseFloatString(cdfgData->w->value)
inductor
CDF Callback
procedure( gpdk180_indCB()
prog( (
cell grid scale sGrid libName deviceName device
wVal sVal rVal indVal
MinR MaxR MinS MaxS MinW MaxW
k1 k2 u0 nr s w r)
MinR = device->MinR
MaxR = device->MaxR
MinS = device->MinS
MaxS = device->MaxS
MinW = device->MinW
MaxW = device->MaxW
bipolar
CDF Callback
procedure( gpdk180_bjtCB()
let((
cell grid scale sGrid libName deviceName device
Ewidth area MinE MaxE mult multVar)
MinE = device->MinE
MaxE = device->MaxE
Ewidth = cdfParseFloatString(cdfgData->Ewidth->value)
;calculate and check min E -> this is also the value of E length
nmoscap / pmoscap
CDF Callback
procedure(gpdk180_moscapCB()
let((
cell grid scale sGrid libName deviceName device
MinL MaxL MinW MaxW MaxF CapA CapP
cVar wVar fwVar lVar fingersVar
m fingers c totalC l w wtemp fw entryModeC entryModeW)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; retrieve process information necessary for callback procedure
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MinL = device->MinL
MinW = device->MinW
MaxL = device->MaxL
MaxW = device->MaxW
MaxF = device->MaxF
CapA = device->CapA
CapP = device->CapP
scale = device->scale
setq(sGrid times(grid scale))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; set initial variable status of capacitance, width, length, and fingers
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cVar = nil
wVar = nil
fwVar = nil
lVar = nil
fingersVar = nil
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; determine entry mode for capacitance and width values
;;;...
Sep 24, 2008 page 271
ndio
pcell gpdk180 ndio
ImpEncAnode = {4C} ContW = {6A}
PCell formal params
OxideSp = 0.5 M1EncCont = {7C}
w float cdf ImpEncCathode = {3C} AnodeEncCont = 0.2
l float cdf CathodeEncCont = 0.2 AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B} CathodeEncM1 = CathodeEncCont - M1EncCont
RlEncOxide = 0.1
RlEncOxide RlEncOxide
cathode anode
Nimp Pimp
[DIOdummy]
Oxide Oxide
l*1e6 l*1e6
w*1e6 w*1e6
ref
OxideSp 0 ImpEncAnode ImpEncAnode
ImpEncCathode ImpEncCathode
RlEncOxide RlEncOxide
CathodeEncCont CathodeEncCont
cathode AnodeEncCont AnodeEncCont anode
CathodeEncM1 CathodeEncM1
AnodeEncM1 AnodeEncM1
Oxide Oxide
"MINUS" inOut "PLUS" inOut
<-Metal1-> <-Metal1->
Cont[] all Cont[] all
ContW ContW
Cont[] Cont[]
ContW ContW
ContW ContW
AnodeEncM1 AnodeEncM1
CathodeEncM1 CathodeEncM1
pdio
pcell gpdk180 pdio
ImpEncAnode = {4C} ContW = {6A}
PCell formal params
OxideSp = 0.5 M1EncCont = {7C}
w float cdf ImpEncCathode = {3C} AnodeEncCont = 0.2
l float cdf CathodeEncCont = 0.2 AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B} CathodeEncM1 = CathodeEncCont - M1EncCont
RlEncOxide = 0.4 NwEncOxide = 0.5
[Nwell]
RlEncOxide RlEncOxide NwEncOxide NwEncOxide
[DIOdummy]
Pimp anode Nimp cathode
Oxide Oxide
l*1e6 l*1e6
w*1e6 w*1e6
ref
ContW ContW
Cont[] Cont[]
ContW ContW
ContW ContW
AnodeEncCont AnodeEncCont
CathodeEncCont CathodeEncCont
Sep 24, 2008 page 274
inductor
pcell gpdk180 ind
w = width * 1e6
s = space * 1e6
r = rad * 1e6
ref turn[1]
n = cdfParseFloatString(nr)
w
numHalfTurns = fix(n * 2.0)
Metal3 MinusTabL = RlEncInd
RlEncInd = 10.0
r r Rl2EncInd = 0.0
MetEncVia = 0.9
PlusTabL = fix(n) * (s + w) + RlEncInd
r * 2.0
2: for i 2 numHalfTurns
if evenp(i) if oddp(i)
L1 = r + (i / 2 - 1) * (s + w) L1 = r + (i - 1) / 2.0 * (s + w)
L2 = r * 2.0 + (i - 1) * (s + w) L2 = r * 2.0 + (i - 1) * (s + w)
L2 turn[i] Metal3 turn[i-1]
Metal3
L1 L1
w
w
turn[i-1]
L1 L1
Metal3 turn[i]
Metal3
L2
Sep 24, 2008 page 275
3: include
IND3dummy
w space * *
Metal3
Via2[] w
MinusTabL
"MINUS" inOut
right
w
MetEncVia MetEncVia
IND2dummy
MetEncVia MetEncVia
turn[1]
PlusTab Metal2
Metal2 Via2[]
w space * *
Metal3
Via2[] w
PlusTabL
"PLUS" inOut
left
w
MetEncVia MetEncVia
Sep 24, 2008 page 276
4: include
<-INDdummy->
turn[numHalfTurns - 1]
RlEncInd RlEncInd
Metal3
Metal3
RlEncInd RlEncInd
turn[numHalfTurns]
Sep 24, 2008 page 277
npn
alEmit = 0.6
meImplDiff = {3C}
msEmitBase = 0.5
msCollBase = 1.0
meWellDiff = {2C}
msCont = {6B}
mwCont = {6A}
meDiffCont = {6C}
meM1Cont = {7C}
meThreshDiff = 0.8
meM1Diff = meM1Cont - meDiffCont
Ewidth
Oxide
CD
alEmit
0.0 msCollBase
Ewidth
Oxide
BD
alEmit
0.0 msEmitBase
Oxide
alEmit
ED
Ewidth
ref 0 0
Sep 24, 2008 page 278
Create the...
meWellDiff meWellDiff
<-Pwell->
<-Pimp-> <-Nimp->
BD ED
meWellDiff meWellDiff
Create the...
ED meDiffCont meDiffCont
meDiffCont meDiffCont BD
Oxide
Oxide
mwCont
Cont[] mwCont
Cont[]
mwCont
mwCont
mwCont
space msCont msCont Cont[] mwCont
space msCont msCont Cont[]
mwCont
mwCont
meDiffCont meDiffCont
meDiffCont meDiffCont
Create the metal...
meM1Diff meM1Diff
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
Oxide
"B" inOut
"E" inOut all
all pin name "B"
pin name "E"
mwCont
space msCont msCont Cont[]
mwCont
meImplDiff meImplDiff
meWellDiff meWellDiff
meDiffCont meDiffCont
Create the PWel, NBuried, and the NPNdummy:
meThreshDiff meThreshDiff
<-Nburied->
<-NPNdummy->
Create the metal...
meM1Diff meM1Diff CD
CD Oxide
<-Metal1->
Oxide
"C" inOut
all ED
Oxide
pin name "C"
meThreshDiff meThreshDiff
meM1Diff meM1Diff
Sep 24, 2008 page 280
pnp
alEmit = 0.6
meImplDiff = {3C}
msEmitBase = 0.5
msCollBase = 1.0
meWellDiff = {2C}
msCont = {6B}
mwCont = {6A}
meDiffCont = {6C}
meM1Cont = {7C}
meBaseDiff = 0.8
meThreshDiff = 1.1
Ewidth
meM1Diff = meM1Cont - meDiffCont
Oxide
ED
alEmit
0.0 msEmitBase
ref 0 0
Ewidth
Oxide
BD
alEmit
0.0 msCollBase
Oxide
alEmit
CD
Ewidth
Sep 24, 2008 page 281
Create the...
meWellDiff meWellDiff
<-Nwell->
<-Nimp-> <-Pimp->
BD ED
meWellDiff meWellDiff
Create the...
ED meDiffCont meDiffCont
meDiffCont meDiffCont BD
Oxide
Oxide
mwCont
Cont[] mwCont
Cont[]
mwCont
mwCont
mwCont
space msCont msCont Cont[] mwCont
space msCont msCont Cont[]
mwCont
mwCont
meDiffCont meDiffCont
meDiffCont meDiffCont
Create the metal...
meM1Diff meM1Diff
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
Oxide
"B" inOut
"E" inOut all
all pin name "B"
pin name "E"
mwCont
space msCont msCont Cont[]
mwCont
meDiffCont meDiffCo
meImplDiff meImplDiff
meThreshDiff meThreshDiff
<-Nburied->
meThreshDiff meThreshDiff
<-PNPdummy->
Create the metal...
meBaseDiff meBaseDiff <-Pwell->
meM1Diff meM1Diff ED
CD Oxide
<-Metal1->
Oxide
"C" inOut
all CDmeThreshDiff meBaseDiff
Oxide
pin name "C"
meThreshDiff meBaseDiff
meM1Diff meM1Diff
meBaseDiff meWellDiff
Sep 24, 2008 page 283
vpnp
mePimpDiff mePimpDiff
<-Pimp->
Oxide
meDiffCont meDiffCont
space msCont msCont center
Elength
emit
meDiffCont meDiffCont
Ewidth
mePimpDiff mePimpDiff
Oxide
<-Metal1->
meDiffM1 meDiffM1
meDiffM1 meDiffM1
"E" inOut
all
pin name "E"
emit
Sep 24, 2008 page 285
<-Nwell->
meWellM1 meWellM1
(Oxide)
mwBase
(Nimp)
mwNimp
Metal1
inWidthBaseM1
mwM1
Ewidth + msEBM1
0 meDiffCont
Oxide
space msCont
emit inLengthBaseM1
msEBM1 0
"B" inOut
msEBM1 all
pin name "B"
inWidthBaseM1
base
meWellM1 meWellM1
Sep 24, 2008 page 286
<-BJTdum->
mwColl
(Pimp)
mwPimp
Metal1
inWidthCollM1
mwM1
Ewidth + innerCollM1Part
0 meDiffCont
space msCont
base inLengthCollM1
msBCM1 0
"C" inOut
innerCollM1Part all
pin name "C"
inWidthCollM1
coll
meBJTM1 meBJTM1
Sep 24, 2008 page 287
moscap (macro)
pcell macro moscap
999: include
<-Metal1->
Metal1 Metal1
metal[0] metal[gc]
"D" inOut
all
must group drain
Sep 24, 2008 page 288
Taps
<-Pimp->
<-Metal1-> <-Oxide-> **
Cont ** Cont **
** **
ref c ** c
<-Nimp->
<-Metal1-> <-Oxide-> **
Cont ** Cont **
** **
ref c ** c
Sep 24, 2008 page 292
Create Layouts
gpdk180
$cell
$cell
gpdk180_layouts
R0
ptap
SUBTAP
R0
ref 0 0 ref 5 0
Sep 24, 2008 page 293
CDB purposes
GeoShare 1 GeoShare
warning 234 wng
tool1 235 tl1
tool0 236 tl0
label 237 lbl
flight 238 flt
error 239 err
annotate 240 ant
drawing1 241 dr1
drawing2 242 dr2
drawing3 243 dr3
drawing4 244 dr4
drawing5 245 dr5
drawing6 246 dr6
drawing7 247 dr7
drawing8 248 dr8
drawing9 249 dr9
boundary 250 bnd
pin 251 pin
drawing 252 drw
net 253 net
cell 254 cel
all 255 all
Sep 24, 2008 page A1
$layer1 dummy
$layer2 dummy
$pcLayer1 dummy
ALL_GATES ( Poly and NPLUS andnot Nwell ) or ( Poly and PPLUS device_recognition
and Nwell )
BJTdum input 15;0 df2order 104 packet zbip
Bondpad input 36;0 df2order 96 packet pass
Bondpad_boundary input (Bondpad boundary) df2order 97 packet
pbaseBnd notChg notValid
Cannotoccupy input df2order 208 notChg notValid
Cannotoccupy_bounda input (Cannotoccupy boundary) df2order 209 packet
ry CannotoccupyBnd notChg notValid
Canplace input df2order 210 notChg notValid
CapMetal input 14;0 df2order 66 packet m4
CapMetal_boundary input (CapMetal boundary) df2order 68 packet m4
notChg notValid
CapMetal_net input (CapMetal net) df2order 67 packet m4 notChg
notValid
Capdum input 12;0 df2order 98 packet zcap
Cont input 6;0 df2order 69 packet cw via
Cont_boundary input (Cont boundary) df2order 72 packet cwBnd
notChg notValid
Cont_net input (Cont net) df2order 71 packet cwNet notChg
notValid
Cont_pin input (Cont pin) df2order 70 packet cwPin notChg
notValid
Contdum Cont and Metal1
DIOdummy input 22;0 df2order 107 packet zdiode
FIELD_POLY1 Poly andnot ALL_GATES
FIELD_POLY1_CONNECFIELD_POLY1 and Poly via
T
Group input df2order 206 notChg notValid
Group_label input (Group label) df2order 207 packet GroupLbl
notChg notValid
IND2dummy input 17;0 df2order 100 packet zind2
IND3dummy input 70;0 df2order 101 packet zind3
INDUCTOR (Metal3 or IND2dummy or IND3dummy) and INDdummy device_recognition
INDdummy input 16;0 df2order 99 packet zind
INDdummy_net input (INDdummy net) packet zindnet notChg notValid
INDterm1 INDdummy and IND2dummy
INDterm1Cont Metal2 and INDdummy and IND2dummy via
INDterm2 INDdummy and IND3dummy
INDterm2Cont Metal2 and INDdummy and IND3dummy via
ISONMOS POLYterm andnot Nwell and NPLUS andnot ThickOxide device_recognition
andnot Capdum and Nburied
ISONMOSCAP POLYterm andnot Nwell and NPLUS and Capdum and device_recognition
Nburied
ISONMOSHV POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum and Nburied andnot RFdummy
ISONMOSRF POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum and Nburied and RFdummy
ISONSDRES NSD and Resdum and Nburied device_recognition
ISOPWELL ((Nburied enclose (holes Nwell)) and (holes
Nwell))andnot Pwell
JVAR1dummy input 43;0 packet zjvar1 device_recognition
Sep 24, 2008 page A2
JVAR1dummy_net input (JVAR1dummy net) packet zjvar1 notChg
notValid
JVAR2dummy input 44;0 packet zjvar2 device_recognition
JVAR3dummy input 48;0 packet zjvar3 device_recognition
JVARNF JVAR1dummy and Nwell device_recognition
JVARW40 JVAR2dummy and Nwell device_recognition
JVARanode (JVAR1dummy or JVAR2dummy) andnot NSDterm
JVARterm PSDterm and (JVAR1dummy or JVAR2dummy) and soft_via
JVAR3dummy
M1dummy input 37;0 df2order 103 packet m1dum
M1res Metal1 and M1dummy device_recognition
M1term Metal1 andnot M1dummy
M2dummy input 38;0 df2order 103 packet m2dum
M2res Metal2 and M2dummy device_recognition
M2term Metal2 andnot M2dummy
M3dummy input 39;0 df2order 103 packet m3dum
M3res Metal3 and M3dummy device_recognition
M3term Metal3 andnot M3dummy
M4dummy input 40;0 df2order 103 packet m4dum
M4res Metal4 and M4dummy device_recognition
M4term Metal4 andnot M4dummy
M5dummy input 41;0 df2order 103 packet m5dum
M5res Metal5 and M5dummy device_recognition
M5term Metal5 andnot M5dummy
M6dummy input 42;0 df2order 103 packet m6dum
M6res Metal6 and M6dummy device_recognition
M6term Metal6 andnot M6dummy
MIMCAP CapMetal and Metal2 and Capdum device_recognition
Metal1 input 7;0 df2order 2 packet m1
Attach Text: 7;3 (Metal1 label)
Metal1_boundary input (Metal1 boundary) df2order 5 packet m1Bnd
notChg notValid
Metal1_drawing4 input 7;4 (Metal1 drawing4) df2order 1 packet m1
notChg notValid
Metal1_label input 7;3 (Metal1 label) df2order 0 packet m1 notChg
notValid
Metal1_net input 7;2 (Metal1 net) df2order 4 packet m1Net
notChg notValid
Metal1_pin input 7;1 (Metal1 pin) df2order 3 packet m1Pin notChg
notValid fillStyle X
Metal2 input 9;0 df2order 14 packet m2
Attach Text: 9;3 (Metal2 label)
Metal2_boundary input (Metal2 boundary) df2order 17 packet m2Bnd
notChg notValid
Metal2_drawing4 input 9;4 (Metal2 drawing4) df2order 13 packet m2
notChg notValid
Metal2_label input 9;3 (Metal2 label) df2order 12 packet m2 notChg
notValid
Metal2_net input 9;2 (Metal2 net) df2order 16 packet m2Net
notChg notValid
Metal2_pin input 9;1 (Metal2 pin) df2order 15 packet m2Pin
notChg notValid fillStyle X
Metal3 input 11;0 df2order 26 packet m3
Attach Text: 11;3 (Metal3 label)
Sep 24, 2008 page A3
Metal3_boundary input (Metal3 boundary) df2order 29 packet m3Bnd
notChg notValid
Metal3_drawing4 input 11;4 (Metal3 drawing4) df2order 25 packet m3
notChg notValid
Metal3_label input 11;3 (Metal3 label) df2order 24 packet m3
notChg notValid
Metal3_net input 11;2 (Metal3 net) df2order 28 packet m3Net
notChg notValid
Metal3_pin input 11;1 (Metal3 pin) df2order 27 packet m3Pin
notChg notValid fillStyle X
Metal4 input 31;0 df2order 38 packet m4
Attach Text: 31;3 (Metal4 label)
Metal4_boundary input (Metal4 boundary) df2order 41 packet m4Bnd
notChg notValid
Metal4_drawing4 input 31;4 (Metal4 drawing4) df2order 37 packet m4
notChg notValid
Metal4_label input 31;3 (Metal4 label) df2order 36 packet m4
notChg notValid
Metal4_net input 31;2 (Metal4 net) df2order 40 packet m4Net
notChg notValid
Metal4_pin input 31;1 (Metal4 pin) df2order 39 packet m4Pin
notChg notValid fillStyle X
Metal5 input 33;0 df2order 50 packet m5
Attach Text: 33;3 (Metal5 label)
Metal5_boundary input (Metal5 boundary) df2order 53 packet m5Bnd
notChg notValid
Metal5_drawing4 input 33;4 (Metal5 drawing4) df2order 49 packet m5
notChg notValid
Metal5_label input 33;3 (Metal5 label) df2order 48 packet m5
notChg notValid
Metal5_net input 33;2 (Metal5 net) df2order 52 packet m5Net
notChg notValid
Metal5_pin input 33;1 (Metal5 pin) df2order 51 packet m5Pin
notChg notValid fillStyle X
Metal6 input 35;0 df2order 62 packet m6
Attach Text: 35;3 (Metal6 label)
Metal6_boundary input (Metal6 boundary) df2order 65 packet m6Bnd
notChg notValid
Metal6_drawing4 input 35;4 (Metal6 drawing4) df2order 61 packet m6
notChg notValid
Metal6_label input 35;3 (Metal6 label) df2order 60 packet m6
notChg notValid
Metal6_net input 35;2 (Metal6 net) df2order 64 packet m6Net
notChg notValid
Metal6_pin input 35;1 (Metal6 pin) df2order 63 packet m6Pin
notChg notValid fillStyle X
NBVIA NWELLterm and Nburied soft_via
NDIODE DIOdummy and ( NSDterm andnot Nwell ) device_recognition
NMOS POLYterm andnot Nwell and NPLUS andnot ThickOxide device_recognition
andnot Capdum andnot Nburied
NMOSCAP POLYterm andnot Nwell and NPLUS and Capdum device_recognition
andnot Nburied
NMOSHV POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum andnot Nburied andnot RFdummy
Sep 24, 2008 page A4
NMOSRF POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum andnot Nburied and RFdummy
NPLUS Nimp and Oxide
NPN NPNdummy and Pwell and Nburied and NSDterm device_recognition
NPNdummy input 20;0 df2order 105 packet znpn
NSD NPLUS andnot Poly
NSDRES NSD and Resdum andnot Nburied device_recognition
NSDarea (NPLUS cut Poly) andnot Poly
NSDcont Cont and NPLUS via
NSDterm NSD andnot Resdum
NWELLRES Nwell and ResWdum device_recognition
NWELLterm Nwell andnot ResWdum
NWVIA NSDterm and NWELLterm soft_via
Nburied input 19;0 df2order 88 packet npblk
Nburied_boundary input (Nburied boundary) df2order 90 packet npblkBnd
notChg notValid
Nburied_net input (Nburied net) df2order 89 packet npblk notChg
notValid
Nimp input 4;0 df2order 91 packet nplus
Nimp_boundary input (Nimp boundary) df2order 92 packet nplusBnd
notChg notValid
Nimp_net input (Nimp net) packet nplusBnd notChg notValid
Nwell input 2;0 df2order 79 packet nwell
Nwell_boundary input (Nwell boundary) df2order 81 packet nwellBnd
notChg notValid
Nwell_net input (Nwell net) df2order 80 packet nwellNet notChg
notValid
OVERLAP input 101;0 df2order 116 packet ovlap notSel notValid
OVERLAP_boundary input 101;5 (OVERLAP boundary) df2order 118 packet
ovlap notSel notChg
OVERLAP_label input 101;3 (OVERLAP label) df2order 117 packet ovlap
notSel notChg notValid
Oxide input 1;0 df2order 85 packet tox
Oxide_boundary input (Oxide boundary) df2order 87 packet toxBnd
notChg notValid
Oxide_net input (Oxide net) df2order 86 packet toxBnd notChg
notValid
PDIODE DIOdummy and PSDterm and Nwell device_recognition
PMOS POLYterm and Nwell and PPLUS andnot ThickOxide device_recognition
andnot Capdum
PMOSCAP POLYterm and Nwell and PPLUS and Capdum device_recognition
PMOSHV POLYterm and Nwell and PPLUS and ThickOxide device_recognition
andnot Capdum andnot RFdummy
PMOSRF POLYterm and Nwell and PPLUS and ThickOxide device_recognition
andnot Capdum and RFdummy
PNP PNPdummy and Nwell and Pwell and Nburied and device_recognition
PSDterm
PNPdummy input 21;0 df2order 106 packet zpnp
POLYHRES Poly and Resdum and SiProt device_recognition
POLYRES Poly and Resdum andnot SiProt device_recognition
POLYcont Cont and Poly via
POLYterm Poly andnot Resdum
PPLUS Pimp and Oxide
PSD PPLUS andnot Poly
PSDRES PPLUS and Resdum and Nwell device_recognition
Sep 24, 2008 page A5
PSDarea (PPLUS cut Poly) andnot Poly
PSDcont Cont and PPLUS via
PSDterm PSD andnot Resdum
PSUB (bulk andnot (Nburied or Nwell or Pwell)) or BJTdum
PWNBVIA (PSDterm and ISOPWELL) soft_via
PWVIA (PSDterm and Pwell) andnot Nwell soft_via
Pimp input 5;0 df2order 93 packet pplus
Pimp_boundary input (Pimp boundary) df2order 94 packet pplusBnd
notChg notValid
Pimp_net input (Pimp net) packet pplusBnd notChg notValid
Poly input 3;0 df2order 75 packet poly1
Poly_boundary input (Poly boundary) df2order 78 packet poly1Bnd
notChg notValid
Poly_drawing4 input 3;4 (Poly drawing4) df2order 74 packet poly1
notChg notValid
Poly_label input 3;3 (Poly label) df2order 73 packet poly1 notChg
notValid
Poly_net input 3;2 (Poly net) df2order 77 packet poly1Net
notChg notValid
Poly_pin input 3;1 (Poly pin) df2order 76 packet poly1Pin
notChg notValid
Psubiso input 51;0 df2order 109
Pwell input 18;0 df2order 82 packet pwell
Pwell_boundary input (Pwell boundary) df2order 84 packet pwellBnd
notChg notValid
Pwell_net input (Pwell net) df2order 83 packet pwellNet notChg
notValid
RFdummy input 69;0 df2order 102 packet zrf
ResWdum input 71;0 df2order 102 packet zrwell
Resdum input 13;0 df2order 102 packet zrpoly
Row input df2order 204 packet prBoundaryLbl notChg
Row_label input (Row label) df2order 205 packet RowLbl notChg
notValid
SUBVIA (PSUB and PSDterm) andnot Nburied andnot Nwell soft_via
SiProt input 72;0 df2order 95 packet siprot
ThickOxide input 24;0 df2order 85 packet thox
Unrouted input df2order 211 notChg notValid
Unrouted_drawing1 input (Unrouted drawing1) df2order 212 packet
Unrouted1 notChg notValid
Unrouted_drawing2 input (Unrouted drawing2) df2order 213 packet
Unrouted2 notChg notValid
Unrouted_drawing3 input (Unrouted drawing3) df2order 214 packet
Unrouted3 notChg notValid
Unrouted_drawing4 input (Unrouted drawing4) df2order 215 packet
Unrouted4 notChg notValid
Unrouted_drawing5 input (Unrouted drawing5) df2order 216 packet
Unrouted5 notChg notValid
Unrouted_drawing6 input (Unrouted drawing6) df2order 217 packet
Unrouted6 notChg notValid
Unrouted_drawing7 input (Unrouted drawing7) df2order 218 packet
Unrouted7 notChg notValid
Unrouted_drawing8 input (Unrouted drawing8) df2order 219 packet
Unrouted8 notChg notValid
Unrouted_drawing9 input (Unrouted drawing9) df2order 220 packet
Unrouted9 notChg notValid
Sep 24, 2008 page A6
VPNP (PSDterm and Nwell) interact (holes(PSDterm) interact device_recognition
holes(NSDterm) notInteract Poly) and BJTdum
Via1 input 8;0 df2order 9 packet v1 via
Via1_boundary input (Via1 boundary) df2order 11 packet v1Bnd
notChg notValid
Via1_drawing4 input 8;4 (Via1 drawing4) df2order 8 packet v1 notChg
notValid
Via1_label input 8;3 (Via1 label) df2order 6 packet v1 notChg
notValid
Via1_net input (Via1 net) df2order 10 packet v1Net notChg
notValid
Via1_pin input 8;1 (Via1 pin) df2order 7 packet v1 notChg
notValid
Via1dum Via1 and Metal2
Via2 input 10;0 df2order 21 packet v2 via
Via2Cap Via2 and CapMetal via
Via2NoCapInd Via2 and Metal2 andnot (CapMetal or INDdummy) via
Via2_boundary input (Via2 boundary) df2order 23 packet v2Bnd
notChg notValid
Via2_drawing4 input 10;4 (Via2 drawing4) df2order 20 packet v2
notChg notValid
Via2_label input 10;3 (Via2 label) df2order 19 packet v2 notChg
notValid
Via2_net input (Via2 net) df2order 22 packet v2Net notChg
notValid
Via2_pin input 10;1 (Via2 pin) df2order 18 packet v2 notChg
notValid
Via2dum Via2NoCapInd and Metal3
Via3 input 30;0 df2order 33 packet v3 via
Via3_boundary input (Via3 boundary) df2order 35 packet v3Bnd
notChg notValid
Via3_drawing4 input 30;4 (Via3 drawing4) df2order 32 packet v3
notChg notValid
Via3_label input 30;3 (Via3 label) df2order 31 packet v3 notChg
notValid
Via3_net input (Via3 net) df2order 34 packet v3Net notChg
notValid
Via3_pin input 30;1 (Via3 pin) df2order 30 packet v3 notChg
notValid
Via3dum Via3 and Metal4
Via4 input 32;0 df2order 45 packet v4 via
Via4_boundary input (Via4 boundary) df2order 47 packet v4Bnd
notChg notValid
Via4_drawing4 input 32;4 (Via4 drawing4) df2order 44 packet v4
notChg notValid
Via4_label input 32;3 (Via4 label) df2order 43 packet v4 notChg
notValid
Via4_net input (Via4 net) df2order 46 packet v4Net notChg
notValid
Via4_pin input 32;1 (Via4 pin) df2order 42 packet v4 notChg
notValid
Via4dum Via4 and Metal5
Via5 input 34;0 df2order 57 packet v5 via
Via5_boundary input (Via5 boundary) df2order 59 packet v5Bnd
notChg notValid
Sep 24, 2008 page A7
Via5_drawing4 input 34;4 (Via5 drawing4) df2order 56 packet v5
notChg notValid
Via5_label input 34;3 (Via5 label) df2order 55 packet v5 notChg
notValid
Via5_net input (Via5 net) df2order 58 packet v5Net notChg
notValid
Via5_pin input 34;1 (Via5 pin) df2order 54 packet v5 notChg
notValid
Via5dum Via5 and Metal6
WellBody input df2order 108 notVis notSel notChg notValid
align input df2order 137 notChg notValid
allGeoShare input 100;1 df2order 114 packet ovlap notVis notSel
notChg notValid
allGeoShare_GeoShare input 100;0 (allGeoShare GeoShare) df2order 115
packet ovlap
annotate input df2order 122 packet annotate notChg notValid
annotate_drawing1 input (annotate drawing1) df2order 123 packet
annotate1 notChg notValid
annotate_drawing2 input (annotate drawing2) df2order 124 packet
annotate2 notChg notValid
annotate_drawing3 input (annotate drawing3) df2order 125 packet
annotate3 notChg notValid
annotate_drawing4 input (annotate drawing4) df2order 126 packet
annotate4 notChg notValid
annotate_drawing5 input (annotate drawing5) df2order 127 packet
annotate5 notChg notValid
annotate_drawing6 input (annotate drawing6) df2order 128 packet
annotate6 notChg notValid
annotate_drawing7 input (annotate drawing7) df2order 129 packet
annotate7 notChg notValid
annotate_drawing8 input (annotate drawing8) df2order 130 packet
annotate8 notChg notValid
annotate_drawing9 input (annotate drawing9) df2order 131 packet
annotate9 notChg notValid
axis input df2order 156 packet axis notSel notChg notValid
background input df2order 119 packet background notSel notChg
notDrg notValid
border input df2order 144 packet border notChg notValid
bulk substrate
changedLayer_tool0 input (changedLayer tool0) df2order 200 packet
changedLayerTl0 notVis notSel notChg notDrg
notValid
changedLayer_tool1 input (changedLayer tool1) df2order 201 packet
changedLayerTl1 notVis notSel notChg notDrg
notValid
designFlow input df2order 190 packet designFlow notSel notChg
notDrg
designFlow_drawing1 input (designFlow drawing1) df2order 191 packet
designFlow1 notSel notChg notDrg
designFlow_drawing2 input (designFlow drawing2) df2order 192 packet
designFlow2 notSel notChg notDrg
designFlow_drawing3 input (designFlow drawing3) df2order 193 packet
designFlow3 notSel notChg notDrg
designFlow_drawing4 input (designFlow drawing4) df2order 194 packet
designFlow4 notSel notChg notDrg
Sep 24, 2008 page A8
designFlow_drawing5 input (designFlow drawing5) df2order 195 packet
designFlow5 notSel notChg notDrg
designFlow_drawing6 input (designFlow drawing6) df2order 196 packet
designFlow6 notSel notChg notDrg
designFlow_drawing7 input (designFlow drawing7) df2order 197 packet
designFlow7 notSel notChg notDrg
designFlow_drawing8 input (designFlow drawing8) df2order 198 packet
designFlow8 notSel notChg notDrg
designFlow_drawing9 input (designFlow drawing9) df2order 199 packet
designFlow9 notSel notChg notDrg
device input df2order 145 packet device notChg notValid
device_annotate input (device annotate) df2order 149 packet deviceAnt
notChg notValid
device_drawing1 input (device drawing1) df2order 147 packet device1
notChg notValid
device_drawing2 input (device drawing2) df2order 148 packet device2
notChg notValid
device_label input (device label) df2order 146 packet deviceLbl
notChg notValid
drive input df2order 183 packet drive notChg notValid
edgeLayer input df2order 157 packet edgeLayer notChg notValid
edgeLayer_pin input (edgeLayer pin) df2order 158 packet
edgeLayerPin notChg notValid
grid input df2order 120 packet grid notSel notChg notDrg
notValid
grid_drawing1 input (grid drawing1) df2order 121 packet grid1 notSel
notChg notDrg notValid
hardFence input df2order 138 packet hardFence notChg notValid
hilite input df2order 172 packet hilite notChg notValid
hilite_drawing1 input (hilite drawing1) df2order 173 packet hilite1
notChg notValid
hilite_drawing2 input (hilite drawing2) df2order 174 packet hilite2
notChg notValid
hilite_drawing3 input (hilite drawing3) df2order 175 packet hilite3
notChg notValid
hilite_drawing4 input (hilite drawing4) df2order 176 packet hilite4
notChg notValid
hilite_drawing5 input (hilite drawing5) df2order 177 packet hilite5
notChg notValid
hilite_drawing6 input (hilite drawing6) df2order 178 packet hilite6
notChg notValid
hilite_drawing7 input (hilite drawing7) df2order 179 packet hilite7
notChg notValid
hilite_drawing8 input (hilite drawing8) df2order 180 packet hilite8
notChg notValid
hilite_drawing9 input (hilite drawing9) df2order 181 packet hilite9
notChg notValid
hiz input df2order 184 packet hiz notChg notValid
instance input df2order 132 packet instance notChg notValid
instance_label input (instance label) df2order 133 packet instanceLbl
notChg notValid
marker_error input (marker error) df2order 203 packet markerErr
notChg notValid
marker_warning input (marker warning) df2order 202 packet
markerWarn notChg notValid
Sep 24, 2008 page A9
pin input df2order 154 packet pin notChg notValid
pin_annotate input (pin annotate) df2order 155 packet pinAnt
notChg notValid
pin_label input (pin label) df2order 153 packet pinLbl notChg
notValid
prBoundary input 235;0 df2order 134 packet prBoundary notChg
prBoundary_boundary input 235;5 (prBoundary boundary) df2order 135
packet prBoundaryBnd notChg notValid
prBoundary_label input (prBoundary label) df2order 136 packet
prBoundaryLbl notChg notValid
resist input df2order 185 packet resist notChg notValid
scaNburied_net input (scaNburied net) df2order 111 notSel notChg
notDrg notValid noTranslate
scaNwell_net input (scaNwell net) df2order 112 notSel notChg
notDrg notValid noTranslate
scaPort_net input (scaPort net) df2order 113 notSel notChg notDrg
notValid noTranslate
scaSelect input df2order 110 notChg noTranslate
select input df2order 182 packet select notChg notValid
snap input df2order 159 packet snap notChg notValid
snap_boundary input (snap boundary) df2order 160 packet snap
notChg notValid
softFence input df2order 139 packet softFence notChg notValid
spike input df2order 186 packet spike notChg notValid
stretch input df2order 161 packet stretch notChg notValid
supply input df2order 187 packet supply notChg notValid
text input 230;0 df2order 140 packet notChg
text_drawing1 input (text drawing1) df2order 142 packet text1
notChg notValid
text_drawing2 input (text drawing2) df2order 143 packet text2
notChg notValid
text_label input 230;3 (text label) df2order 141 packet notChg
unknown input df2order 188 packet unknown notChg notValid
unset input df2order 189 packet unset notChg notValid
wire input df2order 150 packet wire notChg notValid
wire_flight input (wire flight) df2order 152 packet wireFlt notChg
notValid
wire_label input (wire label) df2order 151 packet wireLbl notChg
notValid
y0 input df2order 162 packet y0 notChg notValid
y1 input df2order 163 packet y1 notChg notValid
y2 input df2order 164 packet y2 notChg notValid
y3 input df2order 165 packet y3 notChg notValid
y4 input df2order 166 packet y4 notChg notValid
y5 input df2order 167 packet y5 notChg notValid
y6 input df2order 168 packet y6 notChg notValid
y7 input df2order 169 packet y7 notChg notValid
y8 input df2order 170 packet y8 notChg notValid
y9 input df2order 171 packet y9 notChg notValid
Sep 24, 2008 page B1
0A Nburied width must be >= 1.0 um
0B Nburied to Nburied spacing must be >= 1.0 um
1A Nwell width must be >= 1.0 um
1B Nwell to Nwell spacing must be >= 1.0 um
1C Nburied to Nwell enclosure must be >= 0.3 um
1D Pwell width must be >= 1.0 um
1E Pwell to Pwell spacing must be >= 1.0 um
1F Nburied to Pwell enclosure must be >= 0.3 um
2.5A ThickOxide width must be >= 0.5 um
2.5B ThickOxide to ThickOxide spacing must be >= 0.4 um
2.5C ThickOxide to Oxide enclosure must be >= 0.25 um
2.5D ThickOxide to Oxide spacing must be >= 0.25 um
2.5E ThickOxide to Poly spacing must be >= 0.4 um
2.5F ThickOxide to Poly enclosure must be >= 0.4 um
2A Oxide width must be >= 0.4 um
2B Oxide to Oxide spacing must be >= 0.3 um
2C Nwell to Oxide enclosure must be >= 0.5 um
2C Pwell to Oxide enclosure must be >= 0.5 um
2D Nwell to Oxide spacing must be >= 0.5 um
2D Pwell to Oxide spacing must be >= 0.5 um
3A Nimp width must be >= 0.4 um
3B Nimp to Nimp spacing must be >= 0.4 um
3C Nimp to Oxide enclosure must be >= 0.2 um
3D Nburied to Nimp enclosure must be >= 0.6 um
4A Pimp width must be >= 0.4 um
4B Pimp to Pimp spacing must be >= 0.4 um
4C Pimp to Oxide enclosure must be >= 0.2 um
4D Nburied to Pimp enclosure must be >= 0.6 um
5A Poly width must be >= 0.18 um
5B Poly to Poly spacing must be >= 0.3 um
5C Poly to Oxide enclosure must be >= 0.2 um
5D Oxide to Poly enclosure must be >= 0.4 um
5E Oxide to Poly spacing must be >= 0.2 um
6A Cont shapes must be 0.2x0.2 rectangles
6B Cont to Cont spacing must be >= 0.2 um
6C Oxide to Cont enclosure must be >= 0.2 um
6D Poly to Cont enclosure must be >= 0.2 um
6E Poly to Cont spacing must be >= 0.2 um
6F Pimp to Cont enclosure must be >= 0.1 um
6G Nimp to Cont enclosure must be >= 0.1 um
6H Oxide to Cont spacing must be >= 0.2 um
7A Metal1 width must be >= 0.3 um
7B Metal1 to Metal1 spacing must be >= 0.3 um
7C Metal1 to Cont enclosure must be >= 0.1 um
8A Via1 shapes must be 0.2x0.2 rectangles
8B Via1 to Via1 spacing must be >= 0.3 um
8C Metal1 to Via1 enclosure must be >= 0.1 um
9A Metal2 width must be >= 0.3 um
Sep 24, 2008 page B2
9B Metal2 to Metal2 spacing must be >= 0.3 um
9C Metal2 to Via1 enclosure must be >= 0.1 um
10A Via2 shapes must be 0.2x0.2 rectangles
10B Via2 to Via2 spacing must be >= 0.3 um
10C Metal2 to Via2 enclosure must be >= 0.1 um
11A Metal3 width must be >= 0.3 um
11B Metal3 to Metal3 spacing must be >= 0.3 um
11C Metal3 to Via2NoCapInd enclosure must be >= 0.1 um
11D Metal3 to Via2Cap enclosure must be >= 0.1 um
12A CapMetal width must be >= 0.5 um
12B Metal2 to Via2Cap enclosure must be >= 0.1 um
12C CapMetal to Via2Cap enclosure must be >= 0.2 um
12D CapMetal to Metal3 enclosure must be >= 0.3 um
13A1 P+SD to NW tap spacing must be <= 10.0 um
13A2 N+SD to Iso Psub tap spacing must be <= 10.0 um
13A3 N+SD to Psub tap spacing must be <= 10.0 um
13A3 N+SD to PW tap spacing must be <= 10.0 um
14A Via3 shapes must be 0.2x0.2 rectangles
14B Via3 to Via3 spacing must be >= 0.3 um
14C Metal3 to Via3 enclosure must be >= 0.1 um
15A Metal4 width must be >= 0.3 um
15B Metal4 to Metal4 spacing must be >= 0.3 um
15C Metal4 to Via3 enclosure must be >= 0.1 um
16A Via4 shapes must be 0.2x0.2 rectangles
16B Via4 to Via4 spacing must be >= 0.3 um
16C Metal4 to Via4 enclosure must be >= 0.1 um
17A Metal5 width must be >= 0.3 um
17B Metal5 to Metal5 spacing must be >= 0.3 um
17C Metal5 to Via4 enclosure must be >= 0.1 um
18A Via5 shapes must be 0.2x0.2 rectangles
18B Via5 to Via5 spacing must be >= 0.3 um
18C Metal5 to Via5 enclosure must be >= 0.1 um
19A Metal6 width must be >= 0.3 um
19B Metal6 to Metal6 spacing must be >= 0.3 um
19C Metal6 to Via5 enclosure must be >= 0.1 um
20A Minimum Pad width = 45.0
20B Minimum Pad spacing to Pad = 10.0
20C Metal1 to Bondpad enclosure must be == 3.0 um
20D Metal2 to Bondpad enclosure must be == 3.0 um
20E Metal3 to Bondpad enclosure must be == 3.0 um
20F Metal4 to Bondpad enclosure must be == 3.0 um
20G Metal5 to Bondpad enclosure must be == 3.0 um
20H Metal6 to Bondpad enclosure must be == 3.0 um