Académique Documents
Professionnel Documents
Culture Documents
page i
Table of Contents
Revision History
Nwell rules
Pwell rules
Oxide Rules
N+ Implant rules
P+ Implant rules
10
POLY Rules
11
Contact rules
Metal rules
VIA rules
12
13
14
Capacitor Metal
15
Passivation rules
16
Latch-up rules
17
Antenna Rules
18
Density rules
22
Connectivity Definition
23
25
Capacitors
29
Inductor
31
Bipolars
32
Nmos
24
34
HV Nmos
35
RF Nmos
36
38
37
page ii
...contents...
Diodes
39
Junction Varactors
LVS Diva Compare rules
40
41
42
43
44
45
48
48
49
49
54
55
63
65
66
67
69
MOS Transistor
69
nmos3
nmos
69
71
nmos3hv
nmoshv
73
75
nmosrf
77
pmos3
79
pmos
81
pmos3hv
83
68
61
page iii
...contents...
pmoshv
pmosrf
PCells
85
87
89
PCell SKILL Procedures
89
MOS Abutment
89
Metal Coverage
90
PCell Macros
91
mos (macro)
91
mos_nplus (macro)
105
mos_pplus (macro)
105
mos_rf (macro)
mos_volt (macro)
108
109
mos_volt_tap (macro)
mos_nw (macro)
110
mos_pw (macro)
110
110
mos_nw_tap (macro)
111
mos_nbl_tap (macro)
111
mos_pw_tap (macro)
111
mos_cap_tap (macro)
mosItap (macro)
112
mosTap (macro)
115
111
mosTap_pplus (macro)
122
mosTap_nplus (macro)
123
PCell Devices
124
nmos3
124
pmos3
124
nmos3hv
124
pmos3hv
124
nmos
125
page iv
...contents...
pmos
125
nmoshv
126
pmoshv
126
nmosrf
127
pmosrf
127
128
130
Diffusion Resistor
NWell Resistor
Callbacks
129
131
132
133
133
134
135
135
137
140
141
142
146
148
138
149
150
151
151
151
151
152
page v
...contents...
resPrim
152
resPrim2
153
resPrim3
154
Resistors
155
polyres
polyhres
157
nplusres
159
pplusres
161
nwellres
163
mxres
PCell Macros
155
165
167
res_uniSeg (macro)
167
res_multiSeg (macro)
167
mres_multiSeg (macro)
res_poly (macro)
167
168
res_poly_nplus (macro)
171
res_poly_pplus (macro)
171
res_poly_nw (macro)
172
res_poly_id (macro)
172
res_poly_sb (macro)
173
res_diff (macro)
174
res_diff_nplus (macro)
177
res_diff_pplus (macro)
177
res_diff_nw (macro)
178
res_diff_id (macro)
res_nwell (macro)
178
179
res_nwell_id (macro)
184
res_connect (macro)
185
res_m (macro)
186
page vi
...contents...
res_m1 (macro)
187
res_m2 (macro)
188
res_m3 (macro)
189
res_m4 (macro)
190
res_m5 (macro)
191
res_m6 (macro)
192
res_m1_id (macro)
193
res_m2_id (macro)
193
res_m3_id (macro)
194
res_m4_id (macro)
194
res_m5_id (macro)
195
res_m6_id (macro)
195
m1res_connect (macro)
196
m2res_connect (macro)
197
m3res_connect (macro)
198
m4res_connect (macro)
199
m5res_connect (macro)
200
m6res_connect (macro)
201
PCell Devices
202
Poly Resistor
202
202
N+ Diff Resistor
202
P+ Diff Resistor
202
NWell Resistor
202
Metal Resistor
202
203
CDF Definitions
204
mimcap
204
205
page vii
...contents...
Capacitor
Callbacks
218
mimcap
Pcell
205
218
219
mimcap
219
220
221
222
xjvar_w40 pcell
222
xjvar_nf36 pcell
228
234
xjvar_w40 cdf
234
xjvar_nf36 cdf
236
242
pdio
243
inductor
vpnp
239
244
247
npn
250
pnp
253
moscap macro
nmoscap
262
nmoscap3
pmoscap
256
263
264
pmoscap3
265
266
267
266
238
page viii
...contents
inductor
268
bipolar
269
nmoscap / pmoscap
Component PCell Code
270
271
272
pdio
273
inductor
274
npn
277
pnp
280
vpnp
271
283
moscap (macro)
287
290
291
Create Layouts
Appendix A
A1
Appendix B
B1
292
288
288
289
289
page 1
DISCLAIMER
The information contained herein is provided by Cadence on an "AS IS" basis
without any warranty, and Cadence has no obligation to support or otherwise
maintain the information. Cadence disclaims any representation that the
information does not infringe any intellectual property rights or proprietary
rights of any third parties. There are no other warranties given by Cadence,
whether express, implied or statutory, including, without limitation, implied
warranties of merchantability and fitness for a particular purpose.
STATEMENT OF USE
This information contains confidential and proprietary information of Cadence.
No part of this information may be reproduced, transmitted, transcribed,
stored in a retrieval system, or translated into any human or computer
language, in any form or by any means, electronic, mechanical, magnetic,
optical, chemical, manual, or otherwise, without the prior written permission
of Cadence. This information was prepared for informational purpose and is for
use by Cadence customers only. Cadence reserves the right to make
changes in the information at any time and without notice.
Generator Information
Sample runset for 180 nm
technology
Default Grid: 0.005
Valid Angle: 45
Flag Acute: true
Flag Self-intersecting: true
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
...
page 2
page 3
page 4
Nburied rules
Nburied
Nburied
1.0
0A
1.0
0B
Rule
(um)
1.0
1.0
page 5
Nwell rules
Nwell
Nwell
1.0
1A
1.0
1B
Nburied
Nwell
0.3
1C
Rule
(um)
1.0
1.0
0.3
page 6
Pwell rules
Pwell
Pwell
1.0
1D
1.0
1E
Nburied
Pwell
0.3
1F
Rule
(um)
1.0
1.0
0.3
page 7
Oxide Rules
Oxide
Oxide
0.4
2A
Nwell
0.3
2B
Pwell
Oxide
Oxide
0.5
2C
0.5
2C
0.5
2D
Oxide
Rule
(um)
0.4
0.3
0.5
0.5
0.5
0.5
0.5
2D
Oxide
page 8
Rule
(um)
0.5
0.4
0.25
0.25
0.4
0.4
ThickOxide
0.5
2.5A
ThickOxide
0.4
2.5B
ThickOxide
Oxide
0.25
2.5D
Poly
0.4
2.5E
Poly
0.4
2.5F
0.25
2.5C
page 9
N+ Implant rules
Nimp
Nimp
0.4
3A
0.4
3B
Nimp
Nburied
0.2
3C
Oxide
Rule
(um)
0.4
0.4
0.2
0.6
0.6
3D
Nimp
page 10
P+ Implant rules
Pimp
Pimp
0.4
4A
0.4
4B
Pimp
Nburied
0.2
4C
Oxide
Rule
(um)
0.4
0.4
0.2
0.6
0.6
4D
Pimp
page 11
POLY Rules
Poly
Poly
0.18
5A
0.3
5B
Poly
0.2
5C
Oxide
0.4
5D
0.2
5E
Rule
(um)
0.18
0.3
0.2
0.4
0.2
page 12
Contact rules
Cont
Rule
(um)
0.2x0.2
0.2
0.2
0.2
0.2
0.1
0.1
0.2
Cont
0.2
6B
0.2x0.2
6A
Nimp
Oxide
Cont
0.2
6C
Cont
0.2
6E
0.2
6H
Poly
Cont
0.2
6D
0.1
6G
Pimp
Cont
0.1
6F
page 13
Metal rules
(Metalx, x = 1, 2, 3, 4, 5, 6)
(Viax, x = 1, 2, 3, 4, 5)
Rule No.
Description
Rule
(um)
0.3
0.3
0.1
0.1
macro
Macro Table
$layer1 $layer2
Metal1 Cont
Metal2 Via1
Metal3 Via2NoCapInd
Metal4 Via3
Metal5 Via4
Metal6 Via5
$layer1
$layer1
$id1
7A
9A
11A
15A
17A
19A
$id2
7B
9B
11B
15B
17B
19B
$id3
7C
9C
11C
15C
17C
19C
$layer1
$layer2
0.3
$id1
0.3
$id2
0.1
$id3
VIA rules
page 14
(Metalx, x = 1, 2, 3, 4, 5, 6)
(Viax, x = 1, 2, 3, 4, 5)
Rule No.
Description
Rule
(um)
0.2x0.2
0.3
0.1
macro
Macro Table
$layer1 $layer2
Metal1 Via1
Metal2 Via2
Metal3 Via3
Metal4 Via4
Metal5 Via5
$id1
8A
10A
14A
16A
18A
$layer2
$id2
8B
10B
14B
16B
18B
$id3
8C
10C
14C
16C
18C
$layer2
0.3
$id2
$layer1
$layer2
0.1
$id3
0.2x0.2
$id1
page 15
Capacitor Metal
Rule
(um)
0.5
0.4
0.2
0.1
0.3
CapMetal
CapMetal
0.3
12D
0.5
12A
Metal3
Metal2
CapMetal
Metal3
Via2Cap
Via2Cap
Via2Cap
0.4
12B
0.2
12C
0.1
11D
page 16
Passivation rules
Bondpad
45.0
20A
Rule
(um)
45.0
10.0
3.0
3.0
3.0
3.0
3.0
3.0
Bondpad
10.0
20B
macro
Macro Table
$layer1 $id1
Metal1 20C
Metal2 20D
Metal3 20E
Metal4 20F
Metal5 20G
Metal6 20H
$layer1
Bondpad
3.0
$id1
page 17
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
Rule
(um)
10.0
10.0
10.0
page 18
Antenna Rules
Ratio
()
100.0
200.0
200.0
200.0
200.0
200.0
200.0
Maximum Field Poly area to the active Poly gate area connected.
Maximum Metal1 area to the active Poly gate area connected.
Maximum Metal2 area to the active Poly gate area connected.
Maximum Metal3 area to the active Poly gate area connected.
Maximum Metal4 area to the active Poly gate area connected.
Maximum Metal5 area to the active Poly gate area connected.
Maximum Metal6 area to the active Poly gate area connected.
switch CHECK_ANTENNA
Antenna
Antenna
FIELD_POLY1
Metal6
FIELD_POLY1_CONNECT
Poly
Via5
Metal5
Via4
ALL_GATES
Metal4
Via3
Metal3
Via2NoCapInd
Antenna
Metal2
Ratio <= 200.0
Via1
Metal1
Metal1
Cont
Cont
Poly
ALL_GATES
Poly
ALL_GATES
page 19
Antenna
Metal2
Metal3
Via1
Metal1
Via2NoCapInd
Metal2
Cont
Via1
Poly
Metal1
Cont
ALL_GATES
Poly
ALL_GATES
Antenna
Ratio <= 200.0
Antenna
Metal5
Via4
Metal4
Metal4
Via3
Metal3
Via3
Metal3
Via2NoCapInd
Metal2
Via2NoCapInd
Metal2
Via1
Metal1
Via1
Metal1
Cont
Cont
Poly
Poly
ALL_GATES
ALL_GATES
page 20
Ratio
( )
10.0
20.0
20.0
20.0
20.0
20.0
switch CHECK_ANTENNA
Antenna
Ratio <= 20.0
Via5dum
Via5
Metal5
Via4
Metal4
Via3
Metal3
Antenna
Via2NoCapInd
Metal2
Via1
Contdum
Metal1
Cont
Cont
Poly
Poly
ALL_GATES
ALL_GATES
page 21
Antenna
Via2dum
Via1
Via2NoCapInd
Metal1
Metal2
Cont
Via1
Poly
Metal1
Cont
ALL_GATES
Poly
ALL_GATES
Antenna
Ratio <= 20.0
Antenna
Via4dum
Via4
Via3dum
Metal4
Via3
Metal3
Via3
Metal3
Via2NoCapInd
Metal2
Via2NoCapInd
Metal2
Via1
Metal1
Via1
Metal1
Cont
Cont
Poly
Poly
ALL_GATES
ALL_GATES
page 22
Density rules
Ratio
()
0.15
0.25
0.25
0.25
0.25
0.25
0.25
switch CHECK_DENSITY
Density
Ratio >= 0.15
Poly
Density
Ratio >= 0.25
Metal3
Density
Ratio >= 0.25
Metal6
Density
Ratio >= 0.25
Metal1
Density
Ratio >= 0.25
Metal4
Density
Ratio >= 0.25
Metal2
Density
Ratio >= 0.25
Metal5
page 23
Connectivity Definition
Connectivity
M6term
Via5
M5term
Via4
M4term
Via3
M3term
Via2NoCapInd
Via2Cap
CapMetal
M2term
Via1
INDterm1Cont
INDterm2Cont
INDterm1
INDterm2
M1term
POLYcont
PSDcont
POLYterm
NSDcont
NSDterm
NWVIA
PSDterm
JVARterm
JVARanode
PWVIA
Pwell
PWNBVIA
ISOPWELL
SUBVIA
PSUB
NWELLterm
NBVIA
Nburied
page 24
page 25
Resistors
RESISTOR
name polyres
type polyres
Device Terminals
term1 PLUS
term2 MINUS
POLYterm
term1
POLYterm
POLYRES
term2
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
type polyhres
Device Terminals
term1 PLUS
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
POLYterm
term1
POLYterm
POLYHRES
term2
page 26
Resistors (cont.)
RESISTOR
name nplusres
type nplusres
Device Terminals
term1 PLUS
term2 MINUS
bulk
B
NSDterm
term1
NSDterm
NSDRES
term2
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
type nplusres
Device Terminals
term1 PLUS
term2 MINUS
bulk
B
NSDterm
term1
NSDterm
ISONSDRES
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
term2
page 27
Resistors (cont.)
RESISTOR
name pplusres
type pplusres
Device Terminals
term1 PLUS
term2 MINUS
bulk
B
PSDterm
PSDterm
term1
PSDRES
term2
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
type nwellres
Device Terminals
term1 PLUS
term2 MINUS
NWELLterm
term1
Device Parameters
w
width*1e-6
l
length*1e-6
sl
length*1e-6
effL length*1e-6
r
$nwell_rho*length/width
NWELLterm
NWELLRES
term2
page 28
Resistors (cont.)
macro
Macro Table
$cell $rho
m1res $m1_rho
m2res $m2_rho
m3res $m3_rho
m4res $m4_rho
m5res $m5_rho
m6res $m6_rho
$layer1
M1term
M2term
M3term
M4term
M5term
M6term
$layer2
M1res
M2res
M3res
M4res
M5res
M6res
RESISTOR
name $cell
type $cell
Device Terminals
term1 PLUS
term2 MINUS
$layer1
term1
Device Parameters
w
width*1e-6
l
length*1e-6
sl
length*1e-6
effL length*1e-6
r
$rho*length/width
$layer1
$layer2
term2
page 29
Capacitors
CAPACITOR
name mimcap
type mimcap
Device Terminals
plus
PLUS
minus MINUS
CapMetal
plus
M2term
MIMCAP
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
name pmoscap
type pmoscap
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
DESCRIPTION:
Pchannel device
configured as capacitor
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
PSDterm
NWELLterm
source
gate
PMOSCAP
bulk
PSDterm
drain
page 30
Capacitors (cont.)
NMOS
name nmoscap
type nmoscap
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
DESCRIPTION:
Nchannel device
configured as capacitor
NSDterm
PSUB
source
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
gate
NMOSCAP
NSDterm
drain
bulk
NMOS
name nmoscap
type nmoscap
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
DESCRIPTION:
Nchannel device
configured as capacitor
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
NSDterm
ISOPWELL
source
gate
ISONMOSCAP
bulk
NSDterm
drain
page 31
Inductor
BOX
name ind
type ind
Device Terminals
term1 PLUS
term2 MINUS
INDUCTOR
INDterm1
term1
DESCRIPTION:
Inductor. Modelled as Box for
Dracula
INDterm2
term2
page 32
Bipolars
PNP
name vpnp
type vpnp
Device Terminals
collector C
base
B
emitter E
PSDterm
emitter
DESCRIPTION:
Substrate PNP. collector
connects...
NWELLterm
VPNP
base
PSUB
Device Parameters
area area
collector
PNP
name pnp
type pnp
Device Terminals
collector C
base
B
emitter E
PSDterm
emitter
NWELLterm
DESCRIPTION:
Bipolar PNP.
Pwell
Nburied
Device Parameters
area area
PNP
base
collector
page 33
Bipolars (cont.)
NPN
name npn
type npn
Device Terminals
collector C
base
B
emitter E
NSDterm
emitter
DESCRIPTION:
Bipolar NPN.
Device Parameters
area area
Pwell
Nburied
NPN
base
collector
page 34
Nmos
NMOS
name nmos
type nmos
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
PSUB
source
DESCRIPTION:
Nchannel device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
gate
NMOS
NSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") NMOS shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOS shared)
NMOS
name nmos
type nmos
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
ISOPWELL
DESCRIPTION:
Isolated Nchannel
device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
source
gate
ISONMOS
NSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") ISONMOS shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOS...
page 35
HV Nmos
NMOS
name nmoshv
type nmoshv
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
PSUB
source
DESCRIPTION:
Nchannel HV device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
gate
NMOSHV
NSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") NMOSHV shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSHV...
NMOS
name nmoshv
type nmoshv
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
ISOPWELL
source
gate
ISONMOSHV
NSDterm
drain
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...
page 36
RF Nmos
NMOS
name nmosrf
type nmosrf
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
PSUB
source
DESCRIPTION:
Nchannel RF device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
gate
NMOSRF
NSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") NMOSRF shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSRF shared)
NMOS
name nmosrf
type nmosrf
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
NSDterm
ISOPWELL
source
gate
ISONMOSRF
NSDterm
drain
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)
page 37
PMOS
name pmos
type pmos
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
PSDterm
NWELLterm
source
DESCRIPTION:
Pchannel device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
gate
PMOS
PSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") PMOS shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOS shared)
PMOS
name pmoshv
type pmoshv
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
PSDterm
NWELLterm
DESCRIPTION:
Pchannel HV device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
source
gate
PMOSHV
PSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") PMOSHV shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSHV shared)
page 38
RF Pmos
PMOS
name pmosrf
type pmosrf
Device Terminals
source S
gate
G
drain D
bulk
B
POLYterm
PSDterm
NWELLterm
DESCRIPTION:
Pchannel RF device
Device Parameters
w
width*1e-6
fw
width*1e-6
simW width*1e-6
l
length*1e-6
source
gate
PMOSRF
PSDterm
drain
bulk
assuraLVS Native Code
sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
sdarea=calculateParameter(sd_area*1.0e-12)
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
attachParameter(sdarea ("as" "S")("ad" "D") PMOSRF shared)
attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSRF shared)
page 39
Diodes
DIODE
name ndio
type ndio
Device Terminals
anode
PLUS
cathode MINUS
NSDterm
cathode
PSUB
N type Diode
NDIODE
anode
Device Parameters
area area*1e-12
DIODE
name pdio
type pdio
Device Terminals
anode
PLUS
cathode MINUS
PSDterm
anode
NWELLterm
P type Diode
Device Parameters
area area*1e-12
PDIODE
cathode
page 40
Junction Varactors
DIODE
name xjvar_w40
type xjvar_w40
Device Terminals
anode
ANODE
cathode CATHODE
bulk
BULK
JVARanode
anode
NWELLterm
P type Diode
JVARNF
cathode
PSUB
bulk
Device Parameters
nf (perimeter - 85.2) / 3.6
DIODE
name xjvar_nf36
type xjvar_nf36
Device Terminals
anode
ANODE
cathode CATHODE
bulk
BULK
JVARanode
anode
NWELLterm
P type Diode
PSUB
JVARW40
cathode
bulk
Device Parameters
w (perimeter - 134.8) / 2.0 * 1e-6
;*********************
;***** LVS RULES *****
;*********************
lvsRules(
printf("\n GENERIC PDK LVS Rules\n")
;***************
;*** MOSFETS ***
;***************
;*****
;combine parallel MOS devices (mosfets with different ls 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)
)
)
;*****...
page 41
page 42
page 43
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
fieldHeight
fieldWidth
promptWidth
instNameType
instDisplayMode
netNameType
termSimType
termDisplayMode
paramSimType
paramEvaluate
paramDisplayMode
""
""
340
35
350
175
"schematic"
"instName"
"schematic"
"DC"
"netName"
"DC"
"t nil nil nil nil"
"parameter"
page 44
page 45
{2B}
mos_mxGate
{5C}
mos_msGate
{5B}
mos_meDiffGate
{5D}
mos_msGateCont
{6E}
mos_mwPoly
{5A}
mos_msDiffPoly
{5E}
mos_mwCont
{6A}
mos_msCont
{6B}
mos_masCont
{6B}
mos_meDiffCont
{6C}
mos_meeDiffCont
{6C}
mos_mePolyCont
{6D}
mos_meePolyCont
{6D}
mos_mwM1
{7A}
mos_msM1
{7B}
mos_meM1Cont
{7C}
mos_meeM1Cont
{7C}
page 46
{4C}
nmos_meImplGate
0.12
nmos_meeImplGate
0.12
nmos_meImplPoly
0.12
nmos_meImplCont
0.0
nmos_meVoltDiff
{2.5C}
nmos_meVoltImpl
nil
nmos_meWellDiff
{2C}
nmos_meWellVolt
0.0
nmos_meVthDiff
0.0
nmos_meVthGate
0.0
nmos_meeVthGate
0.0
nmos_meNtnDiff
0.0
nmos_meNtnImpl
0.0
nmos_meWellNtn
0.0
Global Parameters
pmos_meImplDiff
{4C}
pmos_meImplGate
0.12
pmos_meeImplGate
0.12
pmos_meImplPoly
0.12
pmos_meImplCont
0.0
pmos_meVoltDiff
{2.5C}
pmos_meVoltImpl
nil
pmos_meWellDiff
{2C}
pmos_meWellVolt
0.0
pmos_meVthDiff
0.0
pmos_meVthGate
0.0
pmos_meeVthGate
0.0
page 47
0.0
tap_nmos_msTapImpl
{3C}
tap_nmos_meTimpTap
{4C}
tap_nmos_msTimpDiff
0.0
tap_nmos_msTimpImpl
0.0
tap_nmos_maTap
0.16
tap_nmos_maTimp
0.36
tap_nmos_meWellTap
0.0
tap_nmos_msTapVolt
0.25
tap_nmos_mwItap
0.50
tap_nmos_msItapGate
0.50
tap_nmos_maItimp
0.36
tap_nmos_meItimpItap
{4C}
tap_nmos_meItimpCont
0.10
tap_nmos_msTapNtn
0.0
Global Parameters
tap_pmos_msTapDiff
0.0
tap_pmos_msTapImpl
{3C}
tap_pmos_meTimpTap
{4C}
tap_pmos_msTimpDiff
0.0
tap_pmos_msTimpImpl
0.0
tap_pmos_maTap
0.16
tap_pmos_maTimp
0.36
tap_pmos_meWellTap
{2C}
tap_pmos_msTapVolt
0.25
tap_pmos_mwItap
0.50
tap_pmos_msItapGate
0.50
tap_pmos_maItimp
0.36
tap_pmos_meItimpItap
{4C}
tap_pmos_meItimpCont
0.10
Global Parameters
mos_perimGateEdge
mos_aggregateFingers
nil
page 48
Callbacks
MOS Callback Procedures
CDF Callback
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Perforce:
$File$
;
$Revision$
;
$DateTime$
;
$Change$
;
$Author$
;
; Description: MOS Transistor CDF Callback
;
; Author:
Amir Kouchekinia <amir@cadence.com>
; 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.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
procedure(gpdk180_mosCB(param "s")
let(
(
cdfId cellName libName procName paramId
dpt grid scale sGrid doList
applyThresh mode min max value
fingers w fw threshold
)
;; set local variable to global cdfgData
cdfId = cdfgData
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...
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
prompt
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"t"
"t"
"gpdk180_mosCB( m )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"simM"
"Simulation Multiplier"
gpdk180_mosValue( simM ?id cdfId ?returnString t )
"string"
"nil"
"nil"
"yes"
"yes"
page 50
CDF parameters
name
prompt
units
defValue
type
display
callback
parseAsNumber
parseAsCEL
"l"
"Length"
"lengthMetric"
gpdk180_mosValue( l ?id cdfId ?returnString t )
"string"
"t"
"gpdk180_mosCB( l )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
callback
parseAsNumber
parseAsCEL
"w"
"Total Width"
"lengthMetric"
gpdk180_mosValue( w ?id cdfId ?returnString t )
"string"
"t"
"gpdk180_mosCB( w )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"fw"
"Finger Width"
"lengthMetric"
gpdk180_mosValue( fw ?id cdfId ?returnString t )
"string"
"t"
"t"
"gpdk180_mosCB( fw )"
"yes"
"yes"
page 51
"simW"
"Simulation Width"
"lengthMetric"
gpdk180_mosValue( simW ?id cdfId ?returnString t )
"string"
"nil"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"fingers"
"Fingers"
gpdk180_mosValue( fingers ?id cdfId ?returnString t )
"string"
"t"
"t"
"gpdk180_mosCB( fingers )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
callback
parseAsNumber
parseAsCEL
"threshold"
"Threshold"
"lengthMetric"
gpdk180_mosValue( threshold ?id cdfId ?returnString t )
"string"
"t"
"gpdk180_mosCB( threshold )"
"yes"
"yes"
CDF parameters
name
"applyThresh"
prompt
"Apply Threshold"
defValue nil
type
"boolean"
display
"t"
callback "gpdk180_mosCB( applyThresh )"
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
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"sdMtlWidth"
"S/D Metal Width"
"lengthMetric"
gpdk180_mosValue( sdMtlWidth ?id cdfId ?returnString t )
"string"
"t"
"t"
"gpdk180_mosCB( sdMtlWidth)"
"yes"
"yes"
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)"
page 53
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
name
"leftTap"
prompt
"Left Tap"
defValue t
type
"boolean"
display
"gpdk180_mosDisplay( leftTap )"
CDF parameters
name
"rightTap"
prompt
"Right Tap"
defValue nil
type
"boolean"
display
"gpdk180_mosDisplay( rightTap )"
CDF parameters
name
"bottomTap"
prompt
"Bottom Tap"
defValue nil
type
"boolean"
display
"gpdk180_mosDisplay( bottomTap )"
CDF parameters
name
"topTap"
prompt
"Top Tap"
defValue nil
type
"boolean"
display
"gpdk180_mosDisplay( topTap )"
CDF parameters
name
"tapExtension"
prompt
"Tap Extension"
defValue ""
type
"string"
display
"gpdk180_mosDisplay( tapExtension )"
callback "gpdk180_mosCB( tapExtension )"
CDF parameters
name
"tapCntRows"
prompt
"Tap Contact Rows"
defValue 1
type
"int"
display
"gpdk180_mosDisplay( tapCntRows )"
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
prompt
defValue
type
display
callback
editable
parseAsNumber
parseAsCEL
"ad"
"Drain diffusion area"
gpdk180_mosValue( ad ?id cdfId ?returnString t )
"string"
"gpdk180_mosDisplay(ad)"
"gpdk180_mosCB( ad )"
"cdfgData->editAreaPerim->value"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
callback
editable
parseAsNumber
parseAsCEL
"as"
"Source diffusion area"
gpdk180_mosValue( as ?id cdfId ?returnString t )
"string"
"gpdk180_mosDisplay(as)"
"gpdk180_mosCB( as )"
"cdfgData->editAreaPerim->value"
"yes"
"yes"
page 56
"pd"
"Drain diffusion periphery"
"lengthMetric"
gpdk180_mosValue( pd ?id cdfId ?returnString t )
"string"
"gpdk180_mosDisplay(pd)"
"gpdk180_mosCB( pd )"
"cdfgData->editAreaPerim->value"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
callback
editable
parseAsNumber
parseAsCEL
"ps"
"Source diffusion periphery"
"lengthMetric"
gpdk180_mosValue( ps ?id cdfId ?returnString t )
"string"
"gpdk180_mosDisplay(ps)"
"gpdk180_mosCB( ps )"
"cdfgData->editAreaPerim->value"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"nrd"
"Drain diffusion res squares"
""
"string"
"gpdk180_mosDisplay( nrd )"
"t"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"nrs"
"Source diffusion res squares"
""
"string"
"gpdk180_mosDisplay( nrs )"
"t"
"yes"
"yes"
page 57
CDF parameters
name
prompt
units
defValue
type
display
editable
parseAsNumber
parseAsCEL
"ld"
"Drain diffusion length"
"lengthMetric"
""
"string"
"gpdk180_mosDisplay( ld )"
"t"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
parseAsNumber
parseAsCEL
"ls"
"Source diffusion length"
"lengthMetric"
""
"string"
"gpdk180_mosDisplay( ls )"
"t"
"yes"
"yes"
CDF parameters
name
"off"
prompt "Device initially off"
type
"boolean"
display "gpdk180_mosDisplay( off )"
page 58
"Vds"
"Drain source initial voltage"
"voltage"
""
"string"
"gpdk180_mosDisplay( Vds )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"Vgs"
"Gate source initial voltage"
"voltage"
""
"string"
"gpdk180_mosDisplay( Vgs )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"Vbs"
"Bulk source initial voltage"
"voltage"
""
"string"
"gpdk180_mosDisplay( Vbs )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"trise"
"Temp rise from ambient"
""
"string"
"gpdk180_mosDisplay( trise )"
"yes"
"yes"
page 59
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"rdc"
"Additional drain resistance"
"current"
""
"string"
"gpdk180_mosDisplay( rdc )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"rsc"
"Additional source resistance"
"current"
""
"string"
"gpdk180_mosDisplay( rsc )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"dtemp"
"Temperature difference"
""
"string"
"gpdk180_mosDisplay( dtemp )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"geo"
"Source/drain selector"
""
"string"
"gpdk180_mosDisplay( geo )"
"yes"
"yes"
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
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
instNameType
instDisplayMode
netNameType
termSimType
termDisplayMode
paramSimType
paramEvaluate
paramDisplayMode
modelLabelSet
opPointLabelSet
paramLabelSet
"PasCdfFormInit"
"PasCdfDone"
340
35
500
175
"schematic"
"instName"
"schematic"
"DC"
"voltage"
"DC"
"nil nil nil t nil"
"parameter"
"vto kp gamma"
"id vgs vds gm"
"-model w l m"
page 61
ads
ADSsimCompPrim
(model)
(Width Length As Ad Ps Pd Nrd Nrs ld ls _M Trise)
nil
(nil D ":P1" G ":P2" S ":P3" B ":P4")
(nil Width simW Length l As as Ad ad Ps ps Pd pd Nrd nrd Nrs nrs _M simM Trise trise Region region)
nil
nil
CDF siminfo
simulator
propMapping
namePrefix
isPrimitive
instParameters
otherParameters
ams
( nil m simM w simW )
""
t
(w l as ad ps pd nrd nrs ld ls m trise model)
(model)
CDF siminfo
simulator
netlistProcedure
instParameters
propMapping
namePrefix
auCdl
ansCdlCompPrim
(M L W)
(nil M m L l W w)
"M"
CDF siminfo
simulator
propMapping
netlistProcedure
instParameters
permuteRule
namePrefix
auLvs
nil
ansLvsCompPrim
(m l w)
"(p D S)"
"M"
page 62
CDF siminfo
simulator
propMapping
namePrefix
otherParameters
instParameters
termMapping
spectre
( nil m simM w simW )
""
(model)
(w l as ad ps pd nrd nrs ld ls m trise)
(nil D \:d G \:g S \:s B \:b)
page 63
mosSimInfoRF
CDF macro mosSimInfoRF
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(Width Length fingers simM)
nil
(nil D ":P1" G ":P2" S ":P3" B ":P4")
(nil Width simW Length l)
nil
nil
CDF siminfo
simulator
propMapping
namePrefix
isPrimitive
instParameters
otherParameters
ams
( nil w simW )
""
t
(w l fingers simM)
(model)
CDF siminfo
simulator
netlistProcedure
instParameters
propMapping
namePrefix
auCdl
ansCdlCompPrim
(M L W)
(nil M m L l W w)
"M"
CDF siminfo
simulator
propMapping
netlistProcedure
instParameters
permuteRule
namePrefix
auLvs
nil
ansLvsCompPrim
(m l w)
"(p D S)"
"M"
page 64
CDF siminfo
simulator
propMapping
namePrefix
otherParameters
instParameters
termMapping
spectre
( nil w simW )
""
(model)
(w l fingers simM)
(nil D \:d G \:g S \:s B \:b)
page 65
ams
(D G S bulkn)
((nil name "bulkn" direction "inputOutput" netExpr "[@bulkn:%:gnd!]"))
CDF siminfo
CDF siminfo
simulator spectre
simulator auCdl
termOrder (D G S bulkn) termOrder (D G S bulkn)
CDF siminfo
simulator
termOrder
deviceTerminals
auLvs
(D G S bulkn)
"D G S B"
page 66
ams
(D G S bulkp)
((nil name "bulkp" direction "inputOutput" netExpr "[@bulkp:%:vdd!]"))
CDF siminfo
simulator spectre
termOrder (D G S bulkp)
CDF siminfo
simulator auCdl
termOrder (D G S bulkp)
CDF siminfo
simulator
termOrder
deviceTerminals
auLvs
(D G S bulkp)
"D G S B"
page 67
CDF siminfo
simulator ams
termOrder (D G S B)
CDF siminfo
simulator auCdl
termOrder (D G S B)
CDF siminfo
simulator auLvs
termOrder (D G S B)
page 68
CDF siminfo
simulator ams
termOrder (D G S B)
CDF siminfo
simulator auCdl
termOrder (D G S B)
CDF siminfo
simulator auLvs
termOrder (D G S B)
CDF Definitions
page 69
MOS Transistor
nmos3
$grid
1.0e-6
"nmos1"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
page 70
CDF siminfo
simulator
componentName
auLvs
"nmos"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"nmos"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
nmos3
nmos3
nmos3
nmos3
nmos3
symbol
spectre
spectre
spectre
spectre
page 71
nmos
CDF gpdk180 nmos
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"nmos1"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
page 72
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"nmos"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
ivpcell $lib
nmos4
nmos4
nmos4
nmos4
nmos4
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
page 73
nmos3hv
CDF gpdk180 nmos3hv
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"nmos25"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 74
CDF siminfo
simulator
componentName
auLvs
"nmoshv"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"nmoshv"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
nmos3_hv
nmos3_hv
nmos3_hv
nmos3_hv
nmos3_hv
symbol
spectre
spectre
spectre
spectre
page 75
nmoshv
CDF gpdk180 nmoshv
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"nmos25"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 76
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"$cell"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
ivpcell $lib
nmos4_hv
nmos4_hv
nmos4_hv
nmos4_hv
nmos4_hv
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
public
page 77
nmosrf
$grid
1.0e-6
"nmos_rf"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 78
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"$cell"
CDF cellview
symbol baseline_gpdk
auCdl
baseline_gpdk
auLvs baseline_gpdk
spectre baseline_gpdk
ads
baseline_gpdk
ivpcell $lib
nmosrf
nmosrf
nmosrf
nmosrf
nmosrf
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
public
page 79
pmos3
CDF gpdk180 pmos3
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"pmos1"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
page 80
CDF siminfo
simulator
componentName
auLvs
"pmos"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"pmos"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
pmos3
pmos3
pmos3
pmos3
pmos3
symbol
spectre
spectre
spectre
spectre
page 81
pmos
CDF gpdk180 pmos
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"pmos1"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
page 82
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"$cell"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
ivpcell $lib
pmos4
pmos4
pmos4
pmos4
pmos4
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
public
page 83
pmos3hv
CDF gpdk180 pmos3hv
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"pmos25"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 84
CDF siminfo
simulator
componentName
auLvs
"pmoshv"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"pmoshv"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
pmos3_hv
pmos3_hv
pmos3_hv
pmos3_hv
pmos3_hv
symbol
spectre
spectre
spectre
spectre
page 85
pmoshv
CDF gpdk180 pmoshv
CDF device params
grid
scale
model
category
perimGateEdge
aggregateFingers
$grid
1.0e-6
"pmos25"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 86
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"$cell"
CDF cellview
symbol pas_std
auCdl
pas_std
auLvs pas_std
spectre pas_std
ads
pas_std
ivpcell $lib
pmos4_hv
pmos4_hv
pmos4_hv
pmos4_hv
pmos4_hv
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
public
page 87
pmosrf
$grid
1.0e-6
"pmos_rf"
"mos"
$mos_perimGateEdge
$mos_aggregateFingers
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
Use four sides to calculate ps, pd
Aggregate fingers: affects simM, as,ad,ps,pd
private
private
private
private
private
private
private
private
page 88
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
componentName
modelName
auCdl
nil
"$cell"
CDF cellview
symbol baseline_gpdk
auCdl
baseline_gpdk
auLvs baseline_gpdk
spectre baseline_gpdk
ads
baseline_gpdk
ivpcell $lib
pmosrf
pmosrf
pmosrf
pmosrf
pmosrf
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
private
private
private
private
private
private
private
private
private
private
private
private
private
public
PCells
page 89
Skill Procedures
MOS Abutment
procedure( gpdk180_mosAbut( iA iB pA pB pASide connection event @optional (group nil)
) ;_Jun 25 03 amir 186
let( (
apA apB avA avB delta
( epsilon 0.0001 )
)
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
)
)
)...
page 90
Skill Procedures
Metal Coverage
procedure(gpdk180_mtlCvgUserFunc(info)
;_Dec 13 02 amir 511
let((dbId col cols mtlCL inc newV oldV bot top max handle)
dbId = info->rodObj~>dbId
col = dbId~>col
cols = dbId~>cols
mtlCL = evalstring(sprintf(nil "( nil %s )" info->paramVal))
inc = info->increment
max = dbId~>maxLength - dbId~>minLength
handle = concat(info->handleName)
newV = ""
for(i 0 cols
oldV = get(mtlCL concat(i))
if( i==col then
bot = or(car(oldV) 0.0)
top = or(cadr(oldV) 0.0)
caseq( handle
( (lowerLeft lowerCenter lowerRight)
max = max - top
cond(
( bot - inc > max
bot = max
;; fprintf( stderr "Unable to stretch beyond limits!\n" )
)
( bot - inc < 0
bot = 0
;; fprintf( stderr "Unable to stretch beyond limits!\n" )
)
( t
bot = bot - inc
)
) ; ** cond not **
)
( (upperLeft upperCenter upperRight)
max = max - bot
cond(
( top - inc > max
top = max
;; fprintf( stderr "Unable to stretch beyond limits!\n" )
)
( top - inc < 0
top = 0
;; fprintf( stderr "Unable to stretch beyond limits!\n" )
)
( t
top = top - inc
)
) ; ** cond not **
)
) ; ** caseq handle **
unless( and(zerop(top) zerop(bot))...
page 91
PCell Macros
mos (macro)
pcell macro mos
1: include
dpt = PasGetDeviceProps( cv )
deviceProps
scale = dpt->scale
epsilon = grid / 10.0
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
page 92
rwDiff = nil
lhStep = 0
rhStep = 0
page 93
swDiff = dwDiff
raDC = msGateCont
swStep = 0
swStep = 0
bhStep = 0
thStep = 0
lwStep = 0
laDC = msGateCont
rwStep = 0
rwDiff = lwDiff
2: if dogbone
alDiff = mlDiff
dwDiff = cntSpan + ( 2.0 * meDiffCont )
swDiff = dwDiff
daDC = meDiffCont
saDC = meDiffCont
raDC = meDiffCont
laDC = meDiffCont
lwStep = dwStep
rwStep = dwStep
rwDiff = lwDiff
page 94
10: include
gate[1]
Poly
diffg[1]
Oxide
gw
gw
gl
ref
gl
boolean lxBlockExtractCheck = t
boolean lxBlockOverlapCheck = t
page 95
diff[f-1]
diffg[f-1]
Poly
Oxide
diffg[f]
Oxide
Oxide
gw
alDiff
gw
gl
gl
cwDiff
boolean lxBlockOverlapCheck = t
boolean lxBlockExtractCheck = t
1: if dogbone
cwStep = if( isSource then swStep else dwStep )
gate[f]
diff[f-1]
diffg[f-1]
Oxide
Poly
Oxide
diffg[f]
Oxide
Oxide
Oxide
gw
gw
alDiff
gw
gw
gl
gl
cwDiff
cwStep
cwStep
0.0 bhStep
0.0 bhStep
boolean lxBlockOverlapCheck = t
boolean lxBlockExtractCheck = t
page 96
diff[0]
Oxide
diffg[1]
diffg[1]
Oxide
Oxide
tmp
Oxide
alDiff
lwDiff
Oxide
gw
lwDiff
lwStep
0 bhStep
diff[gc]
diffg[gc]
Oxide
Oxide
Oxide
tmp
Oxide
Oxide
gw
rwDiff
alDiff
rwDiff
0 bhStep
rwStep
page 97
diff[0]
list abutAccessDir=list("left")
string abutFunction="gpdk180_mosAbut"
float gateWidth=gw
string abutParam="leftAbut"
boolean isSource=leftSource
list vxlInstSpacingDir=list("left")
float vxlInstSpacingRule=tmp
2: if leftSource
Oxide
Oxide
diff[gc]
list abutAccessDir=list("right")
string abutFunction="gpdk180_mosAbut"
float gateWidth=gw
string abutParam="rightAbut"
boolean isSource=rightSource
list vxlInstSpacingDir=list("right")
float vxlInstSpacingRule=tmp
2: if not( leftSource )
diff[0]
Oxide
diff[0]
Oxide
"S" inOut
none
pin name "left"
must group source[0]
2: if rightSource
"D" inOut
none
pin name "left"
must group drain[0]
2: if not( rightSource )
diff[gc]
Oxide
diff[gc]
Oxide
"S" inOut
none
pin name "right"
must group source[tmp]
"D" inOut
none
pin name "right"
must group drain[tmp]
page 98
for f 0 gc
1: if ( ( f > 0 && f < gc ) || ( f == 0 && leftCnt ) || ( f == gc && rightCnt ) )
mtlCvg
botSep = ySep
2: if f == 0
2: if f != 0
diff[f]
diff[f]
awM1
Oxide
Metal1
awM1
Oxide
Metal1
alM1
metal[f]
alM1
xSep botSep
xSep botSep
metal[f]
page 99
meM1Cont ) )
mwCont
meM1Cont ) )
param mtlCvg
relative y
userFunc "gpdk180_mtlCvgUserFunc"
Metal1
mwCont
rightSep meeM1Cont
int col = f
int cols = gc + 1
float minLength = mlM1
float maxLength = xlM1
leftSep meeM1Cont
metal[f]
mwCont
4: if isSource
4: if not(isSource)
param mtlCvg
relative y
userFunc "gpdk180_mtlCvgUserFunc"
metal[f]
"S" inOut
all
must group source[tmp]
metal[f]
"D" inOut
all
must group drain[tmp]
page 100
if connectS || connectD
connectSD
for f 0 gc
delta = or( get( mtlCL concat( f ) ) list( 0.0 0.0 ) )
xSep = cond( ( f==0 lwSDM - awSDM ) ( t 0 ) )
if connectD && PasXor( oddp(f) switchSD)
Metal1
metal[f]
xSep 0
awSDM
"D" inOut
none
must group drain[0]
car(delta) + msM1
Metal1
botMx[f]
xSep 0
awSDM
"S" inOut
none
must group source[0]
metal[f]
Metal1
page 101
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]
page 102
polyExt
botExt = 0
topPinExt = 0
botPinExt = 0
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
topSep
botGx[f]
Poly
gl
botSep
boolean lxBlockOverlapCheck = t
gl
page 103
topGx[f]
Poly
botGx[f]
Poly
botGp[f]
Poly
topPinExt
botPinExt
gl
"G" inOut
top
weak group gatet[f]
must group gate[f]
gl
"G" inOut
bottom
weak group gateb[f]
must group gate[f]
connectG
rightSep = 0
connectGLoop
page 104
hSep vSep
topGC[f]
mwCont
<-Poly->
Cont[]
Cont[]
mwCont
mwCont
<-Metal1->
hSep vSep
rightSep awPoly
meeM1Cont meM1Cont
Poly
Poly
"G" inOut
left right top
must group gct[f]
topGx[f]
topGx[index]
"G" inOut
left right bottom
must group gcb[f]
Poly
Poly
botGx[index]
leftSep 0
hSep vSep
meeM1Cont meM1Cont
space msCont msCont
Cont[]
rightSep awPoly
mwCont
Cont[]
mwCont
mwCont
<-Metal1->
<-Poly->
mwCont
meeM1Cont meM1Cont
botGC[f]
hSep vSep
page 105
mos_nplus (macro)
mos_pplus (macro)
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
implEnc = PasSizeSpacing( nil ?all meImplDiff )
botSep = meImplDiff + lhStep
leftSep = cond(
( abs( leftAbut ) < 3 meImplDiff )
( abs( leftAbut ) > 5 -meImplDiff )
(t0))
rightSep = cond(
( abs( rightAbut ) < 3 meImplDiff )
( abs( rightAbut ) > 5 -meImplDiff )
(t0))
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
page 106
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 ) )
implantGate
page 107
2: include
tmp = meImplDiff + thStep
<-$pcLayer1->
Poly
Poly
rightSep topSep
leftSep tmp
topGx[1]
topGx[gc]
botGx[1]
botGx[gc]
3: include
tmp = meImplDiff + bhStep
Poly
Poly
leftSep tmp
rightSep botSep
<-$pcLayer1->
page 108
mos_rf (macro)
pcell macro mos_rf
2: include
meRfDiff = dpt->meVoltDiff
meRfImpl = dpt->meVoltImpl
22: include
mos_rf
2: include
botRfSep = rfEnc->bottom + lhStep
topRfSep = rfEnc->top + rhStep
<-RFdummy->
Oxide
rfEnc->left botRfSep
Oxide
diff[0]
diff[gc]
rfEnc->right topRfSep
page 109
mos_volt (macro)
pcell macro mos_volt
2: include
meVoltDiff = dpt->meVoltDiff
meVoltImpl = dpt->meVoltImpl
22: include
mos_volt
2: include
botSep = voltEnc->bottom + lhStep
topSep = voltEnc->top + rhStep
<-ThickOxide->
Oxide
voltEnc->left botSep
Oxide
diff[0]
diff[gc]
voltEnc->right topSep
page 110
mos_volt_tap (macro)
pcell macro mos_volt_tap
include macro mos_volt
2: include
msTapVolt = dpt->msTapVolt
mos_volt
3: include
tapSp = PasConstrainSpacing( tapSp ?top ( voltEnc->top + msTapVolt )
?bottom ( voltEnc->bottom + msTapVolt)
?left ( voltEnc->left + msTapVolt)
?right ( voltEnc->right + msTapVolt) )
40: include
botSep = meWellDiff + lhStep
topSep = meWellDiff + rhStep
well
<-$pcLayer1->
Oxide
meWellDiff botSep
Oxide
diff[0]
diff[gc]
meWellDiff topSep
page 111
$diffEnc
meWellDiff
meWellDiff
meNblDiff
meCapDiff
$tapEnc
meWellTap
meWellTap
meNblTap
meCapTap
$name
well
well
nbl
cap
2: include
$diffEnc = dpt->$diffEnc
$tapEnc = dpt->$tapEnc
40: include
botSep = $diffEnc + lhStep
topSep = $diffEnc + rhStep
diff[0]
topTap
$tapEnc $tapEnc
leftTap
$tapEnc $tapEnc
$name
[$pcLayer1]
$diffEnc topSep
$tapEnc $tapEnc
$tapEnc $tapEnc
<-Oxide->
<-Oxide->
Oxide
Oxide
<-Oxide->
<-Oxide->
$tapEnc $tapEnc
$tapEnc $tapEnc
$diffEnc botSep
$tapEnc $tapEnc
rightTap
"B" inOut
none
$tapEnc $tapEnc
diff[gc]
botTap
page 112
mosItap (macro)
pcell macro mosItap
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
awItap = max( mwItap ( meDiffCont + mwCont + max( meItimpCont (msCont - meImplCont ) )) )
if leftItap
lwDiff = max( ( msItapGate - lwStep ) ( laDC + cntSpan + meImplCont ) ) + awItap
lwSDM = lwDiff - laDC - meDiffCont + meM1Cont + meM1Cont
if rightItap
rwDiff = max( ( msItapGate - rwStep ) ( raDC + cntSpan + meImplCont ) ) + awItap
rwSDM = rwDiff - raDC - meDiffCont + meM1Cont + meM1Cont
preImplant
2: if leftItap
leftSep = -awItap
2: if rightItap
rightSep = -awItap
page 113
Metal1
mwCont
rightSep meeM1Cont
metal[0]
mwCont
if rightItap
Metal1
mwCont
mwCont
rightSep meeM1Cont
Cont[]
metal[gc]
mwCont
page 114
15: include
if leftItap
if rightItap
<-Metal1->
<-Metal1->
metal[0]
metal[gc]
Metal1
Metal1
"B" inOut
left top bottom
"B" inOut
left top bottom
3: if leftItap
4: if rightItap
( awItap - lwDiff ) meItimpItap
<-$pcLayer1->
<-$pcLayer1->
Oxide
Oxide
diff[0]
xSep meItimpItap
diff[gc]
xSep meItimpItap
page 115
mosTap (macro)
pcell macro mosTap
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
awTap = ( max( 1 tapCntRows ) * ( mwCont + msCont) ) - msCont + (2.0 * meDiffCont)
tapSp = PasConstrainSpacing( nil ?all max( msTapDiff ( meTimpTap + msTimpDiff ) ) )
if topTap || bottomTap
tmp = msM1 + meM1Cont - meDiffCont + meeM1Cont - meeDiffCont
tapSp = PasConstrainSpacing( tapSp ?top tmp ?bottom tmp )
page 116
connectD
3: if bottomTap
tmp = mwM1 + ( 2 * msM1 ) + meM1Cont - meDiffCont + meeM1Cont - meeDiffCont
tapSp = PasConstrainSpacing( tapSp ?bottom tmp )
30: if deTap
1: include
tmp = max( msTapImpl ( meTimpTap + msTimpImpl ) )
tapSp = PasConstrainSpacing( tapSp ?top ( implEnc->top + tmp )
?bottom ( implEnc->bottom + tmp)
?left ( implEnc->left + tmp)
?right ( implEnc->right + tmp) )
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
tapExt = evalstring( sprintf( nil "( nil %s )" tapExtension ) )
tapSp = PasSizeSpacing( tapSp ?top ( tapExt->top || 0 )
?bottom ( tapExt->bottom || 0 )
?left ( tapExt->left || 0 )
?right ( tapExt->right || 0 ) )
page 117
topTap
<-Oxide->
lxSep lySep
diff[0]
Oxide
diff[gc]
if bottomTap
Oxide
diff[gc]
Oxide
diff[0]
lxSep lySep
botTap
param tapExtension
relative y
dispName Bottom Tap Separation
dispExpr tapExt->bottom
userData list( nil side bottom )
userFunc "gpdk180_mosTapUserFunc"
page 118
if leftTap
tySep = tySep + lhStep
bySep = bySep + lhStep
<-Oxide->
tapSp->left tySep
Oxide
param tapExtension
relative x
dispName Left Tap Separation
dispExpr tapExt->left
userData list( nil side left )
userFunc "gpdk180_mosTapUserFunc"
diff[0]
if rightTap
tySep = tySep + rhStep
bySep = bySep + rhStep
tapSp->right tySep
Oxide
diff[gc]
<-Oxide->
param tapExtension
relative x
dispName Right Tap Separation
dispExpr tapExt->right
userData list( nil side right )
userFunc "gpdk180_mosTapUserFunc"
page 119
meeM1Cont meM1Cont
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
"B" inOut
all
mwCont
xSep ySep
<-Metal1->
<-Oxide->
mwCont
meeM1Cont meM1Cont
mwCont
page 120
leftRightTap
if leftTap
mwCont
leftTap
<-Oxide->
xSep tySep
Cont[]
mwCont
meM1Cont tcSep
"B" inOut
all
meM1Cont bcSep
Cont[]
mwCont
xSep bySep
mwCont
page 121
leftRightTap
if rightTap
mwCont
rightTap
<-Oxide->
xSep tySep
Cont[]
mwCont
meM1Cont tcSep
"B" inOut
all
<-Metal1->
Cont[]
meM1Cont bcSep
mwCont
xSep bySep
mwCont
page 122
mosTap_pplus (macro)
pcell macro mosTap_pplus
33: if deTap && ( topTap || bottomTap )
if topTap
if bottomTap
meTimpTap meTimpTap
meTimpTap meTimpTap
<-Pimp->
<-Pimp->
<-Oxide->
meTimpTap meTimpTap
<-Oxide->
meTimpTap meTimpTap
topTap
botTap
if rightTap
meTimpTap tySep
meTimpTap tySep
leftTap
<-Pimp->
rightTap
<-Pimp->
<-Oxide->
meTimpTap bySep
<-Oxide->
meTimpTap bySep
page 123
mosTap_nplus (macro)
pcell macro mosTap_nplus
33: if deTap && ( topTap || bottomTap )
if topTap
if bottomTap
meTimpTap meTimpTap
meTimpTap meTimpTap
<-Nimp->
<-Nimp->
<-Oxide->
meTimpTap meTimpTap
<-Oxide->
meTimpTap meTimpTap
topTap
botTap
if rightTap
meTimpTap tySep
meTimpTap tySep
leftTap
<-Nimp->
rightTap
<-Nimp->
<-Oxide->
meTimpTap bySep
<-Oxide->
meTimpTap bySep
page 124
PCell Devices
nmos3
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
pmos3
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
nmos3hv
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
pmos3hv
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 125
nmos
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
pmos
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 126
nmoshv
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
pmoshv
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 127
nmosrf
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
pmosrf
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 128
page 129
pplus_rho
158
poly_rho
7.5
polyh_rho
352
nwell_rho
415
m1_rho
0.01
m2_rho
0.01
m3_rho
0.01
m4_rho
0.01
m5_rho
0.01
m6_rho
0.01
page 130
Poly Resistor
Global Parameters
rpoly_mwDevice
0.6
rpoly_mlDevice
0.6
rpoly_mnSquares
rpoly_mwRes
{5A}
rpoly_msRes
{5B}
rpoly_mwCont
{6A}
rpoly_msCont
{6B}
rpoly_meResCont
{6D}
rpoly_meeResCont
{6D}
rpoly_mwM1
{7A}
rpoly_msM1
{7B}
rpoly_meM1Cont
{7C}
rpoly_meeM1Cont
{7C}
Global Parameters
rnpoly_meImplRes
0.0
rppoly_meImplRes
0.0
rpoly_meIdRes
0.05
rpoly_meSbRes
0.0
rpoly_msSbCont
0.0
rpoly_msSbRes
0.0
rppoly_meWellRes
0.0
page 131
Diffusion Resistor
Global Parameters
rdiff_mwDevice
0.6
rdiff_mlDevice
0.6
rdiff_mnSquares
rdiff_mwRes
{2A}
rdiff_msRes
{2B}
rdiff_mwCont
{6A}
rdiff_msCont
{6B}
rdiff_meResCont
{6C}
rdiff_meeResCont
{6C}
rdiff_mwM1
{7A}
rdiff_msM1
{7B}
rdiff_meM1Cont
{7C}
rdiff_meeM1Cont
{7C}
Global Parameters
rndiff_meImplRes
{3C}
rpdiff_meImplRes
{4C}
rdiff_meIdRes
0.05
rdiff_meSbRes
0.0
rdiff_msSbCont
0.0
rdiff_msSbRes
0.0
rpdiff_meWellRes
{2C}
page 132
NWell Resistor
Global Parameters
rnw_mwDevice
1.6
rnw_mlDevice
2.0
rnw_mnSquares
rnw_mwRes
{1A}
rnw_msRes
{1B}
rnw_mwDiff
{2A}
rnw_msDiff
{2B}
rnw_meResDiff
{2C}
rnw_meImplDiff
{3C}
rnw_mwCont
{6A}
rnw_msCont
{6B}
rnw_meDiffCont
{6C}
rnw_meeDiffCont
{6C}
rnw_mwM1
{7A}
rnw_msM1
{7B}
rnw_meM1Cont
{7C}
rnw_meeM1Cont
{7C}
Global Parameters
rnw_meIdRes
0.05
page 133
Callbacks
Resistor Callback Procedures
CDF Callback
procedure(gpdk180_resCB(param "s")
let(
(
cdfId cellName libName procName paramId
dpt grid scale sGrid epsilon doList
mode min max commit
r w sl ssegs psegs cntRows calcDpl
)
;; set local variable to global cdfgData
cdfId = cdfgData
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 **
procName = sprintf(nil "%s/%s callback" libName cellName)
unless( paramId = get(cdfId param)
PasError("%s: parameter not found in CDF - %s" procName param)
error("\tCallback aborted abnormally!")
)
dpt = PasGetPdkParams(libName cellName)
grid = dpt->grid
scale = dpt->scale || 1e-6
sGrid = grid * scale
epsilon = sGrid / 10.0
doList = tconc(nil nil)
mode = extreme
...
page 134
page 135
"r"
"Total Resistance"
"resistance"
gpdk180_resValue( r ?id cdfId ?returnString t )
"string"
"t"
"nequal(cdfgData->calculatedParam->value \"Resistance\")"
"gpdk180_resCB( r )"
"yes"
"yes"
page 136
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"w"
"Width"
"lengthMetric"
gpdk180_resValue( w ?id cdfId ?returnString t )
"string"
"t"
"nequal(cdfgData->calculatedParam->value \"Width\")"
"gpdk180_resCB( w )"
"yes"
"yes"
page 137
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"l"
"Length"
"lengthMetric"
gpdk180_resValue( l ?id cdfId ?returnString t )
"string"
"t"
"nequal(cdfgData->calculatedParam->value \"Length\")"
"gpdk180_resCB( l )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"t"
"t"
"gpdk180_resCB( m )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"s"
"S Factor"
"1"
"string"
"t"
"t"
"gpdk180_resCB( s )"
"yes"
"yes"
page 138
"l"
"Total Length"
"lengthMetric"
gpdk180_resValue( l ?id cdfId ?returnString t )
"string"
"t"
"nil"
"gpdk180_resCB( l )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"sl"
"Segment Length"
"lengthMetric"
gpdk180_resValue( sl ?id cdfId ?returnString t )
"string"
"t"
"nequal(cdfgData->calculatedParam->value \"Length\")"
"gpdk180_resCB( sl )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
parseAsNumber
parseAsCEL
"effL"
"Effective Length"
"lengthMetric"
gpdk180_resValue( sl ?id cdfId ?returnString t )
"string"
"nil"
"nil"
"yes"
"yes"
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 )"
page 139
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 )"
page 141
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)"
page 142
CDF parameters
name
"otherParams"
prompt "Show Other Parameters"
type
"boolean"
display "gpdk180_resDisplay( otherParams)"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"rsh"
"Sheet Resistivity"
"resistance"
gpdk180_resValue( rsh ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( rsh)"
"nil"
"gpdk180_resCB( rsh )"
"yes"
"yes"
page 143
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"rbody"
"Body Resistance"
"resistance"
gpdk180_resValue( rbody ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( rbody )"
"nil"
"gpdk180_resCB( rbody )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"rcont"
"Contact Resistance"
"resistance"
gpdk180_resValue( rcont ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( rcont )"
"nil"
"gpdk180_resCB( rcont )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"rend"
"End Resistance"
"resistance"
gpdk180_resValue( rend ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( rend )"
"nil"
"gpdk180_resCB( rend )"
"yes"
"yes"
page 144
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"tc1"
"Temperature Coefficient 1"
gpdk180_resValue( tc1 ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( tc1)"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"tc2"
"Temperature Coefficient 2"
gpdk180_resValue( tc2 ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( tc2)"
"nil"
"yes"
"yes"
page 145
"vc1"
"Voltage Coefficient 1"
gpdk180_resValue( vc1 ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( vc1 )"
"nil"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
"vc2"
"Voltage Coefficient 2"
gpdk180_resValue( vc2 ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( vc2 )"
"nil"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"dw"
"Delta Width"
"lengthMetric"
gpdk180_resValue( dw ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( dw )"
"nil"
"gpdk180_resCB( dw )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"dl"
"Delta Length"
"lengthMetric"
gpdk180_resValue( dl ?id cdfId ?returnString t )
"string"
"gpdk180_resDisplay( dl )"
"nil"
"gpdk180_resCB( dl )"
"yes"
"yes"
page 146
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"trise"
"Temp rise from ambient"
""
"string"
"nil"
"yes"
"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
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"scale"
"Scale factor"
""
"string"
"gpdk180_resDisplay( scale )"
"yes"
"yes"
page 147
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"ac"
"AC resistance"
"resistance"
""
"string"
"gpdk180_resDisplay( ac )"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"dtemp"
"Temperature difference"
""
"string"
"gpdk180_resDisplay( dtemp )"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
display
parseAsNumber
parseAsCEL
"hrc"
"Capacitance connected"
"capacitance"
""
"string"
"gpdk180_resDisplay( hrc )"
"yes"
"yes"
CDF parameters
name
"source"
prompt "Source component"
type
"boolean"
display "gpdk180_resDisplay( source )"
page 148
CDF parameters
name
"pasUpdateParamList"
prompt
"CDF Param Update List"
defValue "w"
type
"string"
display
"nil"
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
instNameType
instDisplayMode
netNameType
termSimType
termDisplayMode
paramSimType
paramEvaluate
paramDisplayMode
modelLabelSet
opPointLabelSet
paramLabelSet
"PasCdfFormInit"
"PasCdfDone"
340
35
350
175
"schematic"
"instName"
"schematic"
"DC"
"voltage"
"DC"
"nil nil nil t nil"
"parameter"
"tc1 tc2 coefs"
"v i pwr"
"-resType r w l"
page 149
auCdl
ansCdlCompPrim
(R W L M)
nil
(PLUS MINUS)
(nil R r M m W w L l)
"R"
CDF siminfo
simulator
isPrimitive
otherParameters
termOrder
propMapping
instParameters
ams
t
(model)
(PLUS MINUS)
(nil sl effL)
(model sl w)
CDF siminfo
simulator
netlistProcedure
instParameters
termOrder
deviceTerminals
propMapping
permuteRule
namePrefix
auLvs
ansLvsCompPrim
(r l w m)
(PLUS MINUS)
nil
nil
"(p PLUS MINUS)"
"R"
page 150
auCdl
ansCdlCompPrim
(R W L M)
nil
(PLUS MINUS B)
(nil R r M m W w L l)
"R"
CDF siminfo
simulator
isPrimitive
otherParameters
termOrder
propMapping
instParameters
ams
t
(model)
(PLUS MINUS B)
(nil sl effL)
(model sl w)
CDF siminfo
simulator
netlistProcedure
instParameters
termOrder
deviceTerminals
propMapping
permuteRule
namePrefix
auLvs
ansLvsCompPrim
(r l w m)
(PLUS MINUS B)
nil
nil
"(p PLUS MINUS )"
"R"
page 151
page 152
"r"
"res"
"pPar(\"r\")"
"lengthMetric"
"string"
"nil"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
units
type
parseAsNumber
parseAsCEL
"w"
"Width (m)"
"pPar(\"w\")"
"lengthMetric"
"string"
"yes"
"yes"
CDF parameters
name
prompt
defValue
units
type
parseAsNumber
parseAsCEL
"l"
"Length (m)"
"pPar(\"l\")"
"lengthMetric"
"string"
"yes"
"yes"
CDF parameters
name
prompt
defValue
units
type
parseAsNumber
parseAsCEL
"sl"
"Length (m)"
"pPar(\"sl\")"
"lengthMetric"
"string"
"yes"
"yes"
page 153
resPrim2
CDF gpdk180 resPrim2
include macro resPrim
CDF siminfo
simulator
otherParameters
termMapping
termOrder
instParameters
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
spectre
(model)
(nil PLUS ":1" MINUS ":2" )
(PLUS MINUS)
(sl w)
ads
ADSsimSubcktCall
(model)
(sl w)
nil
(PLUS MINUS)
(nil PLUS ":P1" MINUS ":P2")
nil
nil
nil
CDF cellview
symbol baseline_gpdk res2 symbol
spectre baseline_gpdk res2 symbol
ads
baseline_gpdk res2 symbol
CDF siminfo
simulator
isPrimitive
otherParameters
termOrder
instParameters
ams
t
(model)
(PLUS MINUS)
(model sl w)
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
opPointLabelSet
paramLabelSet
""
""
340
35
350
175
"res v i"
"-model r w l"
page 154
resPrim3
CDF gpdk180 resPrim3
include macro resPrim
CDF siminfo
simulator
otherParameters
termMapping
termOrder
instParameters
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
spectre
(model)
(nil PLUS ":1" MINUS ":2" B ":3" )
(PLUS MINUS B)
(sl w)
ads
ADSsimSubcktCall
(model)
(sl w)
nil
(PLUS MINUS B)
(nil PLUS ":P1" MINUS ":P2" B ":P3")
nil
nil
nil
CDF cellview
symbol baseline_gpdk res3 symbol
spectre baseline_gpdk res3 symbol
ads
baseline_gpdk res3 symbol
CDF siminfo
simulator
isPrimitive
otherParameters
termOrder
instParameters
ams
t
(model)
(PLUS MINUS B)
(model sl w)
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
opPointLabelSet
paramLabelSet
""
""
340
35
350
175
"res v i"
"-model r w l"
page 155
Resistors
polyres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
$grid
1u
"$lib_$cell"
$poly_rho
0.0
0.0
0.0
0.0
0.0
0.0
lambda( (dpl) 5.0 / (dpl->rows * dpl->cols) )
0.0
"res res/poly"
( "$lib" "resPrim2" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 156
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res2
res2
res2
$cell
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol 5
page 157
polyhres
CDF gpdk180 polyhres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
$grid
1u
"$lib_$cell"
$polyh_rho
0.0
0.0
0.0
0.0
0.0
0.0
lambda( (dpl) 5.0 / (dpl->rows * dpl->cols) )
lambda( (dpl) 7.5 / dpl->w )
"res res/poly"
( "$lib" "resPrim2" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 158
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res2
res2
res2
$cell
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol 5
page 159
nplusres
CDF gpdk180 nplusres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
$grid
1u
"$lib_$cell"
$nplus_rho
0.0
0.0
0.0
0.0
0.0
0.0
lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) )
0.0
"res res/diff"
( "$lib" "resPrim3" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 160
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res3
res3
res3
$cell
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol 5
page 161
pplusres
CDF gpdk180 pplusres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
$grid
1u
"$lib_$cell"
$pplus_rho
0.0
0.0
0.0
0.0
0.0
0.0
lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) )
0.0
"res res/diff"
( "$lib" "resPrim3" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 162
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res3
res3
res3
$cell
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol 5
page 163
nwellres
CDF gpdk180 nwellres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
$grid
1u
"$lib_$cell"
$nwell_rho
0.0
0.0
0.0
0.0
0.0
0.0
lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) )
lambda( (dpl) 160.0 / dpl->w )
"res res/nwell"
( "$lib" "resPrim2" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 164
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res2
res2
res2
$cell
symbol
symbol
symbol
symbol 5
page 165
mxres
CDF gpdk180 mxres
CDF siminfo
simulator
componentName
auLvs
"$cell"
CDF siminfo
simulator
auCdl
modelName "$cell"
CDF Macro Table
$cell $m_rho
m1res $m1_rho
m2res $m2_rho
m3res $m3_rho
m4res $m4_rho
m5res $m5_rho
m6res $m6_rho
$minW
{7A}
{9A}
{11A}
{15A}
{17A}
{19A}
$minS
{7B}
{9B}
{11B}
{15B}
{17B}
{19B}
$grid
1u
"$lib_$cell"
$m_rho
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
"res res/metal"
( "$lib" "resPrim2" "symbol" )
( "basic" "iopin" "symbol" )
private
private
private
private
private
private
private
private
private
private
private
private
private
public
public
page 166
private
private
private
private
private
private
private
private
private
private
private
private
private
CDF cellview
symbol baseline_gpdk
auCdl baseline_gpdk
auLvs baseline_gpdk
ivpcell $lib
res2
res2
res2
$cell
symbol
symbol
symbol
symbol 5
page 167
PCell Macros
res_uniSeg (macro)
pcell macro res_uniSeg
PCell formal params
w
float
l
float
leftDummy
boolean
rightDummy
boolean
cntOnDummy boolean
cntRows
int
CDF
CDF
CDF
CDF
CDF
CDF
res_multiSeg (macro)
pcell macro res_multiSeg
PCell formal params
w
float
sl
float
connection
string
segments
int
leftDummy
boolean
rightDummy
boolean
cntOnDummy boolean
cntRows
int
include macro res_connect
mres_multiSeg (macro)
pcell macro mres_multiSeg
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 168
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
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
page 169
5: include
6: if leftDummy
body[1]
body[0]
Poly
body[1]
Poly
alBody
Poly
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Poly
body[i]
topHead[i]
Poly
alHead
Poly
body[i]
Poly
alBody
xSepHB 0.0
xSepHB 0.0
Poly
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 170
contact
mwCont
topHead[i]
topMetal[i]
Poly
Metal1
Cont[]
mwCont
mwCont
awM1
mwCont
awM1
Cont[]
mwCont
xSepHM ySepHM
meeM1Cont meM1Cont
alM1
alM1
xSepHM ySepHM
meeM1Cont meM1Cont
mwCont
Cont[]
mwCont
Metal1
Cont[]
botMetal[i]
Poly
botHead[i]
mwCont
meeM1Cont meM1Cont
space msCont msCont
page 171
res_poly_nplus (macro)
pcell macro res_poly_nplus
2: include
meImplRes = dpt->meImplRes
10: include
<-NPLUS->
Poly
meImplRes meImplRes
topHead[ei]
meImplRes meImplRes
Poly
botHead[bi]
res_poly_pplus (macro)
pcell macro res_poly_pplus
2: include
meImplRes = dpt->meImplRes
10: include
<-PPLUS->
Poly
meImplRes meImplRes
topHead[ei]
meImplRes meImplRes
Poly
botHead[bi]
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
meWellRes meWellRes
botHead[bi]
res_poly_id (macro)
pcell macro res_poly_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-Resdum->
body[1]
Poly
meIdRes ySep
Poly
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 173
res_poly_sb (macro)
pcell macro res_poly_sb
2: include
meSbRes = dpt->meSbRes || 0
msSbRes = dpt->msSbRes
msSbCont = dpt->msSbCont || 0
maSb = dpt->maSb
10: include
1: include
sbOffset = msSbCont - meResCont
sbOffset = if( dogbone && msSbRes then max( sbOffset msSbRes )
else sbOffset )
xSep = meSbRes
ySep = minus(sbOffset)
2: if maSb
xSep = PasCeiling( ( ( ( maSb / ( alBody - (2.0 * sbOffset) ) ) ( ( (ei - bi) * ( awBody + asBody ) ) + awBody ) ) / 2.0 ) grid t )
xSep = max( xSep meSbRes)
3: include
<-SiProt->
body[bi]
Poly
xSep ySep
Poly
xSep ySep
body[ei]
page 174
res_diff (macro)
pcell macro res_diff
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
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
page 175
5: include
6: if leftDummy
body[1]
body[0]
Oxide
body[1]
Oxide
alBody
Oxide
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Oxide
body[i]
topHead[i]
Oxide
alHead
Oxide
body[i]
Oxide
alBody
xSepHB 0.0
xSepHB 0.0
Oxide
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 176
contact
mwCont
topHead[i]
topMetal[i]
Oxide
Metal1
Cont[]
mwCont
mwCont
awM1
mwCont
awM1
Cont[]
mwCont
xSepHM ySepHM
meeM1Cont meM1Cont
alM1
alM1
xSepHM ySepHM
meeM1Cont meM1Cont
mwCont
Cont[]
mwCont
Metal1
Cont[]
botMetal[i]
Oxide
botHead[i]
mwCont
meeM1Cont meM1Cont
space msCont msCont
page 177
res_diff_nplus (macro)
pcell macro res_diff_nplus
2: include
meImplRes = dpt->meImplRes
10: include
<-NPLUS->
Oxide
meImplRes meImplRes
topHead[ei]
meImplRes meImplRes
Oxide
botHead[bi]
res_diff_pplus (macro)
pcell macro res_diff_pplus
2: include
meImplRes = dpt->meImplRes
10: include
<-PPLUS->
Oxide
meImplRes meImplRes
topHead[ei]
meImplRes meImplRes
Oxide
botHead[bi]
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
meWellRes meWellRes
botHead[bi]
res_diff_id (macro)
pcell macro res_diff_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-Resdum->
body[1]
Oxide
meIdRes ySep
Oxide
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 179
res_nwell (macro)
pcell macro res_nwell
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
mwCont = dpt->mwCont
mwM1 = dpt->mwM1
msCont = dpt->msCont
msM1 = dpt->msM1
meDiffCont = dpt->meDiffCont
meM1Cont = dpt->meM1Cont
meImplDiff = dpt->meImplDiff
3: include
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
three
page 180
5: include
6: if leftDummy
body[1]
Nwell
body[0]
Nwell
alBody
Nwell
alBody
asBody 0.0
ref
awBody
body[1]
awBody
page 181
8: for i bi ei
awHead
body[i - 1]
Nwell
body[i]
topHead[i]
Nwell
alHead
Nwell
body[i]
Nwell
xSepHB 0.0
xSepHB 0.0
alBody
Nwell
awBody
botHead[i]
asBody 0.0
alHead
awHead
9: for i bi ei
meeResDiff meResDiff
meeResDiff meResDiff
Nwell
Nwell
<-Oxide->
meeResDiff meResDiff
<-Oxide->
topDiff[i]
botDiff[i]
topHead[i]
botHead[i]
meeResDiff meResDiff
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
page 183
contact
mwCont
topDiff[i]
topMetal[i]
<-Oxide->
Metal1
Cont[]
mwCont
mwCont
awM1
mwCont
awM1
Cont[]
mwCont
xSepDM ySepDM
meeM1Cont meM1Cont
alM1
alM1
xSepDM ySepDM
meeM1Cont meM1Cont
mwCont
Cont[]
mwCont
Metal1
Cont[]
botMetal[i]
<-Oxide->
botDiff[i]
mwCont
meeM1Cont meM1Cont
space msCont msCont
page 184
res_nwell_id (macro)
pcell macro res_nwell_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-ResWdum->
body[1]
Nwell
meIdRes ySep
Nwell
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 185
res_connect (macro)
if evenp(i)
topMetal[i]
Metal1
Metal1
Metal1
alM1
Metal1
awM1
awM1
alM1
botMetal[i]
if oddp(sc)
if evenp(sc)
topMetal[sc]
Metal1
botMetal[sc]
Metal1
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botMetal[1]
Metal1
"MINUS" inOut
left bottom
<-Metal1->
Metal1
topMetal[sc]
Metal1
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal1
botMetal[1]
<-Metal1->
Metal1
botMetal[sc]
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
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
page 187
res_m1 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal1
body[1]
Metal1
alBody
Metal1
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal1
body[i]
topHead[i]
Metal1
alHead
Metal1
body[i]
Metal1
alBody
xSepHB 0.0
xSepHB 0.0
Metal1
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 188
res_m2 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal2
body[1]
Metal2
alBody
Metal2
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal2
body[i]
topHead[i]
Metal2
alHead
Metal2
body[i]
Metal2
alBody
xSepHB 0.0
xSepHB 0.0
Metal2
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 189
res_m3 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal3
body[1]
Metal3
alBody
Metal3
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal3
body[i]
topHead[i]
Metal3
alHead
Metal3
body[i]
Metal3
alBody
xSepHB 0.0
xSepHB 0.0
Metal3
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 190
res_m4 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal4
body[1]
Metal4
alBody
Metal4
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal4
body[i]
topHead[i]
Metal4
alHead
Metal4
body[i]
Metal4
alBody
xSepHB 0.0
xSepHB 0.0
Metal4
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 191
res_m5 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal5
body[1]
Metal5
alBody
Metal5
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal5
body[i]
topHead[i]
Metal5
alHead
Metal5
body[i]
Metal5
alBody
xSepHB 0.0
xSepHB 0.0
Metal5
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 192
res_m6 (macro)
5: include
6: if leftDummy
body[1]
body[0]
Metal6
body[1]
Metal6
alBody
Metal6
alBody
asBody 0.0
ref
awBody
awBody
7: for i 2 ei
8: for i bi ei
awHead
body[i - 1]
Metal6
body[i]
topHead[i]
Metal6
alHead
Metal6
body[i]
Metal6
alBody
xSepHB 0.0
xSepHB 0.0
Metal6
awBody
asBody 0.0
botHead[i]
alHead
awHead
page 193
res_m1_id (macro)
pcell macro res_m1_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M1dummy->
body[1]
Metal1
Metal1
meIdRes ySep
meIdRes ySep
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
meIdRes ySep
Metal2
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 194
res_m3_id (macro)
pcell macro res_m3_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M3dummy->
body[1]
Metal3
Metal3
meIdRes ySep
meIdRes ySep
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
meIdRes ySep
Metal4
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 195
res_m5_id (macro)
pcell macro res_m5_id
2: include
meIdRes = dpt->meIdRes || 0
10: include
<-M5dummy->
body[1]
Metal5
Metal5
meIdRes ySep
meIdRes ySep
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
meIdRes ySep
Metal6
meIdRes ySep
ySep = minus(idOffset)
body[sc]
page 196
m1res_connect (macro)
if evenp(i)
topHead[i]
Metal1
Metal1
Metal1
alM1
Metal1
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal1
botHead[sc]
Metal1
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal1
"MINUS" inOut
left bottom
<-Metal1->
Metal1
topHead[sc]
Metal1
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal1
botHead[1]
<-Metal1->
Metal1
botHead[sc]
page 197
m2res_connect (macro)
if evenp(i)
topHead[i]
Metal2
Metal2
Metal2
alM1
Metal2
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal2
botHead[sc]
Metal2
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal2
"MINUS" inOut
left bottom
<-Metal2->
Metal2
topHead[sc]
Metal2
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal2
botHead[1]
<-Metal2->
Metal2
botHead[sc]
page 198
m3res_connect (macro)
if evenp(i)
topHead[i]
Metal3
Metal3
Metal3
alM1
Metal3
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal3
botHead[sc]
Metal3
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal3
"MINUS" inOut
left bottom
<-Metal3->
Metal3
topHead[sc]
Metal3
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal3
botHead[1]
<-Metal3->
Metal3
botHead[sc]
page 199
m4res_connect (macro)
if evenp(i)
topHead[i]
Metal4
Metal4
Metal4
alM1
Metal4
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal4
botHead[sc]
Metal4
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal4
"MINUS" inOut
left bottom
<-Metal4->
Metal4
topHead[sc]
Metal4
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal4
botHead[1]
<-Metal4->
Metal4
botHead[sc]
page 200
m5res_connect (macro)
if evenp(i)
topHead[i]
Metal5
Metal5
Metal5
alM1
Metal5
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal5
botHead[sc]
Metal5
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal5
"MINUS" inOut
left bottom
<-Metal5->
Metal5
topHead[sc]
Metal5
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal5
botHead[1]
<-Metal5->
Metal5
botHead[sc]
page 201
m6res_connect (macro)
if evenp(i)
topHead[i]
Metal6
Metal6
Metal6
alM1
Metal6
awM1
awM1
alM1
botHead[i]
if oddp(sc)
if evenp(sc)
topHead[sc]
Metal6
botHead[sc]
Metal6
"PLUS" inOut
right top
"PLUS" inOut
right bottom
botHead[1]
Metal6
"MINUS" inOut
left bottom
<-Metal6->
Metal6
topHead[sc]
Metal6
"PLUS" inOut
left right top
"MINUS" inOut
left right bottom
Metal6
botHead[1]
<-Metal6->
Metal6
botHead[sc]
page 202
PCell Devices
Poly Resistor
pcell gpdk180 polyres
N+ Diff Resistor
pcell gpdk180 nplusres
P+ Diff Resistor
pcell gpdk180 pplusres
NWell Resistor
pcell gpdk180 nwellres
Metal Resistor
pcell gpdk180 mxres
$mac1
res_m1
res_m2
res_m3
res_m4
res_m5
res_m6
$mac2
res_m1_id
res_m2_id
res_m3_id
res_m4_id
res_m5_id
res_m6_id
page 203
page 204
CDF Definitions
mimcap
CDF gpdk180 mimcap
CDF device params
grid
$grid
scale
1.0e-6
model
"mimcap"
category "cap"
private
private
private
private
mfg grid
dimensional scale factor
device model name
dfII library manager category
CDF siminfo
simulator
componentName
instParameters
propMapping
modelName
auCdl
"$cell"
(AREA M)
(nil AREA area M m)
"$cell"
CDF siminfo
simulator
componentName
instParameters
auLvs
"$cell"
(area m)
CDF siminfo
simulator
instParameters
componentName
spectre
(area perim m scale trise ic tc1 tc2)
"$cell"
CDF cellview
symbol pas_std
spectre pas_std
auCdl
pas_std
auLvs pas_std
ads
pas_std
ivpcell $lib
cap2
cap2
cap2
cap2
cap2
$cell
symbol
symbol
symbol
symbol
symbol
symbol 5
page 205
"c"
"Capacitance"
"capacitance"
gpdk180_capValue(c ?id cdfId ?returnString t)
"string"
"t"
"cdfgData->calcParam->value!=\"capacitance\""
"yes"
"yes"
"gpdk180_capCB(c)"
CDF parameters
name
prompt
units
defValue
type
display
editable
parseAsNumber
parseAsCEL
callback
"w"
"Width"
"lengthMetric"
gpdk180_capValue(w ?id cdfId ?returnString t)
"string"
"t"
"cdfgData->calcParam->value!=\"width\""
"yes"
"yes"
"gpdk180_capCB(w)"
page 206
"l"
"Length"
"lengthMetric"
gpdk180_capValue(l ?id cdfId ?returnString t)
"string"
"t"
"cdfgData->calcParam->value!=\"length\""
"yes"
"yes"
"gpdk180_capCB(l)"
CDF parameters
name
"showSimParams"
prompt
"Show Sim Parameters"
defValue nil
type
"boolean"
display
"gpdk180_capDisplay(showSimParams)"
CDF parameters
name
"cf"
prompt
"Fringe capacitance (F/M)"
defValue gpdk180_capValue(cf ?id cdfId)
type
"float"
display
"gpdk180_capDisplay(cf)"
editable "nil"
CDF parameters
name
prompt
defValue
type
parseAsNumber
parseAsCEL
editable
CDF parameters
name
prompt
defValue
type
parseAsNumber
parseAsCEL
editable
"area"
"Area"
"iPar(\"w\")*iPar(\"l\")"
"string"
"yes"
"yes"
"nil"
"perim"
"Perim"
"2*iPar(\"w\")+2*iPar(\"l\")"
"string"
"yes"
"yes"
"nil"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"t"
"yes"
"yes"
CDF parameters
name
"ca"
prompt
"Area capacitance (F/M^2)"
defValue gpdk180_capValue(ca ?id cdfId)
type
"float"
display
"gpdk180_capDisplay(ca)"
editable "nil"
page 207
"ic"
"Initial condition"
"voltage"
""
"string"
"gpdk180_capDisplay(ic)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
CDF parameters
"scale"
name
"Scale factor"
prompt
""
defValue
"string"
type
"gpdk180_capDisplay(scale)" display
"yes"
parseAsNumber
"yes"
parseAsCEL
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
CDF parameters
"tc1"
name
"Temperature coefficient 1" prompt
""
defValue
"string"
type
"gpdk180_capDisplay(tc1)" display
"yes"
parseAsNumber
"yes"
parseAsCEL
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"dtemp"
"Temperature difference"
""
"string"
"gpdk180_capDisplay(dtemp)"
"yes"
"yes"
"trise"
"Temp rise from ambient"
""
"string"
"gpdk180_capDisplay(trise)"
"yes"
"yes"
"tc2"
"Temperature coefficient 2"
""
"string"
"gpdk180_capDisplay(tc2)"
"yes"
"yes"
CDF parameters
name
"polyCoef"
prompt
"Number of Polynomial Coeffs"
defValue 0
type
"int"
display
"gpdk180_capDisplay(polyCoef)"
page 208
"c1"
"Poly Coeff 1"
""
"string"
"cdfgData->polyCoef->value >= 1"
"gpdk180_capDisplay(c1)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c2"
"Poly Coeff 2"
""
"string"
"cdfgData->polyCoef->value >= 2"
"gpdk180_capDisplay(c2)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c3"
"Poly Coeff 3"
""
"string"
"cdfgData->polyCoef->value >= 3"
"gpdk180_capDisplay(c3)"
"yes"
"yes"
page 209
"c4"
"Poly Coeff 4"
""
"string"
"cdfgData->polyCoef->value >= 4"
"gpdk180_capDisplay(c4)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c5"
"Poly Coeff 5"
""
"string"
"cdfgData->polyCoef->value >= 5"
"gpdk180_capDisplay(c5)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c6"
"Poly Coeff 6"
""
"string"
"cdfgData->polyCoef->value >= 6"
"gpdk180_capDisplay(c6)"
"yes"
"yes"
page 210
"c7"
"Poly Coeff 7"
""
"string"
"cdfgData->polyCoef->value >= 7"
"gpdk180_capDisplay(c7)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c8"
"Poly Coeff 8"
""
"string"
"cdfgData->polyCoef->value >= 8"
"gpdk180_capDisplay(c8)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c9"
"Poly Coeff 9"
""
"string"
"cdfgData->polyCoef->value >= 9"
"gpdk180_capDisplay(c9)"
"yes"
"yes"
page 211
"c10"
"Poly Coeff 10"
""
"string"
"cdfgData->polyCoef->value >= 10"
"gpdk180_capDisplay(c10)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c11"
"Poly Coeff 11"
""
"string"
"cdfgData->polyCoef->value >= 11"
"gpdk180_capDisplay(c11)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c12"
"Poly Coeff 12"
""
"string"
"cdfgData->polyCoef->value >= 12"
"gpdk180_capDisplay(c12)"
"yes"
"yes"
page 212
"c13"
"Poly Coeff 13"
""
"string"
"cdfgData->polyCoef->value >= 13"
"gpdk180_capDisplay(c13)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c14"
"Poly Coeff 14"
""
"string"
"cdfgData->polyCoef->value >= 14"
"gpdk180_capDisplay(c14)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c15"
"Poly Coeff 15"
""
"string"
"cdfgData->polyCoef->value >= 15"
"gpdk180_capDisplay(c15)"
"yes"
"yes"
page 213
"c16"
"Poly Coeff 16"
""
"string"
"cdfgData->polyCoef->value >= 16"
"gpdk180_capDisplay(c16)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c17"
"Poly Coeff 17"
""
"string"
"cdfgData->polyCoef->value >= 17"
"gpdk180_capDisplay(c17)"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c18"
"Poly Coeff 18"
""
"string"
"cdfgData->polyCoef->value >= 18"
"gpdk180_capDisplay(c18)"
"yes"
"yes"
page 214
CDF parameters
name
prompt
defValue
type
use
display
parseAsNumber
parseAsCEL
"c19"
"Poly Coeff 19"
""
"string"
"cdfgData->polyCoef->value >= 19"
"gpdk180_capDisplay(c19)"
"yes"
"yes"
"c20"
"Poly Coeff 20"
""
"string"
"cdfgData->polyCoef->value >= 20"
"gpdk180_capDisplay(c20)"
"yes"
"yes"
CDF parameters
name
"source"
prompt "Source component"
type
"boolean"
display "gpdk180_capDisplay(source)"
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
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"q"
"Quality"
""
"string"
"gpdk180_capDisplay(q)"
"yes"
"yes"
page 215
"freq"
"Frequency"
"frequency"
""
"string"
"gpdk180_capDisplay(freq)"
"yes"
"yes"
CDF parameters
name
"pasUpdateParamList"
prompt
"CDF Param Update List"
defValue "c w l"
type
"string"
display
"nil"
CDF siminfo
simulator
netlistProcedure
instParameters
termOrder
propMapping
namePrefix
auCdl
ansCdlCompPrim
(C M)
(PLUS MINUS)
(nil C c M m)
"C"
CDF siminfo
simulator
propMapping
netlistProcedure
instParameters
termOrder
permuteRule
namePrefix
auLvs
nil
ansLvsCompPrim
(c m)
(PLUS MINUS)
"(p PLUS MINUS)"
"C"
CDF siminfo
simulator
instParameters
termOrder
isPrimitive
ams
(c w l m scale trise ic tc1 tc2)
(PLUS MINUS)
t
page 216
spectre
nil
"C"
(model)
(c w l m scale trise ic tc1 tc2)
(PLUS MINUS)
(nil PLUS \:1 MINUS "(FUNCTION minus(root(\"PLUS\")))")
capacitor
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(Area Periph _M scale Trise ic tc1 tc2)
nil
(PLUS MINUS)
(nil PLUS ":P1" MINUS ":minus.P1")
(nil Area area Periph perim _M m Trise trise)
nil
nil
page 217
"PasCdfFormInit"
""
340
35
350
175
"instName"
"schematic"
"schematic"
"parameter"
"nil nil nil t nil"
"DC"
"netName"
"DC"
"i"
"-model c m"
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 **
dpt = PasGetPdkParams(libName cellName)
grid = dpt->grid
scale = dpt->scale
sGrid = grid*scale
epsilon = sGrid/10.0
ca = gpdk180_capValue(ca ?dpt dpt)
cf = gpdk180_capValue(cf ?dpt dpt)
minW = gpdk180_capValue(w ?dpt dpt ?type min)
maxW = gpdk180_capValue(w ?dpt dpt ?type max)
minL = gpdk180_capValue(l ?dpt dpt ?type min)
maxL = gpdk180_capValue(l ?dpt dpt ?type max)
;; process param argument
todo = list(nil)
caseq( param
(c
paramId = cdfId->c
if( cdfId->calcParam->value == "width" then
todo = cons(w todo)
else
todo = cons(l todo)
)
)
(w
paramId = cdfId->w...
page 219
Pcell
mimcap
"MINUS" inOut
all
<-Metal2->
w*1e6
M2CTMenc M2CTMenc
CapMetal
l*1e6
M3V2enc = {11D}
M2V2enc = {10C}
M2CTMenc = {12B}
ref
captop
CTMM3enc = {12D}
V2w = {10A}
V2sp = {10B}
capbot
M2CTMenc M2CTMenc
<-Capdum->
M2CTMenc M2CTMenc
CapMetal
M2CTMenc M2CTMenc
captop
"PLUS" inOut
all
captop
CTMM3enc CTMM3enc
<-Metal3->
CapMetal
space V2sp V2sp
Via2[]
M3V2enc M3V2enc
V2w
V2w
Via2[]
V2w
V2w
CTMM3enc CTMM3enc
M3V2enc M3V2enc
page 220
page 221
Junction Varactors
page 222
xjvar_w40 pcell
pcell gpdk180 xjvar_w40
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
page 223
mi_enc_sd_x mi_enc_sd_y
sd_enc_cw_xm sd_enc_cw_y
<-Nimp->
Oxide
Oxide
Cont[]
<-Metal1->
co_l
co_w
pcw
sd_enc_m1_xm 0
mi_enc_sd_x mi_enc_sd_y
ref
first_sd_reg
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
2: include
finger[1]
pi_sd_enc_x pi_sd_enc_y
sd_enc_m1_xp m1_ext
<-Metal1->
sd_enc_cw_xp sd_enc_cw_y
Oxide
<-JVAR3dummy->
Cont[]
<-Pimp->
co_l
0.2 0
Oxide
0.2 1
co_w
pcw
Oxide
co_w
Cont[]
co_l
finger[1]
pcl
sd_sp 0
first_sd_reg
sd_enc_cw_xp sd_enc_cw_y
sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
page 224
sd_enc_m1_xm 0
sd_enc_cw_xm sd_enc_cw_y
Oxide
Oxide
mi_enc_sd_x mi_enc_sd_y
<-Nimp->
Cont[]
Oxide
co_l
<-Metal1->
co_w
pcw
sd_reg[f]
co_l
sd_sp 0
finger[f - 1]
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
mi_enc_sd_x mi_enc_sd_y
finger[f]
sd_enc_m1_xp m1_ext
sd_enc_cw_xp sd_enc_cw_y
Oxide
Oxide
pi_sd_enc_x pi_sd_enc_y
<-Metal1->
Cont[]
co_l
<-JVAR3dummy->
<-Pimp->
co_w
pcw
co_w
Oxide
0.2 0
0.2 1
space co_s co_s right
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
page 225
mi_enc_sd_x mi_enc_sd_y
<-Nimp->
sd_enc_cw_xm sd_enc_cw_y
Oxide
Oxide
<-Metal1->
Cont[]
co_l
sd_enc_m1_xm 0
co_w
space co_s co_s right
pcw
co_w
last_sd_reg
Cont[]
co_l
sd_sp 0
mi_enc_sd_x mi_enc_sd_y
sd_enc_m1_xm m1_ext
co_w + 2 * m1_enc_cw_xm
finger[pcnf]
sd_enc_cw_xm sd_enc_cw_y
5: include
"ANODE" inOut
left right top
pin name "ANODE"
<-Metal1->
0 m1_ext + m1_sw
0 m1_ext
jvnw
<-Nwell->
Oxide
Oxide
nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y
0 m1_ext
"CATHODE" inOut
left right bottom
pin name "CATHODE"
first_sd_reg last_sd_reg
0 m1_ext + m1_sw
<-Metal1->
page 226
<-Oxide->
0 pi_sd_enc_y
"BULK" inOut
msPwNw msPwNw
left top bottom
must group BULK[0]
[Nwell]
jvnw
pi_sd_enc_x pi_sd_enc_y
<-Pimp->
<-Metal1->
<-Oxide->
pi_sd_enc_x pi_sd_enc_y
<-Pimp->
<-Metal1->
<-Oxide->
00
sd_enc_cw_x sd_enc_cw_y
msPwNw
mwPwGrCont[]
+ msPwNw
co_l
Cont[]
co_l
co_w
[Nwell]
space co_s co_s right
[Nwell]
co_w
space co_s co_s right
jvnw
jvnw
co_w
sd_enc_cw_x sd_enc_cw
co_w
Cont[]
Cont[]
co_l
co_l
00
mwPwGr + msPwNw mwPwGr + msPwNw
pi_sd_enc_x pi_sd_enc_y
sd_enc_cw_x sd_enc_cw_y
[Nwell]
msPwNw msPwNw
jvnw
msPwNw mwPwGr + msPwNw
<-Pimp->
<-Oxide->
0 pi_sd_enc_y
0 pi_sd_enc_y
page 227
<-JVAR1dummy->
mwPwGr + msPwNw mwPwGr + msPwNw
[Nwell]
jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
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
page 229
mi_enc_sd_x mi_enc_sd_y
sd_enc_cw_xm sd_enc_cw_y
<-Nimp->
Oxide
Oxide
Cont[]
<-Metal1->
co_l
co_w
pcw
sd_enc_m1_xm 0
mi_enc_sd_x mi_enc_sd_y
ref
first_sd_reg
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
2: include
finger[1]
pi_sd_enc_x pi_sd_enc_y
sd_enc_m1_xp m1_ext
<-Metal1->
sd_enc_cw_xp sd_enc_cw_y
Oxide
<-JVAR3dummy->
Cont[]
<-Pimp->
co_l
0.2 0
Oxide
co_w
pcw
Oxide
co_w
Cont[]
co_l
finger[1]
pcl
0.2 0
sd_sp 0
first_sd_reg
sd_enc_cw_xp sd_enc_cw_y
sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
page 230
sd_enc_m1_xm 0
sd_enc_cw_xm sd_enc_cw_y
Oxide
Oxide
mi_enc_sd_x mi_enc_sd_y
Cont[]
<-Nimp->
Oxide
co_l
<-Metal1->
co_w
pcw
sd_reg[f]
co_l
sd_sp 0
finger[f - 1]
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext
mi_enc_sd_x mi_enc_sd_y
finger[f]
sd_enc_m1_xp m1_ext
sd_enc_cw_xp sd_enc_cw_y
Oxide
Oxide
pi_sd_enc_x pi_sd_enc_y
<-Metal1->
Cont[]
co_l
<-Pimp->
co_w
pcw
co_w
Oxide
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
page 231
mi_enc_sd_x mi_enc_sd_y
<-Nimp->
sd_enc_cw_xm sd_enc_cw_y
Oxide
Oxide
<-Metal1->
Cont[]
co_l
sd_enc_m1_xm 0
co_w
space co_s co_s right
pcw
co_w
last_sd_reg
Cont[]
co_l
sd_sp 0
mi_enc_sd_x mi_enc_sd_y
sd_enc_m1_xm m1_ext
co_w + 2 * m1_enc_cw_xm
finger[pcnf]
sd_enc_cw_xm sd_enc_cw_y
5: include
"ANODE" inOut
left right top
pin name "ANODE"
<-Metal1->
0 m1_ext + m1_sw
0 m1_ext
jvnw
<-Nwell->
Oxide
Oxide
nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y
0 m1_ext
"CATHODE" inOut
left right bottom
pin name "CATHODE"
first_sd_reg last_sd_reg
0 m1_ext + m1_sw
<-Metal1->
page 232
<-Oxide->
0 pi_sd_enc_y
"BULK" inOut
msPwNw msPwNw
left top bottom
must group BULK[0]
[Nwell]
jvnw
pi_sd_enc_x pi_sd_enc_y
<-Pimp->
<-Metal1->
<-Oxide->
pi_sd_enc_x pi_sd_enc_y
<-Pimp->
<-Metal1->
<-Oxide->
00
sd_enc_cw_x sd_enc_cw_y
msPwNw
mwPwGrCont[]
+ msPwNw
co_l
Cont[]
co_l
co_w
[Nwell]
space co_s co_s right
[Nwell]
co_w
space co_s co_s right
jvnw
jvnw
co_w
sd_enc_cw_x sd_enc_cw
co_w
Cont[]
Cont[]
co_l
co_l
00
mwPwGr + msPwNw mwPwGr + msPwNw
pi_sd_enc_x pi_sd_enc_y
sd_enc_cw_x sd_enc_cw_y
[Nwell]
msPwNw msPwNw
jvnw
msPwNw mwPwGr + msPwNw
<-Pimp->
<-Oxide->
0 pi_sd_enc_y
0 pi_sd_enc_y
page 233
<-JVAR2dummy->
mwPwGr + msPwNw mwPwGr + msPwNw
[Nwell]
jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
page 234
private
private
private
private
private
private
private
private
private
public
public
public
public
private
private
private
private
private
private
private
private
private
private
private
private
private
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"w"
"Width (M)"
"4e-05"
"string"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"l"
"Length (M)"
"6e-07"
"string"
"nil"
"yes"
"yes"
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()->cellViewType != \"maskLayout\""
"gpdk180_jvCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
callback
parseAsNumber
parseAsCEL
"nf"
"Number of Fingers"
"4"
"string"
"gpdk180_jvCB()"
"yes"
"yes"
CDF parameters
name
"model"
prompt
"Model Name"
defValue
"xjvar_w40"
type
"string"
editable
"nil"
parseAsCEL "yes"
page 235
ams
(nil)
(model nf m)
(model)
(ANODE CATHODE BULK)
t
CDF siminfo
simulator
instParameters
otherParameters
termMapping
termOrder
componentName
spectre
(nf m)
(model)
(nil ANODE ":1" CATHODE ":2" BULK ":3")
(ANODE CATHODE BULK)
subcircuit
CDF cellview
auCdl
baseline_gpdk
auLvs baseline_gpdk
spectre baseline_gpdk
symbol baseline_gpdk
ivpcell $lib
CDF siminfo
simulator
namePrefix
termOrder
instParameters
netlistProcedure
auCdl
"X"
(ANODE CATHODE BULK)
(model nf m)
_ansCdlSubcktCall
CDF siminfo
simulator
namePrefix
termOrder
componentName
instParameters
netlistProcedure
auLvs
D
(ANODE CATHODE BULK)
"xjvar_w40"
(nf m)
ansLvsCompPrim
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
paramLabelSet
jvar
jvar
jvar
jvar
$cell
symbol
symbol
symbol
symbol
symbol 5
""
""
340
35
350
175
"-model nf m"
page 236
xjvar_nf36 cdf
CDF gpdk180 xjvar_nf36
CDF device params
CwSp
0.2
CwW
0.2
M1CwEncXm 0.2
M1CwEncXp 0.2
M1CwEncY
0.2
M1Ext
0.48
M1SW
1.54
MISDEncX
0.2
MISDEncY
0.2
MaxF
50
MaxW
60e-6
MinF
1
MinW
20e-6
private
private
private
private
private
private
private
private
private
public
public
public
public
private
private
private
private
private
private
private
private
private
private
private
private
private
CDF parameters
name
prompt
defValue
type
callback
parseAsNumber
parseAsCEL
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
CDF parameters
"w"
name
"Width (M)"
prompt
"2e-05"
defValue
"string"
type
"gpdk180_jvCB()"editable
"yes"
parseAsNumber
"yes"
parseAsCEL
"l"
"Length (M)"
"6e-07"
"string"
"nil"
"yes"
"yes"
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()->cellViewType != \"maskLayout\""
"gpdk180_jvCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"nf"
"Number of Fingers"
"36"
"string"
"nil"
"yes"
"yes"
CDF parameters
name
"model"
prompt
"Model Name"
defValue
"xjvar_nf36"
type
"string"
editable
"nil"
parseAsCEL "yes"
page 237
ams
(nil)
(model w m)
(model)
(ANODE CATHODE BULK)
t
CDF siminfo
simulator
instParameters
otherParameters
termMapping
termOrder
componentName
spectre
(w m)
(model)
(nil ANODE ":1" CATHODE ":2" BULK ":3")
(ANODE CATHODE BULK)
subcircuit
CDF cellview
auCdl
baseline_gpdk
auLvs baseline_gpdk
spectre baseline_gpdk
symbol baseline_gpdk
ivpcell $lib
CDF siminfo
simulator
namePrefix
termOrder
instParameters
netlistProcedure
auCdl
"X"
(ANODE CATHODE BULK)
(model w m)
_ansCdlSubcktCall
CDF siminfo
simulator
namePrefix
termOrder
componentName
instParameters
netlistProcedure
auLvs
D
(ANODE CATHODE BULK)
"xjvar_nf36"
(w m)
ansLvsCompPrim
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
paramLabelSet
jvar
jvar
jvar
jvar
$cell
symbol
symbol
symbol
symbol
symbol 5
""
""
340
35
350
175
"-model w m"
page 238
; 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"...
page 239
Diode Macro
CDF parameters
name
"macro"
prompt
"Model name"
defValue
"iPar(\"model\")"
type
"string"
display
"nil"
parseAsCEL "yes"
CDF parameters
name
prompt
units
defValue
type
callback
parseAsNumber
parseAsCEL
"w"
"Width (M)"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
"string"
"gpdk180_diodeCB()"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
callback
parseAsNumber
parseAsCEL
"l"
"Length (M)"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinL)
"string"
"gpdk180_diodeCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()~>cellViewType != \"maskLayout\""
"gpdk180_diodeCB()"
"yes"
"yes"
page 240
"area"
"Device area"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW*PasGetPdkParams("$lib" "$cell")~>MinL)
"string"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"pj"
"Periphery of junction"
sprintf( nil "%g" 2*PasGetPdkParams("$lib" "$cell")~>MinW+2*PasGetPdkParams("$lib" "$cell")~>MinL)
"string"
"nil"
"yes"
"yes"
CDF siminfo
simulator
instParameters
netlistProcedure
componentName
termOrder
namePrefix
modelName
auCdl
(area)
ansCdlCompPrim
diode
(PLUS MINUS)
"D"
"$cell"
CDF siminfo
simulator
namePrefix
termOrder
componentName
instParameters
netlistProcedure
auLvs
"D"
(PLUS MINUS)
"$cell"
(area m)
ansLvsCompPrim
CDF siminfo
simulator
otherParameters
instParameters
termOrder
termMapping
componentName
spectre
(model)
(area pj m)
(PLUS MINUS)
(nil PLUS \:1 MINUS \:2)
pdio
CDF parameters
name
"calcParam"
prompt
"Calculate Parameter"
type
"cyclic"
choices list("area" "width" "length")
defValue "area"
display
"nil"
CDF siminfo
simulator
otherParameters
instParameters
termOrder
isPrimitive
ams
(model)
(model area pj m)
(PLUS MINUS)
t
page 241
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(Area Periph _M)
nil
(PLUS MINUS)
(nil PLUS ":P1" MINUS ":P2")
(nil Area area Periph pj _M m)
nil
nil
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
modelLabelSet
opPointLabelSet
paramLabelSet
""
""
340
35
350
175
"is rs n"
"i v region"
"-model area m"
page 242
ndio
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
diode2
diode2
diode2
diode2
diode2
$cell
symbol
symbol
symbol
symbol
symbol
symbol 40
page 243
pdio
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
diode2
diode2
diode2
diode2
diode2
$cell
symbol
symbol
symbol
symbol
symbol
symbol 40
page 244
inductor
CDF gpdk180 ind
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"ind"
"Inductance (H)"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefInd)
"string"
"nil"
"yes"
"yes"
CDF parameters
name
"nr"
prompt
"Number Of Turns"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefNR)
choices ("1.5" "2.5" "3.5" "4.5" "5.5" "6.5" "7.5" "8.5" "9.5")
type
"cyclic"
callback "gpdk180_indCB()"
CDF parameters
name
prompt
units
defValue
type
callback
parseAsNumber
parseAsCEL
"rad"
"Inner Radius"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinR)
"string"
"gpdk180_indCB()"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
callback
parseAsNumber
parseAsCEL
"width"
"Inductor Width"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
"string"
"gpdk180_indCB()"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
callback
parseAsNumber
parseAsCEL
"space"
"Inductor Space"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinS)
"string"
"gpdk180_indCB()"
"yes"
"yes"
private
private
private
private
private
private
private
private
page 245
CDF parameters
name
prompt
defValue
type
display
editable
parseAsNumber
parseAsCEL
"m"
"multiplier"
"1"
"string"
"nil"
"nil"
"yes"
"yes"
CDF siminfo
simulator
modelName
componentName
namePrefix
propMapping
termOrder
instParameters
netlistProcedure
auCdl
"$cell"
ind
"I"
(nil l ind)
(PLUS MINUS)
(l)
ansCdlCompPrim
CDF siminfo
simulator
netlistProcedure
instParameters
componentName
termOrder
namePrefix
auLvs
ansLvsCompPrim
(ind)
"$cell"
(PLUS MINUS)
"I"
CDF siminfo
simulator
propMapping
termMapping
instParameters
termOrder
otherParameters
componentName
spectre
(nil l ind)
(nil PLUS \:1 MINUS \:2)
(l)
(PLUS MINUS)
(model)
ind
CDF parameters
name
"macro"
prompt
"Model"
defValue
"iPar(\"model\")"
type
"string"
display
"nil"
parseAsCEL "yes"
CDF siminfo
simulator
isPrimitive
termOrder
instParameters
ams
t
(PLUS MINUS)
ind
page 246
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
paramLabelSet
ads
ADSsimCompPrim
(model)
(L)
nil
(PLUS MINUS)
(nil PLUS ":P1" MINUS ":P2")
(nil L ind)
nil
nil
""
""
340
35
350
175
"-model nr rad"
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
ind2
ind2
ind2
ind2
ind2
ind
symbol
symbol
symbol
symbol
symbol
symbol 40
page 247
vpnp
CDF parameters
name
"model"
prompt
"Model name"
defValue
"vpnp"
type
"string"
editable
"nil"
parseAsCEL "yes"
CDF parameters
name
"macro"
prompt
"Model name"
defValue
"iPar(\"model\")"
type
"string"
display
"nil"
parseAsCEL "yes"
CDF parameters
name
"EmitterSize"
prompt
"Emitter Size"
defValue "1.3x1.3"
choices ("1.3x1.3" "5.0x5.0")
type
"cyclic"
callback "gpdk180_vpnpCB()"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"area"
"Area"
"1.69"
"string"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()->cellViewType != \"maskLayout\""
"gpdk180_vpnpCB()"
"yes"
"yes"
page 248
CDF siminfo
simulator
netlistProcedure
propMapping
instParameters
namePrefix
componentName
termOrder
modelName
auCdl
ansCdlCompPrim
(nil M m EA area)
(EA M)
"Q"
vpnp
(C B E)
"$cell"
CDF siminfo
simulator
netlistProcedure
instParameters
componentName
termOrder
namePrefix
auLvs
ansLvsCompPrim
(area m)
"$cell"
(C B E)
"Q"
CDF siminfo
simulator
isPrimitive
termOrder
instParameters
otherParameters
ams
t
(C B E)
(area m)
(model)
CDF siminfo
simulator
termMapping
termOrder
instParameters
otherParameters
spectre
(nil C \:c B \:b E \:e)
(C B E)
(area m)
(model)
page 249
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
modelLabelSet
opPointLabelSet
paramLabelSet
ads
ADSsimCompPrim
(model)
(Area _M)
nil
(C B E)
(nil C ":P1" B ":P2" E ":P3")
(nil _M m)
nil
nil
""
""
340
35
350
175
"bf is vaf"
"betadc ic vce"
"-model m area"
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
pnp3
pnp3
pnp3
pnp3
pnp3
vpnp
symbol
symbol
symbol
symbol
symbol
symbol 40
page 250
npn
CDF gpdk180 npn
CDF parameters
name
"model"
prompt
"Model name"
defValue
"npn"
type
"string"
editable
"nil"
parseAsCEL "yes"
CDF parameters
name
prompt
defValue
type
callback
parseAsNumber
parseAsCEL
"Ewidth"
"Emitter width"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE)
"string"
"gpdk180_bjtCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"area"
"Area"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
"string"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()->cellViewType != \"maskLayout\""
"gpdk180_bjtCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"scaleF"
"Scale Factor"
"1"
"string"
"nil"
"yes"
"yes"
page 251
CDF siminfo
simulator
modelName
termOrder
componentName
namePrefix
instParameters
propMapping
netlistProcedure
auCdl
"$cell"
(C B E)
npn
"Q"
(EA)
(nil EA area)
ansCdlCompPrim
CDF siminfo
simulator
netlistProcedure
instParameters
componentName
termOrder
namePrefix
auLvs
ansLvsCompPrim
(area m)
"$cell"
(C B E)
"Q"
CDF siminfo
simulator
propMapping
termMapping
termOrder
instParameters
otherParameters
spectre
(nil area scaleF)
(nil C \:c B \:b E \:e)
(C B E)
(area m)
(model)
CDF siminfo
simulator
isPrimitive
termOrder
instParameters
propMapping
otherParameters
ams
t
(C B E)
(area m)
(nil area scaleF)
(model)
page 252
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(Area _M)
nil
(C B E)
(nil C ":P1" B ":P2" E ":P3")
(nil Area scaleF _M m)
nil
nil
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
modelLabelSet
opPointLabelSet
paramLabelSet
""
""
340
35
350
175
"bf is vaf"
"betadc ic vce"
"-model m area"
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
npn3
npn3
npn3
npn3
npn3
npn
symbol
symbol
symbol
symbol
symbol
symbol 40
page 253
pnp
CDF parameters
name
prompt
defValue
type
callback
parseAsNumber
parseAsCEL
"Ewidth"
"Emitter width"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE)
"string"
"gpdk180_bjtCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
parseAsNumber
parseAsCEL
"area"
"Area"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
"string"
"nil"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"m"
CDF parameters
"Multiplier"
name
"1"
prompt
"string"
defValue
"deGetEditCellView()->cellViewType != \"maskLayout\""type
"gpdk180_bjtCB()"
editable
"yes"
parseAsNumber
"yes"
parseAsCEL
"scaleF"
"Scale Factor"
"1"
"string"
"nil"
"yes"
"yes"
page 254
CDF siminfo
simulator
netlistProcedure
instParameters
componentName
termOrder
namePrefix
auLvs
ansLvsCompPrim
(area m)
"$cell"
(C B E)
"Q"
CDF siminfo
simulator
modelName
termOrder
componentName
namePrefix
instParameters
propMapping
netlistProcedure
auCdl
"$cell"
(C B E)
pnp
"Q"
(EA)
(nil EA area)
ansCdlCompPrim
CDF siminfo
simulator
propMapping
termMapping
termOrder
instParameters
otherParameters
spectre
(nil area scaleF)
(nil C \:c B \:b E \:e)
(C B E)
(area m)
(model)
CDF siminfo
simulator
isPrimitive
termOrder
instParameters
propMapping
otherParameters
ams
t
(C B E)
(area m)
(nil area scaleF)
(model)
page 255
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(Area _M)
nil
(C B E)
(nil C ":P1" B ":P2" E ":P3")
(nil Area scaleF _M m)
nil
nil
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
modelLabelSet
opPointLabelSet
paramLabelSet
""
""
340
35
350
175
"bf is vaf"
"betadc ic vce"
"-model m area"
CDF cellview
symbol pas_std
spectre pas_std
auLvs pas_std
auCdl
pas_std
ads
pas_std
ivpcell gpdk180
pnp3
pnp3
pnp3
pnp3
pnp3
pnp
symbol
symbol
symbol
symbol
symbol
symbol 40
page 256
moscap macro
CDF macro moscap
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private
page 257
CDF parameters
name
prompt
units
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"c"
"Capacitance (F)"
"capacitance"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefC)
"string"
"cdfgData->entryModeC->value != \"Length&Width\""
"gpdk180_moscapCB()"
"yes"
"yes"
CDF parameters
name
prompt
units
defValue
type
editable
parseAsNumber
parseAsCEL
"totalC"
"Total Capacitance (F)"
"capacitance"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefC)
"string"
"nil"
"yes"
"yes"
CDF parameters
name
"entryModeC"
prompt
"Capacitance Entry Mode"
defValue "Capacitance"
choices ("Capacitance" "Cap&Length" "Cap&Width" "Length&Width")
type
"cyclic"
callback "gpdk180_moscapCB()"
page 258
"l"
"Length (m)"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinL)
"string"
"cdfgData->entryModeC->value == \"Cap&Length\" ||
cdfgData->entryModeC->value == \"Length&Width\""
"gpdk180_moscapCB()"
"yes"
"yes"
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
prompt
units
defValue
type
editable
callback
parseAsNumber
parseAsCEL
CDF parameters
name
prompt
units
defValue
type
editable
callback
parseAsNumber
parseAsCEL
"w"
"Width (m)"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
"string"
"( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"TotalWidth\""
"gpdk180_moscapCB()"
"yes"
"yes"
"fw"
"Width Per Finger (m)"
"lengthMetric"
sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
"string"
"( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"WidthPerFinger\""
"gpdk180_moscapCB()"
"yes"
"yes"
page 259
"fingers"
"Number of Fingers"
"1"
"string"
"gpdk180_moscapCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
editable
callback
parseAsNumber
parseAsCEL
"m"
"Multiplier"
"1"
"string"
"deGetEditCellView()->cellViewType != \"maskLayout\""
"deGetEditCellView()->cellViewType != \"maskLayout\""
"gpdk180_moscapCB()"
"yes"
"yes"
CDF parameters
name
prompt
defValue
type
display
parseAsNumber
parseAsCEL
"simM"
"Simulation Multiplier"
"iPar(\"m\") * iPar(\"fingers\")"
"string"
"nil"
"yes"
"yes"
CDF parameters
name
"macro"
prompt
"macro model name"
defValue
"iPar(\"model\")"
type
"string"
display
"nil"
parseAsCEL "yes"
page 260
"sdMtlWidth"
"S/D Metal Width"
"lengthMetric"
".4u"
"string"
"nil"
"yes"
"yes"
CDF parameters
name
"leftTap"
prompt
"Left Tap"
defValue t
type
"boolean"
display
"t"
CDF parameters
name
"bottomTap"
prompt
"Bottom Tap"
defValue nil
type
"boolean"
display
"t"
CDF parameters
name
"tapExtension"
prompt
"Tap Extension"
defValue ""
type
"string"
display
"nil"
CDF parameters
name
"mtlCvg"
prompt
"Metal Coverage"
defValue ""
type
"string"
display
"nil"
CDF parameters
name
"switchSD"
prompt
"Switch S/D"
defValue nil
type
"boolean"
display
"nil"
CDF parameters
name
"rightAbut"
prompt
"Right Abutment"
defValue 0
type
"int"
display
"nil"
CDF parameters
name
"leftAbut"
prompt
"Left Abutment"
defValue 0
type
"int"
display
"nil"
CDF parameters
name
"tapCntRows"
prompt
"Tap Contact Rows"
defValue 1
type
"int"
display
"nil"
CDF parameters
name
"connectSD"
prompt
"S/D Connection"
defValue "None"
choices ("None" "Source" "Drain" "Both")
type
"radio"
display
"gpdk180_mosDisplay(connectSD)"
CDF parameters
name
"tap"
prompt
"Bodytie Type"
defValue "Detached"
choices ( "None" "Detached" )
type
"cyclic"
display
"nil"
CDF parameters
name
"rightTap"
prompt
"Right Tap"
defValue nil
type
"boolean"
display
"t"
CDF parameters
name
"topTap"
prompt
"Top Tap"
defValue nil
type
"boolean"
display
"t"
page 261
auLvs
""
nil
""
"M"
(D G S B)
(w l m)
ansLvsCompPrim
CDF siminfo
simulator
netlistProcedure
instParameters
termOrder
propMapping
namePrefix
CDF siminfo
simulator
opParamExprList
termMapping
instParameters
termOrder
propMapping
otherParameters
spectre
(("cap" "OP(inst() \"cgg\")"))
(nil D \:d G \:g S \:s B \:b)
(w l m)
(D G S B)
(nil m simM w fw)
(model)
CDF siminfo
simulator
netlistProcedure
otherParameters
instParameters
componentName
termOrder
termMapping
propMapping
typeMapping
uselib
ads
ADSsimCompPrim
(model)
(W L _M)
nil
(D G S B)
(nil D ":P1" G ":P2" S ":P3" B ":P4")
(nil W fw L l _M simM)
nil
nil
auCdl
ansCdlCompPrim
(L W M)
(D G S B)
(nil L l W w M m)
"M"
CDF siminfo
simulator
otherParameters
instParameters
termOrder
propMapping
isPrimitive
CDF properties
formInitProc
doneProc
buttonFieldWidth
fieldHeight
fieldWidth
promptWidth
paramLabelSet
opPointLabelSet
modelLabelSet
ams
(model)
(model w l m)
(D G S B)
(nil m simM w fw)
t
""
""
340
35
350
175
"-totalC l w fingers"
"ids vgs vds vth vdsat"
"vtho kf beta0"
page 262
nmoscap
private
private
private
private
private
private
private
private
nmoscap4n
nmoscap4n
nmoscap4n
nmoscap4n
nmoscap4n
nmoscap
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol
symbol
symbol 40
CDF siminfo
simulator
componentName
modelName
auCdl
nmoscap
"$cell"
CDF siminfo
simulator
componentName
auLvs
nmoscap
page 263
nmoscap3
private
private
private
private
private
private
private
private
nmoscap4n3
nmoscap4n3
nmoscap4n3
nmoscap4n3
nmoscap4n3
nmoscap3
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol
symbol
symbol 40
CDF siminfo
simulator
componentName
modelName
auCdl
nmoscap
nmoscap
CDF siminfo
simulator
componentName
auLvs
nmoscap
page 264
pmoscap
private
private
private
private
private
private
pmoscap4n
pmoscap4n
pmoscap4n
pmoscap4n
pmoscap4n
pmoscap
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol
symbol
symbol 40
auCdl
pmoscap
"$cell"
CDF siminfo
simulator
componentName
auLvs
pmoscap
page 265
pmoscap3
private
private
private
private
private
private
pmoscap4n3
pmoscap4n3
pmoscap4n3
pmoscap4n3
pmoscap4n3
pmoscap3
private
private
private
private
MFG Grid
Dimension scale factor
Device Model Name
Library Manager Category
private
private
private
private
private
private
private
private
private
symbol
symbol
symbol
symbol
symbol
symbol 40
CDF siminfo
simulator
componentName
modelName
auCdl
pmoscap
pmoscap
CDF siminfo
simulator
componentName
auLvs
pmoscap
page 266
page 267
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
)
setq(cell or(cdfgData->id~>master cdfgData->id))
libName = or(cdfgData~>id~>libName cdfgData~>id~>lib~>name )
deviceName = or(cdfgData~>id~>cellName cdfgData~>id~>name )
setq(device PasGetPdkParams(libName deviceName))
grid = device->grid
scale = device->scale || 1e-6
sGrid = grid * scale
MinL = device->MinL
MinW = device->MinW
MaxL = device->MaxL
MaxW = device->MaxW
lVar = nil
wVar = nil
multVar = nil
if( (mult = cdfParseFloatString(cdfgData->m->value)) &&
typep(mult) != flonum then
multVar = t
)
if( mult == " " || mult == "" then
artError("Multiplier value must be a positive integer - set to default" )
cdfgData->m->value = "1"
mult = 1
multVar = nil
)
if(!multVar && (mult = fix(mult)) < 1 then
artError("Multiplier value must be a positive integer - set to default" )
cdfgData->m->value = "1"
mult = 1
multVar = nil
)
lVal = cdfParseFloatString(cdfgData->l->value)
wVal = cdfParseFloatString(cdfgData->w->value)
if(typep(lVal) != flonum then
lVar = t
)
if(lVar && deGetEditCellView()~>cellViewType == "maskLayout" then...
page 268
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)
setq(cell or(cdfgData->id~>master cdfgData->id))
libName = or(cdfgData~>id~>libName cdfgData~>id~>lib~>name )
deviceName = or(cdfgData~>id~>cellName cdfgData~>id~>name )
setq(device PasGetPdkParams(libName deviceName))
grid = device->grid
scale = device->scale || 1e-6
sGrid = grid * scale
MinR = device->MinR
MaxR = device->MaxR
MinS = device->MinS
MaxS = device->MaxS
MinW = device->MinW
MaxW = device->MaxW
; Check Radius Values
rVal = cdfParseFloatString(cdfgData->rad->value)
unless( rVal && (typep(rVal) == flonum)
artError("Inductor Radius value must be a number - set to default" )
cdfgData->rad->value = cdfgData->rad->defValue
)
rVal = evalstring(cdfgData->rad->value)
if(rVal < MinR then
artError("Radius is smaller than minimum - setting to min")
rVal = MinR
)
if(rVal > MaxR then
artError("Radius is larger than maximum - setting to max")
rVal = MaxR
)
r = gpdk180_PDKsnapToGrid(rVal sGrid)
; Check Space Values
sVal = cdfParseFloatString(cdfgData->space->value)
unless( sVal && (typep(sVal) == flonum)
artError("Inductor Space value must be a number - set to default" )
cdfgData->space->value = cdfgData->space->defValue
)
sVal = evalstring(cdfgData->space->value)
if(sVal < MinS then
artError("Space is smaller than minimum - setting to min")
sVal = MinS...
page 269
bipolar
CDF Callback
procedure( gpdk180_bjtCB()
let((
cell grid scale sGrid libName deviceName device
Ewidth area MinE MaxE mult multVar)
;get cdf data
setq(cell or(cdfgData->id~>master cdfgData->id))
libName = or(cdfgData~>id~>libName cdfgData~>id~>lib~>name )
deviceName = or(cdfgData~>id~>cellName cdfgData~>id~>name )
setq(device PasGetPdkParams(libName deviceName))
grid = device->grid
scale = device->scale || 1e-6
sGrid = grid * scale
MinE = device->MinE
MaxE = device->MaxE
;get parameter values
if( (mult = cdfParseFloatString(cdfgData->m->value)) &&
typep(mult) != flonum then
multVar = t
)
if( mult == " " || mult == "" then
artError("Multiplier value must be a positive integer - set to default" )
cdfgData->m->value = "1"
mult = 1
multVar = nil
)
if(!multVar && (mult = fix(mult)) < 1 then
artError("Multiplier value must be a positive integer - set to default" )
cdfgData->m->value = "1"
mult = 1
multVar = nil
)
Ewidth = cdfParseFloatString(cdfgData->Ewidth->value)
unless( Ewidth && (typep(Ewidth) == flonum)
artError("Emitter Width value must be a number - set to default" )
cdfgData->Ewidth->value = cdfgData->Ewidth->defValue
Ewidth = cdfParseFloatString( cdfgData->Ewidth->value )
)
;calculate and check min E -> this is also the value of E length
if((Ewidth - MinE) < -.001 then
artError("Emitter Width is below minimum - setting to min")...
page 270
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
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setq(cell or(cdfgData->id~>master cdfgData->id))
libName = or(cdfgData~>id~>libName cdfgData~>id~>lib~>name )
deviceName = or(cdfgData~>id~>cellName cdfgData~>id~>name )
setq(device PasGetPdkParams(libName deviceName))
grid = device->grid
scale = device->scale || 1e-6
sGrid = grid * scale
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
;;;...
page 271
page 272
ndio
ContW = {6A}
M1EncCont = {7C}
AnodeEncCont = 0.2
AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B}
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
CathodeEncM1 CathodeEncM1
Oxide
AnodeEncM1 AnodeEncM1
"MINUS" inOut
all
<-Metal1->
Cont[]
Oxide
"PLUS" inOut
all
<-Metal1->
Cont[]
Cont[]
Cont[]
ContW
ContW
ContW
CathodeEncM1 CathodeEncM1
CathodeEncCont CathodeEncCont
anode
ContW
AnodeEncM1 AnodeEncM1
AnodeEncCont AnodeEncCont
page 273
pdio
ContW = {6A}
M1EncCont = {7C}
AnodeEncCont = 0.2
AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B}
[Nwell]
[DIOdummy]
RlEncOxide RlEncOxide
Pimp
NwEncOxide = 0.5
NwEncOxide NwEncOxide
anode
Nimp
cathode
Oxide
Oxide
l*1e6
l*1e6
w*1e6
w*1e6
ref
OxideSp 0
NwEncOxide NwEncOxide
ImpEncAnode ImpEncAnode
AnodeEncCont AnodeEncCont
AnodeEncM1 AnodeEncM1
Oxide
CathodeEncCont CathodeEncCont
cathode
anode
CathodeEncM1 CathodeEncM1
"PLUS" inOut
all
<-Metal1->
Cont[]
Oxide
"MINUS" inOut
all
<-Metal1->
Cont[]
Cont[]
Cont[]
ContW
ContW
ContW
AnodeEncM1 AnodeEncM1
AnodeEncCont AnodeEncCont
ContW
CathodeEncM1 CathodeEncM1
CathodeEncCont CathodeEncCont
page 274
inductor
w = width * 1e6
s = space * 1e6
ref
r = rad * 1e6
turn[1]
n = cdfParseFloatString(nr)
Metal3
MinusTabL = RlEncInd
RlEncInd = 10.0
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]
turn[i-1]
Metal3
Metal3
L1
L1
w
w
turn[i-1]
L1
Metal3
L1
turn[i]
Metal3
L2
page 275
MetEncVia MetEncVia
MinusTab
Metal2
Metal2
Via2[]
w
space * *
Metal3
Via2[]
MinusTabL
"MINUS" inOut
right
w
MetEncVia MetEncVia
IND2dummy
w
w
MetEncVia MetEncVia
turn[1]
PlusTab
Metal2
Metal2
Via2[]
w
space * *
Metal3
Via2[]
PlusTabL
"PLUS" inOut
left
w
MetEncVia MetEncVia
page 276
4: include
<-INDdummy->
turn[numHalfTurns - 1]
RlEncInd RlEncInd
Metal3
Metal3
RlEncInd RlEncInd
turn[numHalfTurns]
page 277
npn
pcell gpdk180 npn
PCell formal params
Ewidth float cdf
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
page 278
Create the...
meWellDiff meWellDiff
<-Pwell->
<-Pimp->
BD
<-Nimp->
Oxide
meImplDiff meImplDiff
ED
Oxide
meImplDiff meImplDiff
meImplDiff meImplDiff
meImplDiff meImplDiff
meWellDiff meWellDiff
Create the...
ED
meDiffCont meDiffCont
meDiffCont meDiffCont
Oxide
BD
Oxide
Cont[]
mwCont
Cont[]
mwCont
mwCont
mwCont
Cont[]
mwCont
Cont[]
mwCont
mwCont
meDiffCont meDiffCont
meDiffCont meDiffCont
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
"E" inOut
all
pin name "E"
meM1Diff meM1Diff
mwCont
"B" inOut
all
pin name "B"
Oxide
meM1Diff meM1Diff
page 279
meWellDiff meWellDiff
meImplDiff meImplDiff
<-Nwell->
Oxide
CD
<-Nimp->
meDiffCont meDiffCont
mwCont
Cont[]
Oxide
mwCont
Cont[]
mwCont
mwCont
meImplDiff meImplDiff
meWellDiff meWellDiff
meDiffCont meDiffCont
Create the PWel, NBuried, and the NPNdummy:
meThreshDiff meThreshDiff
<-Nburied->
<-NPNdummy->
CD
Oxide
<-Metal1->
Oxide
"C" inOut
all
pin name "C"
Oxide
ED
meThreshDiff meThreshDiff
meM1Diff meM1Diff
page 280
pnp
pcell gpdk180 pnp
PCell formal params
Ewidth float cdf
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
Oxide
ED
alEmit
0.0 msEmitBase
ref 0 0
Ewidth
Oxide
BD
alEmit
0.0 msCollBase
Oxide
alEmit
CD
Ewidth
page 281
Create the...
meWellDiff meWellDiff
<-Nwell->
<-Nimp->
BD
<-Pimp->
Oxide
meImplDiff meImplDiff
ED
Oxide
meImplDiff meImplDiff
meImplDiff meImplDiff
meImplDiff meImplDiff
meWellDiff meWellDiff
Create the...
ED
meDiffCont meDiffCont
meDiffCont meDiffCont
Oxide
BD
Oxide
Cont[]
mwCont
Cont[]
mwCont
mwCont
mwCont
Cont[]
mwCont
Cont[]
mwCont
mwCont
meDiffCont meDiffCont
meDiffCont meDiffCont
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
"E" inOut
all
pin name "E"
meM1Diff meM1Diff
mwCont
"B" inOut
all
pin name "B"
Oxide
meM1Diff meM1Diff
page 282
CD
<-Pimp->
meDiffCont meDiffCont
mwCont
Cont[]
Oxide
mwCont
Cont[]
mwCont
mwCont
meDiffCont meDiffCo
meImplDiff meImplDiff
<-Pwell->
meM1Diff meM1Diff
CD
ED
Oxide
<-Metal1->
Oxide
"C" inOut
all
pin name "C"
Oxide
CDmeThreshDiff meBaseDiff
meThreshDiff meBaseDiff
meM1Diff meM1Diff
meBaseDiff meWellDiff
page 283
vpnp
pcell gpdk180 vpnp
PCell formal params
EmitterSize string cdf
Ewidth = evalstring(
substring( EmitterSize 1
difference(
strlen( EmitterSize )
strlen( index( EmitterSize "x" ) ) ) ) )
msCont = {6B}
meNimpDiff = {3C}
mwCont = {6A}
msPimpNimp = 0.4
meDiffCont = {6C}
msNimpPimp = 0.4
meM1Cont = {7C}
meWellDiff = {2C}
meBJTDum = 0.05
msWellDiff = {2D}
meWellPimp = max( difference( meWellDiff mePimpDiff ) 0.0 )
meWellNimp = max( difference( meWellDiff meNimpDiff ) 0.0 )
msWellPimp = max( difference( msWellDiff mePimpDiff ) mePimpDiff )
msWellNimp = max( difference( msWellDiff meNimpDiff ) meNimpDiff )
msEmitBase = mePimpDiff + msPimpNimp + meNimpDiff
msBaseColl = meNimpDiff + meWellNimp + msWellPimp + mePimpDiff
meDiffM1 = meDiffCont - meM1Cont
mwBase = mwCont + 2.0 * meDiffCont
mwColl = mwCont + 2.0 * meDiffCont
mwM1 = mwCont + 2.0 * meM1Cont
mwNimp = mwBase + 2.0 * meNimpDiff
mwPimp = mwBase + 2.0 * mePimpDiff
meBJTM1 = meDiffM1 + mePimpDiff + meBJTDum
page 284
mePimpDiff mePimpDiff
<-Pimp->
Oxide
meDiffCont meDiffCont
space msCont msCont center
Elength
emit
meDiffCont meDiffCont
Ewidth
ref origin origin
mePimpDiff mePimpDiff
Oxide
<-Metal1->
meDiffM1 meDiffM1
meDiffM1 meDiffM1
emit
"E" inOut
all
pin name "E"
page 285
meWellM1 meWellM1
(Oxide)
mwBase
(Nimp)
mwNimp
Metal1
inWidthBaseM1
mwM1
Ewidth + msEBM1
0 meDiffCont
Oxide
space msCont
emit
inLengthBaseM1
msEBM1 0
msEBM1
"B" inOut
all
pin name "B"
inWidthBaseM1
base
meWellM1 meWellM1
page 286
meBJTM1 meBJTM1
(Oxide)
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
page 287
moscap (macro)
pcell macro moscap
999: include
<-Metal1->
Metal1
Metal1
metal[0]
metal[gc]
"D" inOut
all
must group drain
page 288
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 289
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
CDF
page 290
page 291
Taps
passcell gpdk180_layouts ptap
<-Pimp->
<-Metal1->
Cont
**
<-Oxide->
Cont
**
**
**
**
ref
**
<-Nimp->
<-Metal1->
Cont
Cont
**
**
ref
**
<-Oxide->
**
**
c
**
page 292
Create Layouts
passcell gpdk180_layouts placer
Pcell Macro Table
$lib
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
gpdk180_layouts
$cell
nmos
nmos3
pmos
pmos3
nplusres
pplusres
nwellres
polyres
polyhres
mimcap
nmoscap
pmoscap
ind
ndio
pdio
npn
pnp
vpnp
gpdk180
$cell
$cell
R0
ref 0 0
gpdk180_layouts
ptap
SUBTAP
R0
ref 5 0
CDB layers
ResWdum
Oxide
Nwell
Poly
Nimp
Pimp
Cont
Metal1
Via1
Metal2
Via2
Metal3
Capdum
Resdum
CapMetal
BJTdum
INDdummy
IND2dummy
page 293
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CDB layers
Unrouted
Row
Group
Cannotoccupy
Canplace
hardFence
softFence
y0
y1
y2
y3
y4
y5
y6
y7
y8
y9
ResWdum
OXIDE
NWELL
POLY
NIMP
PIMP
CONT
METAL1
VIA1
METAL2
VIA2
METAL3
CAPDUM
RESDUM
CAPMETA
BJTDUM
INDdumm
IND2dum
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
Unroute
Row
Group
noOcupy
Canplac
hardFnc
softFnc
y0
y1
y2
y3
y4
y5
y6
y7
y8
y9
CDB layers
Pwell
Nburied
NPNdummy
PNPdummy
DIOdummy
SiProt
ThickOxide
Via3
Metal4
Via4
Metal5
Via5
Metal6
Bondpad
WellBody
18
19
20
21
22
23
24
30
31
32
33
34
35
36
50
CDB layers
designFlow
stretch
edgeLayer
changedLayer
unset
unknown
spike
hiz
resist
drive
supply
wire
pin
PWELL
NBURIED
NPNDUMM
PNPDUMM
DIODUMM
SiProt
ThickOxide
VIA3
METAL4
VIA4
METAL5
VIA5
METAL6
Bondpad
WELLBOD
217
218
219
220
221
222
223
224
225
226
227
228
229
dsnFlow
stretch
edgeLyr
chngLyr
unset
unknown
spike
hiz
resist
drive
supply
wire
pin
CDB layers
Psubiso
scaPort
scaNwell
scaNburied
scaSelect
IND3dummy
M1dummy
M2dummy
M3dummy
M4dummy
M5dummy
M6dummy
allGeoShare
OVERLAP
51
66
67
68
69
70
71
72
73
74
75
76
100
101
PSUBISO
scaP
scaNW
scaNB
scaSel
IND3dum
M1dum
M2dum
M3dum
M4dum
M5dum
M6dum
allGeo
OVERLAP
CDB layers
text
device
border
snap
align
prBoundary
instance
annotate
marker
select
grid
axis
hilite
background
230
231
232
233
234
235
236
237
238
239
251
252
253
254
text
device
border
snap
align
prBndry
instnce
anotate
marker
select
grid
axis
hilite
bkground
CDB purposes
GeoShare 1
warning 234
tool1
235
tool0
236
label
237
flight
238
error
239
annotate 240
drawing1 241
drawing2 242
drawing3 243
drawing4 244
drawing5 245
drawing6 246
drawing7 247
drawing8 248
drawing9 249
boundary 250
pin
251
drawing 252
net
253
cell
254
all
255
page 294
GeoShare
wng
tl1
tl0
lbl
flt
err
ant
dr1
dr2
dr3
dr4
dr5
dr6
dr7
dr8
dr9
bnd
pin
drw
net
cel
all
dummy
dummy
dummy
( Poly and NPLUS andnot Nwell ) or ( Poly and PPLUS
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
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
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
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
INDterm2
INDdummy and IND3dummy
INDterm2Cont
Metal2 and INDdummy and IND3dummy
ISONMOS
POLYterm andnot Nwell and NPLUS andnot ThickOxide
andnot Capdum and Nburied
ISONMOSCAP
POLYterm andnot Nwell and NPLUS and Capdum and
Nburied
ISONMOSHV
POLYterm andnot Nwell and NPLUS and ThickOxide
andnot Capdum and Nburied andnot RFdummy
ISONMOSRF
POLYterm andnot Nwell and NPLUS and ThickOxide
andnot Capdum and Nburied and RFdummy
ISONSDRES
NSD and Resdum and Nburied
ISOPWELL
((Nburied enclose (holes Nwell)) and (holes
Nwell))andnot Pwell
JVAR1dummy
input 43;0 packet zjvar1
page A1
device_recognition
via
via
device_recognition
via
via
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
page A2
input (JVAR1dummy net) packet zjvar1 notChg
notValid
input 44;0 packet zjvar2
input 48;0 packet zjvar3
JVAR1dummy and Nwell
JVAR2dummy and Nwell
(JVAR1dummy or JVAR2dummy) andnot NSDterm
PSDterm and (JVAR1dummy or JVAR2dummy) and
JVAR3dummy
input 37;0 df2order 103 packet m1dum
Metal1 and M1dummy
Metal1 andnot M1dummy
input 38;0 df2order 103 packet m2dum
Metal2 and M2dummy
Metal2 andnot M2dummy
input 39;0 df2order 103 packet m3dum
Metal3 and M3dummy
Metal3 andnot M3dummy
input 40;0 df2order 103 packet m4dum
Metal4 and M4dummy
Metal4 andnot M4dummy
input 41;0 df2order 103 packet m5dum
Metal5 and M5dummy
Metal5 andnot M5dummy
input 42;0 df2order 103 packet m6dum
Metal6 and M6dummy
Metal6 andnot M6dummy
CapMetal and Metal2 and Capdum
input 7;0 df2order 2 packet m1
Attach Text: 7;3 (Metal1 label)
input (Metal1 boundary) df2order 5 packet m1Bnd
notChg notValid
input 7;4 (Metal1 drawing4) df2order 1 packet m1
notChg notValid
input 7;3 (Metal1 label) df2order 0 packet m1 notChg
notValid
input 7;2 (Metal1 net) df2order 4 packet m1Net
notChg notValid
input 7;1 (Metal1 pin) df2order 3 packet m1Pin notChg
notValid fillStyle X
input 9;0 df2order 14 packet m2
Attach Text: 9;3 (Metal2 label)
input (Metal2 boundary) df2order 17 packet m2Bnd
notChg notValid
input 9;4 (Metal2 drawing4) df2order 13 packet m2
notChg notValid
input 9;3 (Metal2 label) df2order 12 packet m2 notChg
notValid
input 9;2 (Metal2 net) df2order 16 packet m2Net
notChg notValid
input 9;1 (Metal2 pin) df2order 15 packet m2Pin
notChg notValid fillStyle X
input 11;0 df2order 26 packet m3
Attach Text: 11;3 (Metal3 label)
device_recognition
device_recognition
device_recognition
device_recognition
soft_via
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
page A3
input (Metal3 boundary) df2order 29 packet m3Bnd
notChg notValid
input 11;4 (Metal3 drawing4) df2order 25 packet m3
notChg notValid
input 11;3 (Metal3 label) df2order 24 packet m3
notChg notValid
input 11;2 (Metal3 net) df2order 28 packet m3Net
notChg notValid
input 11;1 (Metal3 pin) df2order 27 packet m3Pin
notChg notValid fillStyle X
input 31;0 df2order 38 packet m4
Attach Text: 31;3 (Metal4 label)
input (Metal4 boundary) df2order 41 packet m4Bnd
notChg notValid
input 31;4 (Metal4 drawing4) df2order 37 packet m4
notChg notValid
input 31;3 (Metal4 label) df2order 36 packet m4
notChg notValid
input 31;2 (Metal4 net) df2order 40 packet m4Net
notChg notValid
input 31;1 (Metal4 pin) df2order 39 packet m4Pin
notChg notValid fillStyle X
input 33;0 df2order 50 packet m5
Attach Text: 33;3 (Metal5 label)
input (Metal5 boundary) df2order 53 packet m5Bnd
notChg notValid
input 33;4 (Metal5 drawing4) df2order 49 packet m5
notChg notValid
input 33;3 (Metal5 label) df2order 48 packet m5
notChg notValid
input 33;2 (Metal5 net) df2order 52 packet m5Net
notChg notValid
input 33;1 (Metal5 pin) df2order 51 packet m5Pin
notChg notValid fillStyle X
input 35;0 df2order 62 packet m6
Attach Text: 35;3 (Metal6 label)
input (Metal6 boundary) df2order 65 packet m6Bnd
notChg notValid
input 35;4 (Metal6 drawing4) df2order 61 packet m6
notChg notValid
input 35;3 (Metal6 label) df2order 60 packet m6
notChg notValid
input 35;2 (Metal6 net) df2order 64 packet m6Net
notChg notValid
input 35;1 (Metal6 pin) df2order 63 packet m6Pin
notChg notValid fillStyle X
NWELLterm and Nburied
DIOdummy and ( NSDterm andnot Nwell )
POLYterm andnot Nwell and NPLUS andnot ThickOxide
andnot Capdum andnot Nburied
POLYterm andnot Nwell and NPLUS and Capdum
andnot Nburied
POLYterm andnot Nwell and NPLUS and ThickOxide
andnot Capdum andnot Nburied andnot RFdummy
soft_via
device_recognition
device_recognition
device_recognition
device_recognition
page A4
device_recognition
device_recognition
device_recognition
via
device_recognition
soft_via
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
device_recognition
via
device_recognition
page A5
(PPLUS cut Poly) andnot Poly
Cont and PPLUS
PSD andnot Resdum
(bulk andnot (Nburied or Nwell or Pwell)) or BJTdum
(PSDterm and ISOPWELL)
(PSDterm and Pwell) andnot Nwell
input 5;0 df2order 93 packet pplus
input (Pimp boundary) df2order 94 packet pplusBnd
notChg notValid
input (Pimp net) packet pplusBnd notChg notValid
input 3;0 df2order 75 packet poly1
input (Poly boundary) df2order 78 packet poly1Bnd
notChg notValid
input 3;4 (Poly drawing4) df2order 74 packet poly1
notChg notValid
input 3;3 (Poly label) df2order 73 packet poly1 notChg
notValid
input 3;2 (Poly net) df2order 77 packet poly1Net
notChg notValid
input 3;1 (Poly pin) df2order 76 packet poly1Pin
notChg notValid
input 51;0 df2order 109
input 18;0 df2order 82 packet pwell
input (Pwell boundary) df2order 84 packet pwellBnd
notChg notValid
input (Pwell net) df2order 83 packet pwellNet notChg
notValid
input 69;0 df2order 102 packet zrf
input 71;0 df2order 102 packet zrwell
input 13;0 df2order 102 packet zrpoly
input df2order 204 packet prBoundaryLbl notChg
input (Row label) df2order 205 packet RowLbl notChg
notValid
(PSUB and PSDterm) andnot Nburied andnot Nwell
input 72;0 df2order 95 packet siprot
input 24;0 df2order 85 packet thox
input df2order 211 notChg notValid
input (Unrouted drawing1) df2order 212 packet
Unrouted1 notChg notValid
input (Unrouted drawing2) df2order 213 packet
Unrouted2 notChg notValid
input (Unrouted drawing3) df2order 214 packet
Unrouted3 notChg notValid
input (Unrouted drawing4) df2order 215 packet
Unrouted4 notChg notValid
input (Unrouted drawing5) df2order 216 packet
Unrouted5 notChg notValid
input (Unrouted drawing6) df2order 217 packet
Unrouted6 notChg notValid
input (Unrouted drawing7) df2order 218 packet
Unrouted7 notChg notValid
input (Unrouted drawing8) df2order 219 packet
Unrouted8 notChg notValid
input (Unrouted drawing9) df2order 220 packet
Unrouted9 notChg notValid
via
soft_via
soft_via
soft_via
page A6
device_recognition
via
via
via
via
via
via
via
page A7
page A8
input (designFlow drawing5) df2order 195 packet
designFlow5 notSel notChg notDrg
input (designFlow drawing6) df2order 196 packet
designFlow6 notSel notChg notDrg
input (designFlow drawing7) df2order 197 packet
designFlow7 notSel notChg notDrg
input (designFlow drawing8) df2order 198 packet
designFlow8 notSel notChg notDrg
input (designFlow drawing9) df2order 199 packet
designFlow9 notSel notChg notDrg
input df2order 145 packet device notChg notValid
input (device annotate) df2order 149 packet deviceAnt
notChg notValid
input (device drawing1) df2order 147 packet device1
notChg notValid
input (device drawing2) df2order 148 packet device2
notChg notValid
input (device label) df2order 146 packet deviceLbl
notChg notValid
input df2order 183 packet drive notChg notValid
input df2order 157 packet edgeLayer notChg notValid
input (edgeLayer pin) df2order 158 packet
edgeLayerPin notChg notValid
input df2order 120 packet grid notSel notChg notDrg
notValid
input (grid drawing1) df2order 121 packet grid1 notSel
notChg notDrg notValid
input df2order 138 packet hardFence notChg notValid
input df2order 172 packet hilite notChg notValid
input (hilite drawing1) df2order 173 packet hilite1
notChg notValid
input (hilite drawing2) df2order 174 packet hilite2
notChg notValid
input (hilite drawing3) df2order 175 packet hilite3
notChg notValid
input (hilite drawing4) df2order 176 packet hilite4
notChg notValid
input (hilite drawing5) df2order 177 packet hilite5
notChg notValid
input (hilite drawing6) df2order 178 packet hilite6
notChg notValid
input (hilite drawing7) df2order 179 packet hilite7
notChg notValid
input (hilite drawing8) df2order 180 packet hilite8
notChg notValid
input (hilite drawing9) df2order 181 packet hilite9
notChg notValid
input df2order 184 packet hiz notChg notValid
input df2order 132 packet instance notChg notValid
input (instance label) df2order 133 packet instanceLbl
notChg notValid
input (marker error) df2order 203 packet markerErr
notChg notValid
input (marker warning) df2order 202 packet
markerWarn notChg notValid
page A9
input df2order 154 packet pin notChg notValid
input (pin annotate) df2order 155 packet pinAnt
notChg notValid
input (pin label) df2order 153 packet pinLbl notChg
notValid
input 235;0 df2order 134 packet prBoundary notChg
input 235;5 (prBoundary boundary) df2order 135
packet prBoundaryBnd notChg notValid
input (prBoundary label) df2order 136 packet
prBoundaryLbl notChg notValid
input df2order 185 packet resist notChg notValid
input (scaNburied net) df2order 111 notSel notChg
notDrg notValid noTranslate
input (scaNwell net) df2order 112 notSel notChg
notDrg notValid noTranslate
input (scaPort net) df2order 113 notSel notChg notDrg
notValid noTranslate
input df2order 110 notChg noTranslate
input df2order 182 packet select notChg notValid
input df2order 159 packet snap notChg notValid
input (snap boundary) df2order 160 packet snap
notChg notValid
input df2order 139 packet softFence notChg notValid
input df2order 186 packet spike notChg notValid
input df2order 161 packet stretch notChg notValid
input df2order 187 packet supply notChg notValid
input 230;0 df2order 140 packet notChg
input (text drawing1) df2order 142 packet text1
notChg notValid
input (text drawing2) df2order 143 packet text2
notChg notValid
input 230;3 (text label) df2order 141 packet notChg
input df2order 188 packet unknown notChg notValid
input df2order 189 packet unset notChg notValid
input df2order 150 packet wire notChg notValid
input (wire flight) df2order 152 packet wireFlt notChg
notValid
input (wire label) df2order 151 packet wireLbl notChg
notValid
input df2order 162 packet y0 notChg notValid
input df2order 163 packet y1 notChg notValid
input df2order 164 packet y2 notChg notValid
input df2order 165 packet y3 notChg notValid
input df2order 166 packet y4 notChg notValid
input df2order 167 packet y5 notChg notValid
input df2order 168 packet y6 notChg notValid
input df2order 169 packet y7 notChg notValid
input df2order 170 packet y8 notChg notValid
input df2order 171 packet y9 notChg notValid
page B1
Nburied width must be >= 1.0 um
Nburied to Nburied spacing must be >= 1.0 um
Nwell width must be >= 1.0 um
Nwell to Nwell spacing must be >= 1.0 um
Nburied to Nwell enclosure must be >= 0.3 um
Pwell width must be >= 1.0 um
Pwell to Pwell spacing must be >= 1.0 um
Nburied to Pwell enclosure must be >= 0.3 um
ThickOxide width must be >= 0.5 um
ThickOxide to ThickOxide spacing must be >= 0.4 um
ThickOxide to Oxide enclosure must be >= 0.25 um
ThickOxide to Oxide spacing must be >= 0.25 um
ThickOxide to Poly spacing must be >= 0.4 um
ThickOxide to Poly enclosure must be >= 0.4 um
Oxide width must be >= 0.4 um
Oxide to Oxide spacing must be >= 0.3 um
Nwell to Oxide enclosure must be >= 0.5 um
Pwell to Oxide enclosure must be >= 0.5 um
Nwell to Oxide spacing must be >= 0.5 um
Pwell to Oxide spacing must be >= 0.5 um
Nimp width must be >= 0.4 um
Nimp to Nimp spacing must be >= 0.4 um
Nimp to Oxide enclosure must be >= 0.2 um
Nburied to Nimp enclosure must be >= 0.6 um
Pimp width must be >= 0.4 um
Pimp to Pimp spacing must be >= 0.4 um
Pimp to Oxide enclosure must be >= 0.2 um
Nburied to Pimp enclosure must be >= 0.6 um
Poly width must be >= 0.18 um
Poly to Poly spacing must be >= 0.3 um
Poly to Oxide enclosure must be >= 0.2 um
Oxide to Poly enclosure must be >= 0.4 um
Oxide to Poly spacing must be >= 0.2 um
Cont shapes must be 0.2x0.2 rectangles
Cont to Cont spacing must be >= 0.2 um
Oxide to Cont enclosure must be >= 0.2 um
Poly to Cont enclosure must be >= 0.2 um
Poly to Cont spacing must be >= 0.2 um
Pimp to Cont enclosure must be >= 0.1 um
Nimp to Cont enclosure must be >= 0.1 um
Oxide to Cont spacing must be >= 0.2 um
Metal1 width must be >= 0.3 um
Metal1 to Metal1 spacing must be >= 0.3 um
Metal1 to Cont enclosure must be >= 0.1 um
Via1 shapes must be 0.2x0.2 rectangles
Via1 to Via1 spacing must be >= 0.3 um
Metal1 to Via1 enclosure must be >= 0.1 um
Metal2 width must be >= 0.3 um
page B2
Metal2 to Metal2 spacing must be >= 0.3 um
Metal2 to Via1 enclosure must be >= 0.1 um
Via2 shapes must be 0.2x0.2 rectangles
Via2 to Via2 spacing must be >= 0.3 um
Metal2 to Via2 enclosure must be >= 0.1 um
Metal3 width must be >= 0.3 um
Metal3 to Metal3 spacing must be >= 0.3 um
Metal3 to Via2NoCapInd enclosure must be >= 0.1 um
Metal3 to Via2Cap enclosure must be >= 0.1 um
CapMetal width must be >= 0.5 um
Metal2 to Via2Cap enclosure must be >= 0.1 um
CapMetal to Via2Cap enclosure must be >= 0.2 um
CapMetal to Metal3 enclosure must be >= 0.3 um
P+SD to NW tap spacing must be <= 10.0 um
N+SD to Iso Psub tap spacing must be <= 10.0 um
N+SD to Psub tap spacing must be <= 10.0 um
N+SD to PW tap spacing must be <= 10.0 um
Via3 shapes must be 0.2x0.2 rectangles
Via3 to Via3 spacing must be >= 0.3 um
Metal3 to Via3 enclosure must be >= 0.1 um
Metal4 width must be >= 0.3 um
Metal4 to Metal4 spacing must be >= 0.3 um
Metal4 to Via3 enclosure must be >= 0.1 um
Via4 shapes must be 0.2x0.2 rectangles
Via4 to Via4 spacing must be >= 0.3 um
Metal4 to Via4 enclosure must be >= 0.1 um
Metal5 width must be >= 0.3 um
Metal5 to Metal5 spacing must be >= 0.3 um
Metal5 to Via4 enclosure must be >= 0.1 um
Via5 shapes must be 0.2x0.2 rectangles
Via5 to Via5 spacing must be >= 0.3 um
Metal5 to Via5 enclosure must be >= 0.1 um
Metal6 width must be >= 0.3 um
Metal6 to Metal6 spacing must be >= 0.3 um
Metal6 to Via5 enclosure must be >= 0.1 um
Minimum Pad width = 45.0
Minimum Pad spacing to Pad = 10.0
Metal1 to Bondpad enclosure must be == 3.0 um
Metal2 to Bondpad enclosure must be == 3.0 um
Metal3 to Bondpad enclosure must be == 3.0 um
Metal4 to Bondpad enclosure must be == 3.0 um
Metal5 to Bondpad enclosure must be == 3.0 um
Metal6 to Bondpad enclosure must be == 3.0 um