gpdk180 DRM PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 313

Sep 24, 2008 page i

Table of Contents

Revision History 2

Design Rule Specifications 3

Nburied rules 4

Nwell rules 5

Pwell rules 6

Oxide Rules 7

Thick Oxide Rules 8

N+ Implant rules 9

P+ Implant rules 10

POLY Rules 11

Contact rules 12

Metal rules 13

VIA rules 14

Capacitor Metal 15

Passivation rules 16

Latch-up rules 17

Antenna Rules 18

Density rules 22

Connectivity Definition 23

Component LVS Definitions 24

Resistors 25

Capacitors 29

Inductor 31

Bipolars 32

Nmos 34

HV Nmos 35

RF Nmos 36

Pmos and HV Pmos 37

RF Pmos 38
Sep 24, 2008 page ii

...contents...

Diodes 39

Junction Varactors 40

LVS Diva Compare rules 41

LVS Assura Compare rules 42

Library CDF Definition 43

Library MOS Definitions 44

Global MOS Parameters 45

Callbacks 48

MOS Callback Procedures 48

CDF Macro Definitions 49

mosParamsA - MOS Parameters (Part A) 49

mosParamsTap - MOS Tap Parameters 54

mosParamsB - MOS Parameters (Part B) 55

mosSimInfo - MOS Simulation Information (common) 61

mosSimInfoRF 63

mos3n - 3 terminal NMOS Transistor CDF 65

mos3p - 3 terminal PMOS Transistor CDF 66

mos4 - 4 terminal MOS Transistor CDF 67

mos4RF - 4 terminal RF MOS Transistor CDF 68

CDF Definitions 69

MOS Transistor 69

nmos3 69

nmos 71

nmos3hv 73

nmoshv 75

nmosrf 77

pmos3 79

pmos 81

pmos3hv 83
Sep 24, 2008 page iii

...contents...

pmoshv 85

pmosrf 87

PCells 89

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) 108

mos_volt (macro) 109

mos_volt_tap (macro) 110

mos_nw (macro) 110

mos_pw (macro) 110

mos_nw_tap (macro) 111

mos_nbl_tap (macro) 111

mos_pw_tap (macro) 111

mos_cap_tap (macro) 111

mosItap (macro) 112

mosTap (macro) 115

mosTap_pplus (macro) 122

mosTap_nplus (macro) 123

PCell Devices 124

nmos3 124

pmos3 124

nmos3hv 124

pmos3hv 124

nmos 125
Sep 24, 2008 page iv

...contents...

pmos 125

nmoshv 126

pmoshv 126

nmosrf 127

pmosrf 127

Library RESISTOR Definitions 128

Global Resistor Parameters 129

Poly Resistor 130

Diffusion Resistor 131

NWell Resistor 132

Callbacks 133

Resistor Callback Procedures 133

Resistor Spectre netlist procedure 134

CDF Macro Definitions 135

resParamsA - Resistor CDF Parameters (Part A) 135

resParamsB_uniSeg - Resistor CDF Parameters (Part B) 137

resParamsB_multiSeg - Resistor CDF Parameters (Part B) 138

resParamsC - Resistor CDF Parameters (Part C) 140

resParamsTap - Resistor CDF Parameters (Tap) 141

resParamsD - Resistor CDF Parameters (Part D) 142

resParamsE - Resistor CDF Parameters (Part E) 146

resParamsF - Resistor CDF Parameters (Part F) 148

resSimInfo2 - 2 terminal Resistor Simulation Information 149

resSimInfo3 - 3 terminal Resistor Simulation Information 150

res2_uniSeg - 2 terminal Resistor CDF 151

res3_uniSeg - 3 terminal Resistor CDF 151

res2_multiSeg - 2 terminal Resistor CDF 151

res3_multiSeg - 3 terminal Resistor CDF 151

Resistors Schematic Components 152


Sep 24, 2008 page v

...contents...

resPrim 152

resPrim2 153

resPrim3 154

Resistors 155

polyres 155

polyhres 157

nplusres 159

pplusres 161

nwellres 163

mxres 165

PCell Macros 167

res_uniSeg (macro) 167

res_multiSeg (macro) 167

mres_multiSeg (macro) 167

res_poly (macro) 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) 178

res_nwell (macro) 179

res_nwell_id (macro) 184

res_connect (macro) 185

res_m (macro) 186


Sep 24, 2008 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

High Poly Resistor 202

N+ Diff Resistor 202

P+ Diff Resistor 202

NWell Resistor 202

Metal Resistor 202

Library CAP Definitions 203

CDF Definitions 204

mimcap 204

CDF Macro Definitions 205


Sep 24, 2008 page vii

...contents...

Capacitor 205

Callbacks 218

mimcap 218

Pcell 219

mimcap 219

OLD CDF/PCELL/CALLBACK Definitions 220

Junction Varactors 221

Junction Varactor Pcells 222

xjvar_w40 pcell 222

xjvar_nf36 pcell 228

Junction Varactor CDF 234

xjvar_w40 cdf 234

xjvar_nf36 cdf 236

Junction Varactor Callback 238

Diode Macro 239

ndio 242

pdio 243

inductor 244

vpnp 247

npn 250

pnp 253

moscap macro 256

nmoscap 262

nmoscap3 263

pmoscap 264

pmoscap3 265

Component Callback Definitions 266

Common Callback Procedures 266

diode 267
Sep 24, 2008 page viii

...contents

inductor 268

bipolar 269

nmoscap / pmoscap 270

Component PCell Code 271

Common Pcell Procedures 271

ndio 272

pdio 273

inductor 274

npn 277

pnp 280

vpnp 283

moscap (macro) 287

nmoscap (uses nmos pcell) 288

nmoscap3 (uses nmos pcell) 288

pmoscap (uses pmos pcell) 289

pmoscap3 (uses pmos pcell) 289

Basic Test Structures 290

Taps 291

Create Layouts 292

Appendix A A1

Appendix B B1
Sep 24, 2008 page 1

Cadence Design Systems

GPDK 180 nm
Mixed Signal
Process Spec

REV 3.3

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
Sep 24, 2008 page 2

Revision History
DRC Revision History
--------------------------------------------------------------------------------
VERSION v3.3
--------------------------------------------------------------------------------
Changes:
1. gpdk180 OA22 library built natively with IC6.1.3.1 release code
2. gpdk090 CDB library built natively with IC5.10.41_USR5.90.69 release code
3. Added missing 64bit context files (CCR 568109)
4. Renamed LEFDefaultRouteSpec to LEFDefaultRouteSpec_gpdk180 (CCR 594263)
5. Techfile updates made in preparation for IC6.1.3 release
6. Removed CDF extraneous simulation MOS parameters (CCR 595042)
7. Created new QRC database with 3d field solver information
8. Updated stream maps to include fill layer purpose
9. Updated DRC and Extract decks to merge drawing and fill layer purposes

--------------------------------------------------------------------------------
VERSION v3.2
--------------------------------------------------------------------------------

Changes:
1. gpdk180 OA22 library built natively with IC6.1.1 preFCS code
2. Added parasitc AD/AS/PD/PS calculations to the Assura extract rules
3. Added ignore of "simM" to the CPH lam file to solve back annotation problem
4. Updated Circuit prospector libInit settings to match new format
5. Corrected names in the resistor model file for ADS
6. Modified libInit to prevent overwrite of simulation model setup information
7. Modified Assura RF LVS files for VPCM inductor extraction
8. Modified Assura RF LVS files to save additional recognition layers
9. Modified Assura RF LVS files to add dummy device filtering
10. Modified Assura RF LVS files to avoid double counting of contact resistances
11. Added switch to Assura RF LVS files control amount of saved extracted layers
12. Modified SCparameters.cds file for RF kit
13. Updates made to the display.drf file for layout productivity
14. Updates made to the techfile layer display sections for layout productivity

--------------------------------------------------------------------------------
VERSION v3.1
--------------------------------------------------------------------------------

Changes:
1. Gpdk180 OA22 library built natively with IC6.1.0 FCS code
2. Removed DBU settings in the library cdsenv file
3. Updated the CPH Lam file with VXL ignore check parameters
4. Added a PDK version print statement to the library libinit file
5. Added Circuit Prospector default settings in PDK init files

...
Sep 24, 2008 page 3

Design Rule Specifications


Sep 24, 2008 page 4

Nburied rules

Rule No. Description Rule


(um)
0A Minimum width of an Nburied. 1.0
0B Minimum space between two Nburied. 1.0

Nburied Nburied

1.0 1.0
0A 0B
Sep 24, 2008 page 5

Nwell rules

Rule No. Description Rule


(um)
1A Minimum width of an Nwell. 1.0
1B Minimum space between two Nwell. 1.0
1C Minimum Nburied overlap of Nwell 0.3

Nwell Nwell

1.0 1.0
1A 1B

Nburied

Nwell

0.3
1C
Sep 24, 2008 page 6

Pwell rules

Rule No. Description Rule


(um)
1D Minimum width of an Pwell. 1.0
1E Minimum space between two Pwell. 1.0
1F Minimum Nburied overlap of Pwell 0.3

Pwell Pwell

1.0 1.0
1D 1E

Nburied

Pwell

0.3
1F
Sep 24, 2008 page 7

Oxide Rules

Rule No. Description Rule


(um)
2A Minimum width of an Oxide. 0.4
2B Minimum space between two Oxides. 0.3
2C Minimum Nwell overlap of Oxide. 0.5
2C Minimum Pwell overlap of Oxide. 0.5
2D Minimum spacing between Nwell and Oxide. 0.5
2D Minimum spacing between Pwell and Oxide. 0.5

Oxide Oxide

0.4 0.3
2A 2B

Nwell Pwell

Oxide Oxide

0.5 0.5
2C 2C

0.5 0.5
2D 2D

Oxide Oxide
Sep 24, 2008 page 8

Thick Oxide Rules

Rule No. Description Rule


(um)
2.5A Minimum width of an Oxide. 0.5
2.5B Minimum space between two Oxides. 0.4
2.5C Thick Oxide to Oxide enclosure. 0.25
2.5D ThickOxide to Oxide spacing. 0.25
2.5E ThickOxide to Poly spacing. 0.4
2.5F ThickOxide to Poly enclosure. 0.4

ThickOxide ThickOxide

0.5 0.4
2.5A 2.5B

ThickOxide Oxide
0.25
2.5D
Poly

0.4
2.5E

0.4
2.5F
Poly

0.25
2.5C
Sep 24, 2008 page 9

N+ Implant rules

Rule No. Description Rule


(um)
3A Minimum width of an Nimp. 0.4
3B Minimum space between two Nimp. 0.4
3C Minimum Nimp overlap of Oxide. 0.2
3D Minimum Nburied overlap of Nimp. 0.6

Nimp Nimp

0.4 0.4
3A 3B

Nimp Nburied

0.2 0.6
3C 3D
Oxide Nimp
Sep 24, 2008 page 10

P+ Implant rules

Rule No. Description Rule


(um)
4A Minimum width of an Pimp. 0.4
4B Minimum space between two Pimp. 0.4
4C Minimum Pimp overlap of Oxide. 0.2
4D Minimum Nburied overlap of Pimp. 0.6

Pimp Pimp

0.4 0.4
4A 4B

Pimp Nburied

0.2 0.6
4C 4D
Oxide Pimp
Sep 24, 2008 page 11

POLY Rules

Rule No. Description Rule


(um)
5A Minimum width of an Poly. 0.18
5B Minimum space between two Poly. 0.3
5C Minimum Poly extension over Oxide. 0.2
5D Minimum Oxide extension over Poly. 0.4
5E Minimum Poly space to Oxide. 0.2

Poly Poly

0.18 0.3
5A 5B

Poly

0.2
5C
Oxide

0.4
5D

0.2
5E
Sep 24, 2008 page 12

Contact rules

Rule No. Description Rule


(um)
6A Absolute width and length of Contact. 0.2x0.2
6B Minimum space between two Contact. 0.2
6C Minimum Oxide overlap of Contact. 0.2
6D Minimum Poly overlap of Contact. 0.2
6E Minimum Poly space to Contact. 0.2
6F Minimum Pimp overlap of Contact. 0.1
6G Minimum Nimp overlap of Contact. 0.1
6H Mimimum Contact space to Oxide. 0.2

Cont Cont

0.2 0.2x0.2
6B 6A

Nimp
Oxide
Cont
0.2
6C
Cont

0.2 0.1
6E 6G

0.2
Pimp
Poly 6H
Cont Cont

0.2 0.1
6D 6F
Sep 24, 2008 page 13

Metal rules (Metalx, x = 1, 2, 3, 4, 5, 6)


(Viax, x = 1, 2, 3, 4, 5)

Rule No. Description Rule


(um)
7A, 9A, 11A, 15A, 17A, 19A Minimum width of an Metalx. 0.3
7B, 9B, 11B, 15B, 17B, 19B Minimum space between two Metalx. 0.3
7C Minimum Metal1 overlap of Contact. 0.1
9C, 11C, 15C, 17C, 19C Minimum Metalx overlap of Viax. 0.1

macro

Macro Table
$layer1 $layer2 $id1 $id2 $id3
Metal1 Cont 7A 7B 7C
Metal2 Via1 9A 9B 9C
Metal3 Via2NoCapInd 11A 11B 11C
Metal4 Via3 15A 15B 15C
Metal5 Via4 17A 17B 17C
Metal6 Via5 19A 19B 19C

$layer1 $layer1 $layer1

$layer2

0.3 0.3
$id1 $id2
0.1
$id3
Sep 24, 2008 page 14

VIA rules (Metalx, x = 1, 2, 3, 4, 5, 6)


(Viax, x = 1, 2, 3, 4, 5)

Rule No. Description Rule


(um)
8,10,14,16,18A Absolute width and Length of Viax. 0.2x0.2
8,10,14,16,18B Minimum space between two Viax. 0.3
8,10,14,16,18C Minimum Metalx overlap of Viax. 0.1

macro

Macro Table
$layer1 $layer2 $id1 $id2 $id3
Metal1 Via1 8A 8B 8C
Metal2 Via2 10A 10B 10C
Metal3 Via3 14A 14B 14C
Metal4 Via4 16A 16B 16C
Metal5 Via5 18A 18B 18C

$layer2 $layer2

0.3 0.2x0.2
$id2 $id1

$layer1

$layer2

0.1
$id3
Sep 24, 2008 page 15

Capacitor Metal

Rule No. Description Rule


(um)
12A Minimum width of CapMetal. 0.5
12B Minimum Metal2 overlap of Via2 on CapMetal. 0.4
12C Minimum CapMetal overlap of Via2. 0.2
11D Minimum Metal3 overlap of Via2 on CapMetal. 0.1
12D Minimum CapMetal overlap of Metal3. 0.3

CapMetal
CapMetal
0.3
12D
0.5
12A

Metal3

Metal2 CapMetal Metal3

Via2Cap Via2Cap Via2Cap

0.4 0.2 0.1


12B 12C 11D
Sep 24, 2008 page 16

Passivation rules

Rule No. Description Rule


(um)
20A Minimum width of Bondpad. 45.0
20B Minimum space of two Bondpad. 10.0
20C Metal1 overlap of Bondpad. 3.0
20D Metal2 overlap of Bondpad. 3.0
20E Metal3 overlap of Bondpad. 3.0
20F Metal4 overlap of Bondpad. 3.0
20G Metal5 overlap of Bondpad. 3.0
20H Metal6 overlap of Bondpad. 3.0

Bondpad Bondpad

45.0 10.0
20A 20B

macro

Macro Table $layer1


$layer1 $id1 Bondpad
Metal1 20C
Metal2 20D
Metal3 20E 3.0
$id1
Metal4 20F
Metal5 20G
Metal6 20H
Sep 24, 2008 page 17

Latch-up rules

Rule No. Description Rule


(um)
13A1 The maximum distance from any point inside 10.0
a source/drain OD area to the nearest Nwell pick-up in the same NW.
13A2 The maximum distance from any point inside 10.0
a source/drain OD area to the nearest Nburied pick-up in the same Nburied.
13A3 The maximum distance from any point inside 10.0
a source/drain OD area to the nearest Substrate pick-up.

Nwell

NWVIA
PSDarea
<= 10.0 inTub Nwell
13A1

Nburied
! NPNdummy
! PNPdummy
PWNBVIA
NSDarea
<= 10.0 inTub Nburied
13A2

! Nburied
! Pwell
! Nwell
SUBVIA
NSDarea
<= 10.0 inTub !Nburied
13A3

! Nburied
Pwell
! Nwell
PWVIA
NSDarea
<= 10.0 inTub !Nburied
13A3
Sep 24, 2008 page 18

Antenna Rules

Rule No. Description Ratio


()
Antenna Maximum Field Poly area to the active Poly gate area connected. 100.0
Antenna Maximum Metal1 area to the active Poly gate area connected. 200.0
Antenna Maximum Metal2 area to the active Poly gate area connected. 200.0
Antenna Maximum Metal3 area to the active Poly gate area connected. 200.0
Antenna Maximum Metal4 area to the active Poly gate area connected. 200.0
Antenna Maximum Metal5 area to the active Poly gate area connected. 200.0
Antenna Maximum Metal6 area to the active Poly gate area connected. 200.0

switch CHECK_ANTENNA

Antenna Antenna

Ratio <= 100.0 Ratio <= 200.0

FIELD_POLY1 Metal6
FIELD_POLY1_CONNECT Via5

Poly Metal5
Via4

ALL_GATES Metal4
Via3

Metal3
Via2NoCapInd
Antenna
Metal2
Ratio <= 200.0 Via1

Metal1
Metal1
Cont
Cont
Poly
Poly

ALL_GATES
ALL_GATES
Sep 24, 2008 page 19

Antenna Rules (cont.)

switch CHECK_ANTENNA

Antenna Antenna

Ratio <= 200.0 Ratio <= 200.0

Metal2 Metal3
Via1 Via2NoCapInd

Metal1 Metal2
Cont Via1

Poly Metal1
Cont

ALL_GATES Poly

ALL_GATES
Antenna

Ratio <= 200.0


Antenna

Metal5
Ratio <= 200.0
Via4

Metal4 Metal4
Via3 Via3

Metal3 Metal3
Via2NoCapInd Via2NoCapInd

Metal2 Metal2
Via1 Via1

Metal1 Metal1
Cont Cont

Poly Poly

ALL_GATES ALL_GATES
Sep 24, 2008 page 20

Antenna Rules (cont.)

Rule No. Description Ratio


( )
Antenna Maximum Contact area to the active Poly gate area connected. 10.0
Antenna Maximum Via1 area to the active Poly gate area connected. 20.0
Antenna Maximum Via2 area to the active Poly gate area connected. 20.0
Antenna Maximum Via3 area to the active Poly gate area connected. 20.0
Antenna Maximum Via4 area to the active Poly gate area connected. 20.0
Antenna Maximum Via5 area to the active Poly gate area connected. 20.0

switch CHECK_ANTENNA

Antenna

Ratio <= 20.0

Via5dum

Via5

Metal5
Via4

Metal4
Via3

Metal3
Antenna
Via2NoCapInd

Ratio <= 10.0 Metal2


Via1
Contdum
Metal1
Cont Cont

Poly Poly

ALL_GATES ALL_GATES
Sep 24, 2008 page 21

Antenna Rules (cont.)

switch CHECK_ANTENNA

Antenna Antenna

Ratio <= 20.0 Ratio <= 20.0

Via1dum Via2dum

Via1 Via2NoCapInd

Metal1 Metal2
Cont Via1

Poly Metal1
Cont

ALL_GATES Poly

ALL_GATES
Antenna

Ratio <= 20.0


Antenna

Via4dum
Ratio <= 20.0
Via4
Via3dum
Metal4
Via3 Via3

Metal3 Metal3
Via2NoCapInd Via2NoCapInd

Metal2 Metal2
Via1 Via1

Metal1 Metal1
Cont Cont

Poly Poly

ALL_GATES ALL_GATES
Sep 24, 2008 page 22

Density rules

Rule No. Description Ratio


()
Density Minimum Poly density across the full chip. 0.15
Density Minimum Metal1 density across the full chip. 0.25
Density Minimum Metal2 density across the full chip. 0.25
Density Minimum Metal3 density across the full chip. 0.25
Density Minimum Metal4 density across the full chip. 0.25
Density Minimum Metal5 density across the full chip. 0.25
Density Minimum Metal6 density across the full chip. 0.25

switch CHECK_DENSITY

Density Density Density

Ratio >= 0.15 Ratio >= 0.25 Ratio >= 0.25

Poly Metal1 Metal2

Density Density Density

Ratio >= 0.25 Ratio >= 0.25 Ratio >= 0.25

Metal3 Metal4 Metal5

Density

Ratio >= 0.25

Metal6
Sep 24, 2008 page 23

Connectivity Definition

Connectivity

M6term
Via5

M5term
Via4

M4term
Via3

M3term
Via2NoCapInd Via2Cap

CapMetal

M2term
Via1 INDterm1Cont INDterm2Cont

INDterm1 INDterm2

M1term
POLYcont PSDcont NSDcont

POLYterm NSDterm
NWVIA

PSDterm
NWELLterm
JVARterm PWVIA PWNBVIA SUBVIA
NBVIA

JVARanode Pwell ISOPWELL PSUB


Nburied
Sep 24, 2008 page 24

Component LVS Definitions


Sep 24, 2008 page 25

Resistors

RESISTOR
name polyres cellview "polyres ivpcell gpdk180"
type polyres model polyres ivpcell gpdk180

Device Terminals
POLYterm POLYterm
term1 PLUS
term1 POLYRES term2
term2 MINUS

Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $poly_rho*length/width

RESISTOR
name polyhres cellview "polyhres ivpcell gpdk180"
type polyhres model polyhres ivpcell gpdk180

Device Terminals
POLYterm POLYterm
term1 PLUS
term1 POLYHRES term2
term2 MINUS

Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $polyh_rho*length/width
Sep 24, 2008 page 26

Resistors (cont.)

RESISTOR
name nplusres cellview "nplusres ivpcell gpdk180"
type nplusres model nplusres ivpcell gpdk180

Device Terminals
term1 PLUS NSDterm NSDterm
term2 MINUS term1 NSDRES term2
bulk B PSUB

bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nplus_rho*length/width

RESISTOR
name nplusres cellview "nplusres ivpcell gpdk180"
type nplusres model nplusres ivpcell gpdk180

Device Terminals
term1 PLUS
NSDterm NSDterm
term2 MINUS
term1 ISONSDRES term2
bulk B
ISOPWELL

bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nplus_rho*length/width
Sep 24, 2008 page 27

Resistors (cont.)

RESISTOR
name pplusres cellview "pplusres ivpcell gpdk180"
type pplusres model pplusres ivpcell gpdk180

Device Terminals
term1 PLUS PSDterm PSDterm
term2 MINUS term1 PSDRES term2
bulk B NWELLterm

bulk
Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $pplus_rho*length/width

RESISTOR
name nwellres cellview "nwellres ivpcell gpdk180"
type nwellres model nwellres ivpcell gpdk180

Device Terminals
term1 PLUS
term2 MINUS
NWELLterm NWELLterm
term1 NWELLRES term2

Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $nwell_rho*length/width
Sep 24, 2008 page 28

Resistors (cont.)

macro

Macro Table
$cell $rho $layer1 $layer2
m1res $m1_rho M1term M1res
m2res $m2_rho M2term M2res
m3res $m3_rho M3term M3res
m4res $m4_rho M4term M4res
m5res $m5_rho M5term M5res
m6res $m6_rho M6term M6res

RESISTOR
name $cell cellview "$cell ivpcell gpdk180"
type $cell model $cell ivpcell gpdk180

Device Terminals
term1 PLUS
term2 MINUS
$layer1 $layer1
term1 $layer2 term2

Device Parameters
w width*1e-6
l length*1e-6
sl length*1e-6
effL length*1e-6
r $rho*length/width
Sep 24, 2008 page 29

Capacitors

CAPACITOR

name mimcap cellview "mimcap ivpcell gpdk180"


type mimcap model mimcap ivpcell gpdk180

Device Terminals
plus PLUS
CapMetal
minus MINUS
plus

MIMCAP
M2term
minus

Device Parameters
w ((perimeter*0.25) + 0.5*sqrt( (0.25*perimeter^2) - (4*area) ))*1e-6
l ((perimeter*0.25) - 0.5*sqrt( (0.25*perimeter^2) - (4*area) ))*1e-6
c area*1e-15 + perimeter*1e-16
area area*1e-12
perim perimeter*1e-6

PMOS

name pmoscap cellview "pmoscap ivpcell gpdk180"


type pmoscap model pmoscap ivpcell gpdk180
Device Terminals
source S
gate G
drain D
bulk B

POLYterm
DESCRIPTION: gate
Pchannel device PSDterm PSDterm
configured as capacitor source PMOSCAP drain
NWELLterm
Device Parameters
bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6
Sep 24, 2008 page 30

Capacitors (cont.)

NMOS

name nmoscap cellview "nmoscap ivpcell gpdk180"


type nmoscap model nmoscap ivpcell gpdk180

Device Terminals
source S
gate G
drain D
bulk B
POLYterm
gate
DESCRIPTION: NSDterm NSDterm
Nchannel device
source NMOSCAP drain
configured as capacitor PSUB
Device Parameters bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6

NMOS

name nmoscap cellview "nmoscap ivpcell gpdk180"


type nmoscap model nmoscap ivpcell gpdk180
Device Terminals
source S
gate G
drain D
bulk B

POLYterm
DESCRIPTION: gate
Nchannel device NSDterm NSDterm
configured as capacitor source ISONMOSCAP drain
ISOPWELL
Device Parameters
bulk
w width*1e-6
fw width*1e-6
simW width*1e-6
l length*1e-6
Sep 24, 2008 page 31

Inductor

BOX

name ind cellview "ind ivpcell gpdk180"


type ind model ind ivpcell gpdk180

Device Terminals INDUCTOR


term1 PLUS
term2 MINUS INDterm1
INDterm2
term1
term2

DESCRIPTION:
Inductor. Modelled as Box for
Dracula
Sep 24, 2008 page 32

Bipolars

PNP

name vpnp cellview "vpnp ivpcell gpdk180"


type vpnp model vpnp ivpcell gpdk180

Device Terminals
collector C
base B
emitter E PSDterm
emitter

VPNP
DESCRIPTION: NWELLterm
Substrate PNP. collector
base
connects... PSUB
Device Parameters collector
area area

PNP

name pnp cellview "pnp ivpcell gpdk180"


type pnp model pnp ivpcell gpdk180

Device Terminals
collector C
PSDterm
base B
emitter
emitter E
PNP
NWELLterm
base
DESCRIPTION: Pwell
Bipolar PNP.
collector
Nburied
Device Parameters
area area
Sep 24, 2008 page 33

Bipolars (cont.)

NPN

name npn cellview "npn ivpcell gpdk180"


type npn model npn ivpcell gpdk180

Device Terminals
collector C
base B
NSDterm
emitter E
emitter

NPN
Pwell
DESCRIPTION:
Bipolar NPN. base
Nburied

Device Parameters collector


area area
Sep 24, 2008 page 34

Nmos

NMOS

name nmos cellview "nmos ivpcell gpdk180"


type nmos model nmos ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOS drain
PSUB
DESCRIPTION: bulk
Nchannel device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOS shared)

NMOS

name nmos cellview "nmos ivpcell gpdk180"


type nmos model nmos ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOS drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOS...
Sep 24, 2008 page 35

HV Nmos

NMOS

name nmoshv cellview "nmoshv ivpcell gpdk180"


type nmoshv model nmoshv ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOSHV drain
PSUB
DESCRIPTION: bulk
Nchannel HV device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSHV...

NMOS

name nmoshv cellview "nmoshv ivpcell gpdk180"


type nmoshv model nmoshv ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOSHV drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel HV
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOSHV...
Sep 24, 2008 page 36

RF Nmos

NMOS

name nmosrf cellview "nmosrf ivpcell gpdk180"


type nmosrf model nmosrf ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source NMOSRF drain
PSUB
DESCRIPTION: bulk
Nchannel RF device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") NMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") NMOSRF shared)

NMOS

name nmosrf cellview "nmosrf ivpcell gpdk180"


type nmosrf model nmosrf ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B NSDterm NSDterm
source ISONMOSRF drain
ISOPWELL
DESCRIPTION: bulk
Isolated Nchannel RF
device assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (NSDterm))
sd_perimeter=measureParameter(perimeter (NSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") ISONMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") ISONMOSRF shared)
Sep 24, 2008 page 37

Pmos and HV Pmos

PMOS

name pmos cellview "pmos ivpcell gpdk180"


type pmos model pmos ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOS drain
NWELLterm
DESCRIPTION: bulk
Pchannel device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOS shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOS shared)

PMOS

name pmoshv cellview "pmoshv ivpcell gpdk180"


type pmoshv model pmoshv ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOSHV drain
NWELLterm
DESCRIPTION: bulk
Pchannel HV device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOSHV shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSHV shared)
Sep 24, 2008 page 38

RF Pmos

PMOS

name pmosrf cellview "pmosrf ivpcell gpdk180"


type pmosrf model pmosrf ivpcell gpdk180

Device Terminals
source S
gate G POLYterm
drain D gate
bulk B PSDterm PSDterm
source PMOSRF drain
NWELLterm
DESCRIPTION: bulk
Pchannel RF device
assuraLVS Native Code
Device Parameters sd_area=measureParameter(area (PSDterm))
sd_perimeter=measureParameter(perimeter (PSDterm))
w width*1e-6
sdarea=calculateParameter(sd_area*1.0e-12)
fw width*1e-6
sdperimeter=calculateParameter(sd_perimeter*1.0e-6)
simW width*1e-6 attachParameter(sdarea ("as" "S")("ad" "D") PMOSRF shared)
l length*1e-6 attachParameter(sdperimeter ("ps" "S")("pd" "D") PMOSRF shared)
Sep 24, 2008 page 39

Diodes

DIODE

name ndio cellview "ndio ivpcell gpdk180"


type ndio model ndio ivpcell gpdk180

Device Terminals
anode PLUS
cathode MINUS NSDterm
cathode

NDIODE
PSUB
N type Diode anode

Device Parameters
area area*1e-12

DIODE

name pdio cellview "pdio ivpcell gpdk180"


type pdio model pdio ivpcell gpdk180

Device Terminals
anode PLUS
cathode MINUS PSDterm
anode

PDIODE
NWELLterm
P type Diode cathode

Device Parameters
area area*1e-12
Sep 24, 2008 page 40

Junction Varactors
DIODE

name xjvar_w40 cellview "xjvar_w40 ivpcell gpdk180"


type xjvar_w40 model xjvar_w40 ivpcell gpdk180

Device Terminals
anode ANODE
cathode CATHODE JVARanode
bulk BULK anode

JVARNF
NWELLterm
P type Diode cathode
PSUB
bulk
Device Parameters
nf (perimeter - 85.2) / 3.6

DIODE

name xjvar_nf36 cellview "xjvar_nf36 ivpcell gpdk180"


type xjvar_nf36 model xjvar_nf36 ivpcell gpdk180

Device Terminals
anode ANODE
cathode CATHODE JVARanode
bulk BULK anode

JVARW40
NWELLterm
P type Diode cathode
PSUB
bulk
Device Parameters
w (perimeter - 134.8) / 2.0 * 1e-6
Sep 24, 2008 page 41

LVS Diva Compare rules

diva LVS Compare Code divaLVS.rul


;/*************************************************************************
;
; Title: Diva LVS rules for GENERIC PDK Process
;
;*************************************************************************/

;*********************
;***** LVS RULES *****
;*********************

lvsRules(

printf("\n GENERIC PDK LVS Rules\n")

;***************
;*** MOSFETS ***
;***************

;*****
;combine parallel MOS devices (mosfets with different l’s are not combined)
;*****

procedure(parallelMOS(m1 m2)
prog((mt)
mt = ncons(nil)
when( and(m1->l m2->l)
unless(abs(m1->l - m2->l) < .005e-6
return("doNotCombine")
)
)
when( and(m1->w m2->w)
unless(m1->m
m1->m = 1
)
unless(m2->m
m2->m = 1
)
mt->w = m1->w * m1->m + m2->w * m2->m
mt->m = 1
mt->l = m1->l
)
return(mt)
)
)

;*****...
Sep 24, 2008 page 42

LVS Assura Compare rules

assura LVS Compare Code assuraLVS.rul


;/*************************************************************************
;
; GENERIC PDK Process Assura LVS Rules v2.0 1/10/02
;
;************************************************************************/

avCompareRules(

fileVer = "2.3"
fileDate = "Aug 2005"
libType = "GENERIC PDK Process"
libVer = "version 2.3"
refDoc1 = "Library Specification No. GPDK, Version 2.3"

printf( " \n" )


printf(
"*************************************************************** \n"
)
printf( " \n" )
printf(
" GENERIC PDK Assura Compare Rules file version %s\n"
fileVer
)
printf( " Cadence Design Systems, Inc. \n" )
printf( " PDK Technology Center, Melbourne, FL \n" )
printf( " %s \n" fileDate )
printf( " Use with %s %s\n" libType libVer )
printf( " \n" )
printf( " Reference Documents: \n" )
printf( " %s \n" refDoc1 )
printf( " \n" )
printf( " NOTICE: \n" )
printf(
" Cadence Design Systems shall not be liable for the accuracy \n"
)
printf(
" of this LVS rule file or its ability to capture errors. \n"
)
printf(
" The user is responsible for thoroughly testing and \n"
)
printf(
" implementing its features. \n"
)
printf( " \n" )
printf(
"*************************************************************** \n"
)...
Sep 24, 2008 page 43

Library CDF Definition

CDF gpdk180 libcdf

CDF device params


basePasswd "base" private Flex PDK private password
masterPasswd "master" private Flex PDK private password

switch !IC61

CDF parameters
name "lxComponentType"
prompt "Virtuoso XL Component Types"
defValue "(((\"cells\" (\"gpdk180 nmos3\" \"gpdk180 nmos\")) (\"type\" \"nmos\")
(\"lxActiveLayer\" \"Oxide drawing\")
(\"lxMOSDeviceType\" \"NMOSHV\") (\"lxDeviceWidth\" \"w\") (\"lxMaxWidth\" 1e-05))
((\"cells\" (\"gpdk180 pmos3\" \"gpdk180 pmos\")) (\"type\" \"pmos\")
(\"lxActiveLayer\" \"Oxide drawing\")
(\"lxMOSDeviceType\" \"PMOS\") (\"lxDeviceWidth\" \"w\") (\"lxMaxWidth\" 1e-05)))"
type "string"
display "nil"
dontSave "nil"

CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "netName"
paramSimType "DC"
paramEvaluate "t nil nil nil nil"
paramDisplayMode "parameter"
Sep 24, 2008 page 44

Library MOS Definitions


Sep 24, 2008 page 45

Global MOS Parameters

Global Parameters
mos_msDiff {2B} Minimum diffusion spacing
mos_mxGate {5C} Minimum gate extension
mos_msGate {5B} Minimum gate spacing
mos_meDiffGate {5D} Minimum diffusion enclosure of gate
mos_msGateCont {6E} Minimum gate to contact spacing
mos_mwPoly {5A} Minimum poly width on field
mos_msDiffPoly {5E} Minimum diffusion to poly spacing
mos_mwCont {6A} Minimum & maximum contact width
mos_msCont {6B} Minimum contact spacing
mos_masCont {6B} Minimum contact array spacing
mos_meDiffCont {6C} Minimum diffusion enclosure of contact
mos_meeDiffCont {6C} Minimum diffusion end enclosure of contact
mos_mePolyCont {6D} Minimum poly enclosure of contact
mos_meePolyCont {6D} Minimum poly end enclosure of contact
mos_mwM1 {7A} Minimum metal 1 width
mos_msM1 {7B} Minimum metal 1 spacing
mos_meM1Cont {7C} Minimum metal 1 enclosure of contact
mos_meeM1Cont {7C} Minimum metal 1 end enclosure of contact
Sep 24, 2008 page 46

Global MOS Parameters (cont.)

Global Parameters
nmos_meImplDiff {4C} Minimum implant enclosure of diffusion
nmos_meImplGate 0.12 Minimum implant enclosure of gates
nmos_meeImplGate 0.12 Minimum implant end enclosure of gates
nmos_meImplPoly 0.12 Minimum implant enclosure of field poly
nmos_meImplCont 0.0 Minimum implant enclosure of contact
nmos_meVoltDiff {2.5C} Minimum thick oxide enclosure of thin oxide diffusion
nmos_meVoltImpl nil Minimum thick oxide enclosure of implant
nmos_meWellDiff {2C} Minimum wellbody enclosure of diffusion
nmos_meWellVolt 0.0 Minimum wellbody enclosure of thick diffusion
nmos_meVthDiff 0.0 Minimum high-vt implant enclosure of diffusion
nmos_meVthGate 0.0 Minimum high-vt implant enclosure of gates
nmos_meeVthGate 0.0 Minimum implant end enclosure of gates
nmos_meNtnDiff 0.0 Minimum NTN enclosure of thin oxide diffusion
nmos_meNtnImpl 0.0 Minimum NTN enclosure of implant
nmos_meWellNtn 0.0 Minimum wellbody enclosure of NTN

Global Parameters
pmos_meImplDiff {4C} Minimum implant enclosure of diffusion
pmos_meImplGate 0.12 Minimum implant enclosure of gates
pmos_meeImplGate 0.12 Minimum implant end enclosure of gates
pmos_meImplPoly 0.12 Minimum implant enclosure of field poly
pmos_meImplCont 0.0 Minimum implant enclosure of contact
pmos_meVoltDiff {2.5C} Minimum thick oxide enclosure of thin oxide diffusion
pmos_meVoltImpl nil Minimum thick oxide enclosure of implant
pmos_meWellDiff {2C} Minimum wellbody enclosure of diffusion
pmos_meWellVolt 0.0 Minimum wellbody enclosure of thick diffusion
pmos_meVthDiff 0.0 Minimum high-vt implant enclosure of diffusion
pmos_meVthGate 0.0 Minimum high-vt implant enclosure of gates
pmos_meeVthGate 0.0 Minimum implant end enclosure of gates
Sep 24, 2008 page 47

Global MOS Parameters (cont.)

Global Parameters
tap_nmos_msTapDiff 0.0 Minimum tap diffusion to device diffusion spacing
tap_nmos_msTapImpl {3C} Minimum tap diffusion to device implant spacing
tap_nmos_meTimpTap {4C} Minimum tap implant enclosure of tap diffusion
tap_nmos_msTimpDiff 0.0 Minimum tap implant to device diffusion spacing
tap_nmos_msTimpImpl 0.0 Minimum tap implant to device implant spacing
tap_nmos_maTap 0.16 Minimum tap diffusion area
tap_nmos_maTimp 0.36 Minimum tap implant area
tap_nmos_meWellTap 0.0 Minimum well enclosure of tap diffusion
tap_nmos_msTapVolt 0.25 Minimum tap diffusion to thick oxide spacing
tap_nmos_mwItap 0.50 Minimum width of integrated tap
tap_nmos_msItapGate 0.50 Minimum integrated tap spacing to gate
tap_nmos_maItimp 0.36 Minimum integrated tap implant area
tap_nmos_meItimpItap {4C} Minimum integrated tap implant enclosure of tap
tap_nmos_meItimpCont 0.10 Minimum integrated tap implant enclosure of contact
tap_nmos_msTapNtn 0.0 Minimum tap diffusion to NTN spacing

Global Parameters
tap_pmos_msTapDiff 0.0 Minimum tap diffusion to device diffusion spacing
tap_pmos_msTapImpl {3C} Minimum tap diffusion to device implant spacing
tap_pmos_meTimpTap {4C} Minimum tap implant enclosure of tap diffusion
tap_pmos_msTimpDiff 0.0 Minimum tap implant to device diffusion spacing
tap_pmos_msTimpImpl 0.0 Minimum tap implant to device implant spacing
tap_pmos_maTap 0.16 Minimum tap diffusion area
tap_pmos_maTimp 0.36 Minimum tap implant area
tap_pmos_meWellTap {2C} Minimum well enclosure of tap diffusion
tap_pmos_msTapVolt 0.25 Minimum tap diffusion to thick oxide spacing
tap_pmos_mwItap 0.50 Minimum width of integrated tap
tap_pmos_msItapGate 0.50 Minimum integrated tap spacing to gate
tap_pmos_maItimp 0.36 Minimum integrated tap implant area
tap_pmos_meItimpItap {4C} Minimum integrated tap implant enclosure of tap
tap_pmos_meItimpCont 0.10 Minimum integrated tap implant enclosure of contact

Global Parameters
mos_perimGateEdge t Use four sides to calculate ps, pd
mos_aggregateFingers nil Aggregate fingers: affects simM, as,ad,ps,pd
Sep 24, 2008 page 48

Callbacks

MOS Callback Procedures

CDF Callback
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Perforce: $File$
; $Revision$
; $DateTime$
; $Change$
; $Author$
;
; Description: MOS Transistor CDF Callback
;
; Author: Amir Kouchekinia <[email protected]>
; Created: Nov 6 16:41 02
; Modified: Nov 6 16:41 02 14419 amir
; Language: Skill
; Package: Primitive_mos
; MainFun: gpdk180_mosCB
; Status: Experimental (Do Not Distribute)
;
; (C) Copyright 2002, Cadence Design Systems, all rights reserved.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

procedure(gpdk180_mosCB(param "s") ;_May 15 03 amir 5359

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...
Sep 24, 2008 page 49

CDF Macro Definitions


mosParamsA - MOS Parameters (Part A)
CDF macro mosParamsA

CDF parameters
name "model"
prompt "Model Name"
defValue gpdk180_mosValue( ’model ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’model)"
editable "nil"
parseAsCEL "yes"

CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’m )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "simM"
prompt "Simulation Multiplier"
defValue gpdk180_mosValue( ’simM ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 50

CDF macro mosParamsA

CDF parameters
name "l"
prompt "Length"
units "lengthMetric"
defValue gpdk180_mosValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "w"
prompt "Total Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’w ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’w )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "fw"
prompt "Finger Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’fw ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’fw )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 51

CDF macro mosParamsA

CDF parameters
name "simW"
prompt "Simulation Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’simW ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "fingers"
prompt "Fingers"
defValue gpdk180_mosValue( ’fingers ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’fingers )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "threshold"
prompt "Threshold"
units "lengthMetric"
defValue gpdk180_mosValue( ’threshold ?id cdfId ?returnString t )
type "string"
display "t"
callback "gpdk180_mosCB( ’threshold )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "applyThresh"
prompt "Apply Threshold"
defValue nil
type "boolean"
display "t"
callback "gpdk180_mosCB( ’applyThresh )"
Sep 24, 2008 page 52

CDF macro mosParamsA

CDF parameters
name "connectGates"
prompt "Gate Connection"
defValue "None"
choices ’("None" "Top" "Bottom" "Both" "Alternate")
type "radio"
display "t"

CDF parameters
name "connectSD"
prompt "S/D Connection"
defValue "None"
choices ’("None" "Source" "Drain" "Both")
type "radio"
display "gpdk180_mosDisplay(’connectSD)"

CDF parameters
name "sdMtlWidth"
prompt "S/D Metal Width"
units "lengthMetric"
defValue gpdk180_mosValue( ’sdMtlWidth ?id cdfId ?returnString t )
type "string"
display "t"
editable "t"
callback "gpdk180_mosCB( ’sdMtlWidth)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 53

CDF macro mosParamsA

CDF parameters
name "mtlCvg"
prompt "Metal Coverage"
defValue ""
type "string"
display "nil"
callback "gpdk180_mosCB( ’mtlCvg )"

CDF parameters
name "switchSD"
prompt "Switch S/D"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’switchSD)"
callback "gpdk180_mosCB( ’switchSD )"

CDF parameters
name "leftAbut"
prompt "Left Abutment"
defValue 0
type "int"
display "nil"
editable "t"
callback "gpdk180_mosCB( ’leftAbut)"

CDF parameters
name "rightAbut"
prompt "Right Abutment"
defValue 0
type "int"
display "nil"
editable "t"
callback "gpdk180_mosCB( ’rightAbut)"
Sep 24, 2008 page 54

mosParamsTap - MOS Tap Parameters


CDF macro mosParamsTap

CDF parameters
name "tap"
prompt "Bodytie Type"
defValue "None"
choices ’( "None" "Integrated" "Detached" )
type "cyclic"
display "t"
callback "gpdk180_mosCB( ’tap)"

CDF parameters CDF parameters


name "leftTap" name "rightTap"
prompt "Left Tap" prompt "Right Tap"
defValue t defValue nil
type "boolean" type "boolean"
display "gpdk180_mosDisplay( ’leftTap )" display "gpdk180_mosDisplay( ’rightTap )"

CDF parameters CDF parameters


name "bottomTap" name "topTap"
prompt "Bottom Tap" prompt "Top Tap"
defValue nil defValue nil
type "boolean" type "boolean"
display "gpdk180_mosDisplay( ’bottomTap )" display "gpdk180_mosDisplay( ’topTap )"

CDF parameters
CDF parameters
name "tapExtension"
name "tapCntRows"
prompt "Tap Extension"
prompt "Tap Contact Rows"
defValue ""
defValue 1
type "string"
type "int"
display "gpdk180_mosDisplay( ’tapExtension )"
display "gpdk180_mosDisplay( ’tapCntRows )"
callback "gpdk180_mosCB( ’tapExtension )"
Sep 24, 2008 page 55

mosParamsB - MOS Parameters (Part B)


CDF macro mosParamsB

CDF parameters
name "showSimParams"
prompt "Show Sim Parameters"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’showSimParams)"

CDF parameters
name "editAreaPerim"
prompt "Edit Area & Perim"
defValue nil
type "boolean"
display "gpdk180_mosDisplay(’editAreaPerim)"
callback "gpdk180_mosCB( ’editAreaPerim )"

CDF parameters
name "ad"
prompt "Drain diffusion area"
defValue gpdk180_mosValue( ’ad ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’ad)"
callback "gpdk180_mosCB( ’ad )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "as"
prompt "Source diffusion area"
defValue gpdk180_mosValue( ’as ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’as)"
callback "gpdk180_mosCB( ’as )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 56

CDF macro mosParamsB

CDF parameters
name "pd"
prompt "Drain diffusion periphery"
units "lengthMetric"
defValue gpdk180_mosValue( ’pd ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’pd)"
callback "gpdk180_mosCB( ’pd )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "ps"
prompt "Source diffusion periphery"
units "lengthMetric"
defValue gpdk180_mosValue( ’ps ?id cdfId ?returnString t )
type "string"
display "gpdk180_mosDisplay(’ps)"
callback "gpdk180_mosCB( ’ps )"
editable "cdfgData->editAreaPerim->value"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "nrd"
prompt "Drain diffusion res squares"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’nrd )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "nrs"
prompt "Source diffusion res squares"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’nrs )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 57

CDF macro mosParamsB

CDF parameters
name "ld"
prompt "Drain diffusion length"
units "lengthMetric"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’ld )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "ls"
prompt "Source diffusion length"
units "lengthMetric"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’ls )"
editable "t"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "off"
prompt "Device initially off"
type "boolean"
display "gpdk180_mosDisplay( ’off )"
Sep 24, 2008 page 58

CDF macro mosParamsB

CDF parameters
name "Vds"
prompt "Drain source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vds )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "Vgs"
prompt "Gate source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vgs )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "Vbs"
prompt "Bulk source initial voltage"
units "voltage"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’Vbs )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "trise"
prompt "Temp rise from ambient"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’trise )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 59

CDF macro mosParamsB

CDF parameters
name "rdc"
prompt "Additional drain resistance"
units "current"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’rdc )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "rsc"
prompt "Additional source resistance"
units "current"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’rsc )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "dtemp"
prompt "Temperature difference"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’dtemp )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "geo"
prompt "Source/drain selector"
defValue ""
type "string"
display "gpdk180_mosDisplay( ’geo )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 60

CDF macro mosParamsB

CDF parameters
name "pasUpdateParamList"
prompt "PAS Update Param List"
defValue "l"
type "string"
display "nil"
editable "nil"

switch !IC61
CDF parameters
name "lxIgnoredParamsForCAS"
prompt "lxIgnoredParamsForCAS"
defValue "connectGates connectSD mtlCvg leftAbut rightAbut showSimParams switchSD ad as pd ps"
type "string"
display "nil"
editable "nil"

CDF properties
formInitProc "PasCdfFormInit"
doneProc "PasCdfDone"
buttonFieldWidth 340
fieldHeight 35
fieldWidth 500
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "voltage"
paramSimType "DC"
paramEvaluate "nil nil nil t nil"
paramDisplayMode "parameter"
modelLabelSet "vto kp gamma"
opPointLabelSet "id vgs vds gm"
paramLabelSet "-model w l m"
Sep 24, 2008 page 61

mosSimInfo - MOS Simulation Information (common)


CDF macro mosSimInfo

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Width Length As Ad Ps Pd Nrd Nrs ld ls _M Trise)
componentName nil
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil Width simW Length l As as Ad ad Ps ps Pd pd Nrd nrd Nrs nrs _M simM Trise trise Region region)
typeMapping nil
uselib nil

CDF siminfo
simulator ams
propMapping ( nil m simM w simW )
namePrefix ""
isPrimitive t
instParameters (w l as ad ps pd nrd nrs ld ls m trise model)
otherParameters (model)

CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (M L W)
propMapping (nil M m L l W w)
namePrefix "M"

CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (m l w)
permuteRule "(p D S)"
namePrefix "M"
Sep 24, 2008 page 62

CDF macro mosSimInfo

CDF siminfo
simulator spectre
propMapping ( nil m simM w simW )
namePrefix ""
otherParameters (model)
instParameters (w l as ad ps pd nrd nrs ld ls m trise)
termMapping (nil D \:d G \:g S \:s B \:b)
Sep 24, 2008 page 63

mosSimInfoRF
CDF macro mosSimInfoRF

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Width Length fingers simM)
componentName nil
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil Width simW Length l)
typeMapping nil
uselib nil

CDF siminfo
simulator ams
propMapping ( nil w simW )
namePrefix ""
isPrimitive t
instParameters (w l fingers simM)
otherParameters (model)

CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (M L W)
propMapping (nil M m L l W w)
namePrefix "M"

CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (m l w)
permuteRule "(p D S)"
namePrefix "M"
Sep 24, 2008 page 64

CDF macro mosSimInfoRF

CDF siminfo
simulator spectre
propMapping ( nil w simW )
namePrefix ""
otherParameters (model)
instParameters (w l fingers simM)
termMapping (nil D \:d G \:g S \:s B \:b)
Sep 24, 2008 page 65

mos3n - 3 terminal NMOS Transistor CDF

CDF macro mos3n

include macro mosParamsA

include macro mosParamsB

include macro mosSimInfo

CDF siminfo
simulator ads
termOrder (D G S bulkn)

CDF siminfo
simulator ams
termOrder (D G S bulkn)
extraTerminals ((nil name "bulkn" direction "inputOutput" netExpr "[@bulkn:%:gnd!]"))

CDF siminfo CDF siminfo CDF siminfo


simulator spectre simulator auCdl simulator auLvs
termOrder (D G S bulkn) termOrder (D G S bulkn) termOrder (D G S bulkn)
deviceTerminals "D G S B"
Sep 24, 2008 page 66

mos3p - 3 terminal PMOS Transistor CDF

CDF macro mos3p

include macro mosParamsA

include macro mosParamsB

include macro mosSimInfo

CDF siminfo
simulator ads
termOrder (D G S bulkp)

CDF siminfo
simulator ams
termOrder (D G S bulkp)
extraTerminals ((nil name "bulkp" direction "inputOutput" netExpr "[@bulkp:%:vdd!]"))

CDF siminfo CDF siminfo CDF siminfo


simulator spectre simulator auCdl simulator auLvs
termOrder (D G S bulkp) termOrder (D G S bulkp) termOrder (D G S bulkp)
deviceTerminals "D G S B"
Sep 24, 2008 page 67

mos4 - 4 terminal MOS Transistor CDF

CDF macro mos4

include macro mosParamsA

include macro mosParamsTap

include macro mosParamsB

include macro mosSimInfo

CDF siminfo CDF siminfo


simulator ads simulator ams
termOrder (D G S B) termOrder (D G S B)

CDF siminfo CDF siminfo CDF siminfo


simulator spectre simulator auCdl simulator auLvs
termOrder (D G S B) termOrder (D G S B) termOrder (D G S B)
Sep 24, 2008 page 68

mos4RF - 4 terminal RF MOS Transistor CDF

CDF macro mos4RF

include macro mosParamsA

include macro mosParamsTap

include macro mosParamsB

include macro mosSimInfoRF

CDF siminfo CDF siminfo


simulator ads simulator ams
termOrder (D G S B) termOrder (D G S B)

CDF siminfo CDF siminfo CDF siminfo


simulator spectre simulator auCdl simulator auLvs
termOrder (D G S B) termOrder (D G S B) termOrder (D G S B)
Sep 24, 2008 page 69

CDF Definitions MOS Transistor


nmos3
CDF gpdk180 nmos3

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos1" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $nmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $nmos_meWellDiff private Minimum well enclosure of diffusion
Sep 24, 2008 page 70

CDF gpdk180 nmos3

include macro mos3n

CDF siminfo
simulator auLvs
componentName "nmos"

CDF siminfo
simulator auCdl
componentName nil
modelName "nmos"

CDF cellview
symbol pas_std nmos3 symbol
auCdl pas_std nmos3 spectre
auLvs pas_std nmos3 spectre
spectre pas_std nmos3 spectre
ads pas_std nmos3 spectre
Sep 24, 2008 page 71

nmos
CDF gpdk180 nmos

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos1" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $nmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $nmos_meWellDiff private Minimum well enclosure of diffusion
Sep 24, 2008 page 72

CDF gpdk180 nmos

include macro mos4

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "nmos"

CDF cellview
symbol pas_std nmos4 symbol
auCdl pas_std nmos4 symbol
auLvs pas_std nmos4 symbol
spectre pas_std nmos4 symbol
ads pas_std nmos4 symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_nmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_nmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_nmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_nmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_nmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_nmos_maTap private Minimum tap diffusion area
maTimp $tap_nmos_maTimp private Minimum tap implant area
meWellTap $tap_nmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_nmos_mwItap private Minimum width of integrated tap
msItapGate $tap_nmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_nmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_nmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_nmos_meItimpCont private Minimum integrated tap enclosure of contact
Sep 24, 2008 page 73

nmos3hv
CDF gpdk180 nmos3hv

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos25" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $nmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $nmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $nmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $nmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 74

CDF gpdk180 nmos3hv

include macro mos3n

CDF siminfo
simulator auLvs
componentName "nmoshv"

CDF siminfo
simulator auCdl
componentName nil
modelName "nmoshv"

CDF cellview
symbol pas_std nmos3_hv symbol
auCdl pas_std nmos3_hv spectre
auLvs pas_std nmos3_hv spectre
spectre pas_std nmos3_hv spectre
ads pas_std nmos3_hv spectre
Sep 24, 2008 page 75

nmoshv
CDF gpdk180 nmoshv

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos25" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $nmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $nmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $nmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $nmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 76

CDF gpdk180 nmoshv

include macro mos4

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"

CDF cellview
symbol pas_std nmos4_hv symbol
auCdl pas_std nmos4_hv symbol
auLvs pas_std nmos4_hv symbol
spectre pas_std nmos4_hv symbol
ads pas_std nmos4_hv symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_nmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_nmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_nmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_nmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_nmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_nmos_maTap private Minimum tap diffusion area
maTimp $tap_nmos_maTimp private Minimum tap implant area
meWellTap $tap_nmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_nmos_mwItap private Minimum width of integrated tap
msItapGate $tap_nmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_nmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_nmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_nmos_meItimpCont private Minimum integrated tap enclosure of contact
msTapVolt $tap_nmos_msTapVolt public Minimum tap diffusion to thick oxide spacing
Sep 24, 2008 page 77

nmosrf
CDF gpdk180 nmosrf
CDF device params
grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "nmos_rf" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate 1.5 private Minimum channel Width
xwGate 10.00 private Maximum channel Width
mlGate 0.18 private Minimum channel Length
xlGate 0.5 private Maximum channel Length
xnFingers 64 private Maximum number of fingers
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $nmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $nmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $nmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $nmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 78

CDF gpdk180 nmosrf

include macro mos4RF

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"

CDF cellview
symbol baseline_gpdk nmosrf symbol
auCdl baseline_gpdk nmosrf symbol
auLvs baseline_gpdk nmosrf symbol
spectre baseline_gpdk nmosrf symbol
ads baseline_gpdk nmosrf symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_nmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_nmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_nmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_nmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_nmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_nmos_maTap private Minimum tap diffusion area
maTimp $tap_nmos_maTimp private Minimum tap implant area
meWellTap $tap_nmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_nmos_mwItap private Minimum width of integrated tap
msItapGate $tap_nmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_nmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_nmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_nmos_meItimpCont private Minimum integrated tap enclosure of contact
msTapVolt $tap_nmos_msTapVolt public Minimum tap diffusion to thick oxide spacing
Sep 24, 2008 page 79

pmos3
CDF gpdk180 pmos3

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "pmos1" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $pmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
Sep 24, 2008 page 80

CDF gpdk180 pmos3

include macro mos3p

CDF siminfo
simulator auLvs
componentName "pmos"

CDF siminfo
simulator auCdl
componentName nil
modelName "pmos"

CDF cellview
symbol pas_std pmos3 symbol
auCdl pas_std pmos3 spectre
auLvs pas_std pmos3 spectre
spectre pas_std pmos3 spectre
ads pas_std pmos3 spectre
Sep 24, 2008 page 81

pmos
CDF gpdk180 pmos

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "pmos1" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $pmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
Sep 24, 2008 page 82

CDF gpdk180 pmos

include macro mos4

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"

CDF cellview
symbol pas_std pmos4 symbol
auCdl pas_std pmos4 symbol
auLvs pas_std pmos4 symbol
spectre pas_std pmos4 symbol
ads pas_std pmos4 symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_pmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_pmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_pmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_pmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_pmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_pmos_maTap private Minimum tap diffusion area
maTimp $tap_pmos_maTimp private Minimum tap implant area
meWellTap $tap_pmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_pmos_mwItap private Minimum width of integrated tap
msItapGate $tap_pmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_pmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_pmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_pmos_meItimpCont private Minimum integrated tap enclosure of contact
msTapVolt $tap_pmos_msTapVolt public Minimum tap diffusion to thick oxide spacing
Sep 24, 2008 page 83

pmos3hv
CDF gpdk180 pmos3hv

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "pmos25" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.00 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $pmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $pmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $pmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 84

CDF gpdk180 pmos3hv

include macro mos3p

CDF siminfo
simulator auLvs
componentName "pmoshv"

CDF siminfo
simulator auCdl
componentName nil
modelName "pmoshv"

CDF cellview
symbol pas_std pmos3_hv symbol
auCdl pas_std pmos3_hv spectre
auLvs pas_std pmos3_hv spectre
spectre pas_std pmos3_hv spectre
ads pas_std pmos3_hv spectre
Sep 24, 2008 page 85

pmoshv
CDF gpdk180 pmoshv

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "pmos25" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.0 private Maximum channel Width
mlGate {5A} private Minimum channel Length
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $pmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $pmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $pmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 86

CDF gpdk180 pmoshv

include macro mos4

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"

CDF cellview
symbol pas_std pmos4_hv symbol
auCdl pas_std pmos4_hv symbol
auLvs pas_std pmos4_hv symbol
spectre pas_std pmos4_hv symbol
ads pas_std pmos4_hv symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_pmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_pmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_pmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_pmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_pmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_pmos_maTap private Minimum tap diffusion area
maTimp $tap_pmos_maTimp private Minimum tap implant area
meWellTap $tap_pmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_pmos_mwItap private Minimum width of integrated tap
msItapGate $tap_pmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_pmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_pmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_pmos_meItimpCont private Minimum integrated tap enclosure of contact
msTapVolt $tap_pmos_msTapVolt public Minimum tap diffusion to thick oxide spacing
Sep 24, 2008 page 87

CDF gpdk180 pmosrf pmosrf


CDF device params
grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor
model "pmos_rf" private Device Model Name
category "mos" private Library Manager Category
perimGateEdge $mos_perimGateEdge private Use four sides to calculate ps, pd
aggregateFingers $mos_aggregateFingers private Aggregate fingers: affects simM, as,ad,ps,pd

CDF device params


dwGate 2.0 private Default channel width
mwGate 1.5 private Minimum channel Width
xwGate 10.0 private Maximum channel Width
mlGate 0.18 private Minimum channel Length
xlGate 0.5 private Maximum channel Length
xnFingers 64 private Maximum number of fingers
msDiff $mos_msDiff private Minimum diffusion spacing
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meImplCont $pmos_meImplCont private Minimum implant enclosure of contact
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
meVoltDiff $pmos_meVoltDiff private Minimum thick oxide enclosure of thin oxide diffusion
meVoltImpl $pmos_meVoltImpl private Minimum thick oxide enclosure of implant
Sep 24, 2008 page 88

CDF gpdk180 pmosrf

include macro mos4RF

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
componentName nil
modelName "$cell"

CDF cellview
symbol baseline_gpdk pmosrf symbol
auCdl baseline_gpdk pmosrf symbol
auLvs baseline_gpdk pmosrf symbol
spectre baseline_gpdk pmosrf symbol
ads baseline_gpdk pmosrf symbol
ivpcell $lib $cell symbol 5

CDF device params


msTapDiff $tap_pmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_pmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_pmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_pmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_pmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_pmos_maTap private Minimum tap diffusion area
maTimp $tap_pmos_maTimp private Minimum tap implant area
meWellTap $tap_pmos_meWellTap private Minimum well enclosure of tap diffusion
mwItap $tap_pmos_mwItap private Minimum width of integrated tap
msItapGate $tap_pmos_msItapGate private Minimum integrated tap spacing to gate
maItimp $tap_pmos_maItimp private Minimum integrated tap implant area
meItimpItap $tap_pmos_meItimpItap private Minimum integrated tap implant enclosure of tap
meItimpCont $tap_pmos_meItimpCont private Minimum integrated tap enclosure of contact
msTapVolt $tap_pmos_msTapVolt public Minimum tap diffusion to thick oxide spacing
Sep 24, 2008 page 89

PCells PCell SKILL Procedures


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
)
)
)...
Sep 24, 2008 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))...
Sep 24, 2008 page 91

PCell Macros

mos (macro)

pcell macro mos

1: include deviceProps

dpt = PasGetDeviceProps( cv ) ; device property table


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
Sep 24, 2008 page 92

pcell macro mos

4: include

gw = PasCeiling( ( fw / scale ) grid t )


gl = PasCeiling( ( l / scale ) grid t )
gc = max( fix( fingers ) 1 )
mlDiff = mwCont + ( 2.0 * meeDiffCont )
dogbone = ( gw + epsilon ) < mlDiff

awSDM = PasCeiling( ( sdMtlWidth / scale ) grid t )


cntSpan = awSDM - ( 2.0 * meM1Cont )
lwSDM = awSDM
rwSDM = awSDM

tmp = when( cntSpan + epsilon < mwCont


cntSpan = mwCont
awSDM = mwCont + ( 2.0 * meM1Cont )
println("Assigned value for ’sdMtlWidth’ is too small; value is overridden")
)

leftSource = not( switchSD )


rightSource = PasXor( evenp( gc ) switchSD )
leftCnt = nil
rightCnt = nil

lwDiff = nil rwDiff = nil


lhStep = 0 rhStep = 0
Sep 24, 2008 page 93

pcell macro mos

6: include

1: if not( dogbone )

alDiff = gw
dwDiff = max( msGate ( cntSpan + ( 2.0 * msGateCont ) ) ) swDiff = dwDiff

daDC = PasCeiling( ( ( dwDiff - cntSpan ) / 2.0 ) grid t )


saDC = daDC raDC = msGateCont laDC = msGateCont

swStep = 0 swStep = 0 lwStep = 0 rwStep = 0


bhStep = 0 thStep = 0

lwDiff = max( meDiffGate ( meDiffCont + cntSpan + msGateCont ) ) rwDiff = lwDiff

2: if dogbone

alDiff = mlDiff
dwDiff = cntSpan + ( 2.0 * meDiffCont ) swDiff = dwDiff

daDC = meDiffCont saDC = meDiffCont


raDC = meDiffCont laDC = meDiffCont

dwStep = max( msDiffGate ( msGateCont - meDiffCont ) grid )


swStep = dwStep lwStep = dwStep rwStep = dwStep

bhStep = PasCeiling( ( ( alDiff - gw ) / 2.0 ) grid t )


thStep = alDiff - gw - bhStep

lwDiff = max( ( meDiffGate - lwStep ) ( meDiffCont + cntSpan + meDiffCont ) ) rwDiff = lwDiff

9: if leftCnt && rightCnt

connectS = member(connectSD list("Source" "Both"))


connectD = member(connectSD list("Drain" "Both"))
Sep 24, 2008 page 94

pcell macro mos

8: include

tmp = case( leftAbut


(0 leftCnt = t )
( ( -1 1 ) leftCnt = t )
( ( -2 2 ) lwDiff = max( meDiffGate (msGate - msDiffPoly)) lhStep = bhStep )
( ( -3 3 ) laDC = daDC lwDiff = cntSpan + laDC leftCnt = t )
( ( -4 4 ) lwDiff = PasCeiling( (msGate/2.0) grid t ) lhStep = bhStep )
( ( -5 5 ) lwDiff = daDC lhStep = bhStep )
( ( -6 6 ) lwDiff = msDiffPoly lhStep = bhStep )
( ( -7 7 ) lwDiff = max( msDiffGate ( msGateCont - meDiffCont ) ) lhStep = bhStep )
(t error("leftAbut parameter value out of range!") )
)

tmp = case( rightAbut


(0 rightCnt = t )
( ( -1 1 ) rightCnt = t )
( ( -2 2 ) rwDiff = max( meDiffGate (msGate - msDiffPoly)) rhStep = thStep )
( ( -3 3 ) raDC = daDC rwDiff = cntSpan + raDC rightCnt = t )
( ( -4 4 ) rwDiff = PasCeiling( (msGate/2.0) grid t ) rhStep = thStep )
( ( -5 5 ) rwDiff = daDC rhStep = thStep )
( ( -6 6 ) rwDiff = msDiffPoly rhStep = thStep )
( ( -7 7 ) rwDiff = max( msDiffGate ( msGateCont - meDiffCont ) ) rhStep = thStep )
(t error("rightAbut parameter value out of range!") )
)

10: include

gate[1]
Poly
diffg[1]
Oxide
gw

gw

gl

gl boolean lxBlockExtractCheck = t
ref
boolean lxBlockOverlapCheck = t
Sep 24, 2008 page 95

pcell macro mos

11: for f 2 gc

isSource = PasXor( evenp(f) switchSD )


cwDiff = if( isSource then swDiff else dwDiff )

1: if not(dogbone)

gate[f]
diff[f-1]
Poly
diffg[f-1]
Oxide diffg[f]
Oxide Oxide
gw

alDiff gw

gl

gl
cwDiff
boolean lxBlockOverlapCheck = t
boolean lxBlockExtractCheck = t

1: if dogbone

cwStep = if( isSource then swStep else dwStep )

gate[f]
diff[f-1]
Poly
diffg[f-1]
Oxide diffg[f]
Oxide Oxide Oxide Oxide
gw

gw alDiff gw gw

gl

gl
cwDiff
cwStep
cwStep
boolean lxBlockOverlapCheck = t
0.0 bhStep 0.0 bhStep
boolean lxBlockExtractCheck = t
Sep 24, 2008 page 96

pcell macro mos

12: include

if not( dogbone && leftCnt ) if dogbone && leftCnt

tmp = if( dogbone then gw else alDiff )

diff[0] diff[0]
diffg[1] diffg[1]
Oxide Oxide
Oxide Oxide Oxide

tmp alDiff gw

lwDiff lwDiff
lwStep

0 bhStep

if not( dogbone && rightCnt ) if dogbone && rightCnt

tmp = if( dogbone then gw else alDiff )

diff[gc] diff[gc]
diffg[gc]
diffg[gc] Oxide Oxide
Oxide Oxide
Oxide

tmp gw alDiff

rwDiff rwDiff

0 bhStep
rwStep
Sep 24, 2008 page 97

pcell macro mos

13: include

1: include

tmp = dpt->msDiff || 0.0

diff[0] Oxide Oxide diff[gc]

list abutAccessDir=list("left") list abutAccessDir=list("right")


string abutFunction="gpdk180_mosAbut" string abutFunction="gpdk180_mosAbut"
float gateWidth=gw float gateWidth=gw
string abutParam="leftAbut" string abutParam="rightAbut"
boolean isSource=leftSource boolean isSource=rightSource
list vxlInstSpacingDir=list("left") list vxlInstSpacingDir=list("right")
float vxlInstSpacingRule=tmp float vxlInstSpacingRule=tmp

2: if leftSource 2: if not( leftSource )

diff[0] diff[0]
Oxide Oxide

"S" inOut "D" inOut


none none
pin name "left" pin name "left"
must group source[0] must group drain[0]

2: if rightSource 2: if not( rightSource )

tmp = if( connectS then 0 else gc ) tmp = if( connectD then 0 else gc )

diff[gc] diff[gc]
Oxide Oxide

"S" inOut "D" inOut


none none
pin name "right" pin name "right"
must group source[tmp] must group drain[tmp]
Sep 24, 2008 page 98

pcell macro mos

14: include

ySep = meeDiffCont - meeM1Cont xlM1 = gw - ySep - ySep


mlM1 = mwCont + (2.0 * meeM1Cont) mtlCL = gpdk180_evalMtlCvg( mtlCvg grid )

for f 0 gc

1: if ( ( f > 0 && f < gc ) || ( f == 0 && leftCnt ) || ( f == gc && rightCnt ) ) mtlCvg

isSource = PasXor( evenp(f) switchSD )


delta = or( get( mtlCL concat( f ) ) list( 0.0 0.0 ) )
botSep = ySep + car( delta )
topSep = ySep + cadr( delta )
alM1 = alDiff - topSep - botSep
xSep = cond( ( f == 0 laDC ) ( f == gc raDC ) ( isSource saDC ) ( t daDC ) ) - meM1Cont
awM1 = cond( ( f==0 lwSDM ) ( f==gc rwSDM ) ( t awSDM ) )

1: if alM1 + epsilon < mlM1

alM1 = xlM1 botSep = ySep


tmp = printf("Overconstraint metal coverage on column %d\n" f)

2: if f == 0 2: if f != 0

diff[f] diff[f]
awM1 awM1

Oxide Oxide

Metal1 Metal1

alM1 alM1

metal[f] metal[f]
xSep botSep xSep botSep
Sep 24, 2008 page 99

pcell macro mos

mtlCvg

3: include

leftSep = cond( ( f==0 meM1Cont + lwSDM - awSDM ) ( t meM1Cont ) )


rightSep = cond( ( f==gc meM1Cont + rwSDM - awSDM ) ( t meM1Cont ) )

mwCont param mtlCvg


relative y
Metal1 userFunc "gpdk180_mtlCvgUserFunc"

mwCont
rightSep meeM1Cont

int col = f
int cols = gc + 1
space msCont msCont float minLength = mlM1
float maxLength = xlM1
mwCont

leftSep meeM1Cont

param mtlCvg
metal[f]
relative y
mwCont userFunc "gpdk180_mtlCvgUserFunc"

4: if isSource 4: if not(isSource)

tmp = if( connectS then 0 else f ) tmp = if( connectD then 0 else f )

Metal1 metal[f] Metal1 metal[f]

"S" inOut "D" inOut


all all
must group source[tmp] must group drain[tmp]
Sep 24, 2008 page 100

pcell macro mos

16: if leftCnt && rightCnt

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]

"D" inOut
awSDM
xSep 0 none
must group drain[0]

car(delta) + msM1

Metal1
botMx[f]

if connectS && PasXor( evenp(f) switchSD)

topMx[f]
Metal1

cadr(delta) + msM1

awSDM "S" inOut


xSep 0
none
must group source[0]

metal[f]

Metal1
Sep 24, 2008 page 101

pcell macro mos

connectSD

if connectS connectS

1: include
bi = if( switchSD then 1 else 0 )
ei = if( PasXor( evenp( gc ) switchSD ) then gc else gc - 1 )

2: include

<-Metal1->

0 awSDM
Metal1 Metal1
topMx[bi] topMx[ei]

"S" inOut
left right top
must group source[0]

if connectD connectD

1: include
bi = if( switchSD then 0 else 1 )
ei = if( PasXor( evenp( gc ) switchSD ) then gc - 1 else gc )

2: include

Metal1 Metal1

botMx[bi] botMx[ei]
<-Metal1->
0 awSDM

"D" inOut
left right bottom
must group drain[0]
Sep 24, 2008 page 102

pcell macro mos

17: include polyExt

connectTG = member( connectGates list( "Top" "Both" ) )


connectBG = member( connectGates list( "Bottom" "Both" ) )
alternateGC = equal( connectGates "Alternate" )

topExt = 0 botExt = 0 topPinExt = 0 botPinExt = 0


tmp = if( connectTG || alternateGC then
topExt = msM1 + meM1Cont - mePolyCont + meeM1Cont - meeDiffCont
when( connectS topExt = topExt + msM1 + awSDM )
topExt = max(msDiffPoly topExt) + thStep
else
if( connectBG || alternateGC then topExt = mxGate
else topExt = msDiffPoly + thStep topPinExt = max(mxGate - topExt grid) )
)

tmp = if( connectBG || alternateGC then


botExt = msM1 + meM1Cont - mePolyCont + meeM1Cont - meeDiffCont
when( connectD botExt = botExt + msM1 + awSDM )
botExt = max(msDiffPoly botExt) + bhStep
else
if( connectTG || alternateGC then botExt = mxGate
else botExt = msDiffPoly + bhStep botPinExt = max(mxGate - botExt grid) )
)

2: include

polyEnc = PasSizeSpacing( nil ?top ( topExt + topPinExt - thStep )


?bottom ( botExt + botPinExt - bhStep) )

3: for f 1 gc polyExtLoop

topSep = if( alternateGC && f == gc && oddp(f) then mxGate else topExt )
botSep = if( alternateGC && ( f ==1 || ( f == gc && evenp(f) ) ) then mxGate else botExt )

topGx[f]
Poly gate[f]
Poly
botGx[f]
topSep Poly

gl botSep

boolean lxBlockOverlapCheck = t gl
Sep 24, 2008 page 103

pcell macro mos

polyExtLoop

2: if not(connectTG || connectBG || alternateGC)

topGp[f] topGx[f] botGx[f] botGp[f]


Poly Poly Poly Poly

topPinExt botPinExt

gl gl

"G" inOut "G" inOut


top bottom
weak group gatet[f] weak group gateb[f]
must group gate[f] must group gate[f]

18: if ( connectTG || connectBG || alternateGC) connectG

awPoly = mwCont + ( 2.0 * mePolyCont )


mlPoly = mwCont + ( 2.0 * meePolyCont )
leftSep = 0 rightSep = 0
tmp = when( gc == 1 && mlPoly > gl
leftSep = PasCeiling( ( ( mlPoly - gl ) / 2.0 ) grid t )
rightSep = mlPoly - gl - leftSep
)
polyEnc = PasSizeSpacing( polyEnc ?left leftSep ?right rightSep )
awM1 = mwCont + ( 2.0 * meM1Cont )
hSep = meePolyCont - meeM1Cont
vSep = mePolyCont - meM1Cont
ei = if( alternateGC then max(gc - 1 1) else 1 )

2: if connectTG || alternateGC

polyEnc = PasSizeSpacing( polyEnc ?top awPoly )

2: if connectBG || ( alternateGC && gc > 2 )

polyEnc = PasSizeSpacing( polyEnc ?bottom awPoly )

3: for f 1 ei connectGLoop

index = if( alternateGC then min(f + 1 gc) else gc )


Sep 24, 2008 page 104

pcell macro mos

connectGLoop

2: if connectTG || (alternateGC && oddp(f))

meeM1Cont meM1Cont hSep vSep

topGC[f]
mwCont
<-Poly->

Cont[] Cont[]

mwCont mwCont

<-Metal1->

space msCont msCont


mwCont rightSep awPoly
hSep vSep meeM1Cont meM1Cont
leftSep 0

Poly Poly
"G" inOut
left right top
topGx[f] must group gct[f] topGx[index]

2: if connectBG || (alternateGC && evenp(f))

botGx[f] Poly "G" inOut Poly botGx[index]


left right bottom
must group gcb[f]

leftSep 0
hSep vSep meeM1Cont meM1Cont
rightSep awPoly
mwCont
space msCont msCont

Cont[] Cont[]

mwCont mwCont
<-Metal1->

<-Poly->
mwCont
botGC[f]

meeM1Cont meM1Cont hSep vSep


Sep 24, 2008 page 105

mos_nplus (macro) mos_pplus (macro)


pcell macro mos_implant
Pcell Macro Table
$cell $pcLayer1
mos_nplus Nimp
mos_pplus Pimp

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 topSep = meImplDiff + rhStep

leftSep = cond( rightSep = cond(


( abs( leftAbut ) < 3 meImplDiff ) ( abs( rightAbut ) < 3 meImplDiff )
( abs( leftAbut ) > 5 -meImplDiff ) ( abs( rightAbut ) > 5 -meImplDiff )
(t0)) (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
Sep 24, 2008 page 106

pcell macro mos_implant

implant

2: if meImplGate || meImplPoly implantGate

topSep = if( meImplPoly then polyEnc->top + meImplPoly + thStep


else meeImplGate )
botSep = if( meImplPoly then polyEnc->bottom + meImplPoly + bhStep
else meeImplGate )

implEnc = PasConstrainSpacing( implEnc ?top ( topSep - thStep )


?bottom ( botSep - bhStep ) )

leftSep = cond(
( leftAbut ==0 polyEnc->left + ( meImplPoly || meImplGate ) )
( abs( leftAbut ) < 3 lwDiff + meImplDiff )
( abs( leftAbut ) > 5 lwDiff - meImplDiff )
( t lwDiff ) )

rightSep = cond(
( rightAbut ==0 polyEnc->right + ( meImplPoly || meImplGate ) )
( abs( rightAbut ) < 3 rwDiff + meImplDiff )
( abs( rightAbut ) > 5 rwDiff - meImplDiff )
( t rwDiff ) )
Sep 24, 2008 page 107

pcell macro mos_implant

implantGate

2: include

tmp = meImplDiff + thStep

<-$pcLayer1->

Poly Poly

rightSep topSep

leftSep tmp

topGx[1] topGx[gc]

3: include

tmp = meImplDiff + bhStep


botGx[1] botGx[gc]
Poly Poly
leftSep tmp

rightSep botSep

<-$pcLayer1->
Sep 24, 2008 page 108

mos_rf (macro)
pcell macro mos_rf

2: include

meRfDiff = dpt->meVoltDiff
meRfImpl = dpt->meVoltImpl

22: include mos_rf

rfEnc = PasSizeSpacing( nil ?all meVoltDiff )

1: if meRfImpl

rfEnc = PasConstrainSpacing( rfEnc ?top ( implEnc->top + meRfImpl )


?bottom ( implEnc->bottom + meRfImpl )
?left ( implEnc->left + meRfImpl )
?right ( implEnc->right ) + meRfImpl )

2: include

botRfSep = rfEnc->bottom + lhStep


topRfSep = rfEnc->top + rhStep

<-RFdummy->
Oxide Oxide
rfEnc->left botRfSep diff[0]
rfEnc->right topRfSep
diff[gc]
Sep 24, 2008 page 109

mos_volt (macro)
pcell macro mos_volt

2: include

meVoltDiff = dpt->meVoltDiff
meVoltImpl = dpt->meVoltImpl

22: include mos_volt

voltEnc = PasSizeSpacing( nil ?all meVoltDiff )

1: if meVoltImpl

voltEnc = PasConstrainSpacing( voltEnc ?top ( implEnc->top + meVoltImpl )


?bottom ( implEnc->bottom + meVoltImpl )
?left ( implEnc->left + meVoltImpl )
?right ( implEnc->right ) + meVoltImpl )

2: include

botSep = voltEnc->bottom + lhStep


topSep = voltEnc->top + rhStep

<-ThickOxide->
Oxide Oxide
voltEnc->left botSep diff[0]
voltEnc->right topSep
diff[gc]
Sep 24, 2008 page 110

mos_volt_tap (macro)
pcell macro mos_volt_tap

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) )

mos_nw (macro) mos_pw (macro)


pcell macro mos_well

Pcell Macro Table


$cell $pcLayer1
mos_nw Nwell
mos_pw Pwell

2: include

meWellDiff = dpt->meWellDiff

40: include

botSep = meWellDiff + lhStep


topSep = meWellDiff + rhStep

<-$pcLayer1-> well
Oxide Oxide
meWellDiff botSep diff[0]
meWellDiff topSep
diff[gc]
Sep 24, 2008 page 111

mos_nw_tap (macro) mos_nbl_tap (macro)


mos_pw_tap (macro) mos_cap_tap (macro)
pcell macro mos_well_tap

Pcell Macro Table


$cell $pcLayer1 $diffEnc $tapEnc $name
mos_nw_tap Nwell meWellDiff meWellTap well
mos_pw_tap Pwell meWellDiff meWellTap well
mos_nbl_tap Nburied meNblDiff meNblTap nbl
mos_cap_tap Capdum meCapDiff meCapTap cap

2: include

$diffEnc = dpt->$diffEnc $tapEnc = dpt->$tapEnc

40: include

botSep = $diffEnc + lhStep


topSep = $diffEnc + rhStep

diff[0] $tapEnc $tapEnc


topTap
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
botTap
none $tapEnc $tapEnc diff[gc]
Sep 24, 2008 page 112

mosItap (macro)

pcell macro mosItap

Pcell Macro Table


$cell $pcLayer1
mosItap_nplus Nimp
mosItap_pplus Pimp

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 2: if rightItap

leftSep = -awItap rightSep = -awItap


Sep 24, 2008 page 113

pcell macro mosItap

16: if leftItap || rightItap

leftSep = meM1Cont
rightSep = meM1Cont + mwCont

if leftItap

mwCont
Metal1

rightSep meeM1Cont mwCont

space msCont msCont


mwCont

leftSep meeM1Cont

metal[0] mwCont

if rightItap

mwCont
Metal1

mwCont rightSep meeM1Cont


Cont[]

space msCont msCont


mwCont
Cont[]
leftSep meeM1Cont

metal[gc] mwCont
Sep 24, 2008 page 114

pcell macro mosItap

15: include

if leftItap if rightItap

<-Metal1-> <-Metal1->
metal[0] metal[gc]
Metal1 Metal1
"B" inOut "B" inOut
left top bottom left top bottom

21: if leftItap || rightItap

xSep = meItimpItap

2: if maItimp

xSep = max( meItimpItap PasCeiling( ( maItimp / ( alDiff + ( 2 * meItimpItap ) ) ) - awItap grid t ) )

3: if leftItap 4: if rightItap

( awItap - lwDiff ) meItimpItap ( awItap - rwDiff ) meItimpItap

<-$pcLayer1-> <-$pcLayer1->

Oxide Oxide
diff[0] diff[gc]

xSep meItimpItap xSep meItimpItap


Sep 24, 2008 page 115

mosTap (macro)

pcell macro mosTap

deTap = tap == "Detached" && ( leftTap || rightTap || topTap || bottomTap )

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 )
Sep 24, 2008 page 116

pcell macro mosTap

connectS
3: if topTap

tmp = mwM1 + ( 2 * msM1 ) + meM1Cont - meDiffCont + meeM1Cont - meeDiffCont


tapSp = PasConstrainSpacing( tapSp ?top tmp )

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 ) )
Sep 24, 2008 page 117

pcell macro mosTap

31: if deTap && ( topTap || bottomTap )

lxSep = if( leftTap then tapSp->left + awTap else 0.0)


rxSep = if( rightTap then tapSp->right + awTap else 0.0)

if topTap

param tapExtension
lySep = tapSp->top + lhStep relative y
dispName Top Tap Separation
rySep = tapSp->top + rhStep
dispExpr tapExt->top
userData list( nil ’side ’top )
userFunc "gpdk180_mosTapUserFunc"

<-Oxide-> topTap

lxSep lySep rxSep rySep + awTap


Oxide Oxide
diff[0]

diff[gc]

if bottomTap

Oxide Oxide
diff[gc]

diff[0]

lxSep lySep rxSep rySep + awTap


<-Oxide->

botTap

param tapExtension
lySep = tapSp->bottom + lhStep relative y
dispName Bottom Tap Separation
rySep = tapSp->bottom + rhStep
dispExpr tapExt->bottom
userData list( nil ’side ’bottom )
userFunc "gpdk180_mosTapUserFunc"
Sep 24, 2008 page 118

pcell macro mosTap

31: if deTap && ( leftTap || rightTap )

tySep = if( topTap then tapSp->top else 0.0 )


bySep = if( bottomTap then tapSp->bottom else 0.0 )
tapWidth = awTap

if maTap && not( topTap || bottomTap )

tapWidth = max( tapWidth PasCeiling( ( maTap / alDiff ) grid ) )

if leftTap

tySep = tySep + lhStep


bySep = bySep + lhStep

<-Oxide->
tapSp->left tySep

Oxide
param tapExtension
diff[0]
relative x
dispName Left Tap Separation
dispExpr tapExt->left
userData list( nil ’side ’left )
userFunc "gpdk180_mosTapUserFunc" tapSp->left + tapWidth bySep

leftTap

if rightTap

tySep = tySep + rhStep


bySep = bySep + rhStep

<-Oxide->
tapSp->right tySep

Oxide param tapExtension


diff[gc] relative x
dispName Right Tap Separation
dispExpr tapExt->right
userData list( nil ’side ’right )
userFunc "gpdk180_mosTapUserFunc"
tapSp->right + tapWidth bySep

rightTap
Sep 24, 2008 page 119

pcell macro mosTap

32: if deTap && ( topTap || bottomTap )

xSep = meDiffCont - meeM1Cont


ySep = meDiffCont - meM1Cont

if topTap

space msCont msCont 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 mwCont

"B" inOut
<-Metal1-> xSep ySep
all
<-Oxide->
mwCont mwCont

meeM1Cont meM1Cont
Sep 24, 2008 page 120

pcell macro mosTap

32: if deTap && ( leftTap || rightTap ) leftRightTap

xSep = meDiffCont - meM1Cont


ySep = meDiffCont - meeM1Cont
tySep = if( topTap then -xSep else ySep )
bySep = if( bottomTap then -xSep else ySep )
tcSep = if( topTap then msCont - meM1Cont else meeM1Cont )
bcSep = if( bottomTap then msCont - meM1Cont else meeM1Cont )

if leftTap

mwCont
leftTap
<-Oxide->

xSep tySep
Cont[]

mwCont
meM1Cont tcSep
"B" inOut
all
space msCont msCont
<-Metal1->

meM1Cont bcSep Cont[]

mwCont

xSep bySep

mwCont
Sep 24, 2008 page 121

pcell macro mosTap

leftRightTap

if rightTap

mwCont

rightTap
<-Oxide->

xSep tySep
Cont[]

mwCont
meM1Cont tcSep

"B" inOut
all
space msCont msCont <-Metal1->

Cont[]
meM1Cont bcSep
mwCont

xSep bySep

mwCont
Sep 24, 2008 page 122

mosTap_pplus (macro)
pcell macro mosTap_pplus

33: if deTap && ( topTap || bottomTap )

if topTap if bottomTap

meTimpTap meTimpTap meTimpTap meTimpTap

<-Pimp-> <-Pimp->

<-Oxide-> <-Oxide->

meTimpTap meTimpTap meTimpTap meTimpTap


topTap
botTap

33: if deTap && ( leftTap || rightTap )

tySep = if( topTap then -meTimpTap else meTimpTap )


bySep = if( bottomTap then -meTimpTap else meTimpTap )

if leftTap if rightTap

meTimpTap tySep meTimpTap tySep

leftTap rightTap
<-Pimp-> <-Pimp->

<-Oxide-> <-Oxide->

meTimpTap bySep meTimpTap bySep


Sep 24, 2008 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-> <-Oxide->

meTimpTap meTimpTap meTimpTap meTimpTap


topTap
botTap

33: if deTap && ( leftTap || rightTap )

tySep = if( topTap then -meTimpTap else meTimpTap )


bySep = if( bottomTap then -meTimpTap else meTimpTap )

if leftTap if rightTap

meTimpTap tySep meTimpTap tySep

leftTap rightTap
<-Nimp-> <-Nimp->

<-Oxide-> <-Oxide->

meTimpTap bySep meTimpTap bySep


Sep 24, 2008 page 124

PCell Devices

pcell gpdk180 nmos3 nmos3 pcell gpdk180 pmos3 pmos3


PCell formal params PCell formal params
fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_pplus
include macro mos_nw

pcell gpdk180 nmos3hv nmos3hv pcell gpdk180 pmos3hv pmos3hv


PCell formal params PCell formal params
fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_pplus
include macro mos_nw
include macro mos_volt include macro mos_volt
Sep 24, 2008 page 125

pcell gpdk180 nmos nmos pcell gpdk180 pmos pmos


PCell formal params PCell formal params
fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF
tap string CDF tap string CDF
topTap boolean CDF topTap boolean CDF
bottomTap boolean CDF bottomTap boolean CDF
leftTap boolean CDF leftTap boolean CDF
rightTap boolean CDF rightTap boolean CDF
tapExtension string CDF tapExtension string CDF
tapCntRows int CDF tapCntRows int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_pplus
include macro mos_nw_tap
include macro mosItap_pplus include macro mosItap_nplus
include macro mosTap include macro mosTap
include macro mosTap_pplus include macro mosTap_nplus
Sep 24, 2008 page 126

pcell gpdk180 nmoshv nmoshv pcell gpdk180 pmoshv pmoshv


PCell formal params PCell formal params
fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF
tap string CDF tap string CDF
topTap boolean CDF topTap boolean CDF
bottomTap boolean CDF bottomTap boolean CDF
leftTap boolean CDF leftTap boolean CDF
rightTap boolean CDF rightTap boolean CDF
tapExtension string CDF tapExtension string CDF
tapCntRows int CDF tapCntRows int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_pplus
include macro mos_nw_tap
include macro mosItap_pplus include macro mosItap_nplus
include macro mosTap include macro mosTap
include macro mosTap_pplus include macro mosTap_nplus
include macro mos_volt_tap include macro mos_volt_tap
Sep 24, 2008 page 127

pcell gpdk180 nmosrf nmosrf pcell gpdk180 pmosrf pmosrf


PCell formal params PCell formal params
fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF
tap string CDF tap string CDF
topTap boolean CDF topTap boolean CDF
bottomTap boolean CDF bottomTap boolean CDF
leftTap boolean CDF leftTap boolean CDF
rightTap boolean CDF rightTap boolean CDF
tapExtension string CDF tapExtension string CDF
tapCntRows int CDF tapCntRows int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_pplus
include macro mos_rf include macro mos_rf
include macro mosItap_pplus include macro mos_nw_tap
include macro mosTap include macro mosItap_nplus
include macro mosTap_pplus include macro mosTap
include macro mos_volt_tap include macro mosTap_nplus
include macro mos_volt_tap
Sep 24, 2008 page 128

Library RESISTOR Definitions


Sep 24, 2008 page 129

Global Resistor Parameters

Global Parameters
nplus_rho 50 Sheet Rho for nplusres
pplus_rho 158 Sheet Rho for pplusres
poly_rho 7.5 Sheet Rho for polyres
polyh_rho 352 Sheet Rho for polyhres
nwell_rho 415 Sheet Rho for nwellres
m1_rho 0.01 Sheet Rho for nwellres
m2_rho 0.01 Sheet Rho for nwellres
m3_rho 0.01 Sheet Rho for nwellres
m4_rho 0.01 Sheet Rho for nwellres
m5_rho 0.01 Sheet Rho for nwellres
m6_rho 0.01 Sheet Rho for nwellres
Sep 24, 2008 page 130

Poly Resistor

Global Parameters
rpoly_mwDevice 0.6 Minimum poly resistor width
rpoly_mlDevice 0.6 Minimum poly resistor length
rpoly_mnSquares 1 Minimum number of squares
rpoly_mwRes {5A} Minimum poly width
rpoly_msRes {5B} Minimum poly spacing
rpoly_mwCont {6A} Minimum & maximum contact width
rpoly_msCont {6B} Minimum contact spacing
rpoly_meResCont {6D} Minimum poly enclosure of contact
rpoly_meeResCont {6D} Minimum poly end enclosure of contact
rpoly_mwM1 {7A} Minimum metal 1 width
rpoly_msM1 {7B} Minimum metal 1 spacing
rpoly_meM1Cont {7C} Minimum metal 1 enclosure of contact
rpoly_meeM1Cont {7C} Minimum metal 1 end enclosure of contact

Global Parameters
rnpoly_meImplRes 0.0 Minimum n+ implant enclosure of resistor
rppoly_meImplRes 0.0 Minimum p+ implant enclosure of resistor
rpoly_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
rpoly_meSbRes 0.0 Minimum Sb enclosure of resistor
rpoly_msSbCont 0.0 Minimum Sb to contact spacing
rpoly_msSbRes 0.0 Minimum Sb to poly spacing
rppoly_meWellRes 0.0 Minimum well enclosure of resistor
Sep 24, 2008 page 131

Diffusion Resistor

Global Parameters
rdiff_mwDevice 0.6 Minimum diff resistor width
rdiff_mlDevice 0.6 Minimum diff resistor length
rdiff_mnSquares 1 Minimum number of squares
rdiff_mwRes {2A} Minimum diffusion width
rdiff_msRes {2B} Minimum diffusion spacing
rdiff_mwCont {6A} Minimum & maximum contact width
rdiff_msCont {6B} Minimum contact spacing
rdiff_meResCont {6C} Minimum diff enclosure of contact
rdiff_meeResCont {6C} Minimum diff end enclosure of contact
rdiff_mwM1 {7A} Minimum metal 1 width
rdiff_msM1 {7B} Minimum metal 1 spacing
rdiff_meM1Cont {7C} Minimum metal 1 enclosure of contact
rdiff_meeM1Cont {7C} Minimum metal 1 end enclosure of contact

Global Parameters
rndiff_meImplRes {3C} Minimum n+ implant enclosure of resistor
rpdiff_meImplRes {4C} Minimum p+ implant enclosure of resistor
rdiff_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
rdiff_meSbRes 0.0 Minimum Sb enclosure of resistor
rdiff_msSbCont 0.0 Minimum Sb to contact spacing
rdiff_msSbRes 0.0 Minimum Sb to diff spacing
rpdiff_meWellRes {2C} Minium well enclosure of resistor
Sep 24, 2008 page 132

NWell Resistor

Global Parameters
rnw_mwDevice 1.6 Minimum diff resistor width
rnw_mlDevice 2.0 Minimum diff resistor length
rnw_mnSquares 1 Minimum number of squares
rnw_mwRes {1A} Minimum nwell width
rnw_msRes {1B} Minimum nwell spacing
rnw_mwDiff {2A} Minimum diffusion width
rnw_msDiff {2B} Minimum diffusion spacing
rnw_meResDiff {2C} Minimum nwell enclosure of diffusion
rnw_meImplDiff {3C} Minimum implant enclosure of diffusion
rnw_mwCont {6A} Minimum & maximum contact width
rnw_msCont {6B} Minimum contact spacing
rnw_meDiffCont {6C} Minimum diff enclosure of contact
rnw_meeDiffCont {6C} Minimum diff end enclosure of contact
rnw_mwM1 {7A} Minimum metal 1 width
rnw_msM1 {7B} Minimum metal 1 spacing
rnw_meM1Cont {7C} Minimum metal 1 enclosure of contact
rnw_meeM1Cont {7C} Minimum metal 1 end enclosure of contact

Global Parameters
rnw_meIdRes 0.05 Minimum recognition layer enclosure of resistor body
Sep 24, 2008 page 133

Callbacks
Resistor Callback Procedures

CDF Callback

procedure(gpdk180_resCB(param "s") ;_Feb 21 03 amir 606


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
...
Sep 24, 2008 page 134

Resistor Spectre netlist procedure


CDF Callback
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; File: ptag_resNetlistProc.il
;
; Description: Custom resistor netlist routine to handle series and
; parallel resistor configuration correctly.
; This routine expects the following parameter
; to be defined on the resistor CDF.
;
; segments - int
; connection - cyclic field ("Parallel" && "Series")
; sl - string
; l - string
; w - string
;
; It will create a resistor instantiation for each
; series or parallel resistor segment.
; The series configuration is a little more trickier
; since it has to create some dummy nets on the
; fly. It will check to make sure those nets do
; not conflict with any existing nets.
;
; Example of a series configuration:
; One single resistor in schematic:
; connection = "Series"
; sl = 83.335u
; w = 2u
; segments = 4
; model = rnpoly
;
; Resulting Spectre Netlist:
;
; //Series configuration of R0
; R0_1__dmy0 a R0_1__dmy486 rnpoly l=83.335u w=2u dw=0.0 m=1
; R0_2__dmy0 R0_1__dmy486 R0_2__dmy486 rnpoly l=83.335u w=2u dw=0.0 m=1
; R0_3__dmy0 R0_2__dmy486 R0_3__dmy486 rnpoly l=83.335u w=2u dw=0.0 m=1
; R0_4__dmy0 R0_3__dmy486 x_1 rnpoly l=83.335u w=2u dw=0.0 m=1
; //End of R0
;
; Example of a parallel configuration:
; One single resistor in schematic:
; connection = "Parallel"
; sl = 33.335u
; w = 2u
; segments = 2
; model = rnpoly
;
; Resulting Spectre Netlist:
; // Parallel configuration of R2...
Sep 24, 2008 page 135

CDF Macro Definitions

resParamsA - Resistor CDF Parameters (Part A)

CDF macro resParamsA

CDF parameters
name "resType"
prompt "Resistor type"
defValue "$cell"
type "string"
display "nil"
editable "nil"

CDF parameters
name "calculatedParam"
prompt "Calculated Parameter"
defValue "Length"
choices ’("Resistance" "Length")
type "radio"
display "t"
callback "gpdk180_resCB( ’calculatedParam )"

CDF parameters
name "model"
prompt "Model Name"
defValue gpdk180_resValue( ’model ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’model)"
editable "nil"
parseAsCEL "yes"

CDF parameters
name "r"
prompt "Total Resistance"
units "resistance"
defValue gpdk180_resValue( ’r ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Resistance\")"
callback "gpdk180_resCB( ’r )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 136

CDF macro resParamsA

CDF parameters
name "w"
prompt "Width"
units "lengthMetric"
defValue gpdk180_resValue( ’w ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Width\")"
callback "gpdk180_resCB( ’w )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 137

resParamsB_uniSeg - Resistor CDF Parameters (Part B)

CDF macro resParamsB_uniSeg

CDF parameters
name "l"
prompt "Length"
units "lengthMetric"
defValue gpdk180_resValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Length\")"
callback "gpdk180_resCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_resCB( ’m )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "s"
prompt "S Factor"
defValue "1"
type "string"
display "t"
editable "t"
callback "gpdk180_resCB( ’s )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 138

resParamsB_multiSeg - Resistor CDF Parameters (Part B)

CDF macro resParamsB_multiSeg

CDF device params


segmented t private Segmented Flag (do not modify)

CDF parameters
name "l"
prompt "Total Length"
units "lengthMetric"
defValue gpdk180_resValue( ’l ?id cdfId ?returnString t )
type "string"
display "t"
editable "nil"
callback "gpdk180_resCB( ’l )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "sl"
prompt "Segment Length"
units "lengthMetric"
defValue gpdk180_resValue( ’sl ?id cdfId ?returnString t )
type "string"
display "t"
editable "nequal(cdfgData->calculatedParam->value \"Length\")"
callback "gpdk180_resCB( ’sl )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "effL"
prompt "Effective Length"
units "lengthMetric"
defValue gpdk180_resValue( ’sl ?id cdfId ?returnString t )
type "string"
display "nil"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 139

CDF macro resParamsB_multiSeg

CDF parameters
name "segments"
prompt "Number of Segments"
defValue gpdk180_resValue( ’segments ?id cdfId ?returnString nil)
type "int"
display "t"
callback "gpdk180_resCB( ’segments )"

CDF parameters
name "connection"
prompt "Connection"
type "cyclic"
defValue gpdk180_resValue( ’connection ?id cdfId )
choices gpdk180_resValue( ’connection ?id cdfId ?type ’choices )
display "t"
callback "gpdk180_resCB( ’connection )"

CDF parameters
name "ssegs"
prompt "Series Segments"
defValue gpdk180_resValue( ’ssegs ?id cdfId ?returnString nil)
type "int"
display "nil"
editable "nil"
callback "gpdk180_resCB( ’ssegs )"

CDF parameters
name "psegs"
prompt "Parallel Segments"
defValue gpdk180_resValue( ’psegs ?id cdfId ?returnString nil)
type "int"
display "nil"
editable "nil"
callback "gpdk180_resCB( ’psegs )"
Sep 24, 2008 page 140

resParamsC - Resistor CDF Parameters (Part C)


CDF macro resParamsC

CDF parameters
name "cntRows"
prompt "Contact Rows"
defValue gpdk180_resValue( ’cntRows ?id cdfId ?returnString nil)
type "int"
display "nil"
callback "gpdk180_resCB( ’cntRows )"

CDF parameters
name "leftDummy"
prompt "Left Dummy"
type "boolean"
defValue nil
display "t"

CDF parameters
name "rightDummy"
prompt "Right Dummy"
type "boolean"
defValue nil
display "t"

CDF parameters
name "cntOnDummy"
prompt "Contact on Dummy"
type "boolean"
defValue t
display "gpdk180_resDisplay( ’cntOnDummy )"
Sep 24, 2008 page 141

resParamsTap - Resistor CDF Parameters (Tap)

CDF macro resParamsTap

CDF parameters
name "showTapProps"
prompt "Show Tap Properties"
type "boolean"
defValue nil
display "t"

CDF parameters
name "leftTap"
prompt "Left Tap"
type "boolean"
defValue t
display "gpdk180_resDisplay( ’leftTap)"

CDF parameters
name "rightTap"
prompt "Right Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’rightTap)"

CDF parameters
name "topTap"
prompt "Top Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’topTap)"

CDF parameters
name "bottomTap"
prompt "Bottom Tap"
type "boolean"
defValue nil
display "gpdk180_resDisplay( ’bottomTap)"
Sep 24, 2008 page 142

resParamsD - Resistor CDF Parameters (Part D)

CDF macro resParamsD

CDF parameters
name "otherParams"
prompt "Show Other Parameters"
type "boolean"
display "gpdk180_resDisplay( ’otherParams)"

CDF parameters
name "rsh"
prompt "Sheet Resistivity"
units "resistance"
defValue gpdk180_resValue( ’rsh ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rsh)"
editable "nil"
callback "gpdk180_resCB( ’rsh )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 143

CDF macro resParamsD

CDF parameters
name "rbody"
prompt "Body Resistance"
units "resistance"
defValue gpdk180_resValue( ’rbody ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rbody )"
editable "nil"
callback "gpdk180_resCB( ’rbody )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "rcont"
prompt "Contact Resistance"
units "resistance"
defValue gpdk180_resValue( ’rcont ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rcont )"
editable "nil"
callback "gpdk180_resCB( ’rcont )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "rend"
prompt "End Resistance"
units "resistance"
defValue gpdk180_resValue( ’rend ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’rend )"
editable "nil"
callback "gpdk180_resCB( ’rend )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 144

CDF macro resParamsD

CDF parameters
name "tc1"
prompt "Temperature Coefficient 1"
defValue gpdk180_resValue( ’tc1 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’tc1)"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "tc2"
prompt "Temperature Coefficient 2"
defValue gpdk180_resValue( ’tc2 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’tc2)"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 145

CDF macro resParamsD

CDF parameters
name "vc1"
prompt "Voltage Coefficient 1"
defValue gpdk180_resValue( ’vc1 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’vc1 )"
editable "nil"
parseAsNumber "yes"

CDF parameters
name "vc2"
prompt "Voltage Coefficient 2"
defValue gpdk180_resValue( ’vc2 ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’vc2 )"
editable "nil"
parseAsNumber "yes"

CDF parameters
name "dw"
prompt "Delta Width"
units "lengthMetric"
defValue gpdk180_resValue( ’dw ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’dw )"
editable "nil"
callback "gpdk180_resCB( ’dw )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "dl"
prompt "Delta Length"
units "lengthMetric"
defValue gpdk180_resValue( ’dl ?id cdfId ?returnString t )
type "string"
display "gpdk180_resDisplay( ’dl )"
editable "nil"
callback "gpdk180_resCB( ’dl )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 146

resParamsE - Resistor CDF Parameters (Part E)


CDF macro resParamsE

CDF parameters
name "trise"
prompt "Temp rise from ambient"
defValue ""
type "string"
display "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "resform"
prompt "Resistance Form"
defValue ""
type "string"
display "gpdk180_resDisplay( ’resform )"
parseAsCEL "yes"

CDF parameters
name "isnoisy"
prompt "Generate noise?"
defValue "yes"
choices ’("yes" "no")
type "cyclic"
display "gpdk180_resDisplay( ’isnoisy )"
parseAsCEL "yes"

CDF parameters
name "scale"
prompt "Scale factor"
defValue ""
type "string"
display "gpdk180_resDisplay( ’scale )"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 147

CDF macro resParamsE

CDF parameters
name "ac"
prompt "AC resistance"
units "resistance"
defValue ""
type "string"
display "gpdk180_resDisplay( ’ac )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "dtemp"
prompt "Temperature difference"
defValue ""
type "string"
display "gpdk180_resDisplay( ’dtemp )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "hrc"
prompt "Capacitance connected"
units "capacitance"
defValue ""
type "string"
display "gpdk180_resDisplay( ’hrc )"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "source"
prompt "Source component"
type "boolean"
display "gpdk180_resDisplay( ’source )"
Sep 24, 2008 page 148

resParamsF - Resistor CDF Parameters (Part F)


CDF macro resParamsF

CDF parameters
name "pasUpdateParamList"
prompt "CDF Param Update List"
defValue "w"
type "string"
display "nil"

CDF properties
formInitProc "PasCdfFormInit"
doneProc "PasCdfDone"
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instNameType "schematic"
instDisplayMode "instName"
netNameType "schematic"
termSimType "DC"
termDisplayMode "voltage"
paramSimType "DC"
paramEvaluate "nil nil nil t nil"
paramDisplayMode "parameter"
modelLabelSet "tc1 tc2 coefs"
opPointLabelSet "v i pwr"
paramLabelSet "-resType r w l"
Sep 24, 2008 page 149

resSimInfo2 - 2 terminal Resistor Simulation Information


CDF macro resSimInfo2

CDF siminfo CDF siminfo


simulator auCdl simulator auLvs
netlistProcedure ansCdlCompPrim netlistProcedure ansLvsCompPrim
instParameters (R W L M) instParameters (r l w m)
componentName nil termOrder (PLUS MINUS)
termOrder (PLUS MINUS) deviceTerminals nil
propMapping (nil R r M m W w L l) propMapping nil
namePrefix "R" permuteRule "(p PLUS MINUS)"
namePrefix "R"

CDF siminfo
simulator ams
isPrimitive t
otherParameters (model)
termOrder (PLUS MINUS)
propMapping (nil sl effL)
instParameters (model sl w)
Sep 24, 2008 page 150

resSimInfo3 - 3 terminal Resistor Simulation Information


CDF macro resSimInfo3

CDF siminfo CDF siminfo


simulator auCdl simulator auLvs
netlistProcedure ansCdlCompPrim netlistProcedure ansLvsCompPrim
instParameters (R W L M) instParameters (r l w m)
componentName nil termOrder (PLUS MINUS B)
termOrder (PLUS MINUS B) deviceTerminals nil
propMapping (nil R r M m W w L l) propMapping nil
namePrefix "R" permuteRule "(p PLUS MINUS )"
namePrefix "R"

CDF siminfo
simulator ams
isPrimitive t
otherParameters (model)
termOrder (PLUS MINUS B)
propMapping (nil sl effL)
instParameters (model sl w)
Sep 24, 2008 page 151

res2_uniSeg - 2 terminal Resistor CDF res3_uniSeg - 3 terminal Resistor CDF


CDF macro res2_uniSeg CDF macro res3_uniSeg

include macro resParamsA include macro resParamsA


include macro resParamsB_uniSeg include macro resParamsB_uniSeg
include macro resParamsC include macro resParamsC
include macro resParamsD include macro resParamsTap
include macro resParamsE include macro resParamsD
include macro resParamsF include macro resParamsE
include macro resSimInfo2 include macro resParamsF
include macro resSimInfo3

res2_multiSeg - 2 terminal Resistor CDFres3_multiSeg - 3 terminal Resistor CDF


CDF macro res2_multiSeg CDF macro res3_multiSeg

include macro resParamsA include macro resParamsA


include macro resParamsB_multiSeg include macro resParamsB_multiSeg
include macro resParamsC include macro resParamsC
include macro resParamsD
include macro resParamsE include macro resParamsD
include macro resParamsF include macro resParamsE
include macro resSimInfo2 include macro resParamsF
include macro resSimInfo3
Sep 24, 2008 page 152

Resistors Schematic Components


resPrim
CDF macro resPrim
CDF parameters
name "r"
prompt "res" CDF parameters CDF parameters
defValue "pPar(\"r\")" name "w" name "l"
units "lengthMetric" prompt "Width (m)" prompt "Length (m)"
type "string" defValue "pPar(\"w\")" defValue "pPar(\"l\")"
display "nil" units "lengthMetric" units "lengthMetric"
editable "nil" type "string" type "string"
parseAsNumber "yes" parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes" parseAsCEL "yes"

CDF parameters
name "sl"
prompt "Length (m)"
defValue "pPar(\"sl\")"
units "lengthMetric"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 153

resPrim2
CDF gpdk180 resPrim2

include macro resPrim

CDF siminfo CDF siminfo


simulator spectre simulator ams
otherParameters (model) isPrimitive t
termMapping (nil PLUS ":1" MINUS ":2" ) otherParameters (model)
termOrder (PLUS MINUS) termOrder (PLUS MINUS)
instParameters (sl w) instParameters (model sl w)

CDF siminfo CDF properties


simulator ads formInitProc ""
netlistProcedure ADSsimSubcktCall doneProc ""
otherParameters (model) buttonFieldWidth 340
instParameters (sl w) fieldHeight 35
componentName nil fieldWidth 350
termOrder (PLUS MINUS) promptWidth 175
termMapping (nil PLUS ":P1" MINUS ":P2") opPointLabelSet "res v i"
propMapping nil paramLabelSet "-model r w l"
typeMapping nil
uselib nil

CDF cellview
symbol baseline_gpdk res2 symbol
spectre baseline_gpdk res2 symbol
ads baseline_gpdk res2 symbol
Sep 24, 2008 page 154

resPrim3
CDF gpdk180 resPrim3

include macro resPrim

CDF siminfo CDF siminfo


simulator spectre simulator ams
otherParameters (model) isPrimitive t
termMapping (nil PLUS ":1" MINUS ":2" B ":3" ) otherParameters (model)
termOrder (PLUS MINUS B) termOrder (PLUS MINUS B)
instParameters (sl w) instParameters (model sl w)

CDF siminfo CDF properties


simulator ads formInitProc ""
netlistProcedure ADSsimSubcktCall doneProc ""
otherParameters (model) buttonFieldWidth 340
instParameters (sl w) fieldHeight 35
componentName nil fieldWidth 350
termOrder (PLUS MINUS B) promptWidth 175
termMapping (nil PLUS ":P1" MINUS ":P2" B ":P3") opPointLabelSet "res v i"
propMapping nil paramLabelSet "-model r w l"
typeMapping nil
uselib nil

CDF cellview
symbol baseline_gpdk res3 symbol
spectre baseline_gpdk res3 symbol
ads baseline_gpdk res3 symbol
Sep 24, 2008 page 155

Resistors
polyres
CDF gpdk180 polyres

include macro res2_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $poly_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont lambda( (dpl) 5.0 / (dpl->rows * dpl->cols) ) private Contact Resistance per head
rend 0.0 private End Resistance per head
category "res res/poly" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim2" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 156

CDF gpdk180 polyres

CDF device params


mwDevice $rpoly_mwDevice private Minimum resistor width
mlDevice $rpoly_mlDevice private Minimum resistor length
mnSquares $rpoly_mnSquares private Minimum number of squares
mwRes $rpoly_mwRes private Minimum poly width
msRes $rpoly_msRes private Minimum spacing
mwCont $rpoly_mwCont private Minimum contact width
msCont $rpoly_msCont private Minimum contact spacing
meResCont $rpoly_meResCont private Minimum poly enclosure of contact
meeResCont $rpoly_meeResCont private Minimum poly end enclosure of contact
mwM1 $rpoly_mwM1 private Minimum metal 1 width
msM1 $rpoly_msM1 private Minimum metal 1 spacing
meM1Cont $rpoly_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $rpoly_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplRes $rnpoly_meImplRes private Minimum imlant enclosure of poly
meIdRes $rpoly_meIdRes private Minimum recognition layer enclosure of poly
msIdCont $rpoly_msSbCont private Minimum recognition layer to contact spacing
msIdRes $rpoly_msSbRes private Minium recognition layer to poly spacing

CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 157

polyhres
CDF gpdk180 polyhres

include macro res2_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $polyh_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont lambda( (dpl) 5.0 / (dpl->rows * dpl->cols) ) private Contact Resistance per head
rend lambda( (dpl) 7.5 / dpl->w ) private End Resistance per head
category "res res/poly" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim2" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 158

CDF gpdk180 polyhres

CDF device params


mwDevice $rpoly_mwDevice private Minimum resistor width
mlDevice $rpoly_mlDevice private Minimum resistor length
mnSquares $rpoly_mnSquares private Minimum number of squares
mwRes $rpoly_mwRes private Minimum poly width
msRes $rpoly_msRes private Minimum spacing
mwCont $rpoly_mwCont private Minimum contact width
msCont $rpoly_msCont private Minimum contact spacing
meResCont $rpoly_meResCont private Minimum poly enclosure of contact
meeResCont $rpoly_meeResCont private Minimum poly end enclosure of contact
mwM1 $rpoly_mwM1 private Minimum metal 1 width
msM1 $rpoly_msM1 private Minimum metal 1 spacing
meM1Cont $rpoly_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $rpoly_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplRes $rnpoly_meImplRes private Minimum imlant enclosure of poly
meIdRes $rpoly_meIdRes private Minimum recognition layer enclosure of poly
msIdCont $rpoly_msSbCont private Minimum recognition layer to contact spacing
msIdRes $rpoly_msSbRes private Minium recognition layer to poly spacing

CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 159

nplusres
CDF gpdk180 nplusres

include macro res3_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $nplus_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) ) private Contact Resistance per head
rend 0.0 private End Resistance per head
category "res res/diff" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim3" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 160

CDF gpdk180 nplusres

CDF device params


mwDevice $rdiff_mwDevice private Minimum resistor width
mlDevice $rdiff_mlDevice private Minimum resistor length
mnSquares $rdiff_mnSquares private Minimum number of squares
mwRes $rdiff_mwRes private Minimum diffusion width
msRes $rdiff_msRes private Minimum diffusion spacing
mwCont $rdiff_mwCont private Minimum contact width
msCont $rdiff_msCont private Minimum contact spacing
meResCont $rdiff_meResCont private Minimum diffusion enclosure of contact
meeResCont $rdiff_meeResCont private Minimum diffusion end enclosure of contact
mwM1 $rdiff_mwM1 private Minimum metal 1 width
msM1 $rdiff_msM1 private Minimum metal 1 spacing
meM1Cont $rdiff_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $rdiff_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplRes $rndiff_meImplRes private Minimum imlant enclosure of diff
meIdRes $rdiff_meIdRes private Minimum recognition layer enclosure of diff
msIdCont $rdiff_msSbCont private Minimum recognition layer to contact spacing
msIdRes $rdiff_msSbRes private Minium recognition layer to diff spacing

CDF cellview
symbol baseline_gpdk res3 symbol
auCdl baseline_gpdk res3 symbol
auLvs baseline_gpdk res3 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 161

pplusres
CDF gpdk180 pplusres

include macro res3_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $pplus_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) ) private Contact Resistance per head
rend 0.0 private End Resistance per head
category "res res/diff" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim3" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 162

CDF gpdk180 pplusres

CDF device params


mwDevice $rdiff_mwDevice private Minimum resistor width
mlDevice $rdiff_mlDevice private Minimum resistor length
mnSquares $rdiff_mnSquares private Minimum number of squares
mwRes $rdiff_mwRes private Minimum diffusion width
msRes $rdiff_msRes private Minimum diffusion spacing
mwCont $rdiff_mwCont private Minimum contact width
msCont $rdiff_msCont private Minimum contact spacing
meResCont $rdiff_meResCont private Minimum diffusion enclosure of contact
meeResCont $rdiff_meeResCont private Minimum diffusion end enclosure of contact
mwM1 $rdiff_mwM1 private Minimum metal 1 width
msM1 $rdiff_msM1 private Minimum metal 1 spacing
meM1Cont $rdiff_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $rdiff_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meImplRes $rpdiff_meImplRes private Minimum imlant enclosure of diff
meIdRes $rdiff_meIdRes private Minimum recognition layer enclosure of diff
msIdCont $rdiff_msSbCont private Minimum recognition layer to contact spacing
msIdRes $rdiff_msSbRes private Minium recognition layer to diff spacing
meWellRes $rpdiff_meWellRes private Minimum well enclosure of poly

CDF cellview
symbol baseline_gpdk res3 symbol
auCdl baseline_gpdk res3 symbol
auLvs baseline_gpdk res3 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 163

nwellres
CDF gpdk180 nwellres

include macro res2_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $nwell_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont lambda( (dpl) 7.5 / (dpl->rows * dpl->cols) ) private Contact Resistance per head
rend lambda( (dpl) 160.0 / dpl->w ) private End Resistance per head
category "res res/nwell" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim2" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 164

CDF gpdk180 nwellres

CDF device params


mwDevice $rnw_mwDevice private Minimum resistor width
mlDevice $rnw_mlDevice private Minimum resistor length
mnSquares $rnw_mnSquares private Minimum number of squares
mwRes $rnw_mwRes private Minimum nwell width
msRes $rnw_msRes private Minimum nwell spacing
mwDiff $rnw_mwDiff private Minimum diffusion width
msDiff $rnw_msDiff private Minimum diffusion spacing
meResDiff $rnw_meResDiff private Minimum nwell enclosure of diffusion
meImplDiff $rnw_meImplDiff private Minimum implant enclosure of diffusion
mwCont $rnw_mwCont private Minimum contact width
msCont $rnw_msCont private Minimum contact spacing
meDiffCont $rnw_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $rnw_meeDiffCont private Minimum diffusion end enclosure of contact
mwM1 $rnw_mwM1 private Minimum metal 1 width
msM1 $rnw_msM1 private Minimum metal 1 spacing
meM1Cont $rnw_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $rnw_meeM1Cont private Minimum metal 1 end enclosure of contact

CDF device params


meIdRes $rnw_meIdRes private Minimum recognition layer enclosure of nwell

CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 165

mxres
CDF gpdk180 mxres

include macro res2_multiSeg

CDF siminfo
simulator auLvs
componentName "$cell"

CDF siminfo
simulator auCdl
modelName "$cell"

CDF Macro Table


$cell $m_rho $minW $minS
m1res $m1_rho {7A} {7B}
m2res $m2_rho {9A} {9B}
m3res $m3_rho {11A} {11B}
m4res $m4_rho {15A} {15B}
m5res $m5_rho {17A} {17B}
m6res $m6_rho {19A} {19B}

CDF device params


grid $grid private Manufacturing Grid Resolution
scale 1u private Dimension scale factor
model "$lib_$cell" private
rsh $m_rho private Sheet resistivity
tc1 0.0 private Temperature Coefficient 1
tc2 0.0 private Temperature Coefficient 2
vc1 0.0 private Voltage Coefficient 1
vc2 0.0 private Voltage Coefficient 2
dw 0.0 private Delta Width
dl 0.0 private Delta Length
rcont 0.0 private Contact Resistance per head
rend 0.0 private End Resistance per head
category "res res/metal" private Library Manager Category
schPcellPrimSymbol ’( "$lib" "resPrim2" "symbol" ) public Sch PCell Prim Symbol View
schPcellPinSymbol ’( "basic" "iopin" "symbol" ) public Schem PCell Pin Symbol View
Sep 24, 2008 page 166

CDF gpdk180 mxres

CDF device params


mwDevice $minW private Minimum resistor width
mlDevice $minW private Minimum resistor length
mnSquares 1 private Minimum number of squares
mwRes $minW private Minimum poly width
msRes $minS private Minimum spacing
mwCont {6A} private Minimum contact width
msCont {6B} private Minimum contact spacing
meResCont 0.0 private Minimum poly enclosure of contact
meeResCont 0.0 private Minimum poly end enclosure of contact
mwM1 $minW private Minimum metal 1 width
msM1 $minS private Minimum metal 1 spacing
meM1Cont 0.0 private Minimum metal 1 enclosure of contact
meeM1Cont 0.0 private Minimum metal 1 end enclosure of contact

CDF device params


meIdRes 0.05 private Minimum recognition layer enclosure of metal
msIdCont 0.0 private Minimum recognition layer to contact spacing
msIdRes 0.0 private Minium recognition layer to metal spacing

CDF cellview
symbol baseline_gpdk res2 symbol
auCdl baseline_gpdk res2 symbol
auLvs baseline_gpdk res2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 167

PCell Macros

res_uniSeg (macro)

pcell macro res_uniSeg

PCell formal params


w float CDF
l float CDF
leftDummy boolean CDF
rightDummy boolean CDF
cntOnDummy boolean CDF
cntRows int CDF

include macro res_connect


connection = "Series"
segments = 1
sl = l

res_multiSeg (macro) mres_multiSeg (macro)

pcell macro res_multiSeg pcell macro mres_multiSeg

PCell formal params PCell formal params


w float CDF w float CDF
sl float CDF sl float CDF
connection string CDF connection string CDF
segments int CDF segments int CDF
leftDummy boolean CDF leftDummy boolean CDF
rightDummy boolean CDF rightDummy boolean CDF
cntOnDummy boolean CDF cntRows int CDF
cntRows int CDF

include macro res_connect


Sep 24, 2008 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
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont

msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes

3: include

alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 169

pcell macro res_poly

5: include 6: if leftDummy

body[1]
body[0] body[1]
Poly
Poly Poly

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Poly Poly
Poly
body[i]
Poly

xSepHB 0.0
alBody
xSepHB 0.0

Poly
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 170

pcell macro res_poly

9: for i bi ei

if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact

space msCont msCont

mwCont meeM1Cont meM1Cont

topHead[i]
Poly
topMetal[i]
Metal1 Cont[]

mwCont mwCont awM1

Cont[]

mwCont

xSepHM ySepHM meeM1Cont meM1Cont

alM1

alM1

xSepHM ySepHM meeM1Cont meM1Cont

mwCont

Cont[]

mwCont mwCont awM1

Metal1 Cont[]
botMetal[i]
Poly
botHead[i]

mwCont meeM1Cont meM1Cont

space msCont msCont


Sep 24, 2008 page 171

res_poly_nplus (macro)
pcell macro res_poly_nplus

2: include

meImplRes = dpt->meImplRes

10: include
<-NPLUS->
Poly

meImplRes meImplRes

topHead[ei]
Poly botHead[bi]
meImplRes meImplRes

res_poly_pplus (macro)
pcell macro res_poly_pplus

2: include

meImplRes = dpt->meImplRes

10: include
<-PPLUS->
Poly

meImplRes meImplRes

topHead[ei]
Poly botHead[bi]
meImplRes meImplRes
Sep 24, 2008 page 172

res_poly_nw (macro)
pcell macro res_poly_nw

2: include

meWellRes = dpt->meWellRes

10: include
<-Nwell->
Poly

meWellRes meWellRes

topHead[ei]
Poly botHead[bi]
meWellRes meWellRes

res_poly_id (macro)
pcell macro res_poly_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-Resdum->
body[1]
Poly Poly

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 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 Poly

xSep ySep xSep ySep

body[ei]
Sep 24, 2008 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
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont

msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes

3: include

alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 175

pcell macro res_diff

5: include 6: if leftDummy

body[1]
body[0] body[1]
Oxide
Oxide Oxide

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Oxide Oxide
Oxide
body[i]
Oxide

xSepHB 0.0
alBody
xSepHB 0.0

Oxide
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 176

pcell macro res_diff

9: for i bi ei

if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact

space msCont msCont

mwCont meeM1Cont meM1Cont

topHead[i]
Oxide
topMetal[i]
Metal1 Cont[]

mwCont mwCont awM1

Cont[]

mwCont

xSepHM ySepHM meeM1Cont meM1Cont

alM1

alM1

xSepHM ySepHM meeM1Cont meM1Cont

mwCont

Cont[]

mwCont mwCont awM1

Metal1 Cont[]
botMetal[i]
Oxide
botHead[i]

mwCont meeM1Cont meM1Cont

space msCont msCont


Sep 24, 2008 page 177

res_diff_nplus (macro)
pcell macro res_diff_nplus

2: include

meImplRes = dpt->meImplRes

10: include
<-NPLUS->
Oxide

meImplRes meImplRes

topHead[ei]
Oxide botHead[bi]
meImplRes meImplRes

res_diff_pplus (macro)
pcell macro res_diff_pplus

2: include

meImplRes = dpt->meImplRes

10: include
<-PPLUS->
Oxide

meImplRes meImplRes

topHead[ei]
Oxide botHead[bi]
meImplRes meImplRes
Sep 24, 2008 page 178

res_diff_nw (macro)
pcell macro res_diff_nw

2: include

meWellRes = dpt->meWellRes

10: include
<-Nwell->
Oxide

meWellRes meWellRes

topHead[ei]
Oxide botHead[bi]
meWellRes meWellRes

res_diff_id (macro)
pcell macro res_diff_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-Resdum->
body[1]
Oxide Oxide

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 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 meeResDiff = dpt->meeResDiff || meResDiff
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meDiffCont = dpt->meDiffCont meM1Cont = dpt->meM1Cont
meeDiffCont = dpt->meeDiffCont || meDiffCont meeM1Cont = dpt->meeM1Cont || meM1Cont

meImplDiff = dpt->meImplDiff

3: include three

1: include

alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
tmp = 2.0 * meeResDiff
awDiff = max( ( awBody - tmp ) ( mwRes - tmp ) ( mwCont + ( 2.0 * meeDiffCont ) ) )
awHead = awDiff + tmp
asHead = max( msRes ( msDiff - tmp ) )
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepDM = meeDiffCont - meeM1Cont
ySepDM = meDiffCont - meM1Cont
alM1 = awDiff - (2.0 * xSepDM)
idOffset = meImplDiff - meResDiff
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepDM + meeResDiff
Sep 24, 2008 page 180

pcell macro res_nwell

three

2: include

tmp = 2.0 * meResDiff


cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alDiff = max( ( mwRes - tmp ) (cntSpan + (2.0 * meDiffCont)) )
alHead = alDiff + tmp
awM1 = cntSpan + (2.0 * meM1Cont)

5: include 6: if leftDummy

body[1]
body[0] body[1]
Nwell
Nwell Nwell

alBody
alBody
asBody 0.0

ref awBody
awBody
Sep 24, 2008 page 181

pcell macro res_nwell

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Nwell Nwell
Nwell
body[i]
Nwell

xSepHB 0.0
alBody
xSepHB 0.0

Nwell
awBody
botHead[i] alHead
asBody 0.0
awHead

9: for i bi ei

meeResDiff meResDiff meeResDiff meResDiff

Nwell Nwell
<-Oxide-> <-Oxide->

topDiff[i] botDiff[i]

topHead[i] botHead[i]
meeResDiff meResDiff meeResDiff meResDiff
Sep 24, 2008 page 182

pcell macro res_nwell

10: include

meImplDiff meImplDiff
<-NPLUS->
<-Oxide-> <-Oxide->
topDiff[bi]
topDiff[ei]

meImplDiff meImplDiff

meImplDiff meImplDiff
<-NPLUS->
<-Oxide-> <-Oxide->
botDiff[bi]
botDiff[ei]

meImplDiff meImplDiff
Sep 24, 2008 page 183

pcell macro res_nwell

11: for i bi ei

if ((i>0 && leqp(i sc)) || (i==0 && cntOnDummy) || (i>sc && cntOnDummy)) contact

space msCont msCont

mwCont meeM1Cont meM1Cont

topDiff[i]
<-Oxide->
topMetal[i]
Metal1 Cont[]

mwCont mwCont awM1

Cont[]

mwCont

xSepDM ySepDM meeM1Cont meM1Cont

alM1

alM1

xSepDM ySepDM meeM1Cont meM1Cont

mwCont

Cont[]

mwCont mwCont awM1

Metal1 Cont[]
botMetal[i]
<-Oxide->
botDiff[i]

mwCont meeM1Cont meM1Cont

space msCont msCont


Sep 24, 2008 page 184

res_nwell_id (macro)

pcell macro res_nwell_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-ResWdum->
body[1]
Nwell Nwell

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 page 185

res_connect (macro)
pcell macro res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topMetal[i]
Metal1 Metal1 alM1
Metal1 Metal1
awM1
awM1
alM1

botMetal[i]

if oddp(sc) if evenp(sc)
topMetal[sc] botMetal[sc]
Metal1 Metal1
"PLUS" inOut "PLUS" inOut
right top right bottom

botMetal[1]
Metal1
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal1->
topMetal[1] topMetal[sc]

Metal1 Metal1

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal1 <-Metal1-> Metal1

botMetal[1] botMetal[sc]
Sep 24, 2008 page 186

res_m (macro)
pcell macro res_m

1: include

dpt = PasGetDeviceProps( cv )
scale = dpt->scale
epsilon = grid / 10.0
mwRes = dpt->mwRes msRes = dpt->msRes
mwCont = dpt->mwCont mwM1 = dpt->mwM1
msCont = dpt->msCont msM1 = dpt->msM1
meResCont = dpt->meResCont meM1Cont = dpt->meM1Cont
meeResCont = dpt->meeResCont || meResCont meeM1Cont = dpt->meeM1Cont || meM1Cont

msIdCont = dpt->msIdCont || 0
msIdRes = dpt->msIdRes

3: include

alBody = sl / scale
awBody = w / scale
sc = max(1 segments)
awHead = max( awBody mwRes (mwCont + (2.0 * meeResCont)) )
cntSpan = ( max(1 cntRows ) * ( mwCont + msCont ) ) - msCont
alHead = max( mwRes (cntSpan + (2.0 * meResCont)) )
asHead = msRes
asBody = asHead + awHead - awBody
dogbone = awBody + epsilon < awHead
xSepHB = if( dogbone then PasCeiling( ( (awHead - awBody) / 2.0 ) grid t ) else 0.0 )
bi = if( leftDummy then 0 else 1 )
ei = if( rightDummy then sc + 1 else sc )
xSepHM = meeResCont - meeM1Cont
ySepHM = meResCont - meM1Cont
alM1 = awHead - (2.0 * xSepHM)
awM1 = cntSpan + (2.0 * meM1Cont)
idOffset = msIdCont - meResCont
idOffset = if( dogbone && msIdRes then max( idOffset msIdRes )
else idOffset )
alBody = alBody + (2.0 * idOffset)
aeeResM1 = xSepHM
Sep 24, 2008 page 187

res_m1 (macro)
pcell macro res_m1

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal1
Metal1 Metal1

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal1 Metal1
Metal1
body[i]
Metal1

xSepHB 0.0
alBody
xSepHB 0.0

Metal1
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 188

res_m2 (macro)
pcell macro res_m2

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal2
Metal2 Metal2

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal2 Metal2
Metal2
body[i]
Metal2

xSepHB 0.0
alBody
xSepHB 0.0

Metal2
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 189

res_m3 (macro)
pcell macro res_m3

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal3
Metal3 Metal3

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal3 Metal3
Metal3
body[i]
Metal3

xSepHB 0.0
alBody
xSepHB 0.0

Metal3
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 190

res_m4 (macro)
pcell macro res_m4

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal4
Metal4 Metal4

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal4 Metal4
Metal4
body[i]
Metal4

xSepHB 0.0
alBody
xSepHB 0.0

Metal4
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 191

res_m5 (macro)
pcell macro res_m5

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal5
Metal5 Metal5

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal5 Metal5
Metal5
body[i]
Metal5

xSepHB 0.0
alBody
xSepHB 0.0

Metal5
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 192

res_m6 (macro)
pcell macro res_m6

5: include 6: if leftDummy

body[1]
body[0] body[1]
Metal6
Metal6 Metal6

alBody
alBody
asBody 0.0

ref awBody
awBody

7: for i 2 ei 8: for i bi ei

awHead

body[i - 1] body[i] topHead[i] alHead


Metal6 Metal6
Metal6
body[i]
Metal6

xSepHB 0.0
alBody
xSepHB 0.0

Metal6
awBody
botHead[i] alHead
asBody 0.0
awHead
Sep 24, 2008 page 193

res_m1_id (macro)
pcell macro res_m1_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-M1dummy->
body[1]
Metal1 Metal1

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 Metal2

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 page 194

res_m3_id (macro)
pcell macro res_m3_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-M3dummy->
body[1]
Metal3 Metal3

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 Metal4

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 page 195

res_m5_id (macro)
pcell macro res_m5_id

2: include

meIdRes = dpt->meIdRes || 0

10: include

<-M5dummy->
body[1]
Metal5 Metal5

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 Metal6

meIdRes ySep meIdRes ySep

ySep = minus(idOffset)

body[sc]
Sep 24, 2008 page 196

m1res_connect (macro)
pcell macro m1res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal1 Metal1 alM1
Metal1 Metal1
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal1 Metal1
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal1
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal1->
topHead[1] topHead[sc]

Metal1 Metal1

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal1 <-Metal1-> Metal1

botHead[1] botHead[sc]
Sep 24, 2008 page 197

m2res_connect (macro)
pcell macro m2res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal2 Metal2 alM1
Metal2 Metal2
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal2 Metal2
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal2
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal2->
topHead[1] topHead[sc]

Metal2 Metal2

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal2 <-Metal2-> Metal2

botHead[1] botHead[sc]
Sep 24, 2008 page 198

m3res_connect (macro)
pcell macro m3res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal3 Metal3 alM1
Metal3 Metal3
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal3 Metal3
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal3
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal3->
topHead[1] topHead[sc]

Metal3 Metal3

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal3 <-Metal3-> Metal3

botHead[1] botHead[sc]
Sep 24, 2008 page 199

m4res_connect (macro)
pcell macro m4res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal4 Metal4 alM1
Metal4 Metal4
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal4 Metal4
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal4
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal4->
topHead[1] topHead[sc]

Metal4 Metal4

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal4 <-Metal4-> Metal4

botHead[1] botHead[sc]
Sep 24, 2008 page 200

m5res_connect (macro)
pcell macro m5res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal5 Metal5 alM1
Metal5 Metal5
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal5 Metal5
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal5
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal5->
topHead[1] topHead[sc]

Metal5 Metal5

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal5 <-Metal5-> Metal5

botHead[1] botHead[sc]
Sep 24, 2008 page 201

m6res_connect (macro)
pcell macro m6res_connect

15: if (connection != "Parallel")

alM1 = asHead + (2.0 * aeeResM1)

for i 1 (sc - 1)

if oddp(i) if evenp(i)

topHead[i]
Metal6 Metal6 alM1
Metal6 Metal6
awM1
awM1
alM1

botHead[i]

if oddp(sc) if evenp(sc)
topHead[sc] botHead[sc]
Metal6 Metal6
"PLUS" inOut "PLUS" inOut
right top right bottom

botHead[1]
Metal6
"MINUS" inOut
left bottom

15: if (connection == "Parallel")

<-Metal6->
topHead[1] topHead[sc]

Metal6 Metal6

"PLUS" inOut
left right top

"MINUS" inOut
left right bottom

Metal6 <-Metal6-> Metal6

botHead[1] botHead[sc]
Sep 24, 2008 page 202

PCell Devices
Poly Resistor High Poly Resistor
pcell gpdk180 polyres pcell gpdk180 polyhres

include macro res_multiSeg include macro res_multiSeg


include macro res_poly include macro res_poly
include macro res_poly_id include macro res_poly_id
include macro res_poly_sb

N+ Diff Resistor P+ Diff Resistor


pcell gpdk180 nplusres pcell gpdk180 pplusres

include macro res_multiSeg include macro res_multiSeg


include macro res_diff include macro res_diff
include macro res_diff_nplus include macro res_diff_pplus
include macro res_diff_id include macro res_diff_id
include macro res_diff_nw

NWell Resistor Metal Resistor


pcell gpdk180 nwellres pcell gpdk180 mxres

include macro res_multiSeg include macro mres_multiSeg


include macro res_nwell include macro $mac0
include macro res_nwell_id include macro res_m
include macro $mac1
include macro $mac2

Pcell Macro Table


$cell $mac0 $mac1 $mac2
m1res m1res_connect res_m1 res_m1_id
m2res m2res_connect res_m2 res_m2_id
m3res m3res_connect res_m3 res_m3_id
m4res m4res_connect res_m4 res_m4_id
m5res m5res_connect res_m5 res_m5_id
m6res m6res_connect res_m6 res_m6_id
Sep 24, 2008 page 203

Library CAP Definitions


Sep 24, 2008 page 204

CDF Definitions
mimcap
CDF gpdk180 mimcap

CDF device params


grid $grid private mfg grid
scale 1.0e-6 private dimensional scale factor include macro cap
model "mimcap" private device model name
category "cap" private dfII library manager category

CDF device params


mwCap 4.0 private min CAP width
xwCap 30.0 private max CAP width
dwCap 4.0 private default CAP width
mlCap 4.0 private min CAP length
xlCap 30.0 private max CAP length
dlCap 4.0 private default CAP length
ca 0.001 private area capacitance
cf 1.0e-10 private fringe capacitance

CDF siminfo
simulator auCdl
componentName "$cell"
instParameters (AREA M)
propMapping (nil AREA area M m)
modelName "$cell"

CDF siminfo
simulator auLvs
componentName "$cell"
instParameters (area m)

CDF siminfo
simulator spectre
instParameters (area perim m scale trise ic tc1 tc2)
componentName "$cell"
CDF cellview
symbol pas_std cap2 symbol
spectre pas_std cap2 symbol
auCdl pas_std cap2 symbol
auLvs pas_std cap2 symbol
ads pas_std cap2 symbol
ivpcell $lib $cell symbol 5
Sep 24, 2008 page 205

CDF Macro Definitions


Capacitor
CDF macro cap

CDF parameters
name "model"
prompt "Model name"
defValue gpdk180_capValue(’model ?id cdfId ?returnString t)
type "string"
display "gpdk180_capDisplay(’model)"
editable "nil"
parseAsCEL "yes"

CDF parameters
name "calcParam"
prompt "Calculate Parameter"
type "cyclic"
choices list("capacitance" "length" "width")
defValue "capacitance"
display "t"

CDF parameters
name "c"
prompt "Capacitance"
units "capacitance"
defValue gpdk180_capValue(’c ?id cdfId ?returnString t)
type "string"
display "t"
editable "cdfgData->calcParam->value!=\"capacitance\""
parseAsNumber "yes"
parseAsCEL "yes"
callback "gpdk180_capCB(’c)"

CDF parameters
name "w"
prompt "Width"
units "lengthMetric"
defValue gpdk180_capValue(’w ?id cdfId ?returnString t)
type "string"
display "t"
editable "cdfgData->calcParam->value!=\"width\""
parseAsNumber "yes"
parseAsCEL "yes"
callback "gpdk180_capCB(’w)"
Sep 24, 2008 page 206

CDF macro cap

CDF parameters
name "l"
prompt "Length" CDF parameters
units "lengthMetric" name "m"
defValue gpdk180_capValue(’l ?id cdfId ?returnString t) prompt "Multiplier"
type "string" defValue "1"
display "t" type "string"
editable "cdfgData->calcParam->value!=\"length\"" display "t"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"
callback "gpdk180_capCB(’l)"

CDF parameters
name "showSimParams"
prompt "Show Sim Parameters" CDF parameters
defValue nil name "ca"
type "boolean" prompt "Area capacitance (F/M^2)"
display "gpdk180_capDisplay(’showSimParams)" defValue gpdk180_capValue(’ca ?id cdfId)
type "float"
display "gpdk180_capDisplay(’ca)"
CDF parameters
editable "nil"
name "cf"
prompt "Fringe capacitance (F/M)"
defValue gpdk180_capValue(’cf ?id cdfId)
type "float"
display "gpdk180_capDisplay(’cf)"
editable "nil"

CDF parameters
name "area"
prompt "Area"
defValue "iPar(\"w\")*iPar(\"l\")"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
editable "nil"
CDF parameters
name "perim"
prompt "Perim"
defValue "2*iPar(\"w\")+2*iPar(\"l\")"
type "string"
parseAsNumber "yes"
parseAsCEL "yes"
editable "nil"
Sep 24, 2008 page 207

CDF macro cap

CDF parameters
name "ic"
prompt "Initial condition"
units "voltage"
defValue ""
type "string"
display "gpdk180_capDisplay(’ic)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters CDF parameters


name "scale" name "trise"
prompt "Scale factor" prompt "Temp rise from ambient"
defValue "" defValue ""
type "string" type "string"
display "gpdk180_capDisplay(’scale)" display "gpdk180_capDisplay(’trise)"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"

CDF parameters CDF parameters


name "tc1" name "tc2"
prompt "Temperature coefficient 1" prompt "Temperature coefficient 2"
defValue "" defValue ""
type "string" type "string"
display "gpdk180_capDisplay(’tc1)" display "gpdk180_capDisplay(’tc2)"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"

CDF parameters CDF parameters


name "dtemp" name "polyCoef"
prompt "Temperature difference" prompt "Number of Polynomial Coeffs"
defValue "" defValue 0
type "string" type "int"
display "gpdk180_capDisplay(’dtemp)" display "gpdk180_capDisplay(’polyCoef)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 208

CDF macro cap

CDF parameters
name "c1"
prompt "Poly Coeff 1"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 1"
display "gpdk180_capDisplay(’c1)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c2"
prompt "Poly Coeff 2"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 2"
display "gpdk180_capDisplay(’c2)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c3"
prompt "Poly Coeff 3"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 3"
display "gpdk180_capDisplay(’c3)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 209

CDF macro cap

CDF parameters
name "c4"
prompt "Poly Coeff 4"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 4"
display "gpdk180_capDisplay(’c4)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c5"
prompt "Poly Coeff 5"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 5"
display "gpdk180_capDisplay(’c5)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c6"
prompt "Poly Coeff 6"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 6"
display "gpdk180_capDisplay(’c6)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 210

CDF macro cap

CDF parameters
name "c7"
prompt "Poly Coeff 7"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 7"
display "gpdk180_capDisplay(’c7)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c8"
prompt "Poly Coeff 8"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 8"
display "gpdk180_capDisplay(’c8)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c9"
prompt "Poly Coeff 9"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 9"
display "gpdk180_capDisplay(’c9)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 211

CDF macro cap

CDF parameters
name "c10"
prompt "Poly Coeff 10"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 10"
display "gpdk180_capDisplay(’c10)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c11"
prompt "Poly Coeff 11"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 11"
display "gpdk180_capDisplay(’c11)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c12"
prompt "Poly Coeff 12"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 12"
display "gpdk180_capDisplay(’c12)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 212

CDF macro cap

CDF parameters
name "c13"
prompt "Poly Coeff 13"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 13"
display "gpdk180_capDisplay(’c13)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c14"
prompt "Poly Coeff 14"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 14"
display "gpdk180_capDisplay(’c14)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c15"
prompt "Poly Coeff 15"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 15"
display "gpdk180_capDisplay(’c15)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 213

CDF macro cap

CDF parameters
name "c16"
prompt "Poly Coeff 16"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 16"
display "gpdk180_capDisplay(’c16)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c17"
prompt "Poly Coeff 17"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 17"
display "gpdk180_capDisplay(’c17)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "c18"
prompt "Poly Coeff 18"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 18"
display "gpdk180_capDisplay(’c18)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 214

CDF macro cap

CDF parameters
name "c19"
prompt "Poly Coeff 19"
defValue ""
type "string"
use "cdfgData->polyCoef->value >= 19"
display "gpdk180_capDisplay(’c19)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters CDF parameters


name "c20" name "source"
prompt "Poly Coeff 20" prompt "Source component"
defValue "" type "boolean"
type "string" display "gpdk180_capDisplay(’source)"
use "cdfgData->polyCoef->value >= 20"
display "gpdk180_capDisplay(’c20)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "qmode"
prompt "Quality type"
defValue "ideal"
choices ’("ideal" "Constant Conductance" "Square Root" "Constant Q")
type "cyclic"
display "gpdk180_capDisplay(’qmode)"

CDF parameters
name "q"
prompt "Quality"
defValue ""
type "string"
display "gpdk180_capDisplay(’q)"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 215

CDF macro cap

CDF parameters
name "freq"
prompt "Frequency"
units "frequency"
defValue ""
type "string"
display "gpdk180_capDisplay(’freq)"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "pasUpdateParamList"
prompt "CDF Param Update List"
defValue "c w l"
type "string"
display "nil"

CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
instParameters (C M)
termOrder (PLUS MINUS)
propMapping (nil C c M m)
namePrefix "C"

CDF siminfo
simulator auLvs
propMapping nil
netlistProcedure ansLvsCompPrim
instParameters (c m)
termOrder (PLUS MINUS)
permuteRule "(p PLUS MINUS)"
namePrefix "C"

CDF siminfo
simulator ams
instParameters (c w l m scale trise ic tc1 tc2)
termOrder (PLUS MINUS)
isPrimitive t
Sep 24, 2008 page 216

CDF macro cap


CDF siminfo
simulator spectre
propMapping nil
namePrefix "C"
otherParameters (model)
instParameters (c w l m scale trise ic tc1 tc2)
termOrder (PLUS MINUS)
termMapping (nil PLUS \:1 MINUS "(FUNCTION minus(root(\"PLUS\")))")
componentName capacitor

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area Periph _M scale Trise ic tc1 tc2)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":minus.P1")
propMapping (nil Area area Periph perim _M m Trise trise)
typeMapping nil
uselib nil
Sep 24, 2008 page 217

CDF macro cap

CDF properties
formInitProc "PasCdfFormInit"
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
instDisplayMode "instName"
instNameType "schematic"
netNameType "schematic"
paramDisplayMode "parameter"
paramEvaluate "nil nil nil t nil"
paramSimType "DC"
termDisplayMode "netName"
termSimType "DC"
opPointLabelSet "i"
paramLabelSet "-model c m"
Sep 24, 2008 page 218

Callbacks
mimcap

CDF Callback
procedure(gpdk180_capCB(param) ;_Feb 13 03 quoc 3858
let((procName cdfId libName cellName dpt grid scale sGrid epsilon
ca cf minW maxW minL maxL todo paramId cap width length
ael_C ael_W ael_L)

procName = "gpdk180_capCB"
cdfId = cdfgData
caseq( concat(cdfId~>type)
((cellData baseCellData userCellData)
libName = cdfId~>id~>lib~>name
cellName = cdfId~>id~>name
)
(instData
libName = cdfId~>id~>master~>libName
cellName = cdfId~>id~>master~>cellName
)
(t
PasAttention()
error("%s: unexpected CDF data type - %L" procName cdfId~>type)
)
) ; ** caseq concat **

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...
Sep 24, 2008 page 219

Pcell
mimcap
pcell gpdk180 mimcap

"MINUS" inOut
PCell formal params
<-Metal2-> all
l float cdf
w*1e6
w float cdf

M2CTMenc M2CTMenc
CapMetal
M3V2enc = {11D} l*1e6
M2V2enc = {10C}
M2CTMenc = {12B} ref
CTMM3enc = {12D} captop
V2w = {10A}
V2sp = {10B}
capbot

M2CTMenc M2CTMenc

<-Capdum->
M2CTMenc M2CTMenc
CapMetal

M2CTMenc M2CTMenc

captop

"PLUS" inOut
all
captop

CTMM3enc CTMM3enc
<-Metal3->
CapMetal

space V2sp V2sp


Via2[]

M3V2enc M3V2enc V2w

V2w Via2[]

V2w

V2w M3V2enc M3V2enc

CTMM3enc CTMM3enc
Sep 24, 2008 page 220

OLD CDF/PCELL/CALLBACK Definitions


Sep 24, 2008 page 221

Junction Varactors
Sep 24, 2008 page 222

Junction Varactor Pcells


xjvar_w40 pcell
pcell gpdk180 xjvar_w40

PCell formal params


pcw = cdfParseFloatString(w) * 1e6
w string cdf
pcl = cdfParseFloatString(l) * 1e6
l string cdf
pcnf = fix(cdfParseFloatString(nf)) nf string cdf

dpt = PasGetDeviceProps( cv )
co_w = dpt->CwW
co_l = dpt->CwW
co_s = dpt->CwSp
sd_enc_cw_xm = dpt->M1CwEncXm
sd_enc_cw_xp = gpdk180_PDKsnapToGrid((pcl - co_w) / 2 grid)
sd_enc_cw_x = dpt->SDCwEncY
sd_enc_cw_y = dpt->SDCwEncY
m1_ext = dpt->M1Ext
m1_enc_cw_xm = dpt->M1CwEncXm
m1_enc_cw_xp = dpt->M1CwEncXp
mi_enc_sd_x = dpt->MISDEncX
mi_enc_sd_y = dpt->MISDEncY
sd_enc_m1_xm = sd_enc_cw_xm - m1_enc_cw_xm
sd_enc_m1_xp = sd_enc_cw_xp - m1_enc_cw_xp
pi_sd_enc_x = dpt->PISDEncX
pi_sd_enc_y = dpt->PISDEncY
sd_sp = dpt->SDSp
nw_enc_sd_x = dpt->NWSDEncX
nw_enc_sd_y = dpt->NWSDEncY
ri_enc_sd_x = dpt->RISDEncX
ri_enc_sd_y = dpt->RISDEncY
ri2_enc_sd_x = dpt->RI2SDEncX
ri2_enc_sd_y = dpt->RI2SDEncY
m1_sw = dpt->M1SW
msPwNw = 0.5
mwPwGr = 0.6
Sep 24, 2008 page 223

pcell gpdk180 xjvar_w40


1: include
first_sd_reg
mi_enc_sd_x mi_enc_sd_y
sd_enc_cw_xm sd_enc_cw_y <-Nimp->
Oxide Oxide

Cont[] <-Metal1-> sd_enc_m1_xm 0


co_l

co_w mi_enc_sd_x mi_enc_sd_y

pcw space co_s co_s right


co_w

Cont[]
co_l first_sd_reg

ref
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext

2: include

finger[1] pi_sd_enc_x pi_sd_enc_y


sd_enc_m1_xp m1_ext
sd_enc_cw_xp sd_enc_cw_y <-Metal1->
Oxide
<-JVAR3dummy->
Cont[] <-Pimp->
co_l 0.2 0
Oxide
0.2 1
co_w
pcw space co_s co_s right
co_w

Oxide
Cont[]
co_l
finger[1]

pcl sd_enc_m1_xp 0
sd_sp 0
pi_sd_enc_x pi_sd_enc_y
first_sd_reg sd_enc_cw_xp sd_enc_cw_y
Sep 24, 2008 page 224

pcell gpdk180 xjvar_w40


3: for f 2 pcnf
sd_reg[f] sd_enc_m1_xm 0
sd_enc_cw_xm sd_enc_cw_y mi_enc_sd_x mi_enc_sd_y
Oxide
Oxide
<-Nimp->
Cont[] Oxide
co_l <-Metal1->

co_w

pcw space co_s co_s right


co_w

Cont[]
sd_reg[f]
co_l

sd_sp 0 co_w + 2 * m1_enc_cw_xm


finger[f - 1]
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
pi_sd_enc_x pi_sd_enc_y
Oxide Oxide
<-Metal1->
Cont[]
co_l <-JVAR3dummy->
<-Pimp->
co_w Oxide 0.2 0
0.2 1
pcw space co_s co_s right
co_w

Cont[]
co_l

finger[f]
sd_sp 0 pcl
sd_reg[f]
sd_enc_cw_xp sd_enc_cw_y sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
Sep 24, 2008 page 225

pcell gpdk180 xjvar_w40

4: include

last_sd_reg mi_enc_sd_x mi_enc_sd_y


<-Nimp->
sd_enc_cw_xm sd_enc_cw_y
Oxide Oxide Oxide
<-Metal1-> sd_enc_m1_xm 0
Cont[]
co_l

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
finger[pcnf] co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y

5: include

"ANODE" inOut
left right top <-Metal1->
pin name "ANODE"

0 m1_ext 0 m1_ext + m1_sw

<-Nwell-> jvnw
Oxide Oxide

nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y

0 m1_ext

first_sd_reg last_sd_reg
"CATHODE" inOut 0 m1_ext + m1_sw
left right bottom <-Metal1->
pin name "CATHODE"
Sep 24, 2008 page 226

pcell gpdk180 xjvar_w40

6: include

0 pi_sd_enc_y

<-Pimp->
"BULK" inOut
<-Oxide-> right top bottom
must group BULK[0]
0 pi_sd_enc_y

"BULK" inOut [Nwell] msPwNw mwPwGr + msPwNw


msPwNw msPwNw
left top bottom
must group BULK[0]
pi_sd_enc_x pi_sd_enc_y
jvnw
<-Pimp-> pi_sd_enc_x pi_sd_enc_y <-Pimp->
<-Metal1-> msPwNw mwPwGr + msPwNw <-Metal1->
<-Oxide-> 00 <-Oxide-> 00
sd_enc_cw_x sd_enc_cw_y
msPwNw mwPwGrCont[]
+ msPwNw sd_enc_cw_x sd_enc_cw
co_l Cont[]
co_l

co_w [Nwell] [Nwell]


co_w
space co_s co_s right
space co_s co_s right
co_w jvnw
jvnw co_w
Cont[]
co_l Cont[]
mwPwGr + msPwNw mwPwGr + msPwNw co_l
pi_sd_enc_x pi_sd_enc_y
sd_enc_cw_x sd_enc_cw_y
00 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
Sep 24, 2008 page 227

pcell gpdk180 xjvar_w40

7: include

<-JVAR1dummy->

mwPwGr + msPwNw mwPwGr + msPwNw


[Nwell]

jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
Sep 24, 2008 page 228

xjvar_nf36 pcell
pcell gpdk180 xjvar_nf36

PCell formal params


pcw = cdfParseFloatString(w) * 1e6
w string cdf
pcl = cdfParseFloatString(l) * 1e6
l string cdf
pcnf = fix(cdfParseFloatString(nf)) nf string cdf

dpt = PasGetDeviceProps( cv )
co_w = dpt->CwW
co_l = dpt->CwW
co_s = dpt->CwSp
sd_enc_cw_xm = dpt->M1CwEncXm
sd_enc_cw_xp = gpdk180_PDKsnapToGrid((pcl - co_w) / 2 grid)
sd_enc_cw_x = dpt->SDCwEncY
sd_enc_cw_y = dpt->SDCwEncY
m1_ext = dpt->M1Ext
m1_enc_cw_xm = dpt->M1CwEncXm
m1_enc_cw_xp = dpt->M1CwEncXp
mi_enc_sd_x = dpt->MISDEncX
mi_enc_sd_y = dpt->MISDEncY
sd_enc_m1_xm = sd_enc_cw_xm - m1_enc_cw_xm
sd_enc_m1_xp = sd_enc_cw_xp - m1_enc_cw_xp
pi_sd_enc_x = dpt->PISDEncX
pi_sd_enc_y = dpt->PISDEncY
sd_sp = dpt->SDSp
nw_enc_sd_x = dpt->NWSDEncX
nw_enc_sd_y = dpt->NWSDEncY
ri_enc_sd_x = dpt->RISDEncX
ri_enc_sd_y = dpt->RISDEncY
ri2_enc_sd_x = dpt->RI2SDEncX
ri2_enc_sd_y = dpt->RI2SDEncY
m1_sw = dpt->M1SW
msPwNw = 0.5
mwPwGr = 0.6
Sep 24, 2008 page 229

pcell gpdk180 xjvar_nf36


1: include
first_sd_reg
mi_enc_sd_x mi_enc_sd_y
sd_enc_cw_xm sd_enc_cw_y <-Nimp->
Oxide Oxide

Cont[] <-Metal1-> sd_enc_m1_xm 0


co_l

co_w mi_enc_sd_x mi_enc_sd_y

pcw space co_s co_s right


co_w

Cont[]
co_l first_sd_reg

ref
co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y
sd_enc_m1_xm m1_ext

2: include

finger[1] pi_sd_enc_x pi_sd_enc_y


sd_enc_m1_xp m1_ext
sd_enc_cw_xp sd_enc_cw_y <-Metal1->
Oxide
<-JVAR3dummy->
Cont[] <-Pimp->
co_l 0.2 0
Oxide

co_w
pcw space co_s co_s right
co_w

Oxide
Cont[]
co_l
finger[1]

pcl 0.2 0 sd_enc_m1_xp 0


sd_sp 0
pi_sd_enc_x pi_sd_enc_y
first_sd_reg sd_enc_cw_xp sd_enc_cw_y
Sep 24, 2008 page 230

pcell gpdk180 xjvar_nf36


3: for f 2 pcnf
sd_reg[f] sd_enc_m1_xm 0
sd_enc_cw_xm sd_enc_cw_y mi_enc_sd_x mi_enc_sd_y
Oxide
Oxide
<-Nimp->
Cont[] Oxide
co_l <-Metal1->

co_w

pcw space co_s co_s right


co_w

Cont[]
sd_reg[f]
co_l

sd_sp 0 co_w + 2 * m1_enc_cw_xm


finger[f - 1]
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
pi_sd_enc_x pi_sd_enc_y
Oxide Oxide
<-Metal1->
Cont[]
co_l
<-Pimp->
co_w Oxide
pcw space co_s co_s right
co_w

Cont[]
co_l

finger[f]
sd_sp 0 pcl
sd_reg[f]
sd_enc_cw_xp sd_enc_cw_y sd_enc_m1_xp 0
pi_sd_enc_x pi_sd_enc_y
Sep 24, 2008 page 231

pcell gpdk180 xjvar_nf36

4: include

last_sd_reg mi_enc_sd_x mi_enc_sd_y


<-Nimp->
sd_enc_cw_xm sd_enc_cw_y
Oxide Oxide Oxide
<-Metal1-> sd_enc_m1_xm 0
Cont[]
co_l

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
finger[pcnf] co_w + 2 * m1_enc_cw_xm
sd_enc_cw_xm sd_enc_cw_y

5: include

"ANODE" inOut
left right top <-Metal1->
pin name "ANODE"

0 m1_ext 0 m1_ext + m1_sw

<-Nwell-> jvnw
Oxide Oxide

nw_enc_sd_x nw_enc_sd_y
nw_enc_sd_x nw_enc_sd_y

0 m1_ext

first_sd_reg last_sd_reg
"CATHODE" inOut 0 m1_ext + m1_sw
left right bottom <-Metal1->
pin name "CATHODE"
Sep 24, 2008 page 232

pcell gpdk180 xjvar_nf36

6: include

0 pi_sd_enc_y

<-Pimp->
"BULK" inOut
<-Oxide-> right top bottom
must group BULK[0]
0 pi_sd_enc_y

"BULK" inOut [Nwell] msPwNw mwPwGr + msPwNw


msPwNw msPwNw
left top bottom
must group BULK[0]
pi_sd_enc_x pi_sd_enc_y
jvnw
<-Pimp-> pi_sd_enc_x pi_sd_enc_y <-Pimp->
<-Metal1-> msPwNw mwPwGr + msPwNw <-Metal1->
<-Oxide-> 00 <-Oxide-> 00
sd_enc_cw_x sd_enc_cw_y
msPwNw mwPwGrCont[]
+ msPwNw sd_enc_cw_x sd_enc_cw
co_l Cont[]
co_l

co_w [Nwell] [Nwell]


co_w
space co_s co_s right
space co_s co_s right
co_w jvnw
jvnw co_w
Cont[]
co_l Cont[]
mwPwGr + msPwNw mwPwGr + msPwNw co_l
pi_sd_enc_x pi_sd_enc_y
sd_enc_cw_x sd_enc_cw_y
00 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
Sep 24, 2008 page 233

pcell gpdk180 xjvar_nf36

7: include

<-JVAR2dummy->

mwPwGr + msPwNw mwPwGr + msPwNw


[Nwell]

jvnw
mwPwGr + msPwNw mwPwGr + msPwNw
Sep 24, 2008 page 234

Junction Varactor CDF


xjvar_w40 cdf

CDF gpdk180 xjvar_w40


CDF parameters CDF parameters
CDF device params name "w" name "l"
CwSp 0.2 private prompt "Width (M)" prompt "Length (M)"
CwW 0.2 private defValue "4e-05" defValue "6e-07"
M1CwEncXm 0.2 private type "string" type "string"
M1CwEncXp 0.2 private editable "nil" editable "nil"
M1CwEncY 0.2 private parseAsNumber "yes" parseAsNumber "yes"
M1Ext 0.48 private parseAsCEL "yes" parseAsCEL "yes"
M1SW 1.54 private
MISDEncX 0.2 private
MISDEncY 0.2 private CDF parameters
MaxF 50 public name "m"
MaxW 60e-6 public prompt "Multiplier"
MinF 1 public defValue "1"
MinW 20e-6 public type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_jvCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF device params CDF parameters


NWSDEncX 0.5 private name "nf"
NWSDEncY 0.5 private prompt "Number of Fingers"
PIMISp 0.0 private defValue "4"
PISDEncX 0.2 private type "string"
PISDEncY 0.2 private callback "gpdk180_jvCB()"
RI2SDEncX 0.2 private parseAsNumber "yes"
RI2SDEncY 0.2 private parseAsCEL "yes"
RISDEncX 0.2 private
RISDEncY 0.2 private
CDF parameters
SDCwEncX 0.2 private
name "model"
SDCwEncY 0.2 private
prompt "Model Name"
SDSp 0.3 private
defValue "xjvar_w40"
category "varactors" private
type "string"
editable "nil"
parseAsCEL "yes"
Sep 24, 2008 page 235

CDF gpdk180 xjvar_w40


CDF siminfo
simulator ams
propMapping (nil)
instParameters (model nf m)
otherParameters (model)
termOrder (ANODE CATHODE BULK)
isPrimitive t

CDF siminfo
simulator spectre
instParameters (nf m)
otherParameters (model)
termMapping (nil ANODE ":1" CATHODE ":2" BULK ":3")
termOrder (ANODE CATHODE BULK)
componentName subcircuit

CDF cellview
auCdl baseline_gpdk jvar symbol
auLvs baseline_gpdk jvar symbol
spectre baseline_gpdk jvar symbol
symbol baseline_gpdk jvar symbol
ivpcell $lib $cell symbol 5

CDF siminfo
simulator auCdl
namePrefix "X"
CDF properties
termOrder (ANODE CATHODE BULK)
formInitProc ""
instParameters (model nf m)
doneProc ""
netlistProcedure _ansCdlSubcktCall
buttonFieldWidth 340
fieldHeight 35
CDF siminfo fieldWidth 350
simulator auLvs promptWidth 175
namePrefix D paramLabelSet "-model nf m"
termOrder (ANODE CATHODE BULK)
componentName "xjvar_w40"
instParameters (nf m)
netlistProcedure ansLvsCompPrim
Sep 24, 2008 page 236

xjvar_nf36 cdf

CDF gpdk180 xjvar_nf36


CDF parameters CDF parameters
CDF device params name "w" name "l"
CwSp 0.2 private prompt "Width (M)" prompt "Length (M)"
CwW 0.2 private defValue "2e-05" defValue "6e-07"
M1CwEncXm 0.2 private type "string" type "string"
M1CwEncXp 0.2 private callback "gpdk180_jvCB()"editable "nil"
M1CwEncY 0.2 private parseAsNumber "yes" parseAsNumber "yes"
M1Ext 0.48 private parseAsCEL "yes" parseAsCEL "yes"
M1SW 1.54 private
MISDEncX 0.2 private
MISDEncY 0.2 private CDF parameters
MaxF 50 public name "m"
MaxW 60e-6 public prompt "Multiplier"
MinF 1 public defValue "1"
MinW 20e-6 public type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_jvCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF device params CDF parameters


NWSDEncX 0.5 private name "nf"
NWSDEncY 0.5 private prompt "Number of Fingers"
PIMISp 0.0 private defValue "36"
PISDEncX 0.2 private type "string"
PISDEncY 0.2 private editable "nil"
RI2SDEncX 0.2 private parseAsNumber "yes"
RI2SDEncY 0.2 private parseAsCEL "yes"
RISDEncX 0.2 private
RISDEncY 0.2 private
CDF parameters
SDCwEncX 0.2 private
name "model"
SDCwEncY 0.2 private
prompt "Model Name"
SDSp 0.3 private
defValue "xjvar_nf36"
category "varactors" private
type "string"
editable "nil"
parseAsCEL "yes"
Sep 24, 2008 page 237

CDF gpdk180 xjvar_nf36


CDF siminfo
simulator ams
propMapping (nil)
instParameters (model w m)
otherParameters (model)
termOrder (ANODE CATHODE BULK)
isPrimitive t

CDF siminfo
simulator spectre
instParameters (w m)
otherParameters (model)
termMapping (nil ANODE ":1" CATHODE ":2" BULK ":3")
termOrder (ANODE CATHODE BULK)
componentName subcircuit

CDF cellview
auCdl baseline_gpdk jvar symbol
auLvs baseline_gpdk jvar symbol
spectre baseline_gpdk jvar symbol
symbol baseline_gpdk jvar symbol
ivpcell $lib $cell symbol 5

CDF siminfo
simulator auCdl
namePrefix "X"
CDF properties
termOrder (ANODE CATHODE BULK)
formInitProc ""
instParameters (model w m)
doneProc ""
netlistProcedure _ansCdlSubcktCall
buttonFieldWidth 340
fieldHeight 35
CDF siminfo fieldWidth 350
simulator auLvs promptWidth 175
namePrefix D paramLabelSet "-model w m"
termOrder (ANODE CATHODE BULK)
componentName "xjvar_nf36"
instParameters (w m)
netlistProcedure ansLvsCompPrim
Sep 24, 2008 page 238

Junction Varactor Callback


CDF Callback
/*
* File : jv.cb
*
* Purpose : CDF Callback for junction varactor
*
* Author(s) : Padman S
*
* Created : 02/20/02
*
* Notes :
*
* Modified : 07/23/03 johnag Updates for PAS
*
* Copyright (C) 2004 Cadence Design Systems, Inc.
* All Rights Reserved.
*/

procedure(gpdk180_jvCB()
let((bagId libName cellName m nf minF maxF nfVar wVal wVar minW maxW)

libName = or(cdfgData~>id~>libName cdfgData~>id~>lib~>name )


cellName = or(cdfgData~>id~>cellName cdfgData~>id~>name )
bagId = PasGetPdkParams(libName cellName)

minF = bagId->MinF
maxF = bagId->MaxF
minW = bagId->MinW
maxW = bagId->MaxW

; check "m"
if(rexMatchp("^[ ]*$" cdfgData->m->value) then
artError("Multiplier value must be a positive integer - set to default")
m = cdfParseFloatString(cdfgData->m->defValue)
else
m = cdfParseFloatString(cdfgData->m->value)
)
unless((m && floatp(m))
artError("Multiplier value must be a number - setting to default")
m = cdfParseFloatString(cdfgData->m->defValue)
)
if(m < 1 then
artError("Multiplier must be a positive integer - setting to default")
m = cdfParseFloatString(cdfgData->m->defValue)
)
cdfgData->m->value = sprintf(nil "%d" fix(m))

; check "nf"...
Sep 24, 2008 page 239

Diode Macro

CDF macro diode

CDF parameters CDF parameters


name "model" name "macro"
prompt "Model name" prompt "Model name"
defValue "diode" defValue "iPar(\"model\")"
type "string" type "string"
editable "nil" display "nil"
parseAsCEL "yes" parseAsCEL "yes"

CDF parameters
name "w"
prompt "Width (M)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "l"
prompt "Length (M)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()~>cellViewType != \"maskLayout\""
callback "gpdk180_diodeCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF device params


category "diode" private Library Manager Category
Sep 24, 2008 page 240

CDF macro diode

CDF parameters
name "area"
prompt "Device area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW*PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "pj"
prompt "Periphery of junction"
defValue sprintf( nil "%g" 2*PasGetPdkParams("$lib" "$cell")~>MinW+2*PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF siminfo CDF parameters


simulator auCdl name "calcParam"
instParameters (area) prompt "Calculate Parameter"
netlistProcedure ansCdlCompPrim type "cyclic"
componentName diode choices list("area" "width" "length")
termOrder (PLUS MINUS) defValue "area"
namePrefix "D" display "nil"
modelName "$cell"

CDF siminfo
simulator auLvs
namePrefix "D"
termOrder (PLUS MINUS)
componentName "$cell"
instParameters (area m)
netlistProcedure ansLvsCompPrim

CDF siminfo
simulator spectre CDF siminfo
otherParameters (model) simulator ams
instParameters (area pj m) otherParameters (model)
termOrder (PLUS MINUS) instParameters (model area pj m)
termMapping (nil PLUS \:1 MINUS \:2) termOrder (PLUS MINUS)
componentName pdio isPrimitive t
Sep 24, 2008 page 241

CDF macro diode

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area Periph _M)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":P2")
propMapping (nil Area area Periph pj _M m)
typeMapping nil
uselib nil

CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
modelLabelSet "is rs n"
opPointLabelSet "i v region"
paramLabelSet "-model area m"
Sep 24, 2008 page 242

ndio

CDF gpdk180 ndio

include macro diode

CDF parameters
name "model"
defValue "$cell"

CDF device params CDF device params


MinW 0.6u private grid $grid private MFG Grid
MaxW 20.0u private scale 1.0e-6 private Dimension scale factor
MinL 0.6u private
MaxL 20.0u private

CDF cellview
symbol pas_std diode2 symbol
spectre pas_std diode2 symbol
auLvs pas_std diode2 symbol
auCdl pas_std diode2 symbol
ads pas_std diode2 symbol
ivpcell gpdk180 $cell symbol 40
Sep 24, 2008 page 243

pdio

CDF gpdk180 pdio

include macro diode

CDF parameters
name "model"
defValue "$cell"

CDF device params CDF device params


MinW 0.6u private grid $grid private MFG Grid
MaxW 20.0u private scale 1.0e-6 private Dimension scale factor
MinL 0.6u private
MaxL 20.0u private

CDF cellview
symbol pas_std diode2 symbol
spectre pas_std diode2 symbol
auLvs pas_std diode2 symbol
auCdl pas_std diode2 symbol
ads pas_std diode2 symbol
ivpcell gpdk180 $cell symbol 40
Sep 24, 2008 page 244

inductor
CDF gpdk180 ind
CDF parameters
name "ind"
prompt "Inductance (H)"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefInd)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF device params
CDF parameters
DefInd 5.95156e-10 private
name "nr"
DefNR 2.5 private
prompt "Number Of Turns"
MinR 20.0u private
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefNR)
MaxR 100.0u private
choices ’("1.5" "2.5" "3.5" "4.5" "5.5" "6.5" "7.5" "8.5" "9.5")
MinS 2.0u private
type "cyclic"
MaxS 10.0u private
callback "gpdk180_indCB()"
MinW 5.0u private
CDF parameters MaxW 20.0u private
name "rad"
prompt "Inner Radius"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinR)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "width"
prompt "Inductor Width"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "space"
prompt "Inductor Space"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinS)
type "string"
callback "gpdk180_indCB()"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 245

CDF gpdk180 ind

CDF parameters
name "model" CDF device params
prompt "Model" category "ind" private Library Manager Category
defValue "inductor"
type "string" CDF device params
display "nil" grid $grid private MFG Grid
parseAsCEL "yes" scale 1.0e-6 private Dimension scale factor
CDF parameters
name "m"
prompt "multiplier" CDF parameters
defValue "1" name "macro"
type "string" prompt "Model"
display "nil" defValue "iPar(\"model\")"
editable "nil" type "string"
parseAsNumber "yes" display "nil"
parseAsCEL "yes" parseAsCEL "yes"

CDF siminfo
simulator auCdl
modelName "$cell"
componentName ind
namePrefix "I"
propMapping (nil l ind)
termOrder (PLUS MINUS)
instParameters (l)
netlistProcedure ansCdlCompPrim

CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (ind)
componentName "$cell"
termOrder (PLUS MINUS)
namePrefix "I"

CDF siminfo
simulator spectre
propMapping (nil l ind) CDF siminfo
termMapping (nil PLUS \:1 MINUS \:2) simulator ams
instParameters (l) isPrimitive t
termOrder (PLUS MINUS) termOrder (PLUS MINUS)
otherParameters (model) instParameters ind
componentName ind
Sep 24, 2008 page 246

CDF gpdk180 ind

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (L)
componentName nil
termOrder (PLUS MINUS)
termMapping (nil PLUS ":P1" MINUS ":P2")
propMapping (nil L ind)
typeMapping nil
uselib nil

CDF properties CDF cellview


formInitProc "" symbol pas_std ind2 symbol
doneProc "" spectre pas_std ind2 symbol
buttonFieldWidth 340 auLvs pas_std ind2 symbol
fieldHeight 35 auCdl pas_std ind2 symbol
fieldWidth 350 ads pas_std ind2 symbol
promptWidth 175 ivpcell gpdk180 ind symbol 40
paramLabelSet "-model nr rad"
Sep 24, 2008 page 247

vpnp

CDF gpdk180 vpnp

CDF parameters CDF parameters


name "model" name "macro"
prompt "Model name" prompt "Model name"
defValue "vpnp" defValue "iPar(\"model\")"
type "string" type "string"
editable "nil" display "nil"
parseAsCEL "yes" parseAsCEL "yes"

CDF parameters CDF parameters


name "EmitterSize" name "area"
prompt "Emitter Size" prompt "Area"
defValue "1.3x1.3" defValue "1.69"
choices ’("1.3x1.3" "5.0x5.0") type "string"
type "cyclic" editable "nil"
callback "gpdk180_vpnpCB()" parseAsNumber "yes"
parseAsCEL "yes"

CDF device params


grid $grid private MFG Grid
scale 1.0e-6 private Dimension scale factor (not used)

CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_vpnpCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF device params


category "bip" private Library Manager Category
Sep 24, 2008 page 248

CDF gpdk180 vpnp

CDF siminfo
simulator auCdl
netlistProcedure ansCdlCompPrim
propMapping (nil M m EA area)
instParameters (EA M)
namePrefix "Q"
componentName vpnp
termOrder (C B E)
modelName "$cell"

CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"

CDF siminfo
simulator ams
isPrimitive t
termOrder (C B E)
instParameters (area m)
otherParameters (model)

CDF siminfo
simulator spectre
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
instParameters (area m)
otherParameters (model)
Sep 24, 2008 page 249

CDF gpdk180 vpnp

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil _M m)
typeMapping nil
uselib nil

CDF properties CDF cellview


formInitProc "" symbol pas_std pnp3 symbol
doneProc "" spectre pas_std pnp3 symbol
buttonFieldWidth 340 auLvs pas_std pnp3 symbol
fieldHeight 35 auCdl pas_std pnp3 symbol
fieldWidth 350 ads pas_std pnp3 symbol
promptWidth 175 ivpcell gpdk180 vpnp symbol 40
modelLabelSet "bf is vaf"
opPointLabelSet "betadc ic vce"
paramLabelSet "-model m area"
Sep 24, 2008 page 250

npn
CDF gpdk180 npn

CDF parameters CDF device params


name "model" MinE 0.6 private
prompt "Model name" MaxE 10.0 private
defValue "npn"
type "string" CDF device params
editable "nil" grid $grid private MFG Grid
parseAsCEL "yes" scale 1.0e-6 private Dimension scale factor (not used)
CDF parameters
name "Ewidth"
prompt "Emitter width"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
callback "gpdk180_bjtCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "area"
prompt "Area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_bjtCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters CDF device params


name "scaleF" category "bip" private Library Manager Category
prompt "Scale Factor"
defValue "1"
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 251

CDF gpdk180 npn

CDF parameters
name "macro"
prompt "Model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"

CDF siminfo
simulator auCdl
modelName "$cell"
termOrder (C B E)
componentName npn
namePrefix "Q"
instParameters (EA)
propMapping (nil EA area)
netlistProcedure ansCdlCompPrim

CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"

CDF siminfo
CDF siminfo
simulator spectre
simulator ams
propMapping (nil area scaleF)
isPrimitive t
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
termOrder (C B E)
instParameters (area m)
instParameters (area m)
propMapping (nil area scaleF)
otherParameters (model)
otherParameters (model)
Sep 24, 2008 page 252

CDF gpdk180 npn

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil Area scaleF _M m)
typeMapping nil
uselib nil

CDF properties
formInitProc "" CDF cellview
doneProc "" symbol pas_std npn3 symbol
buttonFieldWidth 340 spectre pas_std npn3 symbol
fieldHeight 35 auLvs pas_std npn3 symbol
fieldWidth 350 auCdl pas_std npn3 symbol
promptWidth 175 ads pas_std npn3 symbol
modelLabelSet "bf is vaf" ivpcell gpdk180 npn symbol 40
opPointLabelSet "betadc ic vce"
paramLabelSet "-model m area"
Sep 24, 2008 page 253

pnp

CDF gpdk180 pnp

CDF parameters CDF device params


name "model" MinE 0.6 private
prompt "Model name" MaxE 10.0 private
defValue "pnp"
type "string" CDF device params
editable "nil" grid $grid private MFG Grid
parseAsCEL "yes" scale 1.0e-6 private Dimension scale factor (not used)

CDF parameters
name "Ewidth"
prompt "Emitter width"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
callback "gpdk180_bjtCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "area"
prompt "Area"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinE*PasGetPdkParams("$lib" "$cell")~>MinE)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "m" CDF parameters
prompt "Multiplier" name "scaleF"
defValue "1" prompt "Scale Factor"
type "string" defValue "1"
editable "deGetEditCellView()->cellViewType != \"maskLayout\""type "string"
callback "gpdk180_bjtCB()" editable "nil"
parseAsNumber "yes" parseAsNumber "yes"
parseAsCEL "yes" parseAsCEL "yes"

CDF device params


category "bip" private Library Manager Category
Sep 24, 2008 page 254

CDF gpdk180 pnp

CDF parameters
name "macro"
prompt "Model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"

CDF siminfo
simulator auLvs
netlistProcedure ansLvsCompPrim
instParameters (area m)
componentName "$cell"
termOrder (C B E)
namePrefix "Q"

CDF siminfo
simulator auCdl
modelName "$cell"
termOrder (C B E)
componentName pnp
namePrefix "Q"
instParameters (EA)
propMapping (nil EA area)
netlistProcedure ansCdlCompPrim

CDF siminfo
CDF siminfo
simulator spectre
simulator ams
propMapping (nil area scaleF)
isPrimitive t
termMapping (nil C \:c B \:b E \:e)
termOrder (C B E)
termOrder (C B E)
instParameters (area m)
instParameters (area m)
propMapping (nil area scaleF)
otherParameters (model)
otherParameters (model)
Sep 24, 2008 page 255

CDF gpdk180 pnp

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (Area _M)
componentName nil
termOrder (C B E)
termMapping (nil C ":P1" B ":P2" E ":P3")
propMapping (nil Area scaleF _M m)
typeMapping nil
uselib nil

CDF properties
formInitProc "" CDF cellview
doneProc "" symbol pas_std pnp3 symbol
buttonFieldWidth 340 spectre pas_std pnp3 symbol
fieldHeight 35 auLvs pas_std pnp3 symbol
fieldWidth 350 auCdl pas_std pnp3 symbol
promptWidth 175 ads pas_std pnp3 symbol
modelLabelSet "bf is vaf" ivpcell gpdk180 pnp symbol 40
opPointLabelSet "betadc ic vce"
paramLabelSet "-model m area"
Sep 24, 2008 page 256

moscap macro

CDF macro moscap

CDF device params


dwGate 2.0 private Default channel width
mwGate {2A} private Minimum channel Width
xwGate 50.0 private Maximum channel Width
mlGate {5A} private Minimum channel Length
mxGate $mos_mxGate private Minimum gate extension
msGate $mos_msGate private Minimum gate spacing
meDiffGate $mos_meDiffGate private Minimum diffusion enclosure of gate
msGateCont $mos_msGateCont private Minimum gate to contact spacing
mwPoly $mos_mwPoly private MInimum poly width on field
msDiffPoly $mos_msDiffPoly private Minimum diffusion to poly spacing
mwCont $mos_mwCont private Minimum contact width
msCont $mos_msCont private Minimum contact spacing
masCont $mos_masCont private Minimum contact array spacing
meDiffCont $mos_meDiffCont private Minimum diffusion enclosure of contact
meeDiffCont $mos_meeDiffCont private Minimum diffusion end enclosure of contact
mePolyCont $mos_mePolyCont private Minimum poly enclusre of contact
meePolyCont $mos_meePolyCont private Minimum poly end enclosure of contact
mwM1 $mos_mwM1 private Minimum metal 1 width
msM1 $mos_msM1 private Minimum metal 1 spacing
meM1Cont $mos_meM1Cont private Minimum metal 1 enclosure of contact
meeM1Cont $mos_meeM1Cont private Minimum metal 1 end enclosure of contact
Sep 24, 2008 page 257

CDF macro moscap


CDF device params
CDF parameters
DefC 2.88f private
name "model"
MinW 0.6u private
prompt "Model name"
MaxW 100.0u private
type "string"
MinL 0.18u private
display "nil"
MaxL 20.0u private
editable "nil"
MaxF 1000 private
parseAsCEL "yes"
CapA 0.008 private
CapP 0.0 private
CDF parameters
name "c"
prompt "Capacitance (F)"
units "capacitance"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefC)
type "string"
editable "cdfgData->entryModeC->value != \"Length&Width\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "totalC"
prompt "Total Capacitance (F)"
units "capacitance"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>DefC)
type "string"
editable "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "entryModeC"
prompt "Capacitance Entry Mode"
defValue "Capacitance"
choices ’("Capacitance" "Cap&Length" "Cap&Width" "Length&Width")
type "cyclic"
callback "gpdk180_moscapCB()"
Sep 24, 2008 page 258

CDF macro moscap


CDF parameters
name "l"
prompt "Length (m)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinL)
type "string"
editable "cdfgData->entryModeC->value == \"Cap&Length\" ||
cdfgData->entryModeC->value == \"Length&Width\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "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 "w"
prompt "Width (m)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
editable "( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"TotalWidth\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "fw"
prompt "Width Per Finger (m)"
units "lengthMetric"
defValue sprintf( nil "%g" PasGetPdkParams("$lib" "$cell")~>MinW)
type "string"
editable "( cdfgData->entryModeC->value == \"Cap&Width\" ||
cdfgData->entryModeC->value == \"Length&Width\" ) &&
cdfgData->entryModeW->value == \"WidthPerFinger\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"
Sep 24, 2008 page 259

CDF macro moscap

CDF parameters
name "fingers"
prompt "Number of Fingers"
defValue "1"
type "string"
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "m"
prompt "Multiplier"
defValue "1"
type "string"
display "deGetEditCellView()->cellViewType != \"maskLayout\""
editable "deGetEditCellView()->cellViewType != \"maskLayout\""
callback "gpdk180_moscapCB()"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "simM"
prompt "Simulation Multiplier"
defValue "iPar(\"m\") * iPar(\"fingers\")"
type "string"
display "nil"
parseAsNumber "yes"
parseAsCEL "yes"

CDF parameters
name "macro"
prompt "macro model name"
defValue "iPar(\"model\")"
type "string"
display "nil"
parseAsCEL "yes"
Sep 24, 2008 page 260

CDF macro moscap

CDF parameters
CDF parameters CDF parameters
name "connectGates"
name "mtlCvg" name "rightAbut"
prompt "Gate Connection"
prompt "Metal Coverage" prompt "Right Abutment"
defValue "None"
defValue "" defValue 0
choices ’("None" "Top" "Bottom" "Both" "Alternate")
type "string" type "int"
type "radio"
display "nil" display "nil"
display "t"

CDF parameters CDF parameters CDF parameters


name "showTapParams" name "switchSD" name "leftAbut"
prompt "Show Tap Parameters" prompt "Switch S/D" prompt "Left Abutment"
defValue nil defValue nil defValue 0
type "boolean" type "boolean" type "int"
display "nil" display "nil" display "nil"

CDF parameters
name "sdMtlWidth" CDF parameters
prompt "S/D Metal Width" name "tapCntRows"
units "lengthMetric" prompt "Tap Contact Rows"
defValue ".4u" defValue 1
type "string" type "int"
display "nil" display "nil"
parseAsNumber "yes"
parseAsCEL "yes"
CDF parameters
name "connectSD"
CDF parameters
prompt "S/D Connection"
name "leftTap"
defValue "None"
prompt "Left Tap"
choices ’("None" "Source" "Drain" "Both")
defValue t
type "radio"
type "boolean"
display "gpdk180_mosDisplay(’connectSD)"
display "t"

CDF parameters
CDF parameters
name "bottomTap"
name "rightTap"
prompt "Bottom Tap" CDF parameters
prompt "Right Tap"
defValue nil name "tap"
defValue nil
type "boolean" prompt "Bodytie Type"
type "boolean"
display "t" defValue "Detached"
display "t"
choices ’( "None" "Detached" )
CDF parameters type "cyclic" CDF parameters
name "tapExtension" display "nil" name "topTap"
prompt "Tap Extension"
prompt "Top Tap"
defValue ""
defValue nil
type "string"
type "boolean"
display "nil"
display "t"
Sep 24, 2008 page 261

CDF macro moscap

CDF siminfo CDF siminfo


simulator auLvs simulator auCdl
permuteRule "" netlistProcedure ansCdlCompPrim
propMapping nil instParameters (L W M)
deviceTerminals "" termOrder (D G S B)
namePrefix "M" propMapping (nil L l W w M m)
termOrder (D G S B) namePrefix "M"
instParameters (w l m)
netlistProcedure ansLvsCompPrim

CDF siminfo CDF siminfo


simulator spectre simulator ams
opParamExprList (("cap" "OP(inst() \"cgg\")")) otherParameters (model)
termMapping (nil D \:d G \:g S \:s B \:b) instParameters (model w l m)
instParameters (w l m) termOrder (D G S B)
termOrder (D G S B) propMapping (nil m simM w fw)
propMapping (nil m simM w fw) isPrimitive t
otherParameters (model)

CDF siminfo
simulator ads
netlistProcedure ADSsimCompPrim
otherParameters (model)
instParameters (W L _M)
componentName nil
termOrder (D G S B)
termMapping (nil D ":P1" G ":P2" S ":P3" B ":P4")
propMapping (nil W fw L l _M simM)
typeMapping nil
uselib nil

CDF properties
formInitProc ""
doneProc ""
buttonFieldWidth 340
fieldHeight 35
fieldWidth 350
promptWidth 175
paramLabelSet "-totalC l w fingers"
opPointLabelSet "ids vgs vds vth vdsat"
modelLabelSet "vtho kf beta0"
Sep 24, 2008 page 262

nmoscap

CDF gpdk180 nmoscap

include macro moscap

CDF parameters CDF device params


name "model" grid $grid private MFG Grid
defValue "nmos1" scale 1e-6 private Dimension scale factor
model "nmos1" private Device Model Name
category "cap" private Library Manager Category

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meNblDiff .93 private Minimum Nbl enclosure of diff
meCapDiff .93 private Minimum Cap enclosure of diff
meNblTap .93 private Minimum Nbl enclosure of Tap
meCapTap .93 private Minimum Cap enclosure of Tap

CDF device params


msTapDiff $tap_nmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_nmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_nmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_nmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_nmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_nmos_maTap private Minimum tap diffusion area
maTimp $tap_nmos_maTimp private Minimum tap implant area

CDF cellview
CDF siminfo
symbol baseline_gpdk nmoscap4n symbol
simulator auCdl
spectre baseline_gpdk nmoscap4n symbol
componentName nmoscap
auLvs baseline_gpdk nmoscap4n symbol
modelName "$cell"
auCdl baseline_gpdk nmoscap4n symbol
ads baseline_gpdk nmoscap4n symbol
ivpcell gpdk180 nmoscap symbol 40
CDF siminfo
simulator auLvs
componentName nmoscap
Sep 24, 2008 page 263

nmoscap3

CDF gpdk180 nmoscap3

include macro moscap

CDF parameters CDF device params


name "model" grid $grid private MFG Grid
defValue "nmos1" scale 1e-6 private Dimension scale factor
model "nmos1" private Device Model Name
category "cap" private Library Manager Category

CDF device params


meImplDiff $nmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $nmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $nmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $nmos_meImplPoly private Minimum implant enclosure of poly on field
meNblDiff .93 private Minimum Nbl enclosure of diff
meCapDiff .93 private Minimum Cap enclosure of diff
meNblTap .93 private Minimum Nbl enclosure of Tap
meCapTap .93 private Minimum Cap enclosure of Tap

CDF device params


msTapDiff $tap_nmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_nmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_nmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_nmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_nmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_nmos_maTap private Minimum tap diffusion area
maTimp $tap_nmos_maTimp private Minimum tap implant area

CDF cellview
CDF siminfo
symbol baseline_gpdk nmoscap4n3 symbol
simulator auCdl
spectre baseline_gpdk nmoscap4n3 symbol
componentName nmoscap
auLvs baseline_gpdk nmoscap4n3 symbol
modelName nmoscap
auCdl baseline_gpdk nmoscap4n3 symbol
ads baseline_gpdk nmoscap4n3 symbol
ivpcell gpdk180 nmoscap3 symbol 40
CDF siminfo
simulator auLvs
componentName nmoscap
Sep 24, 2008 page 264

pmoscap

CDF gpdk180 pmoscap

include macro moscap

CDF parameters CDF device params


name "model" grid $grid private MFG Grid
defValue "pmos1" scale 1e-6 private Dimension scale factor
model "pmos1" private Device Model Name
category "cap" private Library Manager Category

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
meCapDiff $pmos_meWellDiff private Minimum cap enclosure of diffusion

CDF device params


msTapDiff $tap_pmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_pmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_pmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_pmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_pmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_pmos_maTap private Minimum tap diffusion area
maTimp $tap_pmos_maTimp private Minimum tap implant area
meWellTap $tap_pmos_meWellTap private Minimum well enclosure of tap diffusion
meCapTap $tap_pmos_meWellTap private Minimum capenclosure of tap diffusion

CDF cellview
CDF siminfo
symbol baseline_gpdk pmoscap4n symbol
simulator auCdl
spectre baseline_gpdk pmoscap4n symbol
componentName pmoscap
auLvs baseline_gpdk pmoscap4n symbol
modelName "$cell"
auCdl baseline_gpdk pmoscap4n symbol
ads baseline_gpdk pmoscap4n symbol CDF siminfo
ivpcell gpdk180 pmoscap symbol 40 simulator auLvs
componentName pmoscap
Sep 24, 2008 page 265

pmoscap3

CDF gpdk180 pmoscap3

include macro moscap

CDF parameters CDF device params


name "model" grid $grid private MFG Grid
defValue "pmos1" scale 1e-6 private Dimension scale factor
model "pmos1" private Device Model Name
category "cap" private Library Manager Category

CDF device params


meImplDiff $pmos_meImplDiff private Minimum implant enclosure of diffusion
meImplGate $pmos_meImplGate private Minimum implant enclosure of gate
meeImplGate $pmos_meeImplGate private Minimum implant end enclosure of gate
meImplPoly $pmos_meImplPoly private Minimum implant enclosure of poly on field
meWellDiff $pmos_meWellDiff private Minimum well enclosure of diffusion
meCapDiff $pmos_meWellDiff private Minimum cap enclosure of diffusion

CDF device params


msTapDiff $tap_pmos_msTapDiff private Minimum tap diffusion to device diffusion spacing
msTapImpl $tap_pmos_msTapImpl private Minimum tap diffusion to device implant spacing
meTimpTap $tap_pmos_meTimpTap private Minimum tap implant enclosure of tap diffusion
msTimpDiff $tap_pmos_msTimpDiff private Minimum tap implant to device diffusion spacing
msTimpImpl $tap_pmos_msTimpImpl private Minimum tap implant to device implant spacing
maTap $tap_pmos_maTap private Minimum tap diffusion area
maTimp $tap_pmos_maTimp private Minimum tap implant area
meWellTap $tap_pmos_meWellTap private Minimum well enclosure of tap diffusion
meCapTap $tap_pmos_meWellTap private Minimum capenclosure of tap diffusion

CDF cellview
CDF siminfo
symbol baseline_gpdk pmoscap4n3 symbol
simulator auCdl
spectre baseline_gpdk pmoscap4n3 symbol
componentName pmoscap
auLvs baseline_gpdk pmoscap4n3 symbol
modelName pmoscap
auCdl baseline_gpdk pmoscap4n3 symbol
ads baseline_gpdk pmoscap4n3 symbol CDF siminfo
ivpcell gpdk180 pmoscap3 symbol 40 simulator auLvs
componentName pmoscap
Sep 24, 2008 page 266

Component Callback Definitions

Common Callback Procedures


CDF Callback
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; gpdk180_PDKblankValueCheck()
;;;
;;; Purpose:
;;; Determine whether a test value is blank
;;;
;;; Parameters:
;;; paramName: name of parameter being checked which is used in the error
;;; statement if the value is blank
;;; testValue: value which is being compared for a blank entry
;;; defValue: default value of parameter being checked which is used for the
;;; new value of the parameter being checked if the test value is
;;; determined to be blank
;;;
;;; Outputs:
;;; returnValue: testValue that is adjusted depending on whether it is blank
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

procedure(gpdk180_PDKblankValueCheck(paramName testValue defValue)


prog((stringCondition numberCondition returnValue)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; determine whether the test value is a string or non string and whether it
;;; it has a blank value
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

stringCondition = stringp(testValue) &&


(testValue == "" || testValue == " ")
numberCondition = !stringp(testValue) && !testValue

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; print an error message if a blank value is encountered
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

if(stringCondition || numberCondition then


printf("*Error* %s must have a value - setting to default\n"
paramName)
returnValue = defValue
else
returnValue = testValue...
Sep 24, 2008 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...
Sep 24, 2008 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...
Sep 24, 2008 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")...
Sep 24, 2008 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
;;;...
Sep 24, 2008 page 271

Component PCell Code

Common Pcell Procedures


Skill Procedures

procedure( FpCeiling( value grid "ff" )


;; Returns the smallest multiple of grid not smaller than the given value
ceiling((value - grid/1000)/grid) * grid
)

procedure( Xor( a b "gg" )


(not(a) && b) || (a && not(b))
)
Sep 24, 2008 page 272

ndio
pcell gpdk180 ndio
ImpEncAnode = {4C} ContW = {6A}
PCell formal params
OxideSp = 0.5 M1EncCont = {7C}
w float cdf ImpEncCathode = {3C} AnodeEncCont = 0.2
l float cdf CathodeEncCont = 0.2 AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B} CathodeEncM1 = CathodeEncCont - M1EncCont
RlEncOxide = 0.1
RlEncOxide RlEncOxide
cathode anode
Nimp Pimp
[DIOdummy]

Oxide Oxide

l*1e6 l*1e6

w*1e6 w*1e6

ref
OxideSp 0 ImpEncAnode ImpEncAnode
ImpEncCathode ImpEncCathode
RlEncOxide RlEncOxide
CathodeEncCont CathodeEncCont
cathode AnodeEncCont AnodeEncCont anode
CathodeEncM1 CathodeEncM1
AnodeEncM1 AnodeEncM1
Oxide Oxide
"MINUS" inOut "PLUS" inOut
<-Metal1-> <-Metal1->
Cont[] all Cont[] all

ContWspace ContSp ContSp ContWspace ContSp ContSp

ContW ContW
Cont[] Cont[]

ContW ContW

ContW ContW

AnodeEncM1 AnodeEncM1
CathodeEncM1 CathodeEncM1

CathodeEncCont CathodeEncCont AnodeEncCont AnodeEncCont


Sep 24, 2008 page 273

pdio
pcell gpdk180 pdio
ImpEncAnode = {4C} ContW = {6A}
PCell formal params
OxideSp = 0.5 M1EncCont = {7C}
w float cdf ImpEncCathode = {3C} AnodeEncCont = 0.2
l float cdf CathodeEncCont = 0.2 AnodeEncM1 = AnodeEncCont - M1EncCont
ContSp = {6B} CathodeEncM1 = CathodeEncCont - M1EncCont
RlEncOxide = 0.4 NwEncOxide = 0.5
[Nwell]
RlEncOxide RlEncOxide NwEncOxide NwEncOxide
[DIOdummy]
Pimp anode Nimp cathode

Oxide Oxide

l*1e6 l*1e6

w*1e6 w*1e6
ref

NwEncOxide NwEncOxide OxideSp 0

ImpEncAnode ImpEncAnode RlEncOxide RlEncOxide ImpEncCathode ImpEncCathode

AnodeEncCont AnodeEncCont CathodeEncCont CathodeEncCont


anode cathode
AnodeEncM1 AnodeEncM1 CathodeEncM1 CathodeEncM1
Oxide Oxide
"PLUS" inOut "MINUS" inOut
<-Metal1-> <-Metal1->
Cont[] all Cont[] all

ContWspace ContSp ContSp ContWspace ContSp ContSp

ContW ContW
Cont[] Cont[]

ContW ContW

ContW ContW

AnodeEncM1 AnodeEncM1 CathodeEncM1 CathodeEncM1

AnodeEncCont AnodeEncCont
CathodeEncCont CathodeEncCont
Sep 24, 2008 page 274

inductor
pcell gpdk180 ind

PCell formal params


nr string cdf
rad float cdf
space float cdf
width float cdf

w = width * 1e6
s = space * 1e6
r = rad * 1e6
ref turn[1]
n = cdfParseFloatString(nr)
w
numHalfTurns = fix(n * 2.0)
Metal3 MinusTabL = RlEncInd
RlEncInd = 10.0
r r Rl2EncInd = 0.0
MetEncVia = 0.9
PlusTabL = fix(n) * (s + w) + RlEncInd

r * 2.0

2: for i 2 numHalfTurns
if evenp(i) if oddp(i)

L1 = r + (i / 2 - 1) * (s + w) L1 = r + (i - 1) / 2.0 * (s + w)
L2 = r * 2.0 + (i - 1) * (s + w) L2 = r * 2.0 + (i - 1) * (s + w)
L2 turn[i] Metal3 turn[i-1]

Metal3

L1 L1

w
w
turn[i-1]

L1 L1

Metal3 turn[i]
Metal3

L2
Sep 24, 2008 page 275

pcell gpdk180 ind

3: include

IND3dummy

turn[numHalfTurns] MetEncVia MetEncVia


MinusTab Metal2
Metal2 Via2[]

w space * *
Metal3
Via2[] w
MinusTabL

"MINUS" inOut
right
w

MetEncVia MetEncVia

IND2dummy

MetEncVia MetEncVia
turn[1]
PlusTab Metal2
Metal2 Via2[]

w space * *
Metal3
Via2[] w
PlusTabL

"PLUS" inOut
left
w

MetEncVia MetEncVia
Sep 24, 2008 page 276

pcell gpdk180 ind

4: include

<-INDdummy->
turn[numHalfTurns - 1]

RlEncInd RlEncInd
Metal3

Metal3
RlEncInd RlEncInd

turn[numHalfTurns]
Sep 24, 2008 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
Sep 24, 2008 page 278

pcell gpdk180 npn

Create the...
meWellDiff meWellDiff
<-Pwell->

<-Pimp-> <-Nimp->
BD ED

meImplDiff meImplDiff Oxide Oxide


meImplDiff meImplDiff

meImplDiff meImplDiff meImplDiff meImplDiff

meWellDiff meWellDiff
Create the...

ED meDiffCont meDiffCont
meDiffCont meDiffCont BD
Oxide
Oxide
mwCont
Cont[] mwCont
Cont[]
mwCont
mwCont

mwCont
space msCont msCont Cont[] mwCont
space msCont msCont Cont[]
mwCont
mwCont

meDiffCont meDiffCont
meDiffCont meDiffCont
Create the metal...
meM1Diff meM1Diff
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
Oxide
"B" inOut
"E" inOut all
all pin name "B"
pin name "E"

meM1Diff meM1Diff meM1Diff meM1Diff


Sep 24, 2008 page 279

pcell gpdk180 npn

meWellDiff meWellDiff Create the collector contacts:


CD
meImplDiff meImplDiff
Oxide
<-Nwell-> CD
<-Nimp-> mwCont
meDiffCont meDiffCont Cont[]
Oxide
mwCont

mwCont
space msCont msCont Cont[]

mwCont

meImplDiff meImplDiff
meWellDiff meWellDiff
meDiffCont meDiffCont
Create the PWel, NBuried, and the NPNdummy:

meThreshDiff meThreshDiff
<-Nburied->

<-NPNdummy->
Create the metal...

meM1Diff meM1Diff CD
CD Oxide
<-Metal1->

Oxide
"C" inOut
all ED
Oxide
pin name "C"
meThreshDiff meThreshDiff

meM1Diff meM1Diff
Sep 24, 2008 page 280

pnp

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
meM1Diff = meM1Cont - meDiffCont
Oxide
ED

alEmit

0.0 msEmitBase
ref 0 0
Ewidth
Oxide
BD

alEmit

0.0 msCollBase

Oxide

alEmit
CD

Ewidth
Sep 24, 2008 page 281

pcell gpdk180 pnp

Create the...
meWellDiff meWellDiff
<-Nwell->

<-Nimp-> <-Pimp->
BD ED

meImplDiff meImplDiff Oxide Oxide


meImplDiff meImplDiff

meImplDiff meImplDiff meImplDiff meImplDiff

meWellDiff meWellDiff

Create the...
ED meDiffCont meDiffCont
meDiffCont meDiffCont BD
Oxide
Oxide
mwCont
Cont[] mwCont
Cont[]
mwCont
mwCont

mwCont
space msCont msCont Cont[] mwCont
space msCont msCont Cont[]
mwCont
mwCont

meDiffCont meDiffCont
meDiffCont meDiffCont
Create the metal...
meM1Diff meM1Diff
meM1Diff meM1Diff
ED
BD
<-Metal1->
<-Metal1->
Oxide
Oxide
"B" inOut
"E" inOut all
all pin name "B"
pin name "E"

meM1Diff meM1Diff meM1Diff meM1Diff


Sep 24, 2008 page 282

pcell gpdk180 pnp

Create the collector contacts:


CD
meImplDiff meImplDiff
Oxide
CD
<-Pimp-> mwCont
meDiffCont meDiffCont Cont[]
Oxide
mwCont

mwCont
space msCont msCont Cont[]

mwCont
meDiffCont meDiffCo

meImplDiff meImplDiff

Create the PWel, NBuried, and the NPNdummy:

meThreshDiff meThreshDiff
<-Nburied->

meThreshDiff meThreshDiff
<-PNPdummy->
Create the metal...
meBaseDiff meBaseDiff <-Pwell->

meM1Diff meM1Diff ED
CD Oxide
<-Metal1->

Oxide
"C" inOut
all CDmeThreshDiff meBaseDiff
Oxide
pin name "C"

meThreshDiff meBaseDiff

meM1Diff meM1Diff
meBaseDiff meWellDiff
Sep 24, 2008 page 283

vpnp

pcell gpdk180 vpnp

PCell formal params These are the variables to


EmitterSize string cdf control the pcell. The first
section will map to DRC
rules and the second
Ewidth = evalstring( section are derived values.
substring( EmitterSize 1
difference(
strlen( EmitterSize )
strlen( index( EmitterSize "x" ) ) ) ) )

Elength = evalstring( substring( index( EmitterSize "x" ) 2 ))

mePimpDiff = {4C} 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


Sep 24, 2008 page 284

pcell gpdk180 vpnp

This page defines the...

origin = msEmitBase + mwBase + msBaseColl + mwColl + mePimpDiff + meBJTDum

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

"E" inOut
all
pin name "E"
emit
Sep 24, 2008 page 285

pcell gpdk180 vpnp

This page defines the base.


msEBM1 = msEmitBase + meDiffM1
inWidthBaseM1 = Ewidth + 2.0 * msEBM1
inLengthBaseM1 = Elength + 2.0 * msEBM1
meWellM1 = meWellDiff + meDiffM1

<-Nwell->
meWellM1 meWellM1
(Oxide)

mwBase
(Nimp)

mwNimp
Metal1

inWidthBaseM1

mwM1

Ewidth + msEBM1
0 meDiffCont

Oxide
space msCont
emit inLengthBaseM1

msEBM1 0
"B" inOut
msEBM1 all
pin name "B"

inWidthBaseM1

base

meWellM1 meWellM1
Sep 24, 2008 page 286

pcell gpdk180 vpnp

This page defines the...


msBCM1 = msBaseColl + 2 * meDiffM1
innerCollM1Part = msEmitBase + mwBase + msBaseColl + meDiffM1
inWidthCollM1 = Ewidth + 2.0 * innerCollM1Part
inLengthCollM1 = Elength + 2.0 * innerCollM1Part

<-BJTdum->

(Oxide) meBJTM1 meBJTM1

mwColl
(Pimp)

mwPimp
Metal1

inWidthCollM1

mwM1

Ewidth + innerCollM1Part
0 meDiffCont

space msCont
base inLengthCollM1

msBCM1 0
"C" inOut
innerCollM1Part all
pin name "C"

inWidthCollM1

coll

meBJTM1 meBJTM1
Sep 24, 2008 page 287

moscap (macro)
pcell macro moscap

999: include

<-Metal1->

Metal1 Metal1

metal[0] metal[gc]

"D" inOut
all
must group drain
Sep 24, 2008 page 288

nmoscap (uses nmos pcell) nmoscap3 (uses nmos pcell)


pcell gpdk180 nmoscap pcell gpdk180 nmoscap3

PCell formal params PCell formal params


fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF
tap string CDF tap string CDF
topTap boolean CDF topTap boolean CDF
bottomTap boolean CDF bottomTap boolean CDF
leftTap boolean CDF leftTap boolean CDF
rightTap boolean CDF rightTap boolean CDF
tapExtension string CDF tapExtension string CDF
tapCntRows int CDF tapCntRows int CDF

include macro mos include macro mos


include macro mos_nplus include macro mos_nplus
include macro mos_nbl_tap include macro mos_nbl_tap
include macro mos_cap_tap include macro mos_cap_tap
include macro mosTap include macro mosTap
include macro mosTap_pplus include macro mosTap_pplus
include macro mosItap_pplus include macro mosItap_pplus
include macro moscap
Sep 24, 2008 page 289

pmoscap (uses pmos pcell) pmoscap3 (uses pmos pcell)


pcell gpdk180 pmoscap pcell gpdk180 pmoscap3

PCell formal params PCell formal params


fw float CDF fw float CDF
l float CDF l float CDF
fingers float CDF fingers float CDF
connectGates string CDF connectGates string CDF
connectSD string CDF connectSD string CDF
switchSD boolean CDF switchSD boolean CDF
mtlCvg string CDF mtlCvg string CDF
sdMtlWidth float CDF sdMtlWidth float CDF
leftAbut int CDF leftAbut int CDF
rightAbut int CDF rightAbut int CDF
tap string CDF tap string CDF
topTap boolean CDF topTap boolean CDF
bottomTap boolean CDF bottomTap boolean CDF
leftTap boolean CDF leftTap boolean CDF
rightTap boolean CDF rightTap boolean CDF
tapExtension string CDF tapExtension string CDF
tapCntRows int CDF tapCntRows int CDF

include macro mos include macro mos


include macro mos_pplus include macro mos_pplus
include macro mos_nw_tap include macro mos_nw_tap
include macro mos_cap_tap include macro mos_cap_tap
include macro mosTap include macro mosTap
include macro mosTap_nplus include macro mosTap_nplus
include macro mosItap_nplus include macro mosItap_nplus
include macro moscap
Sep 24, 2008 page 290

Basic Test Structures


Sep 24, 2008 page 291

Taps

passcell gpdk180_layouts ptap

<-Pimp->

<-Metal1-> <-Oxide-> **

Cont ** Cont **

** **

ref c ** c

passcell gpdk180_layouts ntap

<-Nimp->

<-Metal1-> <-Oxide-> **

Cont ** Cont **

** **

ref c ** c
Sep 24, 2008 page 292

Create Layouts

passcell gpdk180_layouts placer

Pcell Macro Table


$lib $cell
gpdk180_layouts nmos
gpdk180_layouts nmos3
gpdk180_layouts pmos
gpdk180_layouts pmos3
gpdk180_layouts nplusres
gpdk180_layouts pplusres
gpdk180_layouts nwellres
gpdk180_layouts polyres
gpdk180_layouts polyhres
gpdk180_layouts mimcap
gpdk180_layouts nmoscap
gpdk180_layouts pmoscap
gpdk180_layouts ind
gpdk180_layouts ndio
gpdk180_layouts pdio
gpdk180_layouts npn
gpdk180_layouts pnp
gpdk180_layouts vpnp

gpdk180
$cell
$cell
gpdk180_layouts
R0
ptap
SUBTAP
R0

ref 0 0 ref 5 0
Sep 24, 2008 page 293

CDB layers CDB layers CDB layers


ResWdum 0 ResWdum Pwell 18 PWELL Psubiso 51 PSUBISO
Oxide 1 OXIDE Nburied 19 NBURIED scaPort 66 scaP
Nwell 2 NWELL NPNdummy 20 NPNDUMM scaNwell 67 scaNW
Poly 3 POLY PNPdummy 21 PNPDUMM scaNburied 68 scaNB
Nimp 4 NIMP DIOdummy 22 DIODUMM scaSelect 69 scaSel
Pimp 5 PIMP SiProt 23 SiProt IND3dummy 70 IND3dum
Cont 6 CONT ThickOxide 24 ThickOxide M1dummy 71 M1dum
Metal1 7 METAL1 Via3 30 VIA3 M2dummy 72 M2dum
Via1 8 VIA1 Metal4 31 METAL4 M3dummy 73 M3dum
Metal2 9 METAL2 Via4 32 VIA4 M4dummy 74 M4dum
Via2 10 VIA2 Metal5 33 METAL5 M5dummy 75 M5dum
Metal3 11 METAL3 Via5 34 VIA5 M6dummy 76 M6dum
Capdum 12 CAPDUM Metal6 35 METAL6 allGeoShare 100 allGeo
Resdum 13 RESDUM Bondpad 36 Bondpad OVERLAP 101 OVERLAP
CapMetal 14 CAPMETA WellBody 50 WELLBOD
BJTdum 15 BJTDUM
INDdummy 16 INDdumm
IND2dummy 17 IND2dum

CDB layers CDB layers CDB layers


Unrouted 200 Unroute designFlow 217 dsnFlow text 230 text
Row 201 Row stretch 218 stretch device 231 device
Group 202 Group edgeLayer 219 edgeLyr border 232 border
Cannotoccupy 203 noOcupy changedLayer 220 chngLyr snap 233 snap
Canplace 204 Canplac unset 221 unset align 234 align
hardFence 205 hardFnc unknown 222 unknown prBoundary 235 prBndry
softFence 206 softFnc spike 223 spike instance 236 instnce
y0 207 y0 hiz 224 hiz annotate 237 anotate
y1 208 y1 resist 225 resist marker 238 marker
y2 209 y2 drive 226 drive select 239 select
y3 210 y3 supply 227 supply grid 251 grid
y4 211 y4 wire 228 wire axis 252 axis
y5 212 y5 pin 229 pin hilite 253 hilite
y6 213 y6 background 254 bkground
y7 214 y7
y8 215 y8
y9 216 y9
Sep 24, 2008 page 294

CDB purposes
GeoShare 1 GeoShare
warning 234 wng
tool1 235 tl1
tool0 236 tl0
label 237 lbl
flight 238 flt
error 239 err
annotate 240 ant
drawing1 241 dr1
drawing2 242 dr2
drawing3 243 dr3
drawing4 244 dr4
drawing5 245 dr5
drawing6 246 dr6
drawing7 247 dr7
drawing8 248 dr8
drawing9 249 dr9
boundary 250 bnd
pin 251 pin
drawing 252 drw
net 253 net
cell 254 cel
all 255 all
Sep 24, 2008 page A1
$layer1 dummy
$layer2 dummy
$pcLayer1 dummy
ALL_GATES ( Poly and NPLUS andnot Nwell ) or ( Poly and PPLUS device_recognition
and Nwell )
BJTdum input 15;0 df2order 104 packet zbip
Bondpad input 36;0 df2order 96 packet pass
Bondpad_boundary input (Bondpad boundary) df2order 97 packet
pbaseBnd notChg notValid
Cannotoccupy input df2order 208 notChg notValid
Cannotoccupy_bounda input (Cannotoccupy boundary) df2order 209 packet
ry CannotoccupyBnd notChg notValid
Canplace input df2order 210 notChg notValid
CapMetal input 14;0 df2order 66 packet m4
CapMetal_boundary input (CapMetal boundary) df2order 68 packet m4
notChg notValid
CapMetal_net input (CapMetal net) df2order 67 packet m4 notChg
notValid
Capdum input 12;0 df2order 98 packet zcap
Cont input 6;0 df2order 69 packet cw via
Cont_boundary input (Cont boundary) df2order 72 packet cwBnd
notChg notValid
Cont_net input (Cont net) df2order 71 packet cwNet notChg
notValid
Cont_pin input (Cont pin) df2order 70 packet cwPin notChg
notValid
Contdum Cont and Metal1
DIOdummy input 22;0 df2order 107 packet zdiode
FIELD_POLY1 Poly andnot ALL_GATES
FIELD_POLY1_CONNECFIELD_POLY1 and Poly via
T
Group input df2order 206 notChg notValid
Group_label input (Group label) df2order 207 packet GroupLbl
notChg notValid
IND2dummy input 17;0 df2order 100 packet zind2
IND3dummy input 70;0 df2order 101 packet zind3
INDUCTOR (Metal3 or IND2dummy or IND3dummy) and INDdummy device_recognition
INDdummy input 16;0 df2order 99 packet zind
INDdummy_net input (INDdummy net) packet zindnet notChg notValid
INDterm1 INDdummy and IND2dummy
INDterm1Cont Metal2 and INDdummy and IND2dummy via
INDterm2 INDdummy and IND3dummy
INDterm2Cont Metal2 and INDdummy and IND3dummy via
ISONMOS POLYterm andnot Nwell and NPLUS andnot ThickOxide device_recognition
andnot Capdum and Nburied
ISONMOSCAP POLYterm andnot Nwell and NPLUS and Capdum and device_recognition
Nburied
ISONMOSHV POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum and Nburied andnot RFdummy
ISONMOSRF POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum and Nburied and RFdummy
ISONSDRES NSD and Resdum and Nburied device_recognition
ISOPWELL ((Nburied enclose (holes Nwell)) and (holes
Nwell))andnot Pwell
JVAR1dummy input 43;0 packet zjvar1 device_recognition
Sep 24, 2008 page A2
JVAR1dummy_net input (JVAR1dummy net) packet zjvar1 notChg
notValid
JVAR2dummy input 44;0 packet zjvar2 device_recognition
JVAR3dummy input 48;0 packet zjvar3 device_recognition
JVARNF JVAR1dummy and Nwell device_recognition
JVARW40 JVAR2dummy and Nwell device_recognition
JVARanode (JVAR1dummy or JVAR2dummy) andnot NSDterm
JVARterm PSDterm and (JVAR1dummy or JVAR2dummy) and soft_via
JVAR3dummy
M1dummy input 37;0 df2order 103 packet m1dum
M1res Metal1 and M1dummy device_recognition
M1term Metal1 andnot M1dummy
M2dummy input 38;0 df2order 103 packet m2dum
M2res Metal2 and M2dummy device_recognition
M2term Metal2 andnot M2dummy
M3dummy input 39;0 df2order 103 packet m3dum
M3res Metal3 and M3dummy device_recognition
M3term Metal3 andnot M3dummy
M4dummy input 40;0 df2order 103 packet m4dum
M4res Metal4 and M4dummy device_recognition
M4term Metal4 andnot M4dummy
M5dummy input 41;0 df2order 103 packet m5dum
M5res Metal5 and M5dummy device_recognition
M5term Metal5 andnot M5dummy
M6dummy input 42;0 df2order 103 packet m6dum
M6res Metal6 and M6dummy device_recognition
M6term Metal6 andnot M6dummy
MIMCAP CapMetal and Metal2 and Capdum device_recognition
Metal1 input 7;0 df2order 2 packet m1
Attach Text: 7;3 (Metal1 label)
Metal1_boundary input (Metal1 boundary) df2order 5 packet m1Bnd
notChg notValid
Metal1_drawing4 input 7;4 (Metal1 drawing4) df2order 1 packet m1
notChg notValid
Metal1_label input 7;3 (Metal1 label) df2order 0 packet m1 notChg
notValid
Metal1_net input 7;2 (Metal1 net) df2order 4 packet m1Net
notChg notValid
Metal1_pin input 7;1 (Metal1 pin) df2order 3 packet m1Pin notChg
notValid fillStyle X
Metal2 input 9;0 df2order 14 packet m2
Attach Text: 9;3 (Metal2 label)
Metal2_boundary input (Metal2 boundary) df2order 17 packet m2Bnd
notChg notValid
Metal2_drawing4 input 9;4 (Metal2 drawing4) df2order 13 packet m2
notChg notValid
Metal2_label input 9;3 (Metal2 label) df2order 12 packet m2 notChg
notValid
Metal2_net input 9;2 (Metal2 net) df2order 16 packet m2Net
notChg notValid
Metal2_pin input 9;1 (Metal2 pin) df2order 15 packet m2Pin
notChg notValid fillStyle X
Metal3 input 11;0 df2order 26 packet m3
Attach Text: 11;3 (Metal3 label)
Sep 24, 2008 page A3
Metal3_boundary input (Metal3 boundary) df2order 29 packet m3Bnd
notChg notValid
Metal3_drawing4 input 11;4 (Metal3 drawing4) df2order 25 packet m3
notChg notValid
Metal3_label input 11;3 (Metal3 label) df2order 24 packet m3
notChg notValid
Metal3_net input 11;2 (Metal3 net) df2order 28 packet m3Net
notChg notValid
Metal3_pin input 11;1 (Metal3 pin) df2order 27 packet m3Pin
notChg notValid fillStyle X
Metal4 input 31;0 df2order 38 packet m4
Attach Text: 31;3 (Metal4 label)
Metal4_boundary input (Metal4 boundary) df2order 41 packet m4Bnd
notChg notValid
Metal4_drawing4 input 31;4 (Metal4 drawing4) df2order 37 packet m4
notChg notValid
Metal4_label input 31;3 (Metal4 label) df2order 36 packet m4
notChg notValid
Metal4_net input 31;2 (Metal4 net) df2order 40 packet m4Net
notChg notValid
Metal4_pin input 31;1 (Metal4 pin) df2order 39 packet m4Pin
notChg notValid fillStyle X
Metal5 input 33;0 df2order 50 packet m5
Attach Text: 33;3 (Metal5 label)
Metal5_boundary input (Metal5 boundary) df2order 53 packet m5Bnd
notChg notValid
Metal5_drawing4 input 33;4 (Metal5 drawing4) df2order 49 packet m5
notChg notValid
Metal5_label input 33;3 (Metal5 label) df2order 48 packet m5
notChg notValid
Metal5_net input 33;2 (Metal5 net) df2order 52 packet m5Net
notChg notValid
Metal5_pin input 33;1 (Metal5 pin) df2order 51 packet m5Pin
notChg notValid fillStyle X
Metal6 input 35;0 df2order 62 packet m6
Attach Text: 35;3 (Metal6 label)
Metal6_boundary input (Metal6 boundary) df2order 65 packet m6Bnd
notChg notValid
Metal6_drawing4 input 35;4 (Metal6 drawing4) df2order 61 packet m6
notChg notValid
Metal6_label input 35;3 (Metal6 label) df2order 60 packet m6
notChg notValid
Metal6_net input 35;2 (Metal6 net) df2order 64 packet m6Net
notChg notValid
Metal6_pin input 35;1 (Metal6 pin) df2order 63 packet m6Pin
notChg notValid fillStyle X
NBVIA NWELLterm and Nburied soft_via
NDIODE DIOdummy and ( NSDterm andnot Nwell ) device_recognition
NMOS POLYterm andnot Nwell and NPLUS andnot ThickOxide device_recognition
andnot Capdum andnot Nburied
NMOSCAP POLYterm andnot Nwell and NPLUS and Capdum device_recognition
andnot Nburied
NMOSHV POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum andnot Nburied andnot RFdummy
Sep 24, 2008 page A4
NMOSRF POLYterm andnot Nwell and NPLUS and ThickOxide device_recognition
andnot Capdum andnot Nburied and RFdummy
NPLUS Nimp and Oxide
NPN NPNdummy and Pwell and Nburied and NSDterm device_recognition
NPNdummy input 20;0 df2order 105 packet znpn
NSD NPLUS andnot Poly
NSDRES NSD and Resdum andnot Nburied device_recognition
NSDarea (NPLUS cut Poly) andnot Poly
NSDcont Cont and NPLUS via
NSDterm NSD andnot Resdum
NWELLRES Nwell and ResWdum device_recognition
NWELLterm Nwell andnot ResWdum
NWVIA NSDterm and NWELLterm soft_via
Nburied input 19;0 df2order 88 packet npblk
Nburied_boundary input (Nburied boundary) df2order 90 packet npblkBnd
notChg notValid
Nburied_net input (Nburied net) df2order 89 packet npblk notChg
notValid
Nimp input 4;0 df2order 91 packet nplus
Nimp_boundary input (Nimp boundary) df2order 92 packet nplusBnd
notChg notValid
Nimp_net input (Nimp net) packet nplusBnd notChg notValid
Nwell input 2;0 df2order 79 packet nwell
Nwell_boundary input (Nwell boundary) df2order 81 packet nwellBnd
notChg notValid
Nwell_net input (Nwell net) df2order 80 packet nwellNet notChg
notValid
OVERLAP input 101;0 df2order 116 packet ovlap notSel notValid
OVERLAP_boundary input 101;5 (OVERLAP boundary) df2order 118 packet
ovlap notSel notChg
OVERLAP_label input 101;3 (OVERLAP label) df2order 117 packet ovlap
notSel notChg notValid
Oxide input 1;0 df2order 85 packet tox
Oxide_boundary input (Oxide boundary) df2order 87 packet toxBnd
notChg notValid
Oxide_net input (Oxide net) df2order 86 packet toxBnd notChg
notValid
PDIODE DIOdummy and PSDterm and Nwell device_recognition
PMOS POLYterm and Nwell and PPLUS andnot ThickOxide device_recognition
andnot Capdum
PMOSCAP POLYterm and Nwell and PPLUS and Capdum device_recognition
PMOSHV POLYterm and Nwell and PPLUS and ThickOxide device_recognition
andnot Capdum andnot RFdummy
PMOSRF POLYterm and Nwell and PPLUS and ThickOxide device_recognition
andnot Capdum and RFdummy
PNP PNPdummy and Nwell and Pwell and Nburied and device_recognition
PSDterm
PNPdummy input 21;0 df2order 106 packet zpnp
POLYHRES Poly and Resdum and SiProt device_recognition
POLYRES Poly and Resdum andnot SiProt device_recognition
POLYcont Cont and Poly via
POLYterm Poly andnot Resdum
PPLUS Pimp and Oxide
PSD PPLUS andnot Poly
PSDRES PPLUS and Resdum and Nwell device_recognition
Sep 24, 2008 page A5
PSDarea (PPLUS cut Poly) andnot Poly
PSDcont Cont and PPLUS via
PSDterm PSD andnot Resdum
PSUB (bulk andnot (Nburied or Nwell or Pwell)) or BJTdum
PWNBVIA (PSDterm and ISOPWELL) soft_via
PWVIA (PSDterm and Pwell) andnot Nwell soft_via
Pimp input 5;0 df2order 93 packet pplus
Pimp_boundary input (Pimp boundary) df2order 94 packet pplusBnd
notChg notValid
Pimp_net input (Pimp net) packet pplusBnd notChg notValid
Poly input 3;0 df2order 75 packet poly1
Poly_boundary input (Poly boundary) df2order 78 packet poly1Bnd
notChg notValid
Poly_drawing4 input 3;4 (Poly drawing4) df2order 74 packet poly1
notChg notValid
Poly_label input 3;3 (Poly label) df2order 73 packet poly1 notChg
notValid
Poly_net input 3;2 (Poly net) df2order 77 packet poly1Net
notChg notValid
Poly_pin input 3;1 (Poly pin) df2order 76 packet poly1Pin
notChg notValid
Psubiso input 51;0 df2order 109
Pwell input 18;0 df2order 82 packet pwell
Pwell_boundary input (Pwell boundary) df2order 84 packet pwellBnd
notChg notValid
Pwell_net input (Pwell net) df2order 83 packet pwellNet notChg
notValid
RFdummy input 69;0 df2order 102 packet zrf
ResWdum input 71;0 df2order 102 packet zrwell
Resdum input 13;0 df2order 102 packet zrpoly
Row input df2order 204 packet prBoundaryLbl notChg
Row_label input (Row label) df2order 205 packet RowLbl notChg
notValid
SUBVIA (PSUB and PSDterm) andnot Nburied andnot Nwell soft_via
SiProt input 72;0 df2order 95 packet siprot
ThickOxide input 24;0 df2order 85 packet thox
Unrouted input df2order 211 notChg notValid
Unrouted_drawing1 input (Unrouted drawing1) df2order 212 packet
Unrouted1 notChg notValid
Unrouted_drawing2 input (Unrouted drawing2) df2order 213 packet
Unrouted2 notChg notValid
Unrouted_drawing3 input (Unrouted drawing3) df2order 214 packet
Unrouted3 notChg notValid
Unrouted_drawing4 input (Unrouted drawing4) df2order 215 packet
Unrouted4 notChg notValid
Unrouted_drawing5 input (Unrouted drawing5) df2order 216 packet
Unrouted5 notChg notValid
Unrouted_drawing6 input (Unrouted drawing6) df2order 217 packet
Unrouted6 notChg notValid
Unrouted_drawing7 input (Unrouted drawing7) df2order 218 packet
Unrouted7 notChg notValid
Unrouted_drawing8 input (Unrouted drawing8) df2order 219 packet
Unrouted8 notChg notValid
Unrouted_drawing9 input (Unrouted drawing9) df2order 220 packet
Unrouted9 notChg notValid
Sep 24, 2008 page A6
VPNP (PSDterm and Nwell) interact (holes(PSDterm) interact device_recognition
holes(NSDterm) notInteract Poly) and BJTdum
Via1 input 8;0 df2order 9 packet v1 via
Via1_boundary input (Via1 boundary) df2order 11 packet v1Bnd
notChg notValid
Via1_drawing4 input 8;4 (Via1 drawing4) df2order 8 packet v1 notChg
notValid
Via1_label input 8;3 (Via1 label) df2order 6 packet v1 notChg
notValid
Via1_net input (Via1 net) df2order 10 packet v1Net notChg
notValid
Via1_pin input 8;1 (Via1 pin) df2order 7 packet v1 notChg
notValid
Via1dum Via1 and Metal2
Via2 input 10;0 df2order 21 packet v2 via
Via2Cap Via2 and CapMetal via
Via2NoCapInd Via2 and Metal2 andnot (CapMetal or INDdummy) via
Via2_boundary input (Via2 boundary) df2order 23 packet v2Bnd
notChg notValid
Via2_drawing4 input 10;4 (Via2 drawing4) df2order 20 packet v2
notChg notValid
Via2_label input 10;3 (Via2 label) df2order 19 packet v2 notChg
notValid
Via2_net input (Via2 net) df2order 22 packet v2Net notChg
notValid
Via2_pin input 10;1 (Via2 pin) df2order 18 packet v2 notChg
notValid
Via2dum Via2NoCapInd and Metal3
Via3 input 30;0 df2order 33 packet v3 via
Via3_boundary input (Via3 boundary) df2order 35 packet v3Bnd
notChg notValid
Via3_drawing4 input 30;4 (Via3 drawing4) df2order 32 packet v3
notChg notValid
Via3_label input 30;3 (Via3 label) df2order 31 packet v3 notChg
notValid
Via3_net input (Via3 net) df2order 34 packet v3Net notChg
notValid
Via3_pin input 30;1 (Via3 pin) df2order 30 packet v3 notChg
notValid
Via3dum Via3 and Metal4
Via4 input 32;0 df2order 45 packet v4 via
Via4_boundary input (Via4 boundary) df2order 47 packet v4Bnd
notChg notValid
Via4_drawing4 input 32;4 (Via4 drawing4) df2order 44 packet v4
notChg notValid
Via4_label input 32;3 (Via4 label) df2order 43 packet v4 notChg
notValid
Via4_net input (Via4 net) df2order 46 packet v4Net notChg
notValid
Via4_pin input 32;1 (Via4 pin) df2order 42 packet v4 notChg
notValid
Via4dum Via4 and Metal5
Via5 input 34;0 df2order 57 packet v5 via
Via5_boundary input (Via5 boundary) df2order 59 packet v5Bnd
notChg notValid
Sep 24, 2008 page A7
Via5_drawing4 input 34;4 (Via5 drawing4) df2order 56 packet v5
notChg notValid
Via5_label input 34;3 (Via5 label) df2order 55 packet v5 notChg
notValid
Via5_net input (Via5 net) df2order 58 packet v5Net notChg
notValid
Via5_pin input 34;1 (Via5 pin) df2order 54 packet v5 notChg
notValid
Via5dum Via5 and Metal6
WellBody input df2order 108 notVis notSel notChg notValid
align input df2order 137 notChg notValid
allGeoShare input 100;1 df2order 114 packet ovlap notVis notSel
notChg notValid
allGeoShare_GeoShare input 100;0 (allGeoShare GeoShare) df2order 115
packet ovlap
annotate input df2order 122 packet annotate notChg notValid
annotate_drawing1 input (annotate drawing1) df2order 123 packet
annotate1 notChg notValid
annotate_drawing2 input (annotate drawing2) df2order 124 packet
annotate2 notChg notValid
annotate_drawing3 input (annotate drawing3) df2order 125 packet
annotate3 notChg notValid
annotate_drawing4 input (annotate drawing4) df2order 126 packet
annotate4 notChg notValid
annotate_drawing5 input (annotate drawing5) df2order 127 packet
annotate5 notChg notValid
annotate_drawing6 input (annotate drawing6) df2order 128 packet
annotate6 notChg notValid
annotate_drawing7 input (annotate drawing7) df2order 129 packet
annotate7 notChg notValid
annotate_drawing8 input (annotate drawing8) df2order 130 packet
annotate8 notChg notValid
annotate_drawing9 input (annotate drawing9) df2order 131 packet
annotate9 notChg notValid
axis input df2order 156 packet axis notSel notChg notValid
background input df2order 119 packet background notSel notChg
notDrg notValid
border input df2order 144 packet border notChg notValid
bulk substrate
changedLayer_tool0 input (changedLayer tool0) df2order 200 packet
changedLayerTl0 notVis notSel notChg notDrg
notValid
changedLayer_tool1 input (changedLayer tool1) df2order 201 packet
changedLayerTl1 notVis notSel notChg notDrg
notValid
designFlow input df2order 190 packet designFlow notSel notChg
notDrg
designFlow_drawing1 input (designFlow drawing1) df2order 191 packet
designFlow1 notSel notChg notDrg
designFlow_drawing2 input (designFlow drawing2) df2order 192 packet
designFlow2 notSel notChg notDrg
designFlow_drawing3 input (designFlow drawing3) df2order 193 packet
designFlow3 notSel notChg notDrg
designFlow_drawing4 input (designFlow drawing4) df2order 194 packet
designFlow4 notSel notChg notDrg
Sep 24, 2008 page A8
designFlow_drawing5 input (designFlow drawing5) df2order 195 packet
designFlow5 notSel notChg notDrg
designFlow_drawing6 input (designFlow drawing6) df2order 196 packet
designFlow6 notSel notChg notDrg
designFlow_drawing7 input (designFlow drawing7) df2order 197 packet
designFlow7 notSel notChg notDrg
designFlow_drawing8 input (designFlow drawing8) df2order 198 packet
designFlow8 notSel notChg notDrg
designFlow_drawing9 input (designFlow drawing9) df2order 199 packet
designFlow9 notSel notChg notDrg
device input df2order 145 packet device notChg notValid
device_annotate input (device annotate) df2order 149 packet deviceAnt
notChg notValid
device_drawing1 input (device drawing1) df2order 147 packet device1
notChg notValid
device_drawing2 input (device drawing2) df2order 148 packet device2
notChg notValid
device_label input (device label) df2order 146 packet deviceLbl
notChg notValid
drive input df2order 183 packet drive notChg notValid
edgeLayer input df2order 157 packet edgeLayer notChg notValid
edgeLayer_pin input (edgeLayer pin) df2order 158 packet
edgeLayerPin notChg notValid
grid input df2order 120 packet grid notSel notChg notDrg
notValid
grid_drawing1 input (grid drawing1) df2order 121 packet grid1 notSel
notChg notDrg notValid
hardFence input df2order 138 packet hardFence notChg notValid
hilite input df2order 172 packet hilite notChg notValid
hilite_drawing1 input (hilite drawing1) df2order 173 packet hilite1
notChg notValid
hilite_drawing2 input (hilite drawing2) df2order 174 packet hilite2
notChg notValid
hilite_drawing3 input (hilite drawing3) df2order 175 packet hilite3
notChg notValid
hilite_drawing4 input (hilite drawing4) df2order 176 packet hilite4
notChg notValid
hilite_drawing5 input (hilite drawing5) df2order 177 packet hilite5
notChg notValid
hilite_drawing6 input (hilite drawing6) df2order 178 packet hilite6
notChg notValid
hilite_drawing7 input (hilite drawing7) df2order 179 packet hilite7
notChg notValid
hilite_drawing8 input (hilite drawing8) df2order 180 packet hilite8
notChg notValid
hilite_drawing9 input (hilite drawing9) df2order 181 packet hilite9
notChg notValid
hiz input df2order 184 packet hiz notChg notValid
instance input df2order 132 packet instance notChg notValid
instance_label input (instance label) df2order 133 packet instanceLbl
notChg notValid
marker_error input (marker error) df2order 203 packet markerErr
notChg notValid
marker_warning input (marker warning) df2order 202 packet
markerWarn notChg notValid
Sep 24, 2008 page A9
pin input df2order 154 packet pin notChg notValid
pin_annotate input (pin annotate) df2order 155 packet pinAnt
notChg notValid
pin_label input (pin label) df2order 153 packet pinLbl notChg
notValid
prBoundary input 235;0 df2order 134 packet prBoundary notChg
prBoundary_boundary input 235;5 (prBoundary boundary) df2order 135
packet prBoundaryBnd notChg notValid
prBoundary_label input (prBoundary label) df2order 136 packet
prBoundaryLbl notChg notValid
resist input df2order 185 packet resist notChg notValid
scaNburied_net input (scaNburied net) df2order 111 notSel notChg
notDrg notValid noTranslate
scaNwell_net input (scaNwell net) df2order 112 notSel notChg
notDrg notValid noTranslate
scaPort_net input (scaPort net) df2order 113 notSel notChg notDrg
notValid noTranslate
scaSelect input df2order 110 notChg noTranslate
select input df2order 182 packet select notChg notValid
snap input df2order 159 packet snap notChg notValid
snap_boundary input (snap boundary) df2order 160 packet snap
notChg notValid
softFence input df2order 139 packet softFence notChg notValid
spike input df2order 186 packet spike notChg notValid
stretch input df2order 161 packet stretch notChg notValid
supply input df2order 187 packet supply notChg notValid
text input 230;0 df2order 140 packet notChg
text_drawing1 input (text drawing1) df2order 142 packet text1
notChg notValid
text_drawing2 input (text drawing2) df2order 143 packet text2
notChg notValid
text_label input 230;3 (text label) df2order 141 packet notChg
unknown input df2order 188 packet unknown notChg notValid
unset input df2order 189 packet unset notChg notValid
wire input df2order 150 packet wire notChg notValid
wire_flight input (wire flight) df2order 152 packet wireFlt notChg
notValid
wire_label input (wire label) df2order 151 packet wireLbl notChg
notValid
y0 input df2order 162 packet y0 notChg notValid
y1 input df2order 163 packet y1 notChg notValid
y2 input df2order 164 packet y2 notChg notValid
y3 input df2order 165 packet y3 notChg notValid
y4 input df2order 166 packet y4 notChg notValid
y5 input df2order 167 packet y5 notChg notValid
y6 input df2order 168 packet y6 notChg notValid
y7 input df2order 169 packet y7 notChg notValid
y8 input df2order 170 packet y8 notChg notValid
y9 input df2order 171 packet y9 notChg notValid
Sep 24, 2008 page B1
0A Nburied width must be >= 1.0 um
0B Nburied to Nburied spacing must be >= 1.0 um
1A Nwell width must be >= 1.0 um
1B Nwell to Nwell spacing must be >= 1.0 um
1C Nburied to Nwell enclosure must be >= 0.3 um
1D Pwell width must be >= 1.0 um
1E Pwell to Pwell spacing must be >= 1.0 um
1F Nburied to Pwell enclosure must be >= 0.3 um
2.5A ThickOxide width must be >= 0.5 um
2.5B ThickOxide to ThickOxide spacing must be >= 0.4 um
2.5C ThickOxide to Oxide enclosure must be >= 0.25 um
2.5D ThickOxide to Oxide spacing must be >= 0.25 um
2.5E ThickOxide to Poly spacing must be >= 0.4 um
2.5F ThickOxide to Poly enclosure must be >= 0.4 um
2A Oxide width must be >= 0.4 um
2B Oxide to Oxide spacing must be >= 0.3 um
2C Nwell to Oxide enclosure must be >= 0.5 um
2C Pwell to Oxide enclosure must be >= 0.5 um
2D Nwell to Oxide spacing must be >= 0.5 um
2D Pwell to Oxide spacing must be >= 0.5 um
3A Nimp width must be >= 0.4 um
3B Nimp to Nimp spacing must be >= 0.4 um
3C Nimp to Oxide enclosure must be >= 0.2 um
3D Nburied to Nimp enclosure must be >= 0.6 um
4A Pimp width must be >= 0.4 um
4B Pimp to Pimp spacing must be >= 0.4 um
4C Pimp to Oxide enclosure must be >= 0.2 um
4D Nburied to Pimp enclosure must be >= 0.6 um
5A Poly width must be >= 0.18 um
5B Poly to Poly spacing must be >= 0.3 um
5C Poly to Oxide enclosure must be >= 0.2 um
5D Oxide to Poly enclosure must be >= 0.4 um
5E Oxide to Poly spacing must be >= 0.2 um
6A Cont shapes must be 0.2x0.2 rectangles
6B Cont to Cont spacing must be >= 0.2 um
6C Oxide to Cont enclosure must be >= 0.2 um
6D Poly to Cont enclosure must be >= 0.2 um
6E Poly to Cont spacing must be >= 0.2 um
6F Pimp to Cont enclosure must be >= 0.1 um
6G Nimp to Cont enclosure must be >= 0.1 um
6H Oxide to Cont spacing must be >= 0.2 um
7A Metal1 width must be >= 0.3 um
7B Metal1 to Metal1 spacing must be >= 0.3 um
7C Metal1 to Cont enclosure must be >= 0.1 um
8A Via1 shapes must be 0.2x0.2 rectangles
8B Via1 to Via1 spacing must be >= 0.3 um
8C Metal1 to Via1 enclosure must be >= 0.1 um
9A Metal2 width must be >= 0.3 um
Sep 24, 2008 page B2
9B Metal2 to Metal2 spacing must be >= 0.3 um
9C Metal2 to Via1 enclosure must be >= 0.1 um
10A Via2 shapes must be 0.2x0.2 rectangles
10B Via2 to Via2 spacing must be >= 0.3 um
10C Metal2 to Via2 enclosure must be >= 0.1 um
11A Metal3 width must be >= 0.3 um
11B Metal3 to Metal3 spacing must be >= 0.3 um
11C Metal3 to Via2NoCapInd enclosure must be >= 0.1 um
11D Metal3 to Via2Cap enclosure must be >= 0.1 um
12A CapMetal width must be >= 0.5 um
12B Metal2 to Via2Cap enclosure must be >= 0.1 um
12C CapMetal to Via2Cap enclosure must be >= 0.2 um
12D CapMetal to Metal3 enclosure must be >= 0.3 um
13A1 P+SD to NW tap spacing must be <= 10.0 um
13A2 N+SD to Iso Psub tap spacing must be <= 10.0 um
13A3 N+SD to Psub tap spacing must be <= 10.0 um
13A3 N+SD to PW tap spacing must be <= 10.0 um
14A Via3 shapes must be 0.2x0.2 rectangles
14B Via3 to Via3 spacing must be >= 0.3 um
14C Metal3 to Via3 enclosure must be >= 0.1 um
15A Metal4 width must be >= 0.3 um
15B Metal4 to Metal4 spacing must be >= 0.3 um
15C Metal4 to Via3 enclosure must be >= 0.1 um
16A Via4 shapes must be 0.2x0.2 rectangles
16B Via4 to Via4 spacing must be >= 0.3 um
16C Metal4 to Via4 enclosure must be >= 0.1 um
17A Metal5 width must be >= 0.3 um
17B Metal5 to Metal5 spacing must be >= 0.3 um
17C Metal5 to Via4 enclosure must be >= 0.1 um
18A Via5 shapes must be 0.2x0.2 rectangles
18B Via5 to Via5 spacing must be >= 0.3 um
18C Metal5 to Via5 enclosure must be >= 0.1 um
19A Metal6 width must be >= 0.3 um
19B Metal6 to Metal6 spacing must be >= 0.3 um
19C Metal6 to Via5 enclosure must be >= 0.1 um
20A Minimum Pad width = 45.0
20B Minimum Pad spacing to Pad = 10.0
20C Metal1 to Bondpad enclosure must be == 3.0 um
20D Metal2 to Bondpad enclosure must be == 3.0 um
20E Metal3 to Bondpad enclosure must be == 3.0 um
20F Metal4 to Bondpad enclosure must be == 3.0 um
20G Metal5 to Bondpad enclosure must be == 3.0 um
20H Metal6 to Bondpad enclosure must be == 3.0 um

You might also like