blob: 55954c35fbb767dfa990ddc7bdf7e958d44865a0 [file] [log] [blame]
###
### Source file TECHNAME.tech
### Process this file with the preproc.py macro processor
###
#----------------------------------------------------------
# Copyright (c) 2022 Efabless, Inc.
# Techfile created by R. Timothy Edwards for the Google/
# Global Foundries Open PDK project.
#
#----------------------------------------------------------
# This file is designed to be used with magic
# versions 8.3 or newer.
#
# Rules reflect lambda = 0.05um. Minimum grid is 0.005um
#----------------------------------------------------------
tech
format 34
TECHNAME
end
version
version REVISION
description "Global Foundries 180mcu: open PDK rules and DRC"
requires magic-8.3.411
end
#-----------------------------------------------------
# Tile planes
#-----------------------------------------------------
planes
dwell,dw
well,w
active,a
metal1,m1
metal2,m2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
metal3,m3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
metal4,m4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
metal5,m5
#endif (METALS5 || METALS6)
#ifdef METALS6
metaltp,mtp
#endif (METALS6)
block,b
comment,c
end
#-----------------------------------------------------
# Tile types
#-----------------------------------------------------
types
# Deep nwell
dwell deepnwell,dnwell,dnw
dwell isosubstrate,isosub
# Wells outside deep nwell
well nwell,nw
well pwell,pw
# Well obstruction layer
-well obswell
# Well resistors
well rnw,rnwell
well pbase,npn
well nbase,pnp
# Transistors
active nmos,ntransistor,nfet
active pmos,ptransistor,pfet
active nnmos,nntransistor,nnfet
active mvnmos,mvntransistor,mvnfet
active mvpmos,mvptransistor,mvpfet
active mvnnmos,mvnntransistor,mvnnfet
# Diffusions
active ndiff,ndiffusion,ndif
active pdiff,pdiffusion,pdif
active mvndiff,mvndiffusion,mvndif
active mvpdiff,mvpdiffusion,mvpdif
active ndiffc,ndcontact,ndc
active pdiffc,pdcontact,pdc
active mvndiffc,mvndcontact,mvndc
active mvpdiffc,mvpdcontact,mvpdc
active psubdiff,psubstratepdiff,ppdiff,ppd,psd
active nsubdiff,nsubstratendiff,nndiff,nnd,nsd
active mvpsubdiff,mvpsubstratepdiff,mvppdiff,mvppd,mvpsd
active mvnsubdiff,mvnsubstratendiff,mvnndiff,mvnnd,mvnsd
active psubdiffcont,psubstratepcontact,psc
active nsubdiffcont,nsubstratencontact,nsc
active mvpsubdiffcont,mvpsubstratepcontact,mvpsc
active mvnsubdiffcont,mvnsubstratencontact,mvnsc
active ldndiff,ldndiffusion,ldndif
active ldpdiff,ldpdiffusion,ldpdif
active ldndiffc,ldndcontact,ldndc
active ldpdiffc,ldpdcontact,ldpdc
-active obsactive
-active mvobsactive
# Varactors
active nvaractor,nvaract,nvar
active pvaractor,pvaract,pvar
active mvnvaractor,mvnvaract,mvnvar
active mvpvaractor,mvpvaract,mvpvar
# MOSCAPs
-active nmoscap,ncap
-active pmoscap,pcap
-active mvnmoscap,mvncap
-active mvpmoscap,mvpcap
# Poly
active polysilicon,poly,p
active polycontact,pcontact,polycut,pc,polyc
# Resistors
active npolyres,npres,rnp
active ppolyres,ppres,rpp
active npolysilicide,nsresistor,nspres,rnps
active ppolysilicide,psresistor,pspres,rpps
active efuse
#ifdef HRPOLY1K
active nhighres,nhires,hires
active mvnhighres,mvnhires,mvhires
#endif (HRPOLY1K)
active ndiffres,rnd,rdn,rndiff
active pdiffres,rpd,rdp,rpdiff
active ndiffsilicide,rnds,rdns,rndiffs
active pdiffsilicide,rpds,rdps,rpdiffs
active mvndiffres,mvrnd,mvrdn,mvrndiff
active mvpdiffres,mvrpd,mvrdp,mvrpdiff
active mvndiffsilicide,mvrnds,mvrdns,mvrndiffs
active mvpdiffsilicide,mvrpds,mvrdps,mvrpdiffs
# Diodes
active schottky,skdi
active schottkyc,skdic
active pdiode,pdi
active ndiode,ndi
active nndiode,nndi
active pdiodec,pdic
active ndiodec,ndic
active nndiodec,nndic
active mvpdiode,mvpdi
active mvndiode,mvndi
active mvnndiode,mvnndi
active mvpdiodec,mvpdic
active mvndiodec,mvndic
active mvnndiodec,mvnndic
-active filldiff
-active fillpoly
metal1 metal1,m1,met1
metal1 rmetal1,rm1,rmet1
-metal1 m1hole
metal1 via1,m2contact,m2cut,m2c,via,v,v1
-metal1 obsm1
-metal1 fillm1
-metal1 obsv1
metal1 padl
metal2 metal2,m2,met2
metal2 rmetal2,rm2,rmet2
-metal2 m2hole
metal2 via2,m3contact,m3cut,m3c,v2
-metal2 obsm2
-metal2 fillm2
-metal2 obsv2
#ifdef MIM
#ifdef METALS3
metal2 mimcap,mim,capm
metal2 mimcapcontact,mimcapc,mimcc,capmc
#elseif defined(METALS4)
metal3 mimcap,mim,capm
metal3 mimcapcontact,mimcapc,mimcc,capmc
#elseif defined(METALS5)
metal4 mimcap,mim,capm
metal4 mimcapcontact,mimcapc,mimcc,capmc
#elseif defined(METALS6)
metal5 mimcap,mim,capm
metal5 mimcapcontact,mimcapc,mimcc,capmc
#endif
#endif (MIM)
#ifdef METALS3 || METALS4 || METALS5 || METALS6
metal3 metal3,m3,met3
metal3 rmetal3,rm3,rmet3
-metal3 m3hole
-metal3 obsm3
-metal3 fillm3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
metal3 via3,v3
metal4 metal4,m4,met4
metal4 rmetal4,rm4,rmet4
-metal4 m4hole
-metal4 obsm4
-metal4 fillm4
#endif (METALS4 || METALS5 || METALS6)
#ifdef (METALS5 || METALS6)
metal4 via4,v4
metal5 metal5,m5,met5
metal5 rm5,rmetal5,rmet5
-metal5 m5hole
-metal5 obsm5
-metal5 fillm5
#endif (METALS5 || METALS6)
#ifdef METALS6
metal5 viatp,vtp
metaltp metaltp,mtp,mettp
metaltp rmtp,rmetaltp,rmettp
-metaltp mtphole
-metaltp obsmtp
-metaltp fillmtp
#endif (METALS6)
block glass
block fillblock
-comment lvstext
comment comment
-comment obscomment
end
#-----------------------------------------------------
# Magic contact types
#-----------------------------------------------------
contact
pc poly metal1
ndc ndiff metal1
pdc pdiff metal1
nsc nsd metal1
psc psd metal1
ndic ndiode metal1
nndic nndiode metal1
pdic pdiode metal1
skdic schottky metal1
mvndc mvndiff metal1
mvpdc mvpdiff metal1
mvnsc mvnsd metal1
mvpsc mvpsd metal1
mvndic mvndiode metal1
mvpdic mvpdiode metal1
mvnndic mvnndiode metal1
ldndc ldndiff metal1
ldpdc ldpdiff metal1
via1 metal1 metal2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
via2 metal2 metal3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
via3 metal3 metal4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
via4 metal4 metal5
#endif (METALS5 || METALS6)
#ifdef METALS6
viatp metal5 metaltp
#endif (METALS6)
#ifdef MIM
#ifdef METALS3
mimcc mimcap metal3
#elseif defined(METALS4)
mimcc mimcap metal4
#elseif defined(METALS5)
mimcc mimcap metal5
#elseif defined(METALS6)
mimcc mimcap metaltp
#endif
#endif (MIM)
stackable
#ifdef METALS3
padl m1 m2 m3 glass
#elseif defined(METALS4)
padl m1 m2 m3 m4 glass
#elseif defined(METALS5)
padl m1 m2 m3 m4 m5 glass
#elseif defined(METALS6)
padl m1 m2 m3 m4 m5 mtp glass
#else
padl m1 m2 glass
#endif
end
#-----------------------------------------------------
# Layer aliases
#-----------------------------------------------------
aliases
allnwell nwell,rnwell,nbase
allpsub space/w,pwell,pbase
# Similar to allpsub* but does not include space-on-well-plane
allpwell pwell
# Allsubwell contains space-on-well-plane but not obstruction-on-well-plane
# Used for defining anything under a device that does not touch active/substrate
allsubwell allnwell,allpsub
# Allwells contains obstruction-on-well-plane but not space-on-well-plane
allwells allnwell,allpwell,obswell
allnfets nfet,mvnfet,nnfet,mvnnfet,ncap,mvncap
allnfetsnonnat nfet,mvnfet,ncap,mvncap
allpfets pfet,mvpfet,pcap,mvpcap
allfets allnfets,allpfets,nvaractor,mvnvaractor,pvaractor,mvpvaractor
allfetsnonnat allnfetsnonnat,allpfets,nvaractor,mvnvaractor,pvaractor,mvpvaractor
allfetsmv mvnfet,mvpfet,mvnnfet,mvnvaractor,mvpvaractor,mvncap,mvpcap
alllvnactivenonfet *ndiff,*nsd,*ndiode,*nndiode
allmvnactivenonfet *mvndiff,*mvnsd,*mvndiode,*mvnndiode,*ldndiff
allnactivenonfet alllvnactivenonfet,allmvnactivenonfet
allnactive allnactivenonfet,allnfets
alllvpactivenonfet *pdiff,*psd,*pdiode
allmvpactivenonfet *mvpdiff,*mvpsd,*mvpdiode,*ldpdiff
allpactivenonfet alllvpactivenonfet,allmvpactivenonfet
allpactive allpactivenonfet,allpfets
alllvactivenonfet alllvnactivenonfet,alllvpactivenonfet
allmvactivenonfet allmvnactivenonfet,allmvpactivenonfet
allactivenonfet allnactivenonfet,allpactivenonfet
allactive allactivenonfet,allfets
allactiveres ndiffres,pdiffres,mvndiffres,mvpdiffres
allndifflv *ndif,*nsd,*ndiode,*nndiode,ndiffres,nfet,nnfet,ncap
allpdifflv *pdif,*psd,*pdiode,pdiffres,pfet,pcap
alldifflv allndifflv,allpdifflv
allndifflvnonfet *ndif,*nsd,*ndiode,*nndiode,ndiffres
allpdifflvnonfet *pdif,*psd,*pdiode,pdiffres
alldifflvnonfet allndifflvnonfet,allpdifflvnonfet
allndiffmv *mvndif,*mvnsd,*mvndiode,mvndiffres,mvnfet,mvnnfet,mvnvaractor,*mvnndiode,mvncap,*ldndiff
allpdiffmv *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet,mvpvaractor,mvpcap,*ldpdiff
alldiffmv allndiffmv,allpdiffmv
allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,mvndiffres,*mvnndiode,*ldndiff
allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,*ldpdiff
alldiffmvnonfet allndiffmvnonfet,allpdiffmvnonfet
alldiffnonfet alldifflvnonfet,alldiffmvnonfet
alldiff alldifflv,alldiffmv
#ifdef HRPOLY1K
allpolyres rpp,rnp,rpps,rnps,hires,mvhires
allpolysblkres rpp,rnp,hires,mvhires
allsblkdev rnp,rpp,rnd,rpd,hires,mvhires,mvrnd,mvrpd
#else (!HRPOLY1K)
allpolyres rpp,rnp,rpps,rnps
allpolysblkres rpp,rnp
allsblkdev rnp,rpp,rnd,rpd,mvrnd,mvrpd
#endif (!HRPOLY1K)
allpolynonfet *poly,allpolyres
allpolynonres *poly,allfets
allpoly allpolynonfet,allfets
allpolynoncap *poly,allfets,allpolyres
allndiffcontlv ndc,nsc,ndic,nndic
allpdiffcontlv pdc,psc,pdic
allndiffcontmv mvndc,mvnsc,mvndic,mvnndic
allpdiffcontmv mvpdc,mvpsc,mvpdic
allndiffcont allndiffcontlv,allndiffcontmv
allpdiffcont allpdiffcontlv,allpdiffcontmv
alldiffcontlv allndiffcontlv,allpdiffcontlv
alldiffcontmv allndiffcontmv,allpdiffcontmv
alldiffcont alldiffcontlv,alldiffcontmv
allcont alldiffcont,pc
allres allpolyres,allactiveres
alldiode *pdiode,*ndiode,*nndiode,*mvpdiode,*mvndiode,*mvnndiode,*schottky
allm1 *m1,rm1
allm2 *m2,rm2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#ifdef MIM && METALS4
allm3 *m3,rm3,*mimcap
#else (!(MIM && METALS4))
allm3 *m3,rm3
#endif (!(MIM && METALS4))
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#ifdef MIM && METALS5
allm4 *m4,rm4,*mimcap
#else (!(MIM && METALS5))
allm4 *m4,rm4
#endif (!(MIM && METALS5))
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#ifdef MIM && METALS6
allm5 *m5,rm5,*mimcap
#else (!(MIM && METALS6))
allm5 *m5,rm5
#endif (!(MIM && METALS6))
#endif (METALS5 || METALS6)
#ifdef METALS6
allmtp *mtp,rmtp
#endif (METALS6)
allpad padl
end
#-----------------------------------------------------
# Layer drawing styles
#-----------------------------------------------------
styles
styletype mos
dnwell cwell
isosub subcircuit
nwell nwell
rnwell nwell ntransistor_stripes
pwell pwell
ndiff ndiffusion
pdiff pdiffusion
nsd ndiff_in_nwell
psd pdiff_in_pwell
nfet ntransistor ntransistor_stripes
nnfet ntransistor ndiff_in_nwell
pfet ptransistor ptransistor_stripes
nvar polysilicon ndiff_in_nwell
pvar polysilicon pdiff_in_pwell
ndc ndiffusion metal1 contact_X'es
pdc pdiffusion metal1 contact_X'es
nsc ndiff_in_nwell metal1 contact_X'es
psc pdiff_in_pwell metal1 contact_X'es
ncap ntransistor ntransistor_stripes
pcap ptransistor ptransistor_stripes
nbase nwell ntransistor_stripes
pbase pwell ptransistor_stripes
mvndiff ndiffusion hvndiff_mask
mvpdiff pdiffusion hvpdiff_mask
mvnsd ndiff_in_nwell hvndiff_mask
mvpsd pdiff_in_pwell hvpdiff_mask
mvnfet ntransistor ntransistor_stripes hvndiff_mask
mvnnfet ntransistor ndiff_in_nwell hvndiff_mask
mvpfet ptransistor ptransistor_stripes
mvnvar polysilicon ndiff_in_nwell hvndiff_mask
mvpvar polysilicon pdiff_in_pwell hvpdiff_mask
ldndiff hvndiff
ldpdiff hvpdiff
mvndc ndiffusion metal1 contact_X'es hvndiff_mask
mvpdc pdiffusion metal1 contact_X'es hvpdiff_mask
mvnsc ndiff_in_nwell metal1 contact_X'es hvndiff_mask
mvpsc pdiff_in_pwell metal1 contact_X'es hvpdiff_mask
mvncap ntransistor ntransistor_stripes hvndiff_mask
mvpcap ptransistor ptransistor_stripes
ldndc hvndiff metal1 contact_X'es
ldpdc hvpdiff metal1 contact_X'es
poly polysilicon
pc polysilicon metal1 contact_X'es
npolyres polysilicon silicide_block nselect2
ppolyres polysilicon silicide_block pselect2
efuse polysilicon electrode
pdiode pdiffusion pselect2
ndiode ndiffusion nselect2
nndiode ndiff_in_nwell nselect2
pdiodec pdiffusion pselect2 metal1 contact_X'es
ndiodec ndiffusion nselect2 metal1 contact_X'es
nndiodec ndiff_in_nwell nselect2 metal1 contact_X'es
schottky ndiffusion pdiffusion
schottkyc ndiffusion pdiffusion metal1 contact_X'es
mvpdiode pdiffusion pselect2 hvpdiff_mask
mvndiode ndiffusion nselect2 hvndiff_mask
mvnndiode ndiff_in_nwell nselect2 hvndiff_mask
mvpdiodec pdiffusion pselect2 metal1 contact_X'es hvpdiff_mask
mvndiodec ndiffusion nselect2 metal1 contact_X'es hvndiff_mask
mvnndiodec ndiff_in_nwell nselect2 metal1 contact_X'es hvndiff_mask
metal1 metal1
rm1 metal1 poly_resist_stripes
obsm1 metal1
fillm1 metal1
obsv1 metal1 metal2 via1arrow
m1hole obsmetal1
m2c metal1 metal2 via1arrow
metal2 metal2
rm2 metal2 poly_resist_stripes
obsm2 metal2
fillm2 metal2
obsv2 metal2 metal3 via2arrow
m2hole obsmetal2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
m3c metal2 metal3 via2arrow
metal3 metal3
rm3 metal3 poly_resist_stripes
obsm3 metal3
fillm3 metal3
m3hole obsmetal3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
via3 metal3 metal4 via3alt
metal4 metal4
rm4 metal4 poly_resist_stripes
obsm4 metal4
fillm4 metal4
m4hole obsmetal4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
via4 metal4 metal5 via4
metal5 metal5
rm5 metal5 poly_resist_stripes
obsm5 metal5
fillm5 metal5
m5hole obsmetal5
#endif (METALS5 || METALS6)
#ifdef METALS6
viatp metal5 metal6 via5
metaltp metal6
rmtp metal6 poly_resist_stripes
obsmtp metal6
fillmtp metal6
mtphole obsmetal6
#endif (METALS6)
#ifdef MIM
#ifdef METALS3
mimcap metal2 mems
mimcc metal2 contact_X'es mems
#elseif defined(METALS4)
mimcap metal3 mems
mimcc metal3 contact_X'es mems
#elseif defined(METALS5)
mimcap metal4 mems
mimcc metal4 contact_X'es mems
#elseif defined(METALS6)
mimcap metal5 mems
mimcc metal5 contact_X'es mems
#endif
#endif (MIM)
glass overglass
rnp poly_resist poly_resist_stripes ndop_stripes
rpp poly_resist poly_resist_stripes pdop_stripes
rnps poly_resist ndop_stripes
rpps poly_resist pdop_stripes
#ifdef HRPOLY1K
nhighres poly_resist silicide_block
mvnhighres poly_resist silicide_block hvndiff_mask
#endif (HRPOLY1K)
ndiffres ndiffusion ndop_stripes
pdiffres pdiffusion pdop_stripes
mvndiffres ndiffusion hvndiff_mask ndop_stripes
mvpdiffres pdiffusion hvpdiff_mask pdop_stripes
comment comment
lvstext comment
error_p error_waffle
error_s error_waffle
error_ps error_waffle
fillblock cwell
obswell cwell
obsactive implant4
filldiff ndiffusion
fillpoly polysilicon
#ifdef METALS3
padl metal3 via3 overglass
#elseif defined(METALS4)
padl metal4 via4 overglass
#elseif defined(METALS5)
padl metal5 via5 overglass
#elseif defined(METALS6)
padl metal6 via6 overglass
#else
padl metal2 via2 overglass
#endif
magnet substrate_field_implant
rotate via3alt
fence via5
end
#-----------------------------------------------------
# Special paint/erase rules
#-----------------------------------------------------
compose
compose nfet poly ndiff
compose pfet poly pdiff
compose nvar poly nsd
compose pvar poly psd
compose mvnfet poly mvndiff
compose mvpfet poly mvpdiff
compose mvnvar poly mvnsd
compose mvpvar poly mvpsd
#ifdef MIM
#ifdef METALS3
paint mimcap m2 mimcap
paint mimcapc m2 mimcapc
#elseif defined(METALS4)
paint mimcap m3 mimcap
paint mimcapc m3 mimcapc
#elseif defined(METALS5)
paint mimcap m4 mimcap
paint mimcapc m4 mimcapc
#elseif defined(METALS6)
paint mimcap m5 mimcap
paint mimcapc m5 mimcapc
#endif
#endif (MIM)
paint ndc nwell pdc
paint nfet nwell pfet
paint ndiff nwell pdiff
paint psd nwell nsd
paint psc nwell nsc
paint ldndiff nwell ldpdiff
paint pdc pwell ndc
paint pfet pwell nfet
paint pdiff pwell ndiff
paint nsd pwell psd
paint nsc pwell psc
paint ldpdiff pwell ldndiff
paint m1 obsm1 m1
paint m2 obsm2 m2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
paint m3 obsm3 m3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
paint m4 obsm4 m4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
paint m5 obsm5 m5
#endif (METALS5 || METALS6)
#ifdef METALS6
paint mtp obsmtp mtp
#endif (METALS6)
end
#-----------------------------------------------------
# Electrical connectivity
#-----------------------------------------------------
connect
nwell,*nsd,*mvnsd,nbase,dnwell nwell,*nsd,*mvnsd,nbase,dnwell
pwell,*psd,*mvpsd,pbase,isosub pwell,*psd,*mvpsd,pbase,isosub
*psd,*mvpsd *psd,*mvpsd
*m1 *m1
*m2 *m2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
*m3 *m3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
*m4 *m4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
*m5 *m5
#endif (METALS5 || METALS6)
#ifdef METAL6
*mtp *mtp
#endif (METALS6)
#ifdef MIM
*mimcap *mimcap
#endif (MIM)
allnactivenonfet allnactivenonfet
allpactivenonfet allpactivenonfet
*poly,allfets *poly,allfets
*schottky *schottky
end
#-----------------------------------------------------
# CIF/GDS output layer definitions
#-----------------------------------------------------
# NOTE: All values in this section MUST be multiples of 25
# or else magic will scale below the allowed layout grid size
cifoutput
#-----------------------------------------------------
style gdsii
#-----------------------------------------------------
scalefactor 50 nanometers
options calma-permissive-labels
gridlimit 5
# This section used for actual GDSII output
#-----------------------------------------------------
# DNWELL
#-----------------------------------------------------
layer DNWELL dnwell
calma 12 0
#-----------------------------------------------------
# SUBCUT
#-----------------------------------------------------
layer SUBCUT isosub
calma 23 5
#-----------------------------------------------------
# NWELL
#-----------------------------------------------------
layer NWELL allnwell
# Require nwell under n-tap and p-diffusion
or *nsd,*mvnsd,*pdiff,*mvpdiff,allpfets,pdiffres,mvpdiffres
labels allnwell noport
close 1000000
calma 21 0
layer NWELLTXT
labels allnwell port
calma 21 10
#-----------------------------------------------------
# PWELL (LVPWELL)
#-----------------------------------------------------
layer PWELL allpwell
labels allpwell noport
calma 204 0
layer PWELLTXT
labels allpwell port
calma 204 10
#-----------------------------------------------------
# DIFF (COMP)
#-----------------------------------------------------
# LDFETs cut the diffusion under the gate
templayer ldbreak1 *ldndiff,*ldpdiff
grow 160
and mvnfet,mvpfet
templayer ldbreak mvnfet,mvpfet
grow 200
and ldndiff,ldpdiff
or ldbreak1
# Additional cut-back of LD diffusion for implant
templayer ldbreak2 mvnfet,mvpfet
grow 240
and ldndiff,ldpdiff
# Schottky diode drawn as abutting diffusion, but
# there is a 0.28um gap between the nsd and the
# Schottky diffusion.
templayer scsep *nsd
grow 280
layer DIFF schottky
and-not scsep
or alldiff
and-not ldbreak
labels alldiff,schottky
calma 22 0
layer DIFFFILL filldiff
labels filldiff
calma 22 4
#-----------------------------------------------------
# LDFET implants
#-----------------------------------------------------
layer MVNSD ldndiff
and-not ldbreak2
grow 800
calma 210 0
layer MVPSD ldpdiff
and-not ldbreak2
grow 800
calma 11 39
#-----------------------------------------------------
# Bipolar ID markers
#-----------------------------------------------------
layer BJTDRC nbase
grow 580
bloat-all pbase dnwell
grow 20
layer BJTLVS nbase
grow 580
bloat-all pbase dnwell
grow 20
#-----------------------------------------------------
# PPLUS, NPLUS
#-----------------------------------------------------
#ifdef HRPOLY1K
layer RESDEF
bloat-or hires,mvhires * 280 poly 0
grow 200
shrink 200
calma 110 5
# hires requires PPLUS around terminals
templayer HRTERM
bloat-all hires,mvhires *poly
and-not hires,mvhires
layer SBLK
bloat-or hires,mvhires * 280 poly 100
calma 49 0
#endif (HRPOLY1K)
# rnps requires NPLUS surround 0.18um
# rnp requires NPLUS surround 0.3um
# rnd requires NPLUS surround 0.18um
layer NPLUS
bloat-all rnp *poly
grow 120
bloat-all rnps *poly
bloat-all rnd *ndiff
grow 180
grow 180
shrink 180
mask-hints NPLUS
calma 32 0
# standard generation of NPLUS
templayer nwell_shrink nwell
shrink 430
templayer shortntap *nsd,*mvnsd
and-not dnwell
and-not nwell_shrink
grow 160
templayer shortdntap dnwell
and pwell
grow 430
and *nsd,*mvnsd
grow 160
layer NPLUS
bloat-or *ndif,*ndiode,*nndiode,ndiffres,*mvndif,*mvndiode,*mvnndiode,mvndiffres * 160 allpactivenonfet 0
# NOTE: Rule CO.5a applies to butted contacts but Calibre rule is
# implemented for all contacts, so the Calibre rule is being followed.
bloat-or nsc,mvnsc * 95
bloat-or *nsd,*mvnsd * 20 allpactivenonfet 0
bloat-or allnfets,nvar,mvnvar * 230
or shortntap,shortdntap
grow 200
shrink 200
mask-hints NPLUS
calma 32 0
# rpps requires PPLUS surround 0.18um
# rpp requires PPLUS surround 0.30um
# rpd requires PPLUS surround 0.18um
layer PPLUS
bloat-all rpp *poly
grow 120
bloat-all rpps *poly
bloat-all rpd *pdiff
grow 180
grow 180
shrink 180
mask-hints PPLUS
calma 31 0
# standard generation of PPLUS, including hires resistors
templayer shortptap nwell
and-not dnwell
grow 430
and *psd,*mvpsd
grow 160
templayer pwell_shrink pwell
and dnwell
shrink 430
templayer shortdptap *psd,*mvpsd
and dnwell
and-not pwell_shrink
grow 160
layer PPLUS
#ifdef HRPOLY1K
or HRTERM
grow 200
and-not RESDEF
#endif (HRPOLY1K)
bloat-or *pdif,*pdiode,pdiffres,pfet,pcap,*mvpdif,*mvpdiode,mvpdiffres,mvpfet,mvpcap * 160 allnactivenonfet 0
# NOTE: Rule CO.5b applies to butted contacts but Calibre rule is
# implemented for all contacts, so the Calibre rule is being followed.
bloat-or psc,mvpsc * 95
bloat-or *psd,*mvpsd * 20 allnactivenonfet 0
bloat-or allpfets,pvar,mvpvar * 230
or shortptap,shortdptap
grow 200
shrink 200
calma 31 0
#-----------------------------------------------------
# DUALGATE (thickox)
#-----------------------------------------------------
layer DUALGATE allfetsmv
bloat-all mvhires *poly
# Rule DV.8 (DUALGATE around poly)
grow 400
# Rule DV.6 (DUALGATE around diff, LV substrate tap excepted)
bloat-or allndiffmv * 240 *psd 0
bloat-or allpdiffmv * 240
grow 219
shrink 219
mask-hints DUALGATE
calma 55 0
# DUALGATE completely covers deep nwell
layer DUALGATE
bloat-all alldiffmv dnwell
grow 500
grow 219
shrink 219
calma 55 0
#-----------------------------------------------------
# NAT
#-----------------------------------------------------
layer NAT
bloat-all *nndiode,nnfet *ndiff
bloat-all *mvnndiode,mvnnfet *mvndiff
grow 260
grow 309
shrink 309
calma 5 0
#-----------------------------------------------------
# POLY
#-----------------------------------------------------
layer POLY allpoly
close 224000
labels allpoly noport
calma 30 0
layer POLYTXT
labels allpoly port
calma 30 10
layer POLYFILL fillpoly
labels fillpoly
calma 30 4
layer PLFUSE efuse
calma 125 5
layer EFUSE efuse
bloat-all efuse *poly
calma 80 5
#-----------------------------------------------------
# CONT
#-----------------------------------------------------
# NOTE: Contact arrays defined at 200 spacing for large array rule (4x4),
# otherwise spacing is 180
layer contlarge allcont
shrink 615
grow 615
layer CONT allcont
and-not contlarge
squares-grid 5 220 250
calma 33 0
layer CONT allcont
and contlarge
squares-grid 5 220 280
calma 33 0
#-----------------------------------------------------
# MET1
#-----------------------------------------------------
layer MET1 allm1
labels allm1 noport
calma 34 0
layer MET1TXT
labels allm1 port
calma 34 10
layer M1BLOCK obsm1
labels obsm1
calma 34 5
layer M1FILL fillm1
labels fillm1
calma 34 4
#-----------------------------------------------------
# VIA1
#-----------------------------------------------------
templayer via1large via1
shrink 915
grow 915
layer VIA1 via1
and-not via1large
squares-grid 0 260 260
calma 35 0
layer VIA1 via1
and via1large
squares-grid 0 260 360
calma 35 0
#-----------------------------------------------------
# MET2
#-----------------------------------------------------
layer MET2 allm2
labels allm2 noport
calma 36 0
layer MET2TXT
labels allm2 port
calma 36 10
layer M2BLOCK obsm2
labels obsm2
calma 36 5
layer M2FILL fillm2
labels fillm2
calma 36 4
#ifdef METALS3 || METALA4 || METALS5 || METALS6
#-----------------------------------------------------
# VIA2
#-----------------------------------------------------
templayer via2large via2
shrink 915
grow 915
layer VIA2 via2
and-not via2large
squares-grid 10 260 260
calma 38 0
layer VIA2 via2
and via2large
squares-grid 10 260 360
calma 38 0
#ifdef MIM && METALS3
layer VIA2 mimcapc
squares-grid 40 260 500
calma 38 0
#endif (MIM && METALS3)
#-----------------------------------------------------
# MET3
#-----------------------------------------------------
layer MET3 allm3
labels allm3 noport
calma 42 0
layer MET3TXT
labels allm3 port
calma 42 10
layer M3BLOCK obsm3
labels obsm3
calma 42 5
layer M3FILL fillm3
labels fillm3
calma 42 4
#endif (METALS3 || METALA4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#-----------------------------------------------------
# VIA3
#-----------------------------------------------------
templayer via3large via3
shrink 915
grow 915
layer VIA3 via3
and-not via3large
squares-grid 10 260 260
calma 40 0
layer VIA3 via3
and via3large
squares-grid 10 260 360
calma 40 0
#ifdef MIM && METALS4
layer VIA3 mimcapc
squares-grid 40 260 500
calma 40 0
#endif (MIM && METALS4)
#-----------------------------------------------------
# MET4
#-----------------------------------------------------
layer MET4 allm4
labels allm4 noport
calma 46 0
layer MET4TXT
labels allm4 port
calma 46 10
layer M4BLOCK obsm4
labels obsm4
calma 46 5
layer M4FILL fillm4
labels fillm4
calma 46 4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#-----------------------------------------------------
# VIA4
#-----------------------------------------------------
templayer via4large via4
shrink 915
grow 915
layer VIA4 via4
and-not via4large
squares-grid 10 260 260
calma 41 0
layer VIA4 via4
and via4large
squares-grid 10 260 360
calma 41 0
#ifdef (MIM && METALS5)
layer VIA4 mimcapc
squares-grid 40 260 500
calma 41 0
#endif (MIM && METALS5)
#-----------------------------------------------------
# MET5
#-----------------------------------------------------
layer MET5 allm5
labels allm5 noport
calma 81 0
layer MET5TXT
labels allm5 port
calma 81 10
layer M5BLOCK obsm5
labels obsm5
calma 81 5
layer M5FILL fillm5
labels fillm5
calma 81 4
#endif (METALS5 || METALS6)
#ifdef METALS6
#-----------------------------------------------------
# VIATP
#-----------------------------------------------------
templayer viatplarge viatp
shrink 975
grow 975
layer VIATP viatp
and-not viatplarge
squares-grid 10 260 260
calma 129 0
layer VIATP viatp
and viatplarge
squares-grid 10 160 360
calma 129 0
#ifdef MIM
layer VIATP mimcapc
squares-grid 40 260 500
calma 129 0
#endif (MIM)
#-----------------------------------------------------
# METTP
#-----------------------------------------------------
layer METTP allmtp
labels allmtp noport
calma 53 0
layer METTPTXT
labels allmtp port
calma 53 10
layer MTPBLOCK obsmtp
labels obsmtp
calma 53 5
layer MTPFILL fillmtp
labels fillmtp
calma 53 4
#endif (METALS6)
#-----------------------------------------------------
# GLASS
#-----------------------------------------------------
layer GLASS glass
calma 37 0
#-----------------------------------------------------
# PRBNDRY
#-----------------------------------------------------
layer PRBNDRY
boundary
calma 0 0
#ifdef MIM
#undef MIM
#-----------------------------------------------------
# CAPM
#-----------------------------------------------------
# NOTE: MiM bottom plate handled by alias "allm*" when MIM defined
layer CAPM *mimcap
labels mimcap
calma 75 0
layer CAPDEF *mimcap
grow 200
calma 117 5
layer CAP_LENGTH
mask-hints CAP_LENGTH
calma 117 10
#define MIM
#endif (MIM)
#-----------------------------------------------------
# SBLK
#-----------------------------------------------------
layer SBLK
bloat-all rnd *nfet
bloat-all rpd *pfet
bloat-all mvrnd *mvnfet
bloat-all mvrpd *mvpfet
and allfets
grow 220
bloat-or allsblkdev * 0 space/a 220
bloat-or allpolysblkres * 0 space/a 280
grow 215
shrink 215
mask-hints SBLK
calma 49 0
#-----------------------------------------------------
# RESDEF MARK
#-----------------------------------------------------
layer RESDEF allres
calma 110 5
#-----------------------------------------------------
# METAL RESISTOR IDs
#-----------------------------------------------------
layer MET1RES rm1
calma 110 11
layer MET2RES rm2
calma 110 12
#ifdef METALS3 || METALS4 || METALS5 || METALS6
layer MET3RES rm3
calma 110 13
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
layer MET4RES rm4
calma 110 14
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
layer MET5RES rm5
calma 110 15
#endif (METALS5 || METALS6)
#ifdef METALS6
layer METTPRES rmtp
calma 110 16
#endif (METALS6)
#-----------------------------------------------------
# DIODE MARK
#-----------------------------------------------------
layer DIODE alldiode
calma 115 5
#-----------------------------------------------------
# SCHOTTKY MARK
#-----------------------------------------------------
layer SCHOTTKY
bloat-all *schottky *nsd
grow 160
calma 241 0
#-----------------------------------------------------
# MOSCAP MARK
#-----------------------------------------------------
layer MOSCAP nvar,mvnvar,pvar,mvpvar,ncap,pcap,mvncap,mvpcap
calma 166 5
#ifdef HRPOLY1K
#-----------------------------------------------------
# HRES
#-----------------------------------------------------
layer HRES
bloat-all hires,mvhires *poly
grow 400
calma 62 0
#endif (HRPOLY1K)
#------------------------------------------------------------------------
# FILLBLOCK (NOTE: two layers define this on active, then poly & metal)
#------------------------------------------------------------------------
# layer FILLOBS fillblock
# calma 111 5
layer FILLOBS2 fillblock
calma 152 5
#----------------------------------------------------------
style metfill
#----------------------------------------------------------
# This section used for metal filling output by a sequence
# of cif paint commands
scalefactor 50 nanometers
options calma-permissive-labels
gridlimit 5
#-----------------------------------------------------
# Fill layer geometry
#-----------------------------------------------------
templayer fill_geometry_off0
bbox top
slots 0 2000 1000 0 2000 1000 1000 0
templayer fill_geometry_off1
bbox top
slots 0 2000 1000 0 2000 1000 1000 660
templayer fill_geometry_off2
bbox top
slots 0 2000 1000 0 2000 1000 1000 1320
#ifdef THICKMET3P0
templayer fill_geometry_thick
bbox top
slots 0 6000 2000 0 6000 2000 3000 2000
#endif (THICKMET3P0)
#-----------------------------------------------------
# Obstruction geometry
#-----------------------------------------------------
templayer obstruct_diff alldiff,schottky,filldiff,obsactive
grow 2010
shrink 500
grow 500
templayer obstruct_poly allpoly,fillpoly
grow 2010
shrink 500
grow 500
templayer obstruct_m1 allm1,allpad,fillm1,obsm1
grow 2010
shrink 500
grow 500
templayer obstruct_m2 allm2,allpad,fillm2,obsm2
grow 2010
shrink 500
grow 500
#ifdef METALS3 || METALS4 || METALS5 || METALS6
templayer obstruct_m3 allm3,allpad,fillm3,obsm3
grow 2010
shrink 500
grow 500
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
templayer obstruct_m4 allm4,allpad,fillm4,obsm4
grow 2010
shrink 500
grow 500
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
templayer obstruct_m5 allm5,allpad,fillm5,obsm5
grow 2010
shrink 500
grow 500
#endif (METALS5 || METALS6)
#ifdef METALS6
#ifdef THICKMET3P0
templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp
grow 2010
shrink 500
grow 500
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp
grow 2010
shrink 500
grow 500
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9 )
templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp
grow 2010
shrink 500
grow 500
#endif
#endif (METALS6)
#-----------------------------------------------------
# DIFF FILL
#-----------------------------------------------------
layer difffill fill_geometry_off0
shrink 995
grow 995
#-----------------------------------------------------
# POLY FILL
#-----------------------------------------------------
layer polyfill fill_geometry_off1
and-not obstruct_m1
shrink 995
grow 995
#-----------------------------------------------------
# MET1 FILL
#-----------------------------------------------------
layer met1fill fill_geometry_off2
and-not obstruct_poly
and-not obstruct_m1
and-not obstruct_m2
shrink 995
grow 995
#-----------------------------------------------------
# MET2 FILL
#-----------------------------------------------------
layer met2fill fill_geometry_off0
and-not obstruct_m1
and-not obstruct_m2
shrink 995
grow 995
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#-----------------------------------------------------
# MET3 FILL
#-----------------------------------------------------
layer met3fill fill_geometry_off1
and-not obstruct_m2
and-not obstruct_m3
shrink 995
grow 995
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#-----------------------------------------------------
# MET4 FILL
#-----------------------------------------------------
layer met4fill fill_geometry_off2
and-not obstruct_m3
and-not obstruct_m4
shrink 995
grow 995
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#-----------------------------------------------------
# MET5 FILL
#-----------------------------------------------------
layer met5fill fill_geometry_off0
and-not obstruct_m4
and-not obstruct_m5
shrink 995
grow 995
#endif (METALS5 || METALS6)
#ifdef METALS6
#-----------------------------------------------------
# METTP FILL
#-----------------------------------------------------
layer mettpfill fill_geometry_off1
and-not obstruct_m5
and-not obstruct_mtp
shrink 995
grow 995
#endif (METALS6)
#-----------------------------------------------------------------------
style drc
#-----------------------------------------------------------------------
# NOTE: this style is used for DRC only, not for GDS output
#-----------------------------------------------------------------------
scalefactor 50 nanometers
options calma-permissive-labels
gridlimit 5
# Check that all p-diff and n-ohmic have either nwell or dnwell
templayer missing_nwell *nsd,*mvnsd,*pdiff,*mvpdiff,*pdiode,pdiffres,mvpdiffres,pfet,mvpfet,mvnvaractor
and-not dnwell,nwell
# Check that all p-ohmic and n-diff have either pwell + dnwell
# or nothing. Can check the pwell surround at the same time.
templayer pohmic_missing_pwell *psd
grow 120
and dnwell
and-not pwell,pbase
templayer mvpohmic_missing_pwell *mvpsd,mvpvaractor
grow 160
and dnwell
and-not pwell
templayer pdiff_missing_pwell *ndiff,*ndiode,ndiffres,nfet
grow 430
and dnwell
and-not pwell
templayer mvpdiff_missing_pwell *mvndiff,mvndiffres,mvnfet
grow 600
and dnwell
and-not pwell
# Check for MV and LV devices in the same dnwell
templayer mv_dnwell
bloat-all alldiffmv,schottky dnwell
templayer bad_dnwell
bloat-all alldifflv dnwell
and mv_dnwell
# Check pwell in dnwell
templayer pwell_in_dnwell pwell
and dnwell
and-not mv_dnwell
templayer mvpwell_in_dnwell pwell
and mv_dnwell
# Check for MV and LV devices in the same nwell
templayer mv_nwell
bloat-all alldiffmv nwell
templayer bad_nwell
bloat-all alldifflv,schottky nwell
and mv_nwell
# Check for nwell resistor in deep nwell
templayer bad_rnw rnw
and dnwell
# Check for minimum PPLUS and NPLUS area. NOTE: These are simplified
# versions of the cifoutput rules.
templayer check_pplus
bloat-or *pdif,*pdiode,pdiffres,pfet,pcap,*mvpdif,*mvpdiode,mvpdiffres,mvpfet,mvpcap * 160 allnactivenonfet 0
bloat-or psc,mvpsc * 95
bloat-or *psd,*mvpsd * 20 allnactivenonfet 0
grow 200
shrink 200
templayer check_nplus
bloat-or *ndif,*ndiode,*nndiode,ndiffres,*mvndif,*mvndiode,*mvnndiode,mvndiffres * 160 allpactivenonfet 0
bloat-or nsc,mvnsc * 95
bloat-or *nsd,*mvnsd * 20 allpactivenonfet 0
grow 200
shrink 200
# Define HRES layer for DRC checks
templayer res_hres
bloat-all mvhires,hires *poly
# Check for contact at correct position for HIRES, LRES, PRES resistors
templayer res_cont res_hres
bloat-all rnp,rpp *poly
and pc
squares-grid 5 220 250
templayer res_cont_space_min mvhires,hires
# SBLK larger than defined resistor by 0.1um
grow 100
# SBLK = resistor for rnp and rpp
or rnp,rpp
# SBLK spacing to contact
grow 220
and res_cont
# If anything remains, contact is too close.
templayer res_cont_space_max mvhires,hires
# SBLK larger than defined resistor by 0.1um
grow 100
# SBLK = resistor for rnp and rpp
or rnp,rpp
# SBLK spacing to contact
grow 220
# size of poly contact
grow 220
and res_cont
templayer res_no_cont res_cont
and-not res_cont_space_max
# If anything remains, contact is too far away
# Check for HRES to poly and diffusion spacing
templayer res_hres_grow res_hres
grow 700
templayer res_diff_space res_hres_grow
and alldiff
# If anything remains, HRES is too close to diffusion
templayer res_poly_space res_hres_grow
and-not res_hres
and allpoly
# If anything remains, HRES is too close to poly
# Check for MiM cap bottom plate to other metal spacing rule (< 1.2um)
templayer mim_bottom_plate
#ifdef METALS3
bloat-all *mim *m2
#endif
#ifdef METALS4
bloat-all *mim *m3
#endif
#ifdef METALS5
bloat-all *mim *m4
#endif
#ifdef METALS6
bloat-all *mim *m5
#endif
templayer mim_bottom_plate_space mim_bottom_plate
grow 1200
#ifdef METALS3
and m2
#endif
#ifdef METALS4
and m3
#endif
#ifdef METALS5
and m4
#endif
#ifdef METALS6
and m5
#endif
and-not mim_bottom_plate
# If anything remains, bottom plate is too close
# Check for MiM cap bottom plate surrounds contact (by 0.4um)
#ifdef METALS3
templayer mim_bot_cont_surround via2
#endif
#ifdef METALS4
templayer mim_bot_cont_surround via3
#endif
#ifdef METALS5
templayer mim_bot_cont_surround via4
#endif
#ifdef METALS6
templayer mim_bot_cont_surround viamt
#endif
and mim_bottom_plate
squares-grid 10 260 500
grow 400
and-not mim_bottom_plate
# If anything remains, not enough surround
end
#-----------------------------------------------------------------------
cifinput
#-----------------------------------------------------------------------
# NOTE: All values in this section MUST be multiples of 25
# or else magic will scale below the allowed layout grid size
style import
scalefactor 50 nanometers
gridlimit 5
options ignore-unknown-layer-labels
ignore SRAMDEF
ignore FET5VDEF
ignore CAPDEF
ignore EFUSE
ignore SOURCE
ignore VTEXT
ignore FILLOBS
layer pwell PWELL,PWELLTXT
and-not BJTDEF,BJTDRC
labels PWELL
labels PWELLTXT port
layer pbase PWELL,PWELLTXT
and BJTDEF,BJTDRC
layer nwell NWELL,NWELLTXT
and-not BJTDEF,BJTDRC
labels NWELL
labels NWELLTXT port
layer nbase NWELL,NWELLTXT
and BJTDEF,BJTDRC
layer dnwell DNWELL
labels DNWELL
layer isosub SUBCUT
labels SUBCUT
# Implicit nwell defined by DNWELL outside of PWELL
templayer nwelldef DNWELL
shrink 500
and-not PWELL
or NWELL
templayer ndiffarea DIFF
and-not POLY
and-not nwelldef
and-not PPLUS
and-not SBLK
and-not DUALGATE
and NPLUS
copyup ndifcheck
layer ndiff ndiffarea
labels DIFF
layer filldiff DIFFFILL
labels DIFFFILL
# Copy ndiff areas up for contact checks
templayer xndifcheck ndifcheck
copyup ndifcheck
templayer mvndiffarea DIFF
and-not POLY
and-not nwelldef
and-not PPLUS
and-not SBLK
and DUALGATE
and NPLUS
copyup mvndifcheck
layer mvndiff mvndiffarea
# Copy mvndiff areas up for contact checks
templayer mvxndifcheck mvndifcheck
copyup mvndifcheck
# Save cathode areas of Schottky diodes
templayer sccathode SCHOTTKY
and DIFF
and NPLUS
# Grow Schottky anode so that drawn device abuts
# the cathode.
layer schottky SCHOTTKY
and DIFF
and-not NPLUS
and-not PPLUS
or sccathode
grow 140
shrink 140
and-not sccathode
# Schottky contact
layer schottkyc SCHOTTKY
and CONT
and DIFF
and-not NPLUS
and-not PPLUS
grow 145
shrink 140
layer ndiode DIFF
and NPLUS
and DIODE
and-not nwelldef
and-not POLY
and-not PPLUS
and-not DUALGATE
and-not NAT
layer nndiode DIFF
and NPLUS
and DIODE
and-not nwelldef
and-not POLY
and-not PPLUS
and-not DUALGATE
and NAT
templayer ndiodearea DIODE
and NPLUS
and-not nwelldef
and-not DUALGATE
copyup DIODE,NPLUS
layer ndiffres DIFF
and-not POLY
and SBLK
and NPLUS
and-not DUALGATE
templayer pdiffarea DIFF
and-not POLY
and nwelldef
and-not NPLUS
and-not SBLK
and-not DIODE
and PPLUS
and-not DUALGATE
copyup pdifcheck
layer pdiff pdiffarea
layer mvndiode DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and DUALGATE
and-not NAT
layer mvnndiode DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and DUALGATE
and NAT
templayer mvndiodearea DIODE
and NPLUS
and-not nwelldef
and DUALGATE
copyup DIODE,NPLUS
layer mvndiffres DIFF
and-not POLY
and SBLK
and NPLUS
and DUALGATE
templayer mvpdiffarea DIFF
and-not POLY
and nwelldef
and-not NPLUS
and-not SBLK
and-not DIODE
and DUALGATE
and PPLUS
copyup mvpdifcheck
layer mvpdiff mvpdiffarea
# Copy pdiff areas up for contact checks
templayer xpdifcheck pdifcheck
copyup pdifcheck
layer pdiode DIFF
and PPLUS
and-not POLY
and-not NPLUS
and-not DUALGATE
and DIODE
templayer pdiodearea DIODE
and PPLUS
copyup DIODE,PPLUS
# Define pfet areas as known pdiff,
# regardless of the presence of a
# well.
templayer pfetarea DIFF
and-not NPLUS
and-not DUALGATE
and POLY
layer pfet pfetarea
and-not MOSCAP
layer pcap pfetarea
and MOSCAP
templayer pfetexpand pfetarea
grow 530
# Always force nwell under pfet
layer nwell pfetarea
grow 310
# Copy mvpdiff areas up for contact checks
templayer mvxpdifcheck mvpdifcheck
copyup mvpdifcheck
layer mvpdiode DIFF
and PPLUS
and-not POLY
and-not NPLUS
and-not RESDEF
and DUALGATE
and DIODE
templayer mvpdiodearea DIODE
and PPLUS
copyup DIODE,PPLUS
# Define pfet areas as known pdiff,
# regardless of the presence of a
# well.
templayer mvpfetarea DIFF
and DUALGATE
and-not NPLUS
and POLY
layer mvpfet mvpfetarea
and-not MOSCAP
layer mvpcap mvpfetarea
and MOSCAP
templayer mvpfetexpand mvpfetarea
grow 530
layer pdiff DIFF
and-not DUALGATE
and-not NPLUS
and-not POLY
and nwelldef
and pfetexpand
layer pdiffres DIFF
and-not POLY
and PPLUS
and nwelldef
and SBLK
layer nfet DIFF
and POLY
and-not PPLUS
and-not DUALGATE
and-not nwelldef
and NPLUS
and-not NAT
and-not MOSCAP
layer ncap DIFF
and POLY
and-not PPLUS
and-not DUALGATE
and-not nwelldef
and NPLUS
and-not NAT
and MOSCAP
layer nnfet DIFF
and POLY
and-not PPLUS
and-not DUALGATE
and-not nwelldef
and NPLUS
and NAT
templayer nsdarea DIFF
and NPLUS
and nwelldef
and-not POLY
and-not PPLUS
and-not DUALGATE
layer nsd nsdarea
templayer nsdexpand nsdarea
grow 500
# Copy nsub areas up for contact checks
templayer xnsubcheck nsubcheck
copyup nsubcheck
templayer psdarea DIFF
and PPLUS
and-not DUALGATE
and-not nwelldef
and-not POLY
and-not NPLUS
and-not pfetexpand
copyup psubcheck
layer psd psdarea
templayer psdexpand psdarea
grow 500
layer mvpdiff DIFF
and-not NPLUS
and-not POLY
and nwelldef
and DUALGATE
and mvpfetexpand
layer mvpdiffres DIFF
and-not POLY
and PPLUS
and SBLK
and DUALGATE
layer mvnfet DIFF
and POLY
and-not PPLUS
and NPLUS
and-not NAT
and-not nwelldef
and DUALGATE
and-not MOSCAP
layer mvncap DIFF
and POLY
and-not PPLUS
and NPLUS
and-not NAT
and-not nwelldef
and DUALGATE
and MOSCAP
layer mvnnfet DIFF
and POLY
and-not PPLUS
and NPLUS
and NAT
and-not nwelldef
and DUALGATE
templayer mvnsdarea DIFF
and NPLUS
and-not POLY
and-not PPLUS
and nwelldef
and DUALGATE
copyup mvnsubcheck
layer mvnsd mvnsdarea
templayer mvnsdexpand mvnsdarea
grow 500
# Copy nsub areas up for contact checks
templayer mvxnsubcheck mvnsubcheck
copyup mvnsubcheck
templayer mvpsdarea DIFF
and PPLUS
and-not nwelldef
and-not POLY
and-not NPLUS
and DUALGATE
and-not mvpfetexpand
copyup mvpsubcheck
layer mvpsd mvpsdarea
templayer mvpsdexpand mvpsdarea
grow 500
# Copy psub areas up for contact checks
templayer xpsubcheck psubcheck
copyup psubcheck
templayer mvxpsubcheck mvpsubcheck
copyup mvpsubcheck
layer psd DIFF
and-not PPLUS
and-not NPLUS
and-not POLY
and-not DUALGATE
and-not pfetexpand
and psdexpand
layer nsd DIFF
and-not PPLUS
and-not NPLUS
and-not POLY
and nwelldef
and-not DUALGATE
and nsdexpand
layer mvpsd DIFF
and-not PPLUS
and-not NPLUS
and-not POLY
and-not nwelldef
and DUALGATE
and-not mvpfetexpand
and mvpsdexpand
layer mvnsd DIFF
and-not PPLUS
and-not NPLUS
and-not POLY
and nwelldef
and DUALGATE
and mvnsdexpand
templayer polyarea POLY
and-not DIFF
and-not SBLK
and-not PLFUSE
#ifdef HRPOLY1K
and-not HRES
#endif (HRPOLY1K)
copyup polycheck
layer poly polyarea,POLYTXT
and-not RESDEF
labels POLY
labels POLYTXT text
layer fillpoly POLYFILL
labels POLYFILL
# Copy poly areas up for contact checks
templayer xpolycheck polycheck
copyup polycheck
layer rpps POLY
and-not SBLK
and PPLUS
and RESDEF
layer rnps POLY
and-not SBLK
and NPLUS
and RESDEF
layer rpp POLY
and SBLK
and PPLUS
#ifdef HRPOLY1K
and-not HRES
#endif (HRPOLY1K)
and RESDEF
# POLY + SBLK without RESDEF may be a salicide-blocked transistor.
# The SBLK will be regenerated on GDS output and the poly should be
# treated as regular poly.
layer poly POLY
and-not DIFF
and SBLK
and-not RESDEF
layer efuse POLY
and-not DIFF
and PLFUSE
layer rnp POLY
and SBLK
and NPLUS
and RESDEF
#ifdef HRPOLY1K
and-not HRES
#endif (HRPOLY1K)
#ifdef HRPOLY1K
layer hires POLY
and SBLK
and HRES
and RESDEF
and-not DUALGATE
layer mvhires POLY
and SBLK
and HRES
and RESDEF
and DUALGATE
# We define poly under HRES but not under SBLK to be plain poly
layer poly POLY
and HRES
and-not SBLK
and-not RESDEF
#endif (HRPOLY1K)
layer ndc CONT
and DIFF
and NPLUS
and-not nwelldef
and MET1
and-not DUALGATE
and-not DIODE
grow 145
shrink 140
layer nsc CONT
and DIFF
and NPLUS
and nwelldef
and MET1
and-not DUALGATE
and-not DIODE
grow 145
shrink 140
layer pdc CONT
and DIFF
and PPLUS
and nwelldef
and MET1
and-not DUALGATE
and-not DIODE
grow 145
shrink 140
layer pdc CONT
and DIFF
and PPLUS
and MET1
and-not DUALGATE
and-not DIODE
and pfetexpand
grow 145
shrink 140
layer psc CONT
and DIFF
and PPLUS
and-not nwelldef
and MET1
and-not DUALGATE
and-not DIODE
and-not pfetexpand
grow 145
shrink 140
layer pc CONT
and POLY
and-not DIFF
and MET1
grow 145
shrink 140
layer ndic CONT
and DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and-not DUALGATE
and-not NAT
grow 145
shrink 140
layer nndic CONT
and DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and-not DUALGATE
and NAT
grow 145
shrink 140
layer pdic CONT
and DIFF
and PPLUS
and DIODE
and-not POLY
and-not NPLUS
and-not DUALGATE
grow 145
shrink 140
layer mvndc CONT
and DIFF
and NPLUS
and-not nwelldef
and MET1
and DUALGATE
and-not DIODE
grow 145
shrink 140
layer mvnsc CONT
and DIFF
and NPLUS
and MET1
and DUALGATE
and nwelldef
and-not DIODE
grow 145
shrink 140
layer mvpdc CONT
and DIFF
and PPLUS
and MET1
and DUALGATE
and nwelldef
and-not DIODE
grow 145
shrink 140
layer mvpdc CONT
and DIFF
and PPLUS
and MET1
and DUALGATE
and-not DIODE
and mvpfetexpand
grow 145
shrink 140
layer mvpsc CONT
and DIFF
and PPLUS
and-not nwelldef
and MET1
and DUALGATE
and-not DIODE
and-not mvpfetexpand
grow 145
shrink 140
layer mvndic CONT
and DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and DUALGATE
and-not NAT
grow 145
shrink 140
layer mvnndic CONT
and DIFF
and NPLUS
and DIODE
and-not POLY
and-not PPLUS
and DUALGATE
and NAT
grow 145
shrink 140
layer mvpdic CONT
and DIFF
and PPLUS
and DIODE
and-not POLY
and-not NPLUS
and DUALGATE
grow 145
shrink 140
layer rm1 MET1
and RESDEF
and MET1RES
layer m1 MET1,MET1TXT
and-not MET1RES
labels MET1
labels MET1TXT port
layer obsm1 M1BLOCK
labels M1BLOCK
layer fillm1 M1FILL
labels M1FILL
layer m2c VIA1
grow 130
shrink 130
layer rm2 MET2
and RESDEF
and MET2RES
layer m2 MET2,MET2TXT
and-not MET2RES
labels MET2
labels MET2TXT port
layer obsm2 M2BLOCK
labels M2BLOCK
layer fillm2 M2FILL
labels M2FILL
#ifdef METALS3 || METALS4 || METALS5 || METALS6
layer rm3 MET3
and RESDEF
and MET3RES
#ifdef METALS3 && MIM
templayer mimarea CAPDEF
and MET3
#endif (METALS3 && MIM)
layer m3 MET3,MET3TXT
and-not MET3RES
labels MET3
labels MET3TXT port
layer obsm3 M3BLOCK
labels M3BLOCK
layer fillm3 M3FILL
labels M3FILL
layer m3c VIA2
#ifdef METALS3 && MIM
and-not CAPM
and-not mimarea
#endif (METALS3 && MIM)
grow 140
shrink 130
#ifdef METALS3 && MIM
layer mimcc VIA2
and MET3
and CAPM
and CAPDEF
grow 260
shrink 250
#endif (METALS3 && MIM)
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
layer rm4 MET4
and RESDEF
and MET4RES
#ifdef METALS4 && MIM
templayer mimarea CAPDEF
and MET3
#endif (METALS4 && MIM)
layer m4 MET4,MET4TXT
and-not MET4RES
labels MET4
labels MET4TXT port
layer obsm4 M4BLOCK
labels M4BLOCK
layer fillm4 M4FILL
labels M4FILL
layer via3 VIA3
#ifdef METALS4 && MIM
and-not CAPM
and-not mimarea
#endif (METALS4 && MIM)
grow 140
shrink 130
#ifdef METALS4 && MIM
layer mimcc VIA3
and MET4
and CAPM
and CAPDEF
grow 260
shrink 250
#endif (METALS4 && MIM)
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
layer rm5 MET5
and RESDEF
and MET5RES
#ifdef METALS5 && MIM
templayer mimarea CAPDEF
and MET4
#endif (METALS5 && MIM)
layer m5 MET5,MET5TXT
and-not MET5RES
labels MET5
labels MET5TXT port
layer obsm5 M5BLOCK
labels M5BLOCK
layer fillm5 M5FILL
labels M5FILL
layer via4 VIA4
#ifdef MIM && METALS5
and-not CAPM
and-not mimarea
#endif (MIM && METALS5)
grow 140
shrink 130
#ifdef METALS5 && MIM
layer mimcc VIA4
and MET5
and CAPM
and CAPDEF
grow 260
shrink 250
#endif (METALS5 && MIM)
#endif (METALS5 || METALS6)
#ifdef METALS6
layer rmtp METTP
and RESDEF
and METTPRES
layer mtp METTP,METTPTXT
and-not METTPRES
labels METTP
labels METTPTXT port
layer obsmtp MTPBLOCK
labels MTPBLOCK
layer fillmtp MTPFILL
labels MTPFILL
#ifdef MIM
templayer mimarea CAPDEF
and MET5
#endif (MIM)
layer viatp VIATP
and METTP
#ifdef MIM
and-not CAPM
and-not mimarea
#endif (MIM)
grow 5
grow 265
shrink 265
#ifdef MIM
layer mimcc VIATP
and METTP
and CAPM
and CAPDEF
grow 260
shrink 250
#endif (MIM)
#endif (METALS6)
#ifdef MIM
layer mimcap CAPM
and CAPDEF
labels CAPM
templayer nolayer CAP_LENGTH
#endif (MIM)
# Find diffusion not covered in
# NPLUS or PPLUS and pull it into
# the next layer up
templayer gentrans DIFF
and-not PPLUS
and-not NPLUS
and POLY
copyup DIFF,POLY
templayer gendiff DIFF
and-not PPLUS
and-not NPLUS
and-not POLY
copyup DIFF
# Handle contacts found by copyup
layer ndic CONT
and MET1
and DIODE
and NPLUS
and-not DUALGATE
and-not NAT
grow 100
shrink 100
layer mvndic CONT
and MET1
and DIODE
and NPLUS
and DUALGATE
and-not NAT
grow 100
shrink 100
layer mvnndic CONT
and MET1
and DIODE
and NPLUS
and DUALGATE
and NAT
grow 100
shrink 100
layer pdic CONT
and MET1
and DIODE
and PPLUS
and-not DUALGATE
grow 100
shrink 100
layer mvpdic CONT
and MET1
and DIODE
and PPLUS
and DUALGATE
grow 100
shrink 100
layer ndc CONT
and ndifcheck
grow 100
shrink 100
layer mvndc CONT
and mvndifcheck
grow 100
shrink 100
layer pdc CONT
and pdifcheck
grow 100
shrink 100
layer mvpdc CONT
and mvpdifcheck
grow 100
shrink 100
layer pc CONT
and polycheck
grow 100
shrink 100
layer nsc CONT
and nsubcheck
grow 100
shrink 100
layer mvnsc CONT
and mvnsubcheck
grow 100
shrink 100
layer psc CONT
and psubcheck
grow 100
shrink 100
layer mvpsc CONT
and mvpsubcheck
grow 100
shrink 100
# Find contacts not covered in
# metal and pull them into the
# next layer up
templayer gencont CONT
and MET1
and-not DIFF
and-not POLY
and-not DIODE
and-not nsubcheck
and-not psubcheck
and-not mvnsubcheck
and-not mvpsubcheck
copyup CONT,MET1
templayer barecont CONT
and-not MET1
and-not nsubcheck
and-not psubcheck
and-not mvnsubcheck
and-not mvpsubcheck
copyup CONT
layer glass GLASS
labels GLASS
templayer cellbound BOUND,PRBOUND
boundary
layer lvstext TTEXT
labels TTEXT text
# layer fillblock FILLOBS,FILLOBS2
layer fillblock FILLOBS2
labels FILLOBS2
# MOS Varactors
layer nvar POLY
and DIFF
and NPLUS
and nwelldef
and-not DUALGATE
layer mvnvar POLY
and DIFF
and NPLUS
and nwelldef
and DUALGATE
layer pvar POLY
and DIFF
and PPLUS
and-not nwelldef
and-not DUALGATE
layer mvpvar POLY
and DIFF
and PPLUS
and-not nwelldef
and DUALGATE
calma DNWELL 12 0
calma NWELL 21 0
calma NWELLTXT 21 10
calma PWELL 204 0
calma PWELLTXT 204 10
calma SUBCUT 23 5
calma DIFF 22 0
calma DIFFFILL 22 4
calma POLY 30 0
calma POLYFILL 30 4
calma POLYTXT 30 10
calma NPLUS 32 0
calma PPLUS 31 0
calma SBLK 49 0
calma GLASS 37 0
calma CONT 33 0
calma MET1 34 0
calma MET1TXT 34 10
calma M1BLOCK 34 5
calma M1FILL 34 4
calma MET2RES 110 11
calma VIA1 35 0
calma MET2 36 0
calma MET2TXT 36 10
calma M2BLOCK 36 5
calma M2FILL 36 4
calma MET2RES 110 12
#ifdef METALS3 || METALS4 || METALS5 || METALS6
calma VIA2 38 0
calma MET3 42 0
calma MET3TXT 42 10
calma M3BLOCK 42 5
calma M3FILL 42 4
calma MET3RES 110 13
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
calma VIA3 40 0
calma MET4 46 0
calma MET4TXT 46 10
calma M4BLOCK 46 5
calma M4FILL 46 4
calma MET4RES 110 14
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
calma VIA4 41 0
calma MET5 81 0
calma MET5TXT 81 10
calma M5BLOCK 81 5
calma M5FILL 81 4
calma MET5RES 110 15
#endif (METALS5 || METALS6)
#ifdef METALS6
calma VIATP 129 0
calma METTP 53 0
calma METTPTXT 53 10
calma MTPBLOCK 53 5
calma METTPRES 110 16
#endif (METALS6)
#ifdef HRPOLY1K
calma HRES 62 0
#endif (HRPOLY1K)
calma EFUSE 80 5
calma PLFUSE 125 5
calma SOURCE 100 8
calma NAT 5 0
#ifdef MIM
calma CAPM 75 0
calma CAP_LENGTH 117 10
#endif (MIM)
calma DIODE 115 5
calma SCHOTTKY 241 0
calma CAPDEF 117 5
calma BJTDEF 118 5
calma BJTDRC 127 5
calma MOSCAP 166 5
calma BOUND 0 0
calma PRBOUND 63 0
calma VTEXT 63 63
calma FILLOBS 111 5
calma FILLOBS2 152 5
calma TTEXT 230 *
calma RESDEF 110 *
calma DUALGATE 55 0
calma SRAMDEF 108 5
calma FET5VDEF 112 1
end
#-----------------------------------------------------
# Digital flow maze router cost parameters
#-----------------------------------------------------
mzrouter
end
#-----------------------------------------------------
# Vendor DRC rules
#-----------------------------------------------------
drc
style drc variants (fast),(full),(routing)
scalefactor 50
cifstyle drc
variants (fast),(full)
#-----------------------------
# NWELL
#-----------------------------
width allnwell 860 "N-well width < %d (NW.1a)"
spacing allnwell allnwell 600 touching_ok "N-well spacing < %d (NW.2a)"
# rnw spacing is to unrelated nwell only.
spacing rnw allnwell 1400 touching_ok "N-well resistor spacing < %d (NW.2b)"
width rnw 2000 "N-well resistor width < %d (NW.1b)"
variants (full)
cifspacing mv_nwell mv_nwell 740 touching_ok "MV N-well spacing < %d (NW.2a)"
variants *
#-----------------------------
# DNWELL (deep nwell)
#-----------------------------
width dnwell 1700 "Deep N-well width < %d (DN.1)"
spacing dnwell dnwell 2500 touching_ok "Deep N-well spacing < %d (DN.2a)"
surround pwell dnwell 2500 absence_ok \
"Deep N-well surround P-well < %d (LPW.3)"
surround nwell dnwell 500 absence_ok \
"Deep N-well surround N-well < %d (NW.5)"
variants (full)
cifwidth pwell_in_dnwell 600 "P-well in deep N-well size < %d (LPW.1)"
cifwidth mvpwell_in_dnwell 740 "HV P-well in deep N-well size < %d (LPW.1)"
cifspacing pwell_in_dnwell pwell_in_dnwell 860 touching_ok \
"P-well in deep N-well spacing < %d (LPW.2b)"
cifspacing mvpwell_in_dnwell mvpwell_in_dnwell 860 touching_ok \
"MV P-well in deep N-well spacing < %d (LPW.2b)"
cifmaxwidth bad_dnwell 0 bend_illegal \
"Both LV and MV devices cannot be in the same deep N-well (DN.11)
cifmaxwidth bad_nwell 0 bend_illegal \
"Both LV and MV devices cannot be in the same N-well (DV.9)
cifmaxwidth bad_rnw 0 bend_illegal \
"N-well resistor cannot be in deep N-well (DN.12)
variants *
spacing dnwell allnwell 3100 surround_ok \
"Deep N-well spacing to N-well < %d (NW.3)"
spacing pwell dnwell 1500 surround_ok \
"Deep N-well spacing to P-well < %d (LPW.11)"
#-----------------------------
# DIFF (diffusion)
#-----------------------------
width alldifflv 220 "Diffusion width < %d (DF.1a)"
width alldiffmv 300 "Diffusion width < %d (DF.1a)"
area alldifflv 202500 220 "Diffusion minimum area < %a (DF.9)"
area alldiffmv 202500 300 "Diffusion minimum area < %a (DF.9)"
spacing alldifflv,nvar,pvar alldifflv,nvar,pvar 280 touching_ok \
"Diffusion spacing < %d (DF.3a)"
spacing alldiffmv,mvnvar,mvpvar alldiffmv,mvnvar,mvpvar 360 touching_ok \
"Diffusion spacing < %d (DF.3a)"
spacing *ndiff,*ndiode,nfet,nnfet,ncap allnwell 430 touching_illegal \
"N-Diffusion spacing to N-well < %d (DF.8)"
spacing *mvndiff,*mvndiode,mvnfet,mvncap,mvnnfet allnwell 600 touching_illegal \
"N-Diffusion spacing to N-well < %d (DF.8)"
spacing *psd allnwell 120 touching_illegal \
"P-Ohmic spacing to N-well < %d (DF.5)"
spacing *mvpsd allnwell 160 touching_illegal \
"P-Ohmic spacing to N-well < %d (DF.5)"
# NWELL and DNWELL are interchangeable under devices.
surround *nsd allnwell 120 absence_okay \
"N-well overlap of N-Ohmic < %d (DF.4a)"
surround *mvnsd allnwell 160 absence_okay \
"N-well overlap of N-Ohmic < %d (DF.4a)"
surround *pdiff,*pdiode,pfet,pcap allnwell 430 absence_okay \
"N-well overlap of P-Diffusion < %d (DF.7)"
surround *mvpdiff,*mvpdiode,mvpfet,mvpcap allnwell 600 absence_okay \
"N-well overlap of P-Diffusion < %d (DF.7)"
surround *nsd dnwell 620 absence_okay \
"Deep N-well overlap of N-Ohmic < %d (DF.4b)"
surround *mvnsd dnwell 660 absence_okay \
"Deep N-well overlap of N-Ohmic < %d (DF.4b)"
surround *pdiff,*pdiode,pfet,pcap dnwell 930 absence_okay \
"Deep N-well overlap of P-Diffusion < %d (DF.4e)"
surround *mvpdiff,*mvpdiode,mvpfet,mvpcap dnwell 1100 absence_okay \
"Deep N-well overlap of P-Diffusion < %d (DF.4e)"
variants (full)
# Use CIF-DRC rule to ensure that at least one exists.
cifmaxwidth missing_nwell 0 bend_illegal \
"P-diffusion and N-ohmic must be over N-well or deep N-well"
# Use CIF-DRC rules to ensure where pwell must be inside dnwell
cifmaxwidth pohmic_missing_pwell 0 bend_illegal \
"P-well must surround P-ohmic in deep N-well by 0.12um (DF.5)"
cifmaxwidth mvpohmic_missing_pwell 0 bend_illegal \
"P-well must surround MV P-ohmic in deep N-well by 0.16um (DF.5)"
cifmaxwidth ndiff_missing_pwell 0 bend_illegal \
"P-well must surround N-diffusion inside deep N-well by 0.43um (DF.8)"
cifmaxwidth mvndiff_missing_pwell 0 bend_illegal \
"P-well must surround MV N-diffusion inside deep N-well by 0.60um (DF.8)"
cifarea check_pplus 350000 400 "Minimum PPLUS area >= %a (PP.8a)"
cifarea check_nplus 350000 400 "Minimum NPLUS area >= %a (NP.8a)"
variants *
# surround *psd pwell 120 absence_ok \
# "P-well overlap of P-Ohmic < %d (DF.5)"
# surround *mvpsd pwell 160 absence_ok \
# "MV P-well overlap of MV P-Ohmic < %d (DF.5)"
# NAT requires additional spacing rules
spacing *nndiode,*mvnndiode *psd,*mvpsd 610 touching_illegal \
"NAT Diffusion spacing to TAP diffusion < %d (NAT.5 + NAT.6)"
#-----------------------------
# POLY
#-----------------------------
width allpoly 180 "Poly width < %d (PL.1)"
spacing allpoly allpoly 240 touching_ok "Poly spacing < %d (PL.3a)"
spacing allpolynonfet alldifflvnonfet 100 corner_ok allfets \
"Poly spacing to diffusion < %d (PL.5a)"
spacing allpolynonfet alldiffmvnonfet 300 corner_ok allfets \
"Poly spacing to MV diffusion < %d (PL.5a)
overhang *ndiff,rndiff nfet,nnfet,ncap 230 "N-Diffusion overhang of nmos < %d (DF.6)"
overhang *mvndiff,mvrndiff mvnfet,mvncap,mvnnfet 230 \
"N-Diffusion overhang of nmos < %d (DF.6)"
overhang *pdiff,rpdiff pfet,pcap 230 "P-Diffusion overhang of pmos < %d (DF.6)"
overhang *mvpdiff,mvrpdiff mvpfet,mvpcap 230 "P-Diffusion overhang of pmos < %d (DF.6)"
overhang *poly allfetsnonnat 220 "Poly overhang of transistor < %d (PL.4)"
overhang *poly nnfet,mvnnfet 350 "Poly overhang of NAT transistor < %d (NAT.6)"
angles allfets 45-only "Only 45 degrees allowed on transistors (PL.6)"
#-----------------------------------------------------------------------------
# SBLK - more rules to do here (note PRES refers only to unsalicided resistor)
#-----------------------------------------------------------------------------
spacing allpolysblkres allpolysblkres 400 touching_ok \
"Poly resistor spacing < %d (PRES/LRES.2)
spacing allpolysblkres allpolynonres 600 touching_ok \
"Poly resistor spacing to unrelated poly < %d (PRES/LRES.4)"
spacing allpolysblkres allactive,allactiveres 600 touching_illegal \
"Poly resistor spacing to diffusion < %d (PRES/LRES.3)"
spacing allactiveres allactiveres 400 touching_ok \
"Diffusion resistor spacing < %d (NDRES.2)
spacing allactiveres allactive 450 touching_ok \
"Diffusion resistor spacing to unrelated diffusion < %d (NDRES.3)"
spacing allactiveres allpoly 450 touching_ok \
"Diffusion resistor spacing to unrelated poly < %d (NDRES.4)"
#-----------------------------
# CONT
#-----------------------------
# Drawn contact includes 5nm metal1 surround
width (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 230 \
"Diffusion contact width < %d (CO.1 + 2 * CO.6)"
spacing (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 \
(ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 240 \
touching_ok "Diffusion contact spacing < %d (CO.2a - 2 * CO.6)"
surround (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 *m1 55 35 \
directional "Metal1 overlap of contact < %d in one direction (CO.6)"
surround ndc/a *ndiff 65 absence_illegal \
"N-Diffusion overlap of contact < %d (CO.4)"
surround nsc/a *nsd 65 absence_illegal \
"N-Diffusion overlap of contact < %d (CO.4)"
surround pdc/a *pdiff 65 absence_illegal \
"P-Diffusion overlap of contact < %d (CO.4)"
surround psc/a *psd 65 absence_illegal \
"P-Diffusion overlap of contact < %d (CO.4)"
surround ndic/a *ndiode 65 absence_illegal \
"N-Diffusion overlap of contact < %d (CO.4)"
surround pdic/a *pdiode 65 absence_illegal \
"P-Diffusion overlap of contact < %d (CO.4)"
surround pc/a *poly 65 absence_illegal "Poly overlap of contact < %d (CO.3)"
width (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 230 \
"MV Diffusion contact width < %d (CO.1 + 2 * CO.6)"
spacing (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 \
(mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 240 touching_ok \
"Diffusion contact spacing < %d (CO.2a - 2 * CO.6)"
surround (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 *m1 55 35 directional \
"Metal1 overlap of contact < %d in one direction (CO.6)"
surround mvndc/a *mvndiff 65 absence_illegal \
"MV N-Diffusion overlap of contact < %d (CO.4)"
surround mvnsc/a *mvnsd 65 absence_illegal \
"MV N-Diffusion overlap of contact < %d (CO.4)"
surround mvpdc/a *mvpdiff 65 absence_illegal \
"MV P-Diffusion overlap of contact < %d (CO.4)"
surround mvpsc/a *mvpsd 65 absence_illegal \
"MV P-Diffusion overlap of contact < %d (CO.4)"
surround mvndic/a *mvndiode 65 absence_illegal \
"MV N-Diffusion overlap of contact < %d (CO.4)"
surround mvnndic/a *mvnndiode 65 absence_illegal \
"MV NAT N-Diffusion overlap of contact < %d (CO.4)"
surround mvpdic/a *mvpdiode 65 absence_illegal \
"MV P-Diffusion overlap of contact < %d (CO.4)"
spacing allpdiffcont allndiffcont 240 touching_illegal \
"Diffusion contact spacing < %d (CO.2a - 2 * CO.6)"
spacing allndiffcont allndiffcont 240 touching_ok \
"Diffusion contact spacing < %d (CO.2a - 2 * CO.6)"
spacing allpdiffcont allpdiffcont 240 touching_ok \
"Diffusion contact spacing < %d (CO.2a - 2 * CO.6)"
spacing pc pc 240 touching_ok "Poly contact spacing < %d (CO.2a - 2 * CO.6)"
spacing pc alldiff 165 touching_illegal \
"Poly contact spacing to diffusion < %d (CO.8 - 2 * CO.6)"
spacing allpdiffcont,allndiffcont allpoly 145 touching_illegal \
"Diffusion contact spacing to poly < %d (CO.7 - 2 * CO.6)"
exact_overlap (ndc,pdc,psc,nsc,pc,ndic,pdic)/a
exact_overlap (mvndc,mvpdc,mvpsc,mvnsc,mvndic,mvnndic,mvpdic)/a
variants *
#-----------------------------
# METAL 1
#-----------------------------
width *m1,rm1 230 "Metal1 width < %d (M1.1)"
spacing allm1,obsm1 allm1,obsm1 230 touching_ok "Metal1 spacing < %d (M1.2a)"
area allm1,obsm1 144400 230 "Metal1 minimum area < %a (M1.3)"
variants (fast),(full)
widespacing allm1,obsm1 10000 allm1,obsm1 300 touching_ok \
"Metal1 > 10um spacing to unrelated m1 < %d (M1.2b)"
variants *
#--------------------------------------------------
# VIA 1
#--------------------------------------------------
width v1/m1 260 "Via1 width < %d (V1.1)"
spacing v1 v1 260 touching_ok "Via1 spacing < %d (V1.2a)"
surround v1/m1 *m1 60 40 directional \
"Metal1 overlap of Via1 < %d in one direction (V1.3)"
surround v1/m2 *m2 10 absence_illegal \
"Metal2 overlap of Via1 < %d (V1.4)"
surround v1/m2 *m2 60 40 directional \
"Metal2 overlap of Via1 < %d in one direction (V1.4i)"
exact_overlap v1/m2
#-----------------------------
# METAL 2
#-----------------------------
width *m2,rm2 280 "Metal2 width < %d (M2.1)"
spacing allm2,obsm2 allm2,obsm2 280 touching_ok "Metal2 spacing < %d (M2.2a)"
area allm2,obsm2 144400 280 "Metal2 minimum area < %a (M2.3)"
variants (fast),(full)
widespacing allm2,obsm2 10000 allm2,obsm2 300 touching_ok \
"Metal2 > 10um spacing to unrelated m2 < %d (M2.2b)"
variants *
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#--------------------------------------------------
# VIA 2
#--------------------------------------------------
width v2/m2 280 "Via2 width < %d (V2.1 + 2 * V2.3)"
spacing v2 v2 240 touching_ok "Via2 spacing < %d (V2.2a - 2 * V2.3)"
surround v2/m2 *m2 50 30 directional \
"Metal2 overlap of Via2 < %d in one direction (V2.3i - V2.3)"
exact_overlap v2/m3
#-----------------------------
# METAL 3
#-----------------------------
#ifdef METALS3
# Metal 3 is the top metal
#ifdef THICKMET3P0
width *m3,rm3 1800 "Thick Metal3 width < %d (MT30.1)"
spacing allm3,obsm3 allm3,obsm3 1800 touching_ok \
"Thick Metal3 spacing < %d (MT30.2)"
surround v2/m3 *m3 110 absence_illegal \
"Thick Metal3 overlap of Via2 < %d (MT30.5 - V2.4)"
surround v2/m3 *m3 240 directional \
"Thick Metal3 overlap of Via2 < %d in one direction (MT30.6 - V2.4)"
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
surround v2/m3 *m3 50 30 directional \
"Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)"
width *m3,rm3 440 "Metal3 width < %d (MT.1)"
spacing allm3,obsm3 allm3,obsm3 460 touching_ok "Metal3 spacing < %d (MT.2a)"
area allm3,obsm3 562500 440 "Metal3 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm3,obsm3 10000 allm3,obsm3 600 touching_ok \
"Metal3 > %c spacing to unrelated m3 < %d (MT.2b)"
#else (!(THICKMET3P0 || THICKMET0P9 || THICKMET1P1))
surround v2/m3 *m3 50 30 directional \
"Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)"
width *m3,rm3 360 "Metal3 width < %d (MT.1)"
spacing allm3,obsm3 allm3,obsm3 380 touching_ok "Metal3 spacing < %d (MT.2a)"
area allm3,obsm3 562500 360 "Metal3 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm3,obsm3 10000 allm3,obsm3 500 touching_ok \
"Metal3 > %c spacing to unrelated m3 < %d (MT.2b)"
#endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9))
#else (!METALS3)
surround v2/m3 *m3 50 30 directional \
"Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)"
width *m3,rm3 280 "Metal3 width < %d (M3.1)"
spacing allm3,obsm3 allm3,obsm3 280 touching_ok "Metal3 spacing < %d (M3.2a)"
area allm3,obsm3 144400 280 "Metal3 minimum area < %a (M3.3)"
variants (fast),(full)
widespacing allm3,obsm3 10000 allm3,obsm3 300 touching_ok \
"Metal3 > %c spacing to unrelated m3 < %d (M3.2b)"
#endif (!METALS3)
variants *
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#--------------------------------------------------------------
# VIA 3 - Requires METAL4, METAL5, or METAL6 Module
#--------------------------------------------------------------
width v3/m3 280 "Via3 width < %d (V3.1 + 2 * V3.4)"
spacing v3 v3 240 touching_ok "Via3 spacing < %d (V3.2a - 2 * V3.4)"
surround v3/m3 *m3 50 30 directional \
"Metal3 overlap of Via3 < %d in one direction (V3.3i - V3.3)"
exact_overlap v3/m4
#-----------------------------
# METAL 4 - METAL4 Module
#-----------------------------
#ifdef METALS4
# Metal 4 is the top metal
#ifdef THICKMET3P0
width *m4,rm4 1800 "Thick Metal4 width < %d (MT30.1)"
spacing allm4,obsm4 allm4,obsm4 1800 touching_ok "Metal4 spacing < %d (MT30.2)"
surround v3/m4 *m4 110 absence_illegal \
"Thick Metal4 overlap of Via3 < %d (MT30.5 - V3.4)"
surround v3/m4 *m4 240 directional \
"Thick Metal4 overlap of Via3 < %d in one direction (MT30.6 - V3.4)"
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
surround v3/m4 *m4 50 30 directional \
"Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)"
width *m4,rm4 440 "Metal4 width < %d (MT.1)"
spacing allm4,obsm4 allm4,obsm4 460 touching_ok "Metal4 spacing < %d (MT.2a)"
area allm4,obsm4 562500 440 "Metal4 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm4,obsm4 10000 allm4,obsm4 600 touching_ok \
"Metal4 > %c spacing to unrelated m4 < %d (MT.2b)"
#else (!(THICK3UMET || THICKMET1P1 || THICKMET0P9))
surround v3/m4 *m4 50 30 directional \
"Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)"
width *m4,rm4 360 "Metal4 width < %d (MT.1)"
spacing allm4,obsm4 allm4,obsm4 380 touching_ok "Metal4 spacing < %d (MT.2a)"
area allm4,obsm4 562500 360 "Metal4 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm4,obsm4 10000 allm4,obsm4 500 touching_ok \
"Metal4 > %c spacing to unrelated m4 < %d (MT.2b)"
#endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9))
#else (!METALS4)
surround v3/m4 *m4 50 30 directional \
"Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)"
width *m4,rm4 230 "Metal4 width < %d (M4.1)"
spacing allm4,obsm4 allm4,obsm4 280 touching_ok "Metal4 spacing < %d (M4.2a)"
area allm4,obsm4 144000 230 "Metal4 minimum area < %a (M4.3)"
variants (fast),(full)
widespacing allm4,obsm4 10000 allm4,obsm4 300 touching_ok \
"Metal4 > %c spacing to unrelated m4 < %d (M4.2b)"
#endif (!METALS4)
variants *
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#------------------------------------------------------
# VIA 4 - Requires METAL5 Module
#------------------------------------------------------
width v4/m4 280 "Via4 width < %d (V4.1 + 2 * V4.4)"
spacing v4 v4 240 touching_ok "Via4 spacing < %d (V4.2a - 2 * V4.4)"
exact_overlap v4/m5
#-----------------------------
# METAL 5 - METAL5 Module
#-----------------------------
#ifdef METALS5
# Metal 5 is the top metal
#ifdef THICKMET3P0
width *m5,rm5 1800 "Metal5 width < %d (MT30.1)"
spacing allm5,obsm5 allm5,obsm5 1800 touching_ok "Metal5 spacing < %d (MT30.2)"
surround v4/m5 *m5 110 absence_illegal \
"Metal5 overlap of Via4 < %d (MT30.5 - V4.4)"
surround v4/m5 *m5 240 directional \
"Metal5 overlap of Via4 < %d in one direction (MT30.6 - V4.4)"
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
surround v4/m4 *m4 50 30 directional \
"Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)"
surround v4/m5 *m5 50 30 directional \
"Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)"
width *m5,rm5 440 "Metal5 width < %d (MT.1)"
spacing allm5,obsm5 allm5,obsm5 460 touching_ok "Metal5 spacing < %d (MT.2a)"
area allm5,obsm5 526500 440 "Metal5 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm5,obsm5 10000 allm5,obsm5 600 touching_ok \
"Metal5 > %c spacing to unrelated m5 < %d (MT.2b)"
#else (!(THICK3UMET || THICKMET1P1 || THICKMET0P9))
surround v4/m4 *m4 50 30 directional \
"Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)"
surround v4/m5 *m5 50 30 directional \
"Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)"
width *m5,rm5 360 "Metal5 width < %d (MT.1)"
spacing allm5,obsm5 allm5,obsm5 380 touching_ok "Metal5 spacing < %d (MT.2a)"
area allm5,obsm5 562500 360 "Metal5 minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allm5,obsm5 10000 allm5,obsm5 500 touching_ok \
"Metal5 > %c spacing to unrelated m5 < %d (MT.2b)"
#endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9))
#else (!METALS5)
surround v4/m4 *m4 50 30 directional \
"Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)"
surround v4/m5 *m5 50 30 directional \
"Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)"
width *m5,rm5 230 "Metal5 width < %d (M5.1)"
spacing allm5,obsm5 allm5,obsm5 280 touching_ok "Metal5 spacing < %d (M5.2a)"
area allm5,obsm5 144000 230 "Metal5 minimum area < %a (M5.3)"
variants (fast),(full)
widespacing allm5,obsm5 10000 allm5,obsm5 300 touching_ok \
"Metal5 > %c spacing to unrelated m5 < %d (M5.2b)"
#endif (!METALS5)
variants *
#endif (METALS5 || METALS6)
#ifdef METALS6
#-----------------------------------------------------------------------------------
# VIA TP - Requires METAL6 Module
#-----------------------------------------------------------------------------------
spacing vtp vtp 340 touching_ok "ViaTP spacing < %d (VT.2a - VT.3)"
width vtp/m5 370 "ViaTP width < %d (VT.1+VT.3)"
surround vtp/m5 *m5 45 directional \
"Metal 5 overlap of ViaTP in one direction < %d (VT.3)"
exact_overlap vtp/m5
#----------------------------------------------------------------------
# METAL TP - Top metal for METAL6 module
#----------------------------------------------------------------------
variants *
# Metal TP is the top metal
#ifdef THICKMET3P0
width allmtp 1800 "Thick Top Metal width < %d (MT30.1)"
spacing allmtp,obsmtp allmtk,obsmtk 1800 touching_ok\
"Thick Top Metal spacing < %d (MT30.2a)"
surround vtp/mtp *mtp 110 absence_illegal \
"Thick Top Metal overlap of ViaTP < %d (MT30.5 - VTP.4)"
surround vtp/mtp *mtp 240 directional \
"Thick Top Metal overlap of ViaTP < %d in one direction (MT30.6 - VTP.4)"
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
surround vtp/mtp *mtp 80 absence_illegal \
"Top Metal overlap of ViaTP < %d (VT.4 - VT.3)"
width allmtp 440 "Top Metal width < %d (MT.1)"
spacing allmtp,obsmtp allmtp,obsmtp 460 touching_ok\
"Top Metal spacing < %d (MT.2a)"
area allmtp 562500 440 "Top Metal minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allmtp,obsmtp 10000 allmtp,obsmtp 600 touching_ok \
"Top Metal > %c spacing to unrelated Top Metal < %d (MT.2b)"
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
surround vtp/mtp *mtp 80 absence_illegal \
"Top Metal overlap of ViaTP < %d (VT.4 - VT.3)"
width allmtp 360 "Top Metal width < %d (MT.1)"
spacing allmtp,obsmtp allmtp,obsmtp 380 touching_ok\
"Top Metal spacing < %d (MT.2a)"
area allmtp 562500 360 "Top Metal minimum area < %a (MT.4)"
variants (fast),(full)
widespacing allmtp,obsmtp 10000 allmtp,obsmtp 500 touching_ok \
"Top Metal > %c spacing to unrelated Top Metal < %d (MT.2b)"
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
variants *
#endif (METALS6)
#--------------------------------------------------
# NMOS, PMOS
#--------------------------------------------------
# NOTE: The layer width can be used for the smaller of
# (minimum length, minimum width). However, for many
# devices, minimum width is less than minimum length.
extend nnfet *ndiff 400 exclusive "nn Transistor length < %d (DF.2c)"
extend mvnnfet *mvndiff 1200 exclusive "MV nn Transistor length < %d (NAT.4)"
width mvnnfet 400 "MV nn Transistor width < %d (DF.2c)"
extend pfet,pcap *pdiff 280 exclusive "Transistor length < %d (PL.1a)"
extend nfet,ncap *ndiff 280 exclusive "Transistor length < %d (PL.1a)"
width pfet,pcap 300 angles "Bent Transistor length < %d (PL.7)"
width nfet,ncap 300 angles "Bent Transistor length < %d (PL.7)"
extend mvpfet,mvpcap *mvpdiff 500 exclusive "MV Transistor length < %d (PL.1a)"
extend mvnfet,mvncap *mvndiff 600 exclusive "MV Transistor length < %d (PL.1a)"
width mvpfet,mvpcap 700 angles "Bent MV Transistor length < %d (PL.7)"
width mvnfet,mvncap 700 angles "Bent MV Transistor length < %d (PL.7)"
edge4way pfet,pcap,mvpfet,mvpcap *poly/a 330 \
~(*nsd,*mvnsd)/a (*pdiff,*mvpdiff)/a 300 \
"n-ohmic spacing to PMOS gate < %d (NP.4b + PP.4c)"
edge4way nfet,ncap,nnfet,mvnnfet,mvnfet,mvncap *poly/a 330 \
~(*psd,*mvpsd)/a (*ndiff,*mvndiff)/a 300 \
"p-ohmic spacing to NMOS gate < %d (PP.4b + NP.4c)"
#--------------------------------------------------
# RPP,RNP
#--------------------------------------------------
width rpp 800 "ppolyres minimum width < %d (PRES.1)"
width rnp 800 "npolyres minimum width < %d (LRES.1)"
spacing rpp rpp 400 touching_ok "ppolyres minimum spacing < %d (PRES.2)"
spacing rnp rnp 400 touching_ok "npolyres minimum spacing < %d (LRES.2)"
spacing rpp pc 215 touching_illegal "rpp spacing to Cont < %d (PRES.7 - CO.6)"
spacing rnp pc 215 touching_illegal "rnp spacing to Cont < %d (LRES.7 - CO.6)"
#ifdef HRPOLY1K
#--------------------------------------------------
# HIRES
#--------------------------------------------------
width hires,mvhires 1000 "hires poly minimum width < %d (HRES.3)"
spacing hires,mvhires hires,mvhires 400 touching_ok \
"hires poly minimum spacing < %d (HRES.2)"
variants (full)
cifmaxwidth res_diff_space 0 bend_illegal \
"High value resistor spacing to diffusion < 0.7um (HRES.5 + HRES.4)"
cifmaxwidth res_poly_space 0 bend_illegal \
"High value resistor spacing to poly < 0.7um (HRES.6 + HRES.4)"
cifmaxwidth res_cont_space_min 0 bend_illegal \
"Unsalicided resistor spacing to poly contact must be 0.22um (PRES/LRES/HRES.7)"
cifmaxwidth res_no_cont 0 bend_illegal \
"Unsalicided resistor spacing to poly contact must be 0.22um (PRES/LRES/HRES.7)"
variants *
#endif (HRPOLY1K)
#--------------------------------------------------
# RDN,RDP (Diffusion resistors)
#--------------------------------------------------
width rdn 300 "N-diffusion resistor width < %d (DF.1b)"
width rdp 300 "P-diffusion resistor width < %d (DF.1b)"
#------------------------------------
# MOS Varactor device rules
#------------------------------------
overhang *nsd nvar 320 \
"N-Ohmic overhang of Varactor < %d (FIXME)"
overhang *mvnsd mvnvar 320 \
"N-Ohmic overhang of Varactor < %d (FIXME)"
width nvar,mvnvar 1000 \
"Varactor length and width < %d (DF.1c)"
overhang *psd pvar 320 \
"P-Ohmic overhang of Varactor < %d (FIXME)"
overhang *mvpsd mvpvar 320 \
"P-Ohmic overhang of Varactor < %d (FIXME)"
width pvar,mvpvar 1000 \
"Varactor length and width < %d (DF.1c)"
#ifdef MIM
#undef MIM
#-------------------------------------------------
# CAPM (FuseTop)
#-------------------------------------------------
width *mimcap 5000 "MiM cap top plate width < %d (MIMTM.8a)"
spacing *mimcap *mimcap 600 touching_ok \
"MiM cap top plate spacing < %d (MIMTM.6)"
surround mimcc mimcap 390 absence_illegal \
"MiM cap must surround MiM cap contact by %d (MIMTM.4-VT.4)"
spacing pad *mimcap 50 touching_illegal "MiM cap cannot overlap pad (MIM1M.X)"
spacing mimcc mimcc 480 touching_ok "MiM cap contact spacing < %d (MIMTM.9 - 2 * VT.3)"
#ifdef METALS3
spacing via1 *mimcap 50 touching_illegal \
"MiM cap cannot overlap via1 (MIMTM.10)"
spacing *mimcap *m2,rm2 1200 touching_ok \
"MiM cap to Metal2 spacing < %d (MIMTM.1)"
spacing *mimcap via2/m3 390 touching_illegal \
"MiM cap spacing to via2 < %d (MIMTM.5-VT.X)"
surround *mimcap m2 600 absence_illegal \
"Bottom plate overlap of MiM cap < %d (MIMTM.3)"
width mimcapc/m3 280 "MiM Contact width < %d (VT.1+VT.3)"
#elseif defined(METALS4)
spacing via2 *mimcap 50 touching_illegal \
"MiM cap cannot overlap via2 (MIMTM.10)"
spacing *mimcap *m3,rm3 1200 touching_ok \
"MiM cap to Metal3 spacing < %d (MIMTM.1)"
spacing *mimcap via3/m4 390 touching_illegal \
"MiM cap spacing to via3 < %d (MIMTM.5)"
surround *mimcap m3 600 absence_illegal \
"Bottom plate overlap of MiM cap < %d (MIMTM.3)"
width mimcapc/m4 280 "MiM Contact width < %d (VT.1+VT.3)"
#elseif defined(METALS5)
spacing via3 *mimcap 50 touching_illegal \
"MiM cap cannot overlap via3 (MIMTM.10)"
spacing *mimcap *m4,rm4 1200 touching_ok \
"MiM cap to Metal4 spacing < %d (MIMTM.1)"
spacing *mimcap via4/m5 390 touching_illegal \
"MiM cap spacing to via4 < %d (MIMTM.5)"
surround *mimcap m4 600 absence_illegal \
"Bottom plate overlap of MiM cap < %d (MIMTM.3)"
width mimcapc/m5 280 "MiM Contact width < %d (VT.1+VT.3)"
#elseif defined(METALS6)
spacing via4 *mimcap 50 touching_illegal \
"MiM cap cannot overlap via4 (MIMTM.10)"
spacing *mimcap *m5,rm5 1200 touching_ok \
"MiM cap to Metal5 spacing < %d (MIMTM.1)"
spacing *mimcap viatp/mtp 390 touching_illegal \
"MiM cap spacing to viaTP < %d (MIMTM.5)"
surround *mimcap m5 600 absence_illegal \
"Bottom plate overlap of MiM cap < %d (MIMTM.3)"
width mimcapc/mtp 280 "MiM Contact width < %d (VT.1+VT.3)"
#endif
variants (full)
cifmaxwidth mim_bottom_plate_space 0 bend_illegal \
"MiM bottom plate to unrelated metal < 1.2um (MIMTM.1)"
cifmaxwidth mim_bot_cont_surround 0 bend_illegal \
"MiM bottom plate surrounds contact < 0.4um (MIMTM.2)"
#define MIM
#endif (MIM)
#----------------------------
# End DRC style
#----------------------------
style empty
scalefactor 50
stepsize 2000
end
#----------------------------
# LEF format definitions
#----------------------------
lef
masterslice pwell Pwell PWELL
masterslice nwell Nwell NWELL
routing m1 Metal1 METAL1 MET1 m1 met1 metal1
routing m2 Metal2 METAL2 MET2 m2 met2 metal2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
routing m3 Metal3 METAL3 MET3 m3 met3 metal3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
routing m4 Metal4 METAL4 MET4 m4 met4 metal4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
routing m5 Metal5 METAL5 MET5 m5 met5 metal5
#endif (METALS5 || METALS6)
#ifdef METALS6
routing mtp MetalTop Metal6 METAL6 METTP mtp mettp MET6 m6 met6 metal6
#endif (METALS6)
cut m2c Via1 VIA1 via1 cont2 via12 VIA12
#ifdef METALS3 || METALS4 || METALS5 || METALS6
cut m3c Via2 VIA2 via2 cont3 via23 VIA23
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
cut via3 Via3 VIA3 via3 cont4 via34 VIA34
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
cut via4 Via4 VIA4 via4 cont5 via45 VIA45
#endif (METALS5 || METALS6)
#ifdef METALS6
cut viatp Via5 viatp VIATP VIA5 vtp via5 cont6 via56 VIA56
#endif (METALS6)
obs obsm1 Metal1
obs obsm2 Metal2
#ifdef METALS3 || METALS4 || METALS5 || METALS6
obs obsm3 Metal3
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
obs obsm4 Metal4
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
obs obsm5 Metal5
#endif (METALS5 || METALS6)
#ifdef METALS6
obs obsmtp Metal6
#endif (METALS6)
obs obsv1 Via1
obs obsv2 Via2
end
#-----------------------------------------------------
# Device and Parasitic extraction
#-----------------------------------------------------
extract
style ngspice variants (),(hrhc),(lrhc),(hrlc),(lrlc)
cscale 1
lambda 5.0
units microns
step 7
sidehalo 8
fringeshieldhalo 8
planeorder dwell 0
planeorder well 1
planeorder active 2
planeorder metal1 3
planeorder metal2 4
#ifdef METALS3
planeorder metal3 5
planeorder block 6
planeorder comment 7
#elseif defined(METALS4)
planeorder metal3 5
planeorder metal4 6
planeorder block 7
planeorder comment 8
#elseif defined(METALS5)
planeorder metal3 5
planeorder metal4 6
planeorder metal5 7
planeorder block 8
planeorder comment 9
#elseif defined(METALS6)
planeorder metal3 5
planeorder metal4 6
planeorder metal5 7
planeorder metaltp 8
planeorder block 9
planeorder comment 10
#endif
height dnwell -0.1 0.0
height nwell,pwell 0.0 0.0145
height alldiff 0.0145 0.30
height allpoly 0.32 0.2
height alldiffcont 0.3145 0.9155
height pc 0.52 0.71
height allm1 1.23 0.55
height via 1.78 0.60
height allm2 2.38 0.55
#ifdef METALS3 || METALS4 || METALS5 || METALS6
height via2 2.93 0.60
height allm3 3.53 0.55
#endif
#ifdef METALS4 || METALS5 || METALS6
height via3 4.08 0.60
height allm4 4.68 0.55
#endif
#ifdef METALS5 || METALS6
height via4 5.23 0.60
#endif
#ifdef METALS5
height allm5 5.83 1.0025
#endif
#ifdef METALS6
height allm5 5.83 0.55
#endif
#ifdef METALS6
height viatp 6.38 0.9
height allmtp 7.28 1.0025
#endif
# Antenna check parameters
# (to be completed)
model partial
antenna poly sidewall 200 none
antenna allcont surface 10 none
antenna via1 surface 20 none
#ifdef METALS3 || METALS4 || METALS5 || METALS6
antenna via2 surface 20 none
#endif
#ifdef METALS4 || METALS5 || METALS6
antenna via3 surface 20 none
#endif
#ifdef METALS5 || METALS6
antenna via4 surface 20 none
#endif
#ifdef METALS6
antenna viatp surface 20 none
#endif
#ifdef MIM
antenna mimcc surface 20 none
#endif
antenna m1,m2 sidewall 400 none
#ifdef METALS3 || METALS4 || METALS5 || METALS6
antenna m3 sidewall 400 none
#endif
#ifdef METALS4 || METALS5 || METALS6
antenna m4 sidewall 400 none
#endif
#ifdef METALS5 || METALS6
antenna m5 sidewall 400 none
#endif
#ifdef METALS6
antenna mtp sidewall 400 none
#endif
tiedown alldiffnonfet
substrate *ppdiff,*mvppdiff,space/w,pwell well $SUB -dnwell,isosub
# Layer resistance
variants ()
# Resistances are in milliohms per square
# Optional 3rd argument is the corner adjustment fraction
# See document 180MCU_YI-141-EP059-01_10.pdf
resist (nwell,dnwell)/well 1000000
resist (pwell,isosub)/well 3250000
resist (*ndiff,nsd)/active 6300
resist (*pdiff,*psd)/active 7000
resist (*mvndiff,mvnsd)/active 6300
resist (*mvpdiff,*mvpsd)/active 7000
resist (allpolynonres)/active 7300
resist (rnw)/well 1000000 0.5
resist (rnd)/active 60000 0.5
resist (rpd)/active 185000 0.5
resist (mvrnd)/active 60000 0.5
resist (mvrpd)/active 185000 0.5
resist (rnds)/active 6300 0.5
resist (rpds)/active 7000 0.5
resist (mvrnds)/active 6300 0.5
resist (mvrpds)/active 7000 0.5
resist (rnps)/active 6800 0.5
resist (rpps)/active 7300 0.5
resist (rpp)/active 350000 0.5
resist (rnp)/active 310000 0.5
#ifdef HRPOLY1K
resist (hires,mvhires)/active 1000000 0.5
#endif (HRPOLY1K)
resist (allm1)/metal1 90
resist (allm2)/metal2 90
#ifdef METALS3
#ifdef THICKMET3P0
resist (allm3)/metal3 10
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm3)/metal3 40
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm3)/metal3 60
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS3)
#ifdef METALS4 || METALS5 || METALS6
resist (allm3)/metal3 90
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS4
#ifdef THICKMET3P0
resist (allm4)/metal4 10
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm4)/metal4 40
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm4)/metal4 60
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS4)
#ifdef METALS5 || METALS6
resist (allm4)/metal4 90
#endif (METALS5 || METALS6)
#ifdef METALS5
#ifdef THICKMET3P0
resist (allm5)/metal5 10
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm5)/metal5 40
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm5)/metal5 60
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS5)
#ifdef METALS6
resist (allm5)/metal5 90
#endif (METALS6)
#ifdef METALS6
#ifdef THICKMET3P0
resist (allmtp)/metaltp 10
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allmtp)/metaltp 40
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allmtp)/metaltp 60
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS6)
contact ndc,nsc,ndic,nndic 6300
contact pdc,psc,pdic 5200
contact mvndc,mvnsc,mvndic,mvnndic 6300
contact mvpdc,mvpsc,mvpdic 5200
contact pc 8000
contact m2c 4500
#ifdef METALS3 || METALS4 || METALS5 || METALS6
contact m3c 4500
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
contact via3 4500
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
contact via4 4500
#endif (METALS5 || METALS6)
#ifdef MIM
contact mimcc 4500
#endif (MIM)
#ifdef METALS6
contact viatp 4500
#endif (METALS6)
variants (hrhc),(hrlc)
# High-end corner resistances (milliohms per square)
resist (nwell,dnwell)/well 1200000
resist (pwell,isosub)/well 3250000
resist (*ndiff,nsd)/active 15000
resist (*pdiff,*psd)/active 15000
resist (*mvndiff,mvnsd)/active 15000
resist (*mvpdiff,*mvpsd)/active 15000
resist (allpolynonres)/active 15000
resist (rnw)/well 1200000 0.5
resist (rnd)/active 75000 0.5
resist (rpd)/active 225000 0.5
resist (mvrnd)/active 75000 0.5
resist (mvrpd)/active 225000 0.5
resist (rnds)/active 15000 0.5
resist (rpds)/active 15000 0.5
resist (mvrnds)/active 15000 0.5
resist (mvrpds)/active 15000 0.5
resist (rnps)/active 15000 0.5
resist (rpps)/active 15000 0.5
resist (rpp)/active 420000 0.5
resist (rnp)/active 370000 0.5
#ifdef HRPOLY1K
resist (hires,mvhires)/active 1200000 0.5
#endif (HRPOLY1K)
resist (allm1)/metal1 104
resist (allm2)/metal2 104
#ifdef METALS3
#ifdef THICKMET3P0
resist (allm3)/metal3 15
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm3)/metal3 49
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm3)/metal3 70
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS3)
#ifdef METALS4 || METALS5 || METALS6
resist (allm3)/metal3 104
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS4
#ifdef THICKMET3P0
resist (allm4)/metal4 14
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm4)/metal4 49
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm4)/metal4 70
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS4)
#ifdef METALS5 || METALS6
resist (allm4)/metal4 104
#endif (METALS5 || METALS6)
#ifdef METALS5
#ifdef THICKMET3P0
resist (allm5)/metal5 14
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm5)/metal5 49
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm5)/metal5 70
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS5)
#ifdef METALS6
resist (allm5)/metal5 104
#endif (METALS6)
#ifdef METALS6
#ifdef THICKMET3P0
resist (allmtp)/metaltp 14
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allmtp)/metaltp 49
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allmtp)/metaltp 70
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS6)
contact ndc,nsc,ndic,nndic 15000
contact pdc,psc,pdic 15000
contact mvndc,mvnsc,mvndic,mvnndic 15000
contact mvpdc,mvpsc,mvpdic 15000
contact pc 15000
contact m2c 15000
#ifdef METALS3 || METALS4 || METALS5 || METALS6
contact m3c 15000
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
contact via3 15000
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
contact via4 15000
#endif (METALS5 || METALS6)
#ifdef MIM
contact mimcc 15000
#endif (MIM)
#ifdef METALS6
contact viatp 15000
#endif (METALS6)
variants (lrhc),(lrlc)
# Low-end corner resistances (milliohms per square)
resist (nwell,dnwell)/well 800000
resist (pwell,isosub)/well 3250000
resist (*ndiff,nsd)/active 1000
resist (*pdiff,*psd)/active 1000
resist (*mvndiff,mvnsd)/active 1000
resist (*mvpdiff,*mvpsd)/active 1000
resist (allpolynonres)/active 1000
resist (rnw)/well 8000000 0.5
resist (rnd)/active 45000 0.5
resist (rpd)/active 145000 0.5
resist (mvrnd)/active 45000 0.5
resist (mvrpd)/active 145000 0.5
resist (rnds)/active 1000 0.5
resist (rpds)/active 1000 0.5
resist (mvrnds)/active 1000 0.5
resist (mvrpds)/active 1000 0.5
resist (rnps)/active 1000 0.5
resist (rpps)/active 1000 0.5
resist (rpp)/active 280000 0.5
resist (rnp)/active 250000 0.5
#ifdef HRPOLY1K
resist (hires,mvhires)/active 800000 0.5
#endif (HRPOLY1K)
resist (allm1)/metal1 76
resist (allm2)/metal2 76
#ifdef METALS3
#ifdef THICKMET3P0
resist (allm3)/metal3 6
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm3)/metal3 31
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm3)/metal3 50
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS3)
#ifdef METALS4 || METALS5 || METALS6
resist (allm3)/metal3 76
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS4
#ifdef THICKMET3P0
resist (allm4)/metal4 6
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm4)/metal4 31
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm4)/metal4 50
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS4)
#ifdef METALS5 || METALS6
resist (allm4)/metal4 76
#endif (METALS5 || METALS6)
#ifdef METALS5
#ifdef THICKMET3P0
resist (allm5)/metal5 6
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allm5)/metal5 31
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allm5)/metal5 50
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS5)
#ifdef METALS6
resist (allm5)/metal5 76
#endif (METALS6)
#ifdef METALS6
#ifdef THICKMET3P0
resist (allmtp)/metaltp 6
#elseif defined(THICKMET0P9) || defined(THICKMET1P1)
resist (allmtp)/metaltp 31
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
resist (allmtp)/metaltp 50
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#endif (METALS6)
contact ndc,nsc,ndic,nndic 0
contact pdc,psc,pdic 0
contact mvndc,mvnsc,mvndic,mvnndic 0
contact mvpdc,mvpsc,mvpdic 0
contact pc 0
contact m2c 0
#ifdef METALS3 || METALS4 || METALS5 || METALS6
contact m3c 0
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
contact via3 0
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
contact via4 0
#endif (METALS5 || METALS6)
#ifdef MIM
contact mimcc 0
#endif (MIM)
#ifdef METALS6
contact viatp 0
#endif (METALS6)
variants *
# These types should not be considered as electrical nodes
resist comment None
#-------------------------------------------------------------------------
# Parasitic capacitance values:
#-------------------------------------------------------------------------
# This uses the new "default" definitions that determine the intervening
# planes from the planeorder stack, take care of the reflexive sideoverlap
# definitions, and generally clean up the section and make it more readable.
#
# Also uses "units microns" statement, so all parasitic capacitance values
# are taken directly from the source document PDS_035_03, in units of
# aF/um^2 for area caps and aF/um for perimeter and sidewall caps.
#-------------------------------------------------------------------------
# Remember that device capacitances to substrate are taken care of by the
# models. Thus, active and poly definitions ignore all "fet" types.
# fet types are excluded when computing parasitic capacitance to
# active from layers above them because poly is a shield; fet types are
# included for parasitics from layers above to poly. Resistor types
# should be removed from all parasitic capacitance calculations, or else
# they just create floating caps. Technically, the capacitance probably
# should be split between the two terminals. Unsure of the correct model.
# Because rnw is on the well plane, "defaultareacap" does not work for
# planes above diffusion because rnw cannot be removed from types on the
# well plane. Because of this, use the normal "areacap" to specify cap
# to substrate, and "defaultoverlap" to specify cap to nwell (but not rnw).
#-------------------------------------------------------------------------
variants ()
# Nominal capacitances
#n-well
defaultareacap nwell well 120
#n-active
# Rely on device models to capture *ndiff area cap
# Do not extract parasitics from resistors
# defaultareacap allnactivenonfet active 790
# defaultperimeter allnactivenonfet active 280
#p-active
# Rely on device models to capture *pdiff area cap
# Do not extract parasitics from resistors
# defaultareacap allpactivenonfet active 810
# defaultperimeter allpactivenonfet active 300
#poly
# Do not extract parasitics from resistors
# defaultsidewall allpolynonfet active 22
# defaultareacap allpolynonfet active 105
# defaultperimeter allpolynonfet active 57
defaultsidewall *poly active 11.098 -0.082
defaultareacap *poly active 110.67
defaultperimeter *poly active 50.72
defaultoverlap *poly active nwell,obswell,pwell well 110.67
defaultsideoverlap *poly active nwell,obswell,pwell well 50.72
#metal1
defaultsidewall allm1 metal1 40.512 -0.053
defaultareacap allm1 metal1 29.304
defaultperimeter allm1 metal1 39.431
defaultoverlap allm1 metal1 nwell well 29.304
defaultsideoverlap allm1 metal1 nwell well 39.431
#metal1->active
defaultoverlap allm1 metal1 alllvactivenonfet active 30.502
defaultsideoverlap allm1 metal1 alllvactivenonfet active 43.406
defaultoverlap allm1 metal1 allmvactivenonfet active 39.187
defaultsideoverlap allm1 metal1 allmvactivenonfet active 43.308
#metal1->poly
defaultoverlap allm1 metal1 allpolynonres active 51.434
defaultsideoverlap allm1 metal1 allpolynonres active 46.700
defaultsideoverlap *poly active allm1 metal1 17.946
#metal2
defaultsidewall allm2 metal2 46.736 0.289
defaultareacap allm2 metal2 15.016
defaultperimeter allm2 metal2 33.298
defaultoverlap allm2 metal2 nwell well 15.016
defaultsideoverlap allm2 metal2 nwell well 33.298
#metal2->active
defaultoverlap allm2 metal2 alllvactivenonfet active 17.305
defaultsideoverlap allm2 metal2 alllvactivenonfet active 35.189
defaultoverlap allm2 metal2 allmvactivenonfet active 17.244
defaultsideoverlap allm2 metal2 allmvactivenonfet active 35.153
#metal2->poly
defaultoverlap allm2 metal2 allpolynonres active 19.263
defaultsideoverlap allm2 metal2 allpolynonres active 36.169
defaultsideoverlap *poly active allm2 metal2 8.706
#metal2->metal1
defaultoverlap allm2 metal2 allm1 metal1 59.027
defaultsideoverlap allm2 metal2 allm1 metal1 47.566
defaultsideoverlap allm1 metal1 allm2 metal2 32.048
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#metal3
defaultsidewall allm3 metal3 70.675 0.534
defaultareacap allm3 metal3 10.094
defaultperimeter allm3 metal3 30.021
defaultoverlap allm3 metal3 nwell well 10.094
defaultsideoverlap allm3 metal3 nwell well 30.021
#metal3->active
defaultoverlap allm3 metal3 alllvactivenonfet active 11.079
defaultsideoverlap allm3 metal3 alllvactivenonfet active 31.40
defaultoverlap allm3 metal3 allmvactivenonfet active 11.054
defaultsideoverlap allm3 metal3 allmvactivenonfet active 31.38
#metal3->poly
defaultoverlap allm3 metal3 allpolynonres active 11.850
defaultsideoverlap allm3 metal3 allpolynonres active 31.927
defaultsideoverlap *poly active allm3 metal3 5.895
#metal3->metal1
defaultoverlap allm3 metal3 allm1 metal1 20.238
defaultsideoverlap allm3 metal3 allm1 metal1 36.609
defaultsideoverlap allm1 metal1 allm3 metal3 18.135
#metal3->metal2
defaultoverlap allm3 metal3 allm2 metal2 59.027
defaultsideoverlap allm3 metal3 allm2 metal2 49.011
defaultsideoverlap allm2 metal2 allm3 metal3 36.626
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#metal4
defaultsidewall allm4 metal4 77.388 0.611
defaultareacap allm4 metal4 7.602
defaultperimeter allm4 metal4 28.153
defaultoverlap allm4 metal4 nwell well 7.602
defaultsideoverlap allm4 metal4 nwell well 28.153
#metal4->active
defaultoverlap allm4 metal4 alllvactivenonfet active 8.148
defaultsideoverlap allm4 metal4 alllvactivenonfet active 29.065
defaultoverlap allm4 metal4 allmvactivenonfet active 8.135
defaultsideoverlap allm4 metal4 allmvactivenonfet active 29.050
#metal4->poly
defaultoverlap allm4 metal4 allpolynonres active 8.557
defaultsideoverlap allm4 metal4 allpolynonres active 29.407
defaultsideoverlap *poly active allm4 metal4 8.557
#metal4->metal1
defaultoverlap allm4 metal4 allm1 metal1 12.212
defaultsideoverlap allm4 metal4 allm1 metal1 32.104
defaultsideoverlap allm1 metal1 allm4 metal4 13.159
#metal4->metal2
defaultoverlap allm4 metal4 allm2 metal2 20.238
defaultsideoverlap allm4 metal4 allm2 metal2 36.563
defaultsideoverlap allm2 metal2 allm4 metal4 22.405
#metal4->metal3
defaultoverlap allm4 metal4 allm3 metal3 59.027
defaultsideoverlap allm4 metal4 allm3 metal3 47.871
defaultsideoverlap allm3 metal3 allm4 metal4 39.964
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5
#metal5
defaultsidewall allm5 metal5 114.86 0.025
#endif
#ifdef METALS6
defaultsidewall allm5 metal5 31.121
#endif
#ifdef METALS5 || METALS6
defaultareacap allm5 metal5 5.798
defaultperimeter allm5 metal5 30.386
defaultoverlap allm5 metal5 nwell well 5.798
defaultsideoverlap allm5 metal5 nwell well 30.386
#metal5->active
defaultoverlap allm5 metal5 alllvactivenonfet active 6.110
defaultsideoverlap allm5 metal5 alllvactivenonfet active 31.165
defaultoverlap allm5 metal5 allmvactivenonfet active 6.102
defaultsideoverlap allm5 metal5 allmvactivenonfet active 31.152
#metal5->poly
defaultoverlap allm5 metal5 allpolynonres active 6.337
defaultsideoverlap allm5 metal5 allpolynonres active 31.458
defaultsideoverlap *poly active allm5 metal5 3.365
#metal5->metal1
defaultoverlap allm5 metal5 allm1 metal1 8.142
defaultsideoverlap allm5 metal5 allm1 metal1 33.316
defaultsideoverlap allm1 metal1 allm5 metal5 9.825
#metal5->metal2
defaultoverlap allm5 metal5 allm2 metal2 11.067
defaultsideoverlap allm5 metal5 allm2 metal2 36.591
defaultsideoverlap allm2 metal2 allm5 metal5 15.764
#metal5->metal3
defaultoverlap allm5 metal5 allm3 metal3 17.276
defaultsideoverlap allm5 metal5 allm3 metal3 41.466
defaultsideoverlap allm3 metal3 allm5 metal5 22.988
#metal5->metal4
defaultoverlap allm5 metal5 allm4 metal4 39.351
defaultsideoverlap allm5 metal5 allm4 metal4 52.692
defaultsideoverlap allm4 metal4 allm5 metal5 34.954
#endif (METALS5 || METALS6)
#ifdef METALS6
#metaltp
defaultsidewall allmtp metaltp 54.335
defaultareacap allmtp metaltp 4.8793
defaultperimeter allmtp metaltp 9.5950
defaultoverlap allmtp metaltp nwell well 4.8793
defaultsideoverlap allmtp metaltp nwell well 9.5950
#metaltp->active
defaultoverlap allmtp metaltp alllvactivenonfet active 5.0937
defaultsideoverlap allmtp metaltp alllvactivenonfet active 9.8790
defaultoverlap allmtp metaltp allmvactivenonfet active 5.0937
defaultsideoverlap allmtp metaltp allmvactivenonfet active 9.8790
#metaltp->poly
defaultoverlap allmtp metaltp allpolynonres active 5.2558
defaultsideoverlap allmtp metaltp allpolynonres active 10.128
defaultsideoverlap *poly active allmtp metaltp 16.946
#metaltp->metal1
defaultoverlap allmtp metaltp allm1 metal1 6.4394
defaultsideoverlap allmtp metaltp allm1 metal1 11.765
defaultsideoverlap allm1 metal1 allmtp metaltp XX.XX
#metaltp->metal2
defaultoverlap allmtp metaltp allm2 metal2 8.1418
defaultsideoverlap allmtp metaltp allm2 metal2 13.958
defaultsideoverlap allm2 metal2 allmtp metaltp XX.XX
#metaltp->metal3
defaultoverlap allmtp metaltp allm3 metal3 11.0677
defaultsideoverlap allmtp metaltp allm3 metal3 17.640
defaultsideoverlap allm3 metal3 allmtp metaltp XX.XX
#metaltp->metal4
defaultoverlap allmtp metaltp allm4 metal4 17.2765
defaultsideoverlap allmtp metaltp allm4 metal4 24.286
defaultsideoverlap allm4 metal4 allmtp metaltp XX.XX
#metaltp->metal5
defaultoverlap allmtp metaltp allm5 metal5 39.3519
defaultsideoverlap allmtp metaltp allm5 metal5 39.586
defaultsideoverlap allm5 metal5 allmtp metaltp XX.XX
#endif (METALS6)
#-------------------------------------------------------------------------
# Parasitic capacitance values for maximum corner
#-------------------------------------------------------------------------
variants (hrhc),(lrhc)
# Maximum corner capacitances
#n-well
defaultareacap nwell well 120
#n-active
# Rely on device models to capture *ndiff area cap
# Do not extract parasitics from resistors
# defaultareacap allnactivenonfet active 790
# defaultperimeter allnactivenonfet active 280
#p-active
# Rely on device models to capture *pdiff area cap
# Do not extract parasitics from resistors
# defaultareacap allpactivenonfet active 810
# defaultperimeter allpactivenonfet active 300
#poly
# Do not extract parasitics from resistors
# defaultsidewall allpolynonfet active 22
# defaultareacap allpolynonfet active 105
# defaultperimeter allpolynonfet active 57
defaultsidewall *poly active 10.434 -0.09
defaultareacap *poly active 130.21
defaultperimeter *poly active 53.551
defaultoverlap *poly active nwell,obswell,pwell well 130.21
defaultsideoverlap *poly active nwell,obswell,pwell well 53.551
#metal1
defaultsidewall allm1 metal1 29.146 -0.107
defaultareacap allm1 metal1 33.126
defaultperimeter allm1 metal1 41.362
defaultoverlap allm1 metal1 nwell well 33.126
defaultsideoverlap allm1 metal1 nwell well 41.362
#metal1->active
defaultoverlap allm1 metal1 alllvactivenonfet active 43.987
defaultsideoverlap allm1 metal1 alllvactivenonfet active 45.606
defaultoverlap allm1 metal1 allmvactivenonfet active 43.597
defaultsideoverlap allm1 metal1 allmvactivenonfet active 45.456
#metal1->poly
defaultoverlap allm1 metal1 allpolynonres active 60.319
defaultsideoverlap allm1 metal1 allpolynonres active 49.813
defaultsideoverlap *poly active allm1 metal1 19.203
#metal2
defaultsidewall allm2 metal2 47.311 -0.055
defaultareacap allm2 metal2 16.471
defaultperimeter allm2 metal2 34.914
defaultoverlap allm2 metal2 nwell well 16.471
defaultsideoverlap allm2 metal2 nwell well 34.914
#metal2->active
defaultoverlap allm2 metal2 alllvactivenonfet active 18.777
defaultsideoverlap allm2 metal2 alllvactivenonfet active 36.552
defaultoverlap allm2 metal2 allmvactivenonfet active 18.706
defaultsideoverlap allm2 metal2 allmvactivenonfet active 36.484
#metal2->poly
defaultoverlap allm2 metal2 allpolynonres active 21.231
defaultsideoverlap allm2 metal2 allpolynonres active 37.753
defaultsideoverlap *poly active allm2 metal2 9.032
#metal2->metal1
defaultoverlap allm2 metal2 allm1 metal1 73.630
defaultsideoverlap allm2 metal2 allm1 metal1 53.172
defaultsideoverlap allm1 metal1 allm2 metal2 35.957
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#metal3
defaultsidewall allm3 metal3 52.065 0.011
defaultareacap allm3 metal3 10.961
defaultperimeter allm3 metal3 31.797
defaultoverlap allm3 metal3 nwell well 10.961
defaultsideoverlap allm3 metal3 nwell well 31.797
#metal3->active
defaultoverlap allm3 metal3 alllvactivenonfet active 11.936
defaultsideoverlap allm3 metal3 alllvactivenonfet active 32.182
defaultoverlap allm3 metal3 allmvactivenonfet active 11.907
defaultsideoverlap allm3 metal3 allmvactivenonfet active 32.161
#metal3->poly
defaultoverlap allm3 metal3 allpolynonres active 12.883
defaultsideoverlap allm3 metal3 allpolynonres active 33.123
defaultsideoverlap *poly active allm3 metal3 6.048
#metal3->metal1
defaultoverlap allm3 metal3 allm1 metal1 22.673
defaultsideoverlap allm3 metal3 allm1 metal1 38.387
defaultsideoverlap allm1 metal1 allm3 metal3 19.218
#metal3->metal2
defaultoverlap allm3 metal3 allm2 metal2 73.630
defaultsideoverlap allm3 metal3 allm2 metal2 53.162
defaultsideoverlap allm2 metal2 allm3 metal3 40.062
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#metal4
defaultsidewall allm4 metal4 64.224 0.022
defaultareacap allm4 metal4 8.213
defaultperimeter allm4 metal4 29.318
defaultoverlap allm4 metal4 nwell well 8.213
defaultsideoverlap allm4 metal4 nwell well 29.318
#metal4->active
defaultoverlap allm4 metal4 alllvactivenonfet active 8.749
defaultsideoverlap allm4 metal4 alllvactivenonfet active 29.951
defaultoverlap allm4 metal4 allmvactivenonfet active 8.733
defaultsideoverlap allm4 metal4 allmvactivenonfet active 29.937
#metal4->poly
defaultoverlap allm4 metal4 allpolynonres active 9.247
defaultsideoverlap allm4 metal4 allpolynonres active 30.173
defaultsideoverlap *poly active allm4 metal4 4.470
#metal4->metal1
defaultoverlap allm4 metal4 allm1 metal1 13.400
defaultsideoverlap allm4 metal4 allm1 metal1 32.864
defaultsideoverlap allm1 metal1 allm4 metal4 13.737
#metal4->metal2
defaultoverlap allm4 metal4 allm2 metal2 22.673
defaultsideoverlap allm4 metal4 allm2 metal2 38.349
defaultsideoverlap allm2 metal2 allm4 metal4 23.678
#metal4->metal3
defaultoverlap allm4 metal4 allm3 metal3 73.63
defaultsideoverlap allm4 metal4 allm3 metal3 51.717
defaultsideoverlap allm3 metal3 allm4 metal4 43.907
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#metal5
defaultsidewall allm5 metal5 129.73 0.043
defaultareacap allm5 metal5 6.240
defaultperimeter allm5 metal5 32.259
defaultoverlap allm5 metal5 nwell well 6.240
defaultsideoverlap allm5 metal5 nwell well 32.259
#metal5->active
defaultoverlap allm5 metal5 alllvactivenonfet active 6.545
defaultsideoverlap allm5 metal5 alllvactivenonfet active 32.685
defaultoverlap allm5 metal5 allmvactivenonfet active 6.536
defaultsideoverlap allm5 metal5 allmvactivenonfet active 32.665
#metal5->poly
defaultoverlap allm5 metal5 allpolynonres active 6.820
defaultsideoverlap allm5 metal5 allpolynonres active 33.050
defaultsideoverlap *poly active allm5 metal5 3.402
#metal5->metal1
defaultoverlap allm5 metal5 allm1 metal1 8.841
defaultsideoverlap allm5 metal5 allm1 metal1 35.530
defaultsideoverlap allm1 metal1 allm5 metal5 10.263
#metal5->metal2
defaultoverlap allm5 metal5 allm2 metal2 12.108
defaultsideoverlap allm5 metal5 allm2 metal2 38.815
defaultsideoverlap allm2 metal2 allm5 metal5 16.351
#metal5->metal3
defaultoverlap allm5 metal5 allm3 metal3 19.206
defaultsideoverlap allm5 metal5 allm3 metal3 44.329
defaultsideoverlap allm3 metal3 allm5 metal5 23.969
#metal5->metal4
defaultoverlap allm5 metal5 allm4 metal4 46.417
defaultsideoverlap allm5 metal5 allm4 metal4 57.180
defaultsideoverlap allm4 metal4 allm5 metal5 38.202
#endif (METALS5 || METALS6)
#ifdef METALS6
#metaltp
defaultsidewall allmtp metaltp 57.187
defaultareacap allmtp metaltp 5.242
defaultperimeter allmtp metaltp 9.407
defaultoverlap allmtp metaltp nwell well 5.242
#metaltp->active
defaultoverlap allmtp metaltp alllvactivenonfet active 5.450
defaultsideoverlap allmtp metaltp alllvactivenonfet active 9.679
defaultoverlap allmtp metaltp allmvactivenonfet active 5.450
defaultsideoverlap allmtp metaltp allmvactivenonfet active 9.679
#metaltp->poly
defaultoverlap allmtp metaltp allpolynonres active 5.645
defaultsideoverlap allmtp metaltp allpolynonres active 9.925
defaultsideoverlap *poly active allmtp metaltp 16.946
#metaltp->metal1
defaultoverlap allmtp metaltp allm1 metal1 6.962
defaultsideoverlap allmtp metaltp allm1 metal1 11.549
defaultsideoverlap allm1 metal1 allmtp metaltp 16.946
#metaltp->metal2
defaultoverlap allmtp metaltp allm2 metal2 8.841
defaultsideoverlap allmtp metaltp allm2 metal2 13.909
defaultsideoverlap allm2 metal2 allmtp metaltp 16.946
#metaltp->metal3
defaultoverlap allmtp metaltp allm3 metal3 12.211
defaultsideoverlap allmtp metaltp allm3 metal3 17.215
defaultsideoverlap allm3 metal3 allmtp metaltp 16.946
#metaltp->metal4
defaultoverlap allmtp metaltp allm4 metal4 19.207
defaultsideoverlap allmtp metaltp allm4 metal4 24.725
defaultsideoverlap allm4 metal4 allmtp metaltp 16.946
#metaltp->metal5
defaultoverlap allmtp metaltp allm5 metal5 46.418
defaultsideoverlap allmtp metaltp allm5 metal5 41.628
defaultsideoverlap allm5 metal5 allmtp metaltp 16.946
#endif (METALS6)
#-------------------------------------------------------------------------
# Parasitic capacitance values for minimum corner
#-------------------------------------------------------------------------
variants (hrlc),(lrlc)
# Minimum corner capacitances
#n-well
defaultareacap nwell well 120
#n-active
# Rely on device models to capture *ndiff area cap
# Do not extract parasitics from resistors
# defaultareacap allnactivenonfet active 790
# defaultperimeter allnactivenonfet active 280
#p-active
# Rely on device models to capture *pdiff area cap
# Do not extract parasitics from resistors
# defaultareacap allpactivenonfet active 810
# defaultperimeter allpactivenonfet active 300
#poly
# Do not extract parasitics from resistors
# defaultsidewall allpolynonfet active 22
# defaultareacap allpolynonfet active 105
# defaultperimeter allpolynonfet active 57
defaultsidewall *poly active 11.749 -0.074
defaultareacap *poly active 96.239
defaultperimeter *poly active 48.703
defaultoverlap *poly active nwell,obswell,pwell well 96.239
defaultsideoverlap *poly active nwell,obswell,pwell well 48.703
#metal1
defaultsidewall allm1 metal1 34.592 -0.066
defaultareacap allm1 metal1 26.273
defaultperimeter allm1 metal1 38.065
defaultoverlap allm1 metal1 nwell well 26.273
defaultsideoverlap allm1 metal1 nwell well 38.065
#metal1->active
defaultoverlap allm1 metal1 alllvactivenonfet active 35.846
defaultsideoverlap allm1 metal1 alllvactivenonfet active 41.401
defaultoverlap allm1 metal1 allmvactivenonfet active 35.587
defaultsideoverlap allm1 metal1 allmvactivenonfet active 41.319
#metal1->poly
defaultoverlap allm1 metal1 allpolynonres active 44.830
defaultsideoverlap allm1 metal1 allpolynonres active 44.006
defaultsideoverlap *poly active allm1 metal1 16.709
#metal2
defaultsidewall allm2 metal2 45.876 0.308
defaultareacap allm2 metal2 13.797
defaultperimeter allm2 metal2 32.628
defaultoverlap allm2 metal2 nwell well 13.797
#metal2->active
defaultoverlap allm2 metal2 alllvactivenonfet active 16.047
defaultsideoverlap allm2 metal2 alllvactivenonfet active 33.878
defaultoverlap allm2 metal2 allmvactivenonfet active 15.995
defaultsideoverlap allm2 metal2 allmvactivenonfet active 34.723
#metal2->poly
defaultoverlap allm2 metal2 allpolynonres active 17.629
defaultsideoverlap allm2 metal2 allpolynonres active 34.723
defaultsideoverlap *poly active allm2 metal2 8.497
#metal2->metal1
defaultoverlap allm2 metal2 allm1 metal1 49.257
defaultsideoverlap allm2 metal2 allm1 metal1 45.669
defaultsideoverlap allm1 metal1 allm2 metal2 29.508
#ifdef METALS3 || METALS4 || METALS5 || METALS6
#metal3
defaultsidewall allm3 metal3 80.787 0.719
defaultareacap allm3 metal3 9.354
defaultperimeter allm3 metal3 29.055
defaultoverlap allm3 metal3 nwell well 9.354
defaultsideoverlap allm3 metal3 nwell well 29.055
#metal3->active
defaultoverlap allm3 metal3 alllvactivenonfet active 10.337
defaultsideoverlap allm3 metal3 alllvactivenonfet active 30.367
defaultoverlap allm3 metal3 allmvactivenonfet active 10.316
defaultsideoverlap allm3 metal3 allmvactivenonfet active 30.332
#metal3->poly
defaultoverlap allm3 metal3 allpolynonres active 10.971
defaultsideoverlap allm3 metal3 allpolynonres active 30.302
defaultsideoverlap *poly active allm3 metal3 5.744
#metal3->metal1
defaultoverlap allm3 metal3 allm1 metal1 18.275
defaultsideoverlap allm3 metal3 allm1 metal1 34.455
defaultsideoverlap allm1 metal1 allm3 metal3 17.162
#metal3->metal2
defaultoverlap allm3 metal3 allm2 metal2 49.257
defaultsideoverlap allm3 metal3 allm2 metal2 45.649
defaultsideoverlap allm2 metal2 allm3 metal3 33.836
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
#metal4
defaultsidewall allm4 metal4 79.719 0.700
defaultareacap allm4 metal4 7.076
defaultperimeter allm4 metal4 27.123
defaultoverlap allm4 metal4 nwell well 7.076
defaultsideoverlap allm4 metal4 nwell well 27.123
#metal4->active
defaultoverlap allm4 metal4 alllvactivenonfet active 7.625
defaultsideoverlap allm4 metal4 alllvactivenonfet active 28.128
defaultoverlap allm4 metal4 allmvactivenonfet active 7.613
defaultsideoverlap allm4 metal4 allmvactivenonfet active 28.136
#metal4->poly
defaultoverlap allm4 metal4 allpolynonres active 7.964
defaultsideoverlap allm4 metal4 allpolynonres active 28.175
defaultsideoverlap *poly active allm4 metal4 4.342
#metal4->metal1
defaultoverlap allm4 metal4 allm1 metal1 11.218
defaultsideoverlap allm4 metal4 allm1 metal1 30.402
defaultsideoverlap allm1 metal1 allm4 metal4 12.468
#metal4->metal2
defaultoverlap allm4 metal4 allm2 metal2 18.275
defaultsideoverlap allm4 metal4 allm2 metal2 34.947
defaultsideoverlap allm2 metal2 allm4 metal4 21.090
#metal4->metal3
defaultoverlap allm4 metal4 allm3 metal3 49.257
defaultsideoverlap allm4 metal4 allm3 metal3 45.614
defaultsideoverlap allm3 metal3 allm4 metal4 36.938
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
#metal5
defaultsidewall allm5 metal5 92.462 -0.034
defaultareacap allm5 metal5 5.414
defaultperimeter allm5 metal5 29.752
defaultoverlap allm5 metal5 nwell well 5.414
defaultsideoverlap allm5 metal5 nwell well 29.752
#metal5->active
defaultoverlap allm5 metal5 alllvactivenonfet active 5.729
defaultsideoverlap allm5 metal5 alllvactivenonfet active 30.199
defaultoverlap allm5 metal5 allmvactivenonfet active 5.722
defaultsideoverlap allm5 metal5 allmvactivenonfet active 30.189
#metal5->poly
defaultoverlap allm5 metal5 allpolynonres active 5.918
defaultsideoverlap allm5 metal5 allpolynonres active 30.453
defaultsideoverlap *poly active allm5 metal5 3.319
#metal5->metal1
defaultoverlap allm5 metal5 allm1 metal1 7.545
defaultsideoverlap allm5 metal5 allm1 metal1 32.178
defaultsideoverlap allm1 metal1 allm5 metal5 9.413
#metal5->metal2
defaultoverlap allm5 metal5 allm2 metal2 10.192
defaultsideoverlap allm5 metal5 allm2 metal2 34.862
defaultsideoverlap allm2 metal2 allm5 metal5 15.155
#metal5->metal3
defaultoverlap allm5 metal5 allm3 metal3 15.699
defaultsideoverlap allm5 metal5 allm3 metal3 39.754
defaultsideoverlap allm3 metal3 allm5 metal5 22.014
#metal5->metal4
defaultoverlap allm5 metal5 allm4 metal4 34.152
defaultsideoverlap allm5 metal5 allm4 metal4 49.818
defaultsideoverlap allm4 metal4 allm5 metal5 33.358
#endif (METALS5 || METALS6)
#ifdef METALS6
#metaltp
defaultsidewall allmtp metaltp 51.353
defaultareacap allmtp metaltp 4.563
defaultperimeter allmtp metaltp 9.764
defaultoverlap allmtp metaltp nwell well 4.563
defaultsideoverlap allmtp metaltp nwell well 9.764
#metaltp->active
defaultoverlap allmtp metaltp alllvactivenonfet active 4.781
defaultsideoverlap allmtp metaltp alllvactivenonfet active 10.070
defaultoverlap allmtp metaltp allmvactivenonfet active 4.781
defaultsideoverlap allmtp metaltp allmvactivenonfet active 10.070
#metaltp->poly
defaultoverlap allmtp metaltp allpolynonres active 4.917
defaultsideoverlap allmtp metaltp allpolynonres active 10.263
defaultsideoverlap *poly active allmtp metaltp 16.946
#metaltp->metal1
defaultoverlap allmtp metaltp allm1 metal1 5.990
defaultsideoverlap allmtp metaltp allm1 metal1 11.858
defaultsideoverlap allm1 metal1 allmtp metaltp 16.946
#metaltp->metal2
defaultoverlap allmtp metaltp allm2 metal2 7.545
defaultsideoverlap allmtp metaltp allm2 metal2 13.985
defaultsideoverlap allm2 metal2 allmtp metaltp 16.946
#metaltp->metal3
defaultoverlap allmtp metaltp allm3 metal3 10.192
defaultsideoverlap allmtp metaltp allm3 metal3 17.610
defaultsideoverlap allm3 metal3 allmtp metaltp 16.946
#metaltp->metal4
defaultoverlap allmtp metaltp allm4 metal4 15.699
defaultsideoverlap allmtp metaltp allm4 metal4 23.834
defaultsideoverlap allm4 metal4 allmtp metaltp 16.946
#metaltp->metal5
defaultoverlap allmtp metaltp allm5 metal5 34.153
defaultsideoverlap allmtp metaltp allm5 metal5 37.782
defaultsideoverlap allm5 metal5 allmtp metaltp 16.946
#endif (METALS6)
#-------------------------------------------------------------------------
variants *
# Devices:
# All devices except diodes are modeled as subcircuits
# device list:
# nfet_03v3 mosfet
# pfet_03v3 mosfet
# nfet_06v0 mosfet (thick oxide)
# pfet_06v0 mosfet (thick oxide)
# nfet_06v0_nvt mosfet (native Vt)
# nfet_03v3_dss mosfet (unsalicided drain)
# pfet_03v3_dss mosfet (unsalicided drain)
# nfet_06v0_dss mosfet (unsalicided drain, thick oxide)
# pfet_06v0_dss mosfet (unsalicided drain, thick oxide)
# nfet_10v0_asym LDNMOS (extended drain)
# pfet_10v0_asym LDPMOS (extended drain)
#
# diode_nd2ps_03v3 diode (N+/pwell)
# diode_pd2nw_03v3 diode (P+/nwell)
# diode_nd2ps_06v0 diode (N+/pwell, high voltage)
# diode_pd2nw_06v0 diode (P+/nwell, high voltage)
# diode_nw2pw_03v3 diode (nwell/pwell)
# diode_nw2pw_06v0 diode (nwell/pwell, high voltage)
# diode_dnw2pw diode (pwell/dnwell)
# diode_dnw2ps diode (dnwll/substrate)
# sc_diode diode (Schottky)
#
# pnp_WxL BJT (10x10, 5x5, 0.42x10, 0.42x5 emitter sizes)
# npn_WxL BJT (10x10, 5x5, 0.54x16, 0.54x8, 0.54x4, 0.54x2)
#
# npolyf_u resistor (N+ poly, unsalicided)
# ppolyf_u resistor (P+ poly, unsalicided)
# ppolyf_u_1k resistor (high res resistor)*
# ppolyf_u_1k_6p0 resistor (high res resistor, high voltage)*
# nplus_u resistor (N+ diffusion, unsalicided)
# pplus_u resistor (P+ diffusion, unsalicided)
# npolyf_s resistor (N+ poly, salicided)
# ppolyf_s resistor (P+ poly, salicided)
# nplus_s resistor (N+ diffusion, salicided)
# pplus_s resistor (N+ diffusion, salicided)
# nwell resistor (N-well resistor)
# rm1 resistor (metal1)
# rm2 resistor (metal2)
# rm3 resistor (metal3)
# rm4 resistor (metal4)
# rm5 resistor (metal5)
# tm6k resistor (top metal, 0.6um thick (standard))**
# tm9k resistor (top metal, 0.9um thick)
# tm11k resistor (top metal, 1.1um thick)
# tm30k resistor (top metal, 3.0um thick)
#
# cap_nmos_03v3 mosfet (source-drain tied)
# cap_pmos_03v3 mosfet (source-drain tied)
# cap_nmos_06v0 mosfet (source-drain tied, high voltage)
# cap_pmos_06v0 mosfet (source-drain tied, high voltage)
# cap_nmos_03v3_b mosfet (n-varactor)
# cap_pmos_03v3_b mosfet (p-varactor)
# cap_nmos_06v0_b mosfet (n-varactor, high voltage)
# cap_pmos_06v0_b mosfet (p-varactor, high voltage)
#
# cap_mim_2f0fF capacitor (MiM)*,**
#
# efuse fuse
#
# *Note that there are multiple mutually exclusive process options for the
# high sheet rho resistor and MiM capacitor. This tech file assumes the
# options 1kOhm/sq for the resistor and 2fF/um for the MiM capacitor.
#
# **The top metal may be any of metal3 to metaltp, depending on the stackup
device msubcircuit pfet_03v3 pfet pdiff,pdc pdiff,pdc allnwell error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device msubcircuit nfet_03v3 nfet ndiff,ndc ndiff,ndc allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device msubcircuit pfet_06v0 mvpfet mvpdiff,mvpdc mvpdiff,mvpdc allnwell error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device msubcircuit nfet_06v0 mvnfet mvndiff,mvndc mvndiff,mvndc allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device msubcircuit pfet_03v3_dss pfet pdiffres pdiffres allnwell error \
l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab
device msubcircuit nfet_03v3_dss nfet ndiffres ndiffres allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab
device msubcircuit pfet_06v0_dss mvpfet mvpdiffres mvpdiffres allnwell error \
l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab
device msubcircuit nfet_06v0_dss mvnfet mvndiffres mvndiffres allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab
device msubcircuit nfet_06v0_nvt mvnnfet mvndiff,mvndiffres,mvndc \
mvndiff,mvndiffres,mvndc allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device subcircuit cap_nmos_03v3_b nvaractor *nndiff l=c_length w=c_width
device subcircuit cap_nmos_06v0_b mvnvaractor *mvnndiff l=c_length w=c_width
device subcircuit cap_pmos_03v3_b pvaractor *ppdiff l=c_length w=c_width
device subcircuit cap_pmos_06v0_b mvpvaractor *mvppdiff l=c_length w=c_width
device subcircuit cap_pmos_03v3 pcap pdiff,pdc l=c_length w=c_width
device subcircuit cap_nmos_03v3 ncap ndiff,ndc l=c_length w=c_width
device subcircuit cap_pmos_06v0 mvpcap mvpdiff,mvpdc l=c_length w=c_width
device subcircuit cap_nmos_06v0 mvncap mvndiff,mvndc l=c_length w=c_width
device msubcircuit npn_10p00x10p00 npn *ndiff dnwell space/w error a1>99.0 a1<101.0
device msubcircuit npn_05p00x05p00 npn *ndiff dnwell space/w error a1>24.0 a1<26.0
device msubcircuit npn_00p54x16p00 npn *ndiff dnwell space/w error a1>8.5 a1<8.7
device msubcircuit npn_00p54x08p00 npn *ndiff dnwell space/w error a1>4.2 a1<4.4
device msubcircuit npn_00p54x04p00 npn *ndiff dnwell space/w error a1>2.0 a1<2.2
device msubcircuit npn_00p54x02p00 npn *ndiff dnwell space/w error a1>1.0 a1<1.2
device msubcircuit pnp_10p00x00p42 pnp *pdiff pwell,space/w error a1>4.1 a1<4.3
device msubcircuit pnp_05p00x00p42 pnp *pdiff pwell,space/w error a1>2.0 a1<2.2
device msubcircuit pnp_10p00x10p00 pnp *pdiff pwell,space/w error a1>99.0 a1<101.0
device msubcircuit pnp_05p00x05p00 pnp *pdiff pwell,space/w error a1>24.0 a1<26.0
device msubcircuit nfet_10v0_asym mvnfet *mvndiff *ldndiff allpsub error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device msubcircuit pfet_10v0_asym mvpfet *mvpdiff *ldpdiff allnwell error \
l=l w=w a1=as p1=ps a2=ad p2=pd
device rsubcircuit efuse efuse *poly
device rsubcircuit rm1 rm1 *m1 l=r_length w=r_width
device rsubcircuit rm2 rm2 *m2 l=r_length w=r_width
#ifdef METALS4 || METALS5 || METALS6
device rsubcircuit rm3 rm3 *m3 l=r_length w=r_width
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
device rsubcircuit rm4 rm4 *m4 l=r_length w=r_width
#endif (METALS5 || METALS6)
#ifdef METALS6
device rsubcircuit rm5 rm5 *m5 l=r_length w=r_width
#endif (METALS6)
#ifdef THICKMET3P0
#ifdef METALS3
device rsubcircuit tm30k rm3 *m3 l=r_length w=r_width
#elseif defined (METALS4)
device rsubcircuit tm30k rm4 *m4 l=r_length w=r_width
#elseif defined (METALS5)
device rsubcircuit tm30k rm5 *m5 l=r_length w=r_width
#elseif defined (METALS6)
device rsubcircuit tm30k rmtp *mtp l=r_length w=r_width
#endif
#elseif defined (THICKMET1P1)
#ifdef METALS3
device rsubcircuit tm11k rm3 *m3 l=r_length w=r_width
#elseif defined (METALS4)
device rsubcircuit tm11k rm4 *m4 l=r_length w=r_width
#elseif defined (METALS5)
device rsubcircuit tm11k rm5 *m5 l=r_length w=r_width
#elseif defined (METALS6)
device rsubcircuit tm11k rmtp *mtp l=r_length w=r_width
#endif
#elseif defined (THICKMET0P9)
#ifdef METALS3
device rsubcircuit tm9k rm3 *m3 l=r_length w=r_width
#elseif defined (METALS4)
device rsubcircuit tm9k rm4 *m4 l=r_length w=r_width
#elseif defined (METALS5)
device rsubcircuit tm9k rm5 *m5 l=r_length w=r_width
#elseif defined (METALS6)
device rsubcircuit tm9k rmtp *mtp l=r_length w=r_width
#endif
#else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
#ifdef METALS3
device rsubcircuit tm6k rm3 *m3 l=r_length w=r_width
#elseif defined (METALS4)
device rsubcircuit tm6k rm4 *m4 l=r_length w=r_width
#elseif defined (METALS5)
device rsubcircuit tm6k rm5 *m5 l=r_length w=r_width
#elseif defined (METALS6)
device rsubcircuit tm6k rmtp *mtp l=r_length w=r_width
#endif
#endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9))
device rsubcircuit ppolyf_s rpps *poly allnwell,allpsub error l=r_length w=r_width
device rsubcircuit npolyf_s rnps *poly allnwell,allpsub error l=r_length w=r_width
device rsubcircuit ppolyf_u rpp *poly allnwell,allpsub error l=r_length w=r_width
device rsubcircuit npolyf_u rnp *poly allnwell,allpsub error l=r_length w=r_width
#ifdef HRPOLY1K
device rsubcircuit ppolyf_u_1k hires *poly allnwell,allpsub error l=r_length w=r_width
device rsubcircuit ppolyf_u_1k_6p0 mvhires *poly allnwell,allpsub error l=r_length w=r_width
#endif (HRPOLY1K)
device rsubcircuit pplus_u rpd *pdiff allnwell error l=r_length w=r_width
device rsubcircuit nplus_u rnd *ndiff allpsub error l=r_length w=r_width
device rsubcircuit pplus_s rpds *pdiff allnwell error l=r_length w=r_width
device rsubcircuit nplus_s rnds *ndiff allpsub error l=r_length w=r_width
device rsubcircuit pplus_u mvpdiffres *mvpdiff allnwell error l=r_length w=r_width
device rsubcircuit nplus_u mvndiffres *mvndiff allpsub error l=r_length w=r_width
device rsubcircuit nwell rnw nwell allpsub error l=r_length w=r_width
# The following absorbs the source/drain resistor into a *_dss FET device
device subcircuit Short mvndiffres *mvndiff mvnfet allpsub error
device subcircuit Short mvpdiffres *mvpdiff mvpfet allnwell error
device subcircuit Short ndiffres *ndiff nfet allpsub error
device subcircuit Short pdiffres *pdiff pfet allnwell error
device pdiode diode_pd2nw_03v3 *pdiode allnwell a=area p=pj
device ndiode diode_nd2ps_03v3 *ndiode allpsub a=area p=pj
device pdiode diode_pd2nw_06v0 *mvpdiode allnwell a=area p=pj
device ndiode diode_nd2ps_06v0 *mvndiode allpsub a=area p=pj
device ndiode diode_nd2ps_06v0_nvt *mvnndiode allpsub a=area p=pj
device pdiode sc_diode *schottky *nsd a=area p=pj
#ifdef MIM
#ifdef METALS6
device csubcircuit cap_mim_2f0_m5m6_noshield *mimcap *m5 l=c_length w=c_width
#endif
#ifdef METALS5
device csubcircuit cap_mim_2f0_m4m5_noshield *mimcap *m4 l=c_length w=c_width
#endif
#ifdef METALS4
device csubcircuit cap_mim_2f0_m3m4_noshield *mimcap *m3 l=c_length w=c_width
#endif
#ifdef METALS3
device csubcircuit cap_mim_2f0_m2m3_noshield *mimcap *m2 l=c_length w=c_width
#endif
#endif (MIM)
end
#-----------------------------------------------------
# Wiring tool definitions
#-----------------------------------------------------
wiring
scalefactor 50
contact v1 200 m1 5 45 m2 0 45
#ifdef METALS3 || METALS4 || METALS5 || METALS6
contact v2 200 m2 0 45 m3 0 45
#endif (METALS3 || METALS4 || METALS5 || METALS6)
#ifdef METALS4 || METALS5 || METALS6
contact v3 200 m3 0 45 m4 0 45
#endif (METALS4 || METALS5 || METALS6)
#ifdef METALS5 || METALS6
contact v4 200 m4 0 45 m5 0 45
#endif (METALS5 || METALS6)
#ifdef METALS6
contact vtp 370 m3 0 45 mtp 80 80
#endif (METALS6)
contact pdc 160 pdiff 70 70 m1 45 0
contact ndc 160 ndiff 70 70 m1 45 0
contact psc 160 ppdiff 70 70 m1 45 0
contact nsc 160 nndiff 70 70 m1 45 0
contact pc 160 poly 70 70 m1 45 0
contact mvpdc 160 mvpdiff 70 70 m1 45 0
contact mvndc 160 mvndiff 70 70 m1 45 0
contact mvpsc 160 mvppdiff 70 70 m1 45 0
contact mvnsc 160 mvnndiff 70 70 m1 45 0
end
#-----------------------------------------------------
# Plain old router. . .
#-----------------------------------------------------
router
end
#------------------------------------------------------------
# Plowing (restored in magic 8.2, need to fill this section)
#------------------------------------------------------------
plowing
end
#-----------------------------------------------------------------
# No special plot layers defined (use default PNM color choices)
#-----------------------------------------------------------------
plot
style pnm
default
draw fillblock no_color_at_all
draw nwell cwell
draw pwell cwell
draw dnwell cwell
end