#------------------------------------------------------------------------ | |
# Copyright (c) 2020 R. Timothy Edwards | |
# Revisions: See below | |
# | |
# This file is an Open Source foundry process describing | |
# the SkyWater sky130 hybrid 0.18um / 0.13um fabrication | |
# process. The file may be distributed under the terms | |
# of the Apache 2.0 license agreement. | |
# | |
#------------------------------------------------------------------------ | |
# This file is designed to be used with magic versions | |
# 8.3.24 or newer. | |
#------------------------------------------------------------------------ | |
tech | |
format 35 | |
sky130A | |
end | |
version | |
version 1.0.85-0-g32cdb20 | |
description "SkyWater SKY130: PRE ALPHA Vendor Open Source rules and DRC" | |
end | |
#------------------------------------------------------------------------ | |
# Status 7/10/20: Rev 1 (alpha): | |
# First public release | |
# Status 8/14/20: Rev 2 (alpha): | |
# Started updating with new device/model naming convention | |
#------------------------------------------------------------------------ | |
#------------------------------------------------------------------------ | |
# Supported device types | |
#------------------------------------------------------------------------ | |
# device name magic ID layer description | |
#------------------------------------------------------------------------ | |
# sky130_fd_pr__nfet_01v8 nfet standard nFET | |
# sky130_fd_pr__nfet_01v8 scnfet standard nFET in standard cell** | |
# sky130_fd_pr__special_nfet_latch npd special nFET in SRAM cell | |
# sky130_fd_pr__special_nfet_pass npass special nFET in SRAM cell | |
# sky130_fd_pr__nfet_01v8_lvt nfetlvt low Vt nFET | |
# sky130_fd_bs_flash__special_sonosfet_star nsonos SONOS nFET | |
# sky130_fd_pr__pfet_01v8 pfet standard pFET | |
# sky130_fd_pr__pfet_01v8 scpfet standard pFET in standard cell** | |
# sky130_fd_pr__special_pfet_pass ppu special pFET in SRAM cell | |
# sky130_fd_pr__pfet_01v8_lvt pfetlvt low Vt pFET | |
# sky130_fd_pr__pfet_01v8_mvt pfetmvt med Vt pFET | |
# sky130_fd_pr__pfet_01v8_hvt pfethvt high Vt pFET | |
# sky130_fd_pr__nfet_03v3_nvt --- native nFET | |
# sky130_fd_pr__pfet_g5v0d10v5 mvpfet thickox pFET | |
# sky130_fd_pr__nfet_g5v0d10v5 mvnfet thickox nFET | |
# sky130_fd_pr__nfet_01v8_nvt mvnnfet thickox native nFET | |
# sky130_fd_pr__diode_pw2nd_05v5 ndiode n+ diff diode | |
# sky130_fd_pr__diode_pw2nd_05v5_lvt ndiodelvt low Vt n+ diff diode | |
# sky130_fd_pr__diode_pw2nd_05v5_nvt nndiode diode with nndiff | |
# sky130_fd_pr__diode_pw2nd_11v0 mvndiode thickox n+ diff diode | |
# sky130_fd_pr__diode_pd2nw_05v5 pdiode p+ diff diode | |
# sky130_fd_pr__diode_pd2nw_05v5_lvt pdiodelvt low Vt p+ diff diode | |
# sky130_fd_pr__diode_pd2nw_05v5_hvt pdiodehvt high Vt p+ diff diode | |
# sky130_fd_pr__diode_pd2nw_11v0 mvpdiode thickox p+ diff diode | |
# sky130_fd_pr__npn_05v0 pbase NPN in deep nwell | |
# sky130_fd_pr__npn_11v0 pbase thick oxide gated NPN | |
# sky130_fd_pr__pnp_05v0 nbase PNP | |
# sky130_fd_pr__cap_mim_m3_1 mimcap MiM cap 1st plate | |
# sky130_fd_pr__cap_mim_m3_2 mimcap2 MiM cap 2nd plate | |
# sky130_fd_pr__res_generic_nd rdn n+ diff resistor | |
# sky130_fd_pr__res_generic_nd__hv mvrdn thickox n+ diff resistor | |
# sky130_fd_pr__res_generic_pd rdp p+ diff resistor | |
# sky130_fd_pr__res_generic_pd__nv mvrdp thickox p+ diff resistor | |
# sky130_fd_pr__res_generic_l1 rli local interconnect resistor | |
# sky130_fd_pr__res_generic_po npres n+ poly resistor | |
# sky130_fd_pr__res_high_po_* ppres (*) p+ poly resistor (300 Ohms/sq) | |
# sky130_fd_pr__res_xhigh_po_* xres (*) p+ poly resistor (2k Ohms/sq) | |
# sky130_fd_pr__cap_var_lvt varactor low Vt varactor | |
# sky130_fd_pr__cap_var_hvt varactorhvt high Vt varactor | |
# sky130_fd_pr__cap_var mvvaractor thickox varactor | |
# sky130_fd_pr__res_iso_pw rpw pwell resistor (in deep nwell) | |
# | |
# (*) Note that ppres may extract into some generic type called | |
# "sky130_fd_pr__res_xhigh_po", but only specific sizes of xhrpoly are | |
# allowed, and these are created from fixed layouts like the types below. | |
# | |
# (**) nFET and pFET in standard cells are the same as devices | |
# outside of the standard cell except for the DRC rule for | |
# FET to diffusion contact spacing (which is 0.05um, not 0.055um) | |
# | |
#------------------------------------------------------------- | |
# The following devices are not extracted but are represented | |
# only by script-generated subcells in the PDK. | |
#------------------------------------------------------------- | |
# sky130_fd_pr__esd_nfet_01v8 ESD nFET | |
# sky130_fd_pr__esd_nfet_g5v0d10v5 ESD thickox nFET | |
# sky130_fd_pr__esd_nfet_05v0_nvt ESD native nFET | |
# sky130_fd_pr__esd_pfet_g5v0d10v5 ESD thickox pFET | |
# sky130_fd_pr__special_nfet_pass_flash flash nFET device | |
# sky130_fd_pr__esd_rf_diode_pw2nd_11v0 ESD n+ diode | |
# sky130_fd_pr__esd_rf_diode_pd2nw_11v0 ESD p+ diode | |
# sky130_fd_pr__cap_vpp_* Vpp cap | |
# sky130_fd_pr__ind_* inductor | |
# sky130_fd_pr__fuse_m4 metal fuse device | |
#-------------------------------------------------------------- | |
#----------------------------------------------------- | |
# Tile planes | |
#----------------------------------------------------- | |
planes | |
dwell,dw | |
well,w | |
active,a | |
locali,li1,li | |
metal1,m1 | |
metal2,m2 | |
metal3,m3 | |
cap1,c1 | |
metal4,m4 | |
cap2,c2 | |
metal5,m5 | |
metali,mi | |
block,b | |
comment,c | |
end | |
#----------------------------------------------------- | |
# Tile types | |
#----------------------------------------------------- | |
types | |
# Deep nwell | |
dwell dnwell,dnw | |
# Wells | |
well nwell,nw | |
well pwell,pw | |
well rpw,rpwell | |
-well obswell | |
well pbase,npn | |
well nbase,pnp | |
# Transistors | |
active nmos,ntransistor,nfet | |
-active scnmos,scntransistor,scnfet | |
-active npd,npdfet,sramnfet | |
-active npass,npassfet,srampassfet | |
active pmos,ptransistor,pfet | |
-active scpmos,scptransistor,scpfet | |
-active scpmoshvt,scpfethvt | |
-active ppu,ppufet,srampfet | |
active nnmos,nntransistor | |
active mvnmos,mvntransistor,mvnfet | |
active mvpmos,mvptransistor,mvpfet | |
active mvnnmos,mvnntransistor,mvnnfet,nnfet | |
active varactor,varact,var | |
active mvvaractor,mvvaract,mvvar | |
active pmoslvt,pfetlvt | |
active pmosmvt,pfetmvt | |
active pmoshvt,pfethvt | |
active nmoslvt,nfetlvt | |
active varactorhvt,varacthvt,varhvt | |
-active nsonos,sonos | |
active sramnvar,corenvar,corenvaractor | |
active srampvar,corepvar,corepvaractor | |
# 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 obsactive | |
-active mvobsactive | |
# Poly | |
active poly,p,polysilicon | |
active polycont,pc,pcontact,polycut,polyc | |
active xpolycontact,xpolyc,xpc | |
# Resistors | |
active npolyres,npres,mrp1 | |
active ppolyres,ppres,xhrpoly | |
active xpolyres,xpres,xres,uhrpoly | |
active ndiffres,rnd,rdn,rndiff | |
active pdiffres,rpd,rdp,rpdiff | |
active mvndiffres,mvrnd,mvrdn,mvrndiff | |
active mvpdiffres,mvrpd,mvrdp,mvrpdiff | |
active rmp | |
# Diodes | |
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 mvpdiodec,mvpdic | |
active mvndiodec,mvndic | |
active pdiodelvt,pdilvt | |
active pdiodehvt,pdihvt | |
active ndiodelvt,ndilvt | |
active pdiodelvtc,pdilvtc | |
active pdiodehvtc,pdihvtc | |
active ndiodelvtc,ndilvtc | |
# Local Interconnect | |
locali locali,li1,li | |
-locali corelocali,coreli1,coreli | |
locali rlocali,rli1,rli | |
locali viali,vial,mcon,lic,licon,m1c,v0 | |
-locali obsli1,obsli | |
-locali obsli1c,obslic,obslicon | |
# Metal 1 | |
metal1 metal1,m1,met1 | |
metal1 rmetal1,rm1,rmet1 | |
metal1 via1,m2contact,m2cut,m2c,via,v,v1 | |
-metal1 obsm1 | |
metal1 padl | |
-metal1 m1fill | |
# Metal 2 | |
metal2 metal2,m2,met2 | |
metal2 rmetal2,rm2,rmet2 | |
metal2 via2,m3contact,m3cut,m3c,v2 | |
-metal2 obsm2 | |
-metal2 m2fill | |
# Metal 3 | |
metal3 metal3,m3,met3 | |
metal3 rmetal3,rm3,rmet3 | |
-metal3 obsm3 | |
metal3 via3,v3 | |
-metal3 m3fill | |
cap1 mimcap,mim,capm | |
cap1 mimcapcontact,mimcapc,mimcc,capmc | |
# Metal 4 | |
metal4 metal4,m4,met4 | |
metal4 rmetal4,rm4,rmet4 | |
-metal4 obsm4 | |
metal4 via4,v4 | |
-metal4 m4fill | |
cap2 mimcap2,mim2,capm2 | |
cap2 mimcap2contact,mimcap2c,mim2cc,capm2c | |
# Metal 5 | |
metal5 metal5,m5,met5 | |
metal5 rm5,rmetal5,rmet5 | |
-metal5 obsm5 | |
-metal5 m5fill | |
metal5 mrdlcontact,mrdlc | |
metali metalrdl,mrdl,metrdl | |
-metali obsmrdl | |
# Miscellaneous | |
-block glass | |
-block fillblock | |
comment comment | |
-comment obscomment | |
# fixed resistor width identifiers | |
-comment res0p35 | |
-comment res0p69 | |
-comment res1p41 | |
-comment res2p85 | |
-comment res5p73 | |
end | |
#----------------------------------------------------- | |
# Magic contact types | |
#----------------------------------------------------- | |
contact | |
pc poly locali | |
ndc ndiff locali | |
pdc pdiff locali | |
nsc nsd locali | |
psc psd locali | |
ndic ndiode locali | |
ndilvtc ndiodelvt locali | |
nndic nndiode locali | |
pdic pdiode locali | |
pdilvtc pdiodelvt locali | |
pdihvtc pdiodehvt locali | |
xpc xpc locali | |
mvndc mvndiff locali | |
mvpdc mvpdiff locali | |
mvnsc mvnsd locali | |
mvpsc mvpsd locali | |
mvndic mvndiode locali | |
mvpdic mvpdiode locali | |
lic locali metal1 | |
obslic obsli metal1 | |
via1 metal1 metal2 | |
via2 metal2 metal3 | |
via3 metal3 metal4 | |
via4 metal4 metal5 | |
stackable | |
# MiM cap contacts are not stackable! | |
mimcc mimcap metal4 | |
mim2cc mimcap2 metal5 | |
padl m1 m2 m3 m4 m5 glass | |
mrdlc metal5 mrdl | |
end | |
#----------------------------------------------------- | |
# Layer aliases | |
#----------------------------------------------------- | |
aliases | |
allwellplane nwell | |
allnwell nwell,obswell,pnp | |
allnfets nfet,npass,npd,scnfet,mvnfet,mvnnfet,nfetlvt,nsonos | |
allpfets pfet,ppu,scpfet,scpfethvt,mvpfet,pfethvt,pfetlvt,pfetmvt | |
allfets allnfets,allpfets,varactor,mvvaractor,varhvt,corenvar,corepvar | |
allfetsstd nfet,mvnfet,mvnnfet,nfetlvt,pfet,mvpfet,pfethvt,pfetlvt,pfetmvt | |
allfetsspecial scnfet,scpfet,scpfethvt | |
allfetscore npass,npd,nsonos,ppu,corenvar,corepvar | |
allfetsnolvt nfet,npass,npd,scnfet,mvnfet,mvnnfet,nsonos,pfet,ppu,scpfet,scpfethvt,mvpfet,pfethvt,pfetmvt,varactor,mvvaractor,varhvt,corenvar | |
allnactivenonfet *ndiff,*nsd,*ndiode,*nndiode,*mvndiff,*mvnsd,*mvndiode,*ndiodelvt | |
allnactive allnactivenonfet,allnfets | |
allnactivenontap *ndiff,*ndiode,*nndiode,*mvndiff,*mvndiode,*ndiodelvt,allnfets | |
allnactivetap *nsd,*mvnsd,var,varhvt,mvvar,corenvar | |
allpactivenonfet *pdiff,*psd,*pdiode,*mvpdiff,*mvpsd,*mvpdiode,*pdiodelvt,*pdiodehvt | |
allpactive allpactivenonfet,allpfets | |
allpactivenontap *pdiff,*pdiode,*mvpdiff,*mvpdiode,*pdiodelvt,*pdiodehvt,allpfets | |
allpactivetap *psd,*mvpsd,corepvar | |
allactivenonfet allnactivenonfet,allpactivenonfet | |
allactive allactivenonfet,allfets | |
allactiveres ndiffres,pdiffres,mvndiffres,mvpdiffres | |
allndifflv *ndif,*nsd,*ndiode,ndiffres,nfet,npass,npd,scnfet,nfetlvt,nsonos | |
allpdifflv *pdif,*psd,*pdiode,pdiffres,pfet,ppu,scpfet,scpfethvt,pfetlvt,pfetmvt,pfethvt | |
alldifflv allndifflv,allpdifflv | |
allndifflvnonfet *ndif,*nsd,*ndiode,*nndiode,ndiffres,*ndiodelvt | |
allpdifflvnonfet *pdif,*psd,*pdiode,pdiffres,*pdiodelvt,*pdiodehvt | |
alldifflvnonfet allndifflvnonfet,allpdifflvnonfet | |
allndiffmv *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnnfet | |
allpdiffmv *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet | |
alldiffmv allndiffmv,allpdiffmv | |
allndiffmvnontap *mvndif,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnnfet | |
allpdiffmvnontap *mvpdif,*mvpdiode,mvpdiffres,mvpfet | |
alldiffmvnontap allndiffmvnontap,allpdiffmvnontap | |
allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres | |
allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres | |
alldiffmvnonfet allndiffmvnonfet,allpdiffmvnonfet | |
alldiffnonfet alldifflvnonfet,alldiffmvnonfet | |
alldiff alldifflv,alldiffmv | |
allpolyres mrp1,xhrpoly,uhrpoly,rmp | |
allpolynonfet *poly,allpolyres,xpc | |
allpolynonres *poly,allfets,xpc | |
allpoly allpolynonfet,allfets | |
allpolynoncap *poly,xpc,allfets,allpolyres | |
allndiffcontlv ndc,nsc,ndic,nndic,ndilvtc | |
allpdiffcontlv pdc,psc,pdic,pdilvtc,pdihvtc | |
allndiffcontmv mvndc,mvnsc,mvndic | |
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 | |
allli *locali,coreli,rli | |
allm1 *m1,rm1 | |
allm2 *m2,rm2 | |
allm3 *m3,rm3 | |
allm4 *m4,rm4 | |
allm5 *m5,rm5 | |
allpad padl | |
psub pwell | |
end | |
#----------------------------------------------------- | |
# Layer drawing styles | |
#----------------------------------------------------- | |
styles | |
styletype mos | |
dnwell cwell | |
nwell nwell | |
pwell pwell | |
rpwell pwell ptransistor_stripes | |
ndiff ndiffusion | |
pdiff pdiffusion | |
nsd ndiff_in_nwell | |
psd pdiff_in_pwell | |
nfet ntransistor ntransistor_stripes | |
scnfet ntransistor ntransistor_stripes | |
npass ntransistor ntransistor_stripes | |
npd ntransistor ntransistor_stripes | |
pfet ptransistor ptransistor_stripes | |
scpfet ptransistor ptransistor_stripes | |
scpfethvt ptransistor ptransistor_stripes implant2 | |
ppu ptransistor ptransistor_stripes | |
var polysilicon ndiff_in_nwell | |
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 | |
corenvar polysilicon ndiff_in_nwell | |
corepvar polysilicon pdiff_in_pwell | |
pnp nwell ntransistor_stripes | |
npn pwell ptransistor_stripes | |
pfetlvt ptransistor ptransistor_stripes implant1 | |
pfetmvt ptransistor ptransistor_stripes implant3 | |
pfethvt ptransistor ptransistor_stripes implant2 | |
nfetlvt ntransistor ntransistor_stripes implant1 | |
nsonos ntransistor implant3 | |
varhvt polysilicon ndiff_in_nwell implant2 | |
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 | |
mvvar polysilicon ndiff_in_nwell hvndiff_mask | |
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 | |
poly polysilicon | |
pc polysilicon metal1 contact_X'es | |
npolyres polysilicon silicide_block nselect2 | |
ppolyres polysilicon silicide_block pselect2 | |
xpc polysilicon pselect2 metal1 contact_X'es | |
rmp polysilicon poly_resist_stripes | |
res0p35 implant1 | |
res0p69 implant1 | |
res1p41 implant1 | |
res2p85 implant1 | |
res5p73 implant1 | |
pdiode pdiffusion pselect2 | |
ndiode ndiffusion nselect2 | |
pdiodec pdiffusion pselect2 metal1 contact_X'es | |
ndiodec ndiffusion nselect2 metal1 contact_X'es | |
nndiode ndiffusion nselect2 implant3 | |
ndiodelvt ndiffusion nselect2 implant1 | |
pdiodelvt pdiffusion pselect2 implant1 | |
pdiodehvt pdiffusion pselect2 implant2 | |
pdilvtc pdiffusion pselect2 implant1 metal1 contact_X'es | |
pdihvtc pdiffusion pselect2 implant2 metal1 contact_X'es | |
ndilvtc ndiffusion nselect2 implant1 metal1 contact_X'es | |
mvpdiode pdiffusion pselect2 hvpdiff_mask | |
mvndiode ndiffusion nselect2 hvndiff_mask | |
mvpdiodec pdiffusion pselect2 metal1 contact_X'es hvpdiff_mask | |
mvndiodec ndiffusion nselect2 metal1 contact_X'es hvndiff_mask | |
nndiodec ndiff_in_nwell nselect2 metal1 contact_X'es hvndiff_mask | |
locali metal1 | |
coreli metal1 | |
rli metal1 poly_resist_stripes | |
lic metal1 metal2 via1arrow | |
obsli metal1 | |
obslic metal1 metal2 via1arrow | |
metal1 metal2 | |
m1fill metal2 | |
rm1 metal2 poly_resist_stripes | |
obsm1 metal2 | |
m2c metal2 metal3 via2arrow | |
metal2 metal3 | |
m2fill metal3 | |
rm2 metal3 poly_resist_stripes | |
obsm2 metal3 | |
m3c metal3 metal4 via3alt | |
metal3 metal4 | |
m3fill metal4 | |
rm3 metal4 poly_resist_stripes | |
obsm3 metal4 | |
mimcap metal3 mems | |
mimcc metal3 contact_X'es mems | |
mimcap2 metal4 mems | |
mim2cc metal4 contact_X'es mems | |
via3 metal4 metal5 via4 | |
metal4 metal5 | |
m4fill metal5 | |
rm4 metal5 poly_resist_stripes | |
obsm4 metal5 | |
via4 metal5 metal6 via5 | |
metal5 metal6 | |
m5fill metal6 | |
rm5 metal6 poly_resist_stripes | |
obsm5 metal6 | |
mrdlc metal6 metal7 via6 | |
metalrdl metal7 | |
obsmrdl metal7 | |
glass overglass | |
mrp1 poly_resist poly_resist_stripes | |
xhrpoly poly_resist silicide_block | |
uhrpoly poly_resist | |
ndiffres ndiffusion ndop_stripes | |
pdiffres pdiffusion pdop_stripes | |
mvndiffres ndiffusion hvndiff_mask ndop_stripes | |
mvpdiffres pdiffusion hvpdiff_mask pdop_stripes | |
comment comment | |
error_p error_waffle | |
error_s error_waffle | |
error_ps error_waffle | |
fillblock cwell | |
obswell cwell | |
obsactive implant4 | |
padl metal6 via6 overglass | |
magnet substrate_field_implant | |
rotate via3alt | |
fence via5 | |
end | |
#----------------------------------------------------- | |
# Special paint/erase rules | |
#----------------------------------------------------- | |
compose | |
compose nfet poly ndiff | |
compose pfet poly pdiff | |
compose var poly nsd | |
compose mvnfet poly mvndiff | |
compose mvpfet poly mvpdiff | |
compose mvvar poly mvnsd | |
paint obslic locali via1 | |
paint obslic obsm1 obsli,obsm1 | |
paint ndc nwell pdc | |
paint nfet nwell pfet | |
paint scnfet nwell scpfet | |
paint ndiff nwell pdiff | |
paint psd nwell nsd | |
paint psc nwell nsc | |
paint npd nwell ppu | |
paint pdc pwell ndc | |
paint pfet pwell nfet | |
paint scpfet pwell scnfet | |
paint pdiff pwell ndiff | |
paint nsd pwell psd | |
paint nsc pwell psc | |
paint ppu pwell npd | |
paint pdc coreli pdc | |
paint ndc coreli ndc | |
paint pc coreli pc | |
paint nsc coreli nsc | |
paint psc coreli psc | |
paint viali coreli viali | |
paint coreli pdc pdc | |
paint coreli ndc ndc | |
paint coreli pc pc | |
paint coreli nsc nsc | |
paint coreli psc psc | |
paint coreli viali viali | |
paint m4 obsm4 m4 | |
paint m5 obsm5 m5 | |
end | |
#----------------------------------------------------- | |
# Electrical connectivity | |
#----------------------------------------------------- | |
connect | |
*nwell,*nsd,*mvnsd,dnwell,pnp *nwell,*nsd,*mvnsd,dnwell,pnp | |
pwell,*psd,*mvpsd,npn pwell,*psd,*mvpsd,npn | |
*li,coreli *li,coreli | |
*m1,m1fill,obslic *m1,m1fill,obslic | |
*m2,m2fill *m2,m2fill | |
*m3,m3fill *m3,m3fill | |
*m4,m4fill *m4,m4fill | |
*m5,m5fill *m5,m5fill | |
*mimcap *mimcap | |
*mimcap2 *mimcap2 | |
allnactivenonfet allnactivenonfet | |
allpactivenonfet allpactivenonfet | |
*poly,xpc,allfets *poly,xpc,allfets | |
# RDL connects to m5 (i.e., padl) through glass cut | |
*mrdl *mrdl | |
glass metrdl | |
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 | |
# NOTE: This section is used for actual GDS output | |
#---------------------------------------------------------------- | |
scalefactor 10 nanometers | |
options calma-permissive-labels | |
gridlimit 5 | |
#---------------------------------------------------------------- | |
# Create a temp layer from the cell bounding box for use in | |
# generating ID layers. Note that "boundary", unlike "bbox", | |
# requires the FIXED_BBOX property (abutment box) in the cell. | |
#---------------------------------------------------------------- | |
templayer CELLBOUND | |
boundary | |
#---------------------------------------------------------------- | |
# BOUND | |
#---------------------------------------------------------------- | |
layer BOUND CELLBOUND | |
calma 235 4 | |
# Create a boundary outside of an abutment box, so that layers | |
# can be made to stretch to the abutment box edges. First strink | |
# so that any box that would be so small as to interact with | |
# itself will be removed. | |
templayer CELLRING CELLBOUND | |
shrink 345 | |
grow 545 | |
and-not CELLBOUND | |
#---------------------------------------------------------------- | |
# DNWELL | |
#---------------------------------------------------------------- | |
layer DNWELL dnwell,pnp | |
calma 64 18 | |
layer PWRES rpw | |
and dnwell | |
calma 64 13 | |
#---------------------------------------------------------------- | |
# NWELL | |
#---------------------------------------------------------------- | |
layer NWELL allnwell | |
bloat-all rpw dnwell | |
and-not rpw,pwell | |
calma 64 20 | |
layer WELLTXT | |
labels allnwell noport | |
calma 64 16 | |
layer WELLPIN | |
labels allnwell port | |
calma 64 5 | |
#---------------------------------------------------------------- | |
# SUB (text/port only) | |
#---------------------------------------------------------------- | |
layer SUBTXT | |
labels pwell noport | |
calma 122 16 | |
layer SUBPIN | |
labels pwell port | |
calma 64 59 | |
#---------------------------------------------------------------- | |
# DIFF | |
#---------------------------------------------------------------- | |
layer DIFF allnactivenontap,allpactivenontap,allactiveres | |
labels allnactivenontap,allpactivenontap | |
calma 65 20 | |
#---------------------------------------------------------------- | |
# TAP | |
#---------------------------------------------------------------- | |
layer TAP allnactivetap,allpactivetap | |
labels allnactivetap,allpactivetap | |
calma 65 44 | |
#---------------------------------------------------------------- | |
# PPLUS, NPLUS (PSDM, NSDM) | |
#---------------------------------------------------------------- | |
templayer basePPLUS pdiffres,mvpdiffres | |
grow 15 | |
or xhrpoly,uhrpoly,xpc | |
grow 110 | |
bloat-or allpactivetap * 125 allnactivenontap 0 | |
bloat-or allpactivenontap * 125 allnactivetap 0 | |
templayer baseNPLUS ndiffres,mvndiffres | |
grow 125 | |
bloat-or allnactivetap * 125 allpactivenontap 0 | |
bloat-or allnactivenontap * 125 allpactivetap 0 | |
templayer extendPPLUS basePPLUS,CELLRING | |
bridge 380 380 | |
and-not baseNPLUS | |
and-not CELLRING | |
layer PPLUS basePPLUS,extendPPLUS | |
grow 185 | |
shrink 185 | |
close 265000 | |
calma 94 20 | |
templayer extendNPLUS baseNPLUS,CELLRING | |
bridge 380 380 | |
and-not basePPLUS | |
and-not CELLRING | |
layer NPLUS baseNPLUS,extendNPLUS | |
grow 185 | |
shrink 185 | |
close 265000 | |
calma 93 44 | |
#---------------------------------------------------------------- | |
# LVTN | |
#---------------------------------------------------------------- | |
layer LVTN pfetlvt,nfetlvt,mvvar,mvnnfet,nsonos,*pdiodelvt,*ndiodelvt,*nndiode | |
grow 180 | |
bridge 380 380 | |
grow 185 | |
shrink 185 | |
close 265000 | |
calma 125 44 | |
#---------------------------------------------------------------- | |
# HVTR | |
#---------------------------------------------------------------- | |
layer HVTR pfetmvt | |
grow 180 | |
bridge 380 380 | |
grow 185 | |
shrink 185 | |
close 265000 | |
calma 18 20 | |
#---------------------------------------------------------------- | |
# HVTP | |
#---------------------------------------------------------------- | |
layer HVTP scpfethvt,ppu,pfethvt,varhvt,*pdiodehvt | |
grow 180 | |
bridge 380 380 | |
grow 185 | |
shrink 185 | |
close 265000 | |
calma 78 44 | |
#---------------------------------------------------------------- | |
# SONOS | |
#---------------------------------------------------------------- | |
layer SONOS nsonos | |
grow 100 | |
grow-min 410 | |
bridge 500 410 | |
grow 250 | |
shrink 250 | |
calma 80 20 | |
#---------------------------------------------------------------- | |
# SONOS requires COREID around area (areaid.ce). Also, the | |
# coreli layer indicates a cell needing COREID. Also, devices | |
# npd, npass, and ppu indicate a COREID cell. | |
#---------------------------------------------------------------- | |
layer COREID | |
bloat-all nsonos,coreli,ppu,npd,npass,corepvar,corenvar CELLBOUND | |
calma 81 2 | |
#---------------------------------------------------------------- | |
# STDCELL applies to all cells containing scnfet or scpfet. | |
#---------------------------------------------------------------- | |
layer STDCELL scnfet | |
bloat-all scpfet,scpfethvt,scnfet CELLBOUND | |
calma 81 4 | |
#---------------------------------------------------------------- | |
# NPNID and PNPID apply to bipolar transistors | |
#---------------------------------------------------------------- | |
layer NPNID | |
bloat-all npn dnwell | |
calma 82 20 | |
templayer pnparea pnp | |
grow 400 | |
layer PNPID | |
bloat-all pnparea *psd | |
or pnparea | |
calma 82 44 | |
#---------------------------------------------------------------- | |
# RPM | |
#---------------------------------------------------------------- | |
layer RPM | |
bloat-all xhrpoly xpc | |
grow 200 | |
grow-min 1270 | |
grow 420 | |
shrink 420 | |
calma 86 20 | |
#---------------------------------------------------------------- | |
# URPM (2kOhms/sq. poly implant) | |
#---------------------------------------------------------------- | |
layer URPM | |
bloat-all uhrpoly xpc | |
grow 200 | |
grow-min 1270 | |
grow 420 | |
shrink 420 | |
calma 79 20 | |
#---------------------------------------------------------------- | |
# LDNTM (Tip implant for SONOS FETs) | |
#---------------------------------------------------------------- | |
layer LDNTM | |
bloat-all nsonos *ndiff | |
grow 185 | |
grow 345 | |
shrink 345 | |
calma 11 44 | |
#---------------------------------------------------------------- | |
# HVNTM (Tip implant for MV ndiff devices) | |
#---------------------------------------------------------------- | |
templayer hvntm_block *mvpsd | |
grow 185 | |
layer HVNTM | |
bloat-all mvnfet,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff | |
bloat-all mvvaractor *mvnsd | |
and-not hvntm_block | |
grow 185 | |
grow 345 | |
shrink 345 | |
and-not hvntm_block | |
calma 125 20 | |
#---------------------------------------------------------------- | |
# POLY | |
#---------------------------------------------------------------- | |
layer POLY allpoly | |
calma 66 20 | |
layer POLYTXT | |
labels allpoly noport | |
calma 66 16 | |
layer POLYPIN | |
labels allpoly port | |
calma 66 5 | |
#---------------------------------------------------------------- | |
# THKOX (HVI) (includes rules NWELL 8-11 and DIFFTAP 14-26) | |
#---------------------------------------------------------------- | |
templayer thkox_area alldiffmv,mvvar | |
grow 185 | |
bloat-all alldiffmv nwell | |
grow 345 | |
shrink 345 | |
templayer large_ptap_mv thkox_area | |
shrink 420 | |
grow 420 | |
templayer small_ptap_mv thkox_area | |
and-not large_ptap_mv | |
# (HVI min width rule is 0.6 but CNTM min width rule is 0.84um) | |
grow-min 840 | |
templayer baseTHKOX thkox_area,small_ptap_mv | |
bridge 700 600 | |
grow 345 | |
shrink 345 | |
templayer extendTHKOX baseTHKOX,CELLRING | |
grow 345 | |
shrink 345 | |
and-not CELLRING | |
layer THKOX baseTHKOX,extendTHKOX | |
calma 75 20 | |
#---------------------------------------------------------------- | |
# CONT (LICON) | |
#---------------------------------------------------------------- | |
layer CONT allcont | |
squares-grid 0 170 170 | |
calma 66 44 | |
# Contact for pres is different than other LICON contacts | |
# See rules LICON 1b, 1c (width/length) and 2b (spacing) | |
templayer xpc_horiz xpc | |
shrink 1007 | |
grow 1007 | |
layer CONT xpc | |
and-not xpc_horiz | |
# Force long edge vertical for contacts narrower than 2um | |
# Minimum space is 350 but 520 satisfies no. of contacts rule | |
slots 80 190 520 80 2000 350 | |
calma 66 44 | |
layer CONT xpc | |
and xpc_horiz | |
# Force long edge vertical for contacts wider than 2um | |
# Minimum space is 350 but 520 satisfies no. of contacts rule | |
slots 80 2000 350 80 190 520 | |
calma 66 44 | |
#---------------------------------------------------------------- | |
# NPC (Nitride poly cut) | |
# surrounds CONT (LICON) on poly only (i.e., pc) | |
#---------------------------------------------------------------- | |
layer NPC pc | |
squares-grid 0 170 170 | |
grow 100 | |
bridge 270 270 | |
grow 130 | |
shrink 130 | |
calma 95 20 | |
# NPC is also generated on xhrpoly and uhrpoly resistors | |
layer NPC xpc,xhrpoly,uhrpoly | |
# xpc surrounds precision_resistor by 0.095um | |
grow 95 | |
grow 130 | |
shrink 130 | |
calma 95 20 | |
#---------------------------------------------------------------- | |
# Device markers | |
#---------------------------------------------------------------- | |
layer DIFFRES rdn,mvrdn,rdp,mvrdp | |
calma 65 13 | |
layer POLYRES mrp1 | |
calma 66 13 | |
# POLYSHORT is a poly layer resistor like rli, rm1, etc., for metal layers | |
layer POLYSHORT rmp | |
calma 66 15 | |
# POLYRES extends to edge of contact cut | |
layer POLYRES xhrpoly,uhrpoly | |
grow 60 | |
and xpc | |
or xhrpoly,uhrpoly | |
calma 66 13 | |
layer DIODE *pdi,*ndi,*nndi,*mvpdi,*mvndi,*pdilvt,*pdihvt,*ndilvt | |
# To be done: Expand to include anode, cathode, and guard ring | |
calma 81 23 | |
#---------------------------------------------------------------- | |
# LI | |
#---------------------------------------------------------------- | |
layer LI allli | |
calma 67 20 | |
layer LITXT | |
labels *locali,coreli noport | |
calma 67 16 | |
layer LIPIN | |
labels *locali,coreli port | |
calma 67 5 | |
layer LIRES rli | |
labels rli | |
calma 67 13 | |
#---------------------------------------------------------------- | |
# MCON | |
#---------------------------------------------------------------- | |
layer MCON lic | |
squares-grid 0 170 190 | |
calma 67 44 | |
#---------------------------------------------------------------- | |
# MET1 | |
#---------------------------------------------------------------- | |
layer MET1 allm1,m1fill | |
calma 68 20 | |
layer MET1TXT | |
labels allm1 noport | |
calma 68 16 | |
layer MET1PIN | |
labels allm1 port | |
calma 68 5 | |
layer MET1RES rm1 | |
labels rm1 | |
calma 68 13 | |
#---------------------------------------------------------------- | |
# VIA1 | |
#---------------------------------------------------------------- | |
layer VIA1 via1 | |
squares-grid 55 150 170 | |
calma 68 44 | |
#---------------------------------------------------------------- | |
# MET2 | |
#---------------------------------------------------------------- | |
layer MET2 allm2,m2fill | |
calma 69 20 | |
layer MET2TXT | |
labels allm2 noport | |
calma 69 16 | |
layer MET2PIN | |
labels allm2 port | |
calma 69 5 | |
layer MET2RES rm2 | |
labels rm2 | |
calma 69 13 | |
#---------------------------------------------------------------- | |
# VIA2 | |
#---------------------------------------------------------------- | |
layer VIA2 via2 | |
squares-grid 40 200 200 | |
calma 69 44 | |
#---------------------------------------------------------------- | |
# MET3 | |
#---------------------------------------------------------------- | |
layer MET3 allm3,m3fill | |
calma 70 20 | |
layer MET3TXT | |
labels allm3 noport | |
calma 70 16 | |
layer MET3PIN | |
labels allm3 port | |
calma 70 5 | |
layer MET3RES rm3 | |
labels rm3 | |
calma 70 13 | |
#---------------------------------------------------------------- | |
# VIA3 | |
#---------------------------------------------------------------- | |
layer VIA3 via3 | |
or mimcc | |
squares-grid 60 200 200 | |
calma 70 44 | |
#---------------------------------------------------------------- | |
# MET4 | |
#---------------------------------------------------------------- | |
layer MET4 allm4,m4fill | |
calma 71 20 | |
layer MET4TXT | |
labels allm4 noport | |
calma 71 16 | |
layer MET4PIN | |
labels allm4 port | |
calma 71 5 | |
layer MET4RES rm4 | |
labels rm4 | |
calma 71 13 | |
#---------------------------------------------------------------- | |
# VIA4 | |
#---------------------------------------------------------------- | |
layer VIA4 via4 | |
or mim2cc | |
squares-grid 190 800 800 | |
calma 71 44 | |
#---------------------------------------------------------------- | |
# MET5 | |
#---------------------------------------------------------------- | |
layer MET5 allm5,m5fill | |
calma 72 20 | |
layer MET5TXT | |
labels allm5 noport | |
calma 72 16 | |
layer MET5PIN | |
labels allm5 port | |
calma 72 5 | |
layer MET5RES rm5 | |
labels rm5 | |
calma 72 13 | |
#---------------------------------------------------------------- | |
# RDL | |
#---------------------------------------------------------------- | |
layer RDL *metrdl | |
calma 74 20 | |
layer RDLTXT | |
labels *metrdl noport | |
calma 74 16 | |
layer RDLPIN | |
labels *metrdl port | |
calma 74 5 | |
layer PI1 *metrdl | |
and padl,glass | |
# Test only---needs GDS layer number | |
layer UBM *metrdl | |
shrink 50000 | |
grow 40000 | |
# Test only---needs GDS layer number | |
layer PI2 *metrdl | |
shrink 50000 | |
grow 25000 | |
# Test only---needs GDS layer number | |
#---------------------------------------------------------------- | |
# GLASS | |
#---------------------------------------------------------------- | |
layer GLASS glass | |
calma 76 20 | |
#---------------------------------------------------------------- | |
# CAPM | |
#---------------------------------------------------------------- | |
layer CAPM *mimcap | |
labels mimcap | |
calma 89 44 | |
layer CAPM2 *mimcap2 | |
labels mimcap2 | |
calma 97 44 | |
#---------------------------------------------------------------- | |
# Chip top level marker for DRC latchup rules to check 15um | |
# distance to taps (otherwise 6um is used) | |
#---------------------------------------------------------------- | |
layer LOWTAPDENSITY | |
bbox top | |
# Clear 200um for pads + 50um for required high tap density | |
# in critical area. | |
shrink 250000 | |
calma 81 14 | |
#---------------------------------------------------------------- | |
# FILLBLOCK | |
#---------------------------------------------------------------- | |
layer FILLOBSM1 fillblock | |
calma 62 24 | |
layer FILLOBSM2 fillblock | |
calma 105 52 | |
layer FILLOBSM3 fillblock | |
calma 107 24 | |
layer FILLOBSM4 fillblock | |
calma 112 4 | |
render DNWELL cwell -0.1 0.1 | |
render NWELL nwell 0.0 0.2062 | |
render DIFF ndiffusion 0.2062 0.12 | |
render TAP pdiffusion 0.2062 0.12 | |
render POLY polysilicon 0.3262 0.18 | |
render CONT via 0.5062 0.43 | |
render LI metal1 0.9361 0.10 | |
render MCON via 1.0361 0.34 | |
render MET1 metal2 1.3761 0.36 | |
render VIA1 via 1.7361 0.27 | |
render MET2 metal3 2.0061 0.36 | |
render VIA2 via 2.3661 0.42 | |
render MET3 metal4 2.7861 0.845 | |
render VIA3 via 3.6311 0.39 | |
render MET4 metal5 4.0211 0.845 | |
render VIA4 via 4.8661 0.505 | |
render MET5 metal6 5.3711 1.26 | |
render CAPM metal8 2.4661 0.2 | |
render CAPM2 metal9 3.7311 0.2 | |
render RDL metal7 11.8834 4.0 | |
#---------------------------------------------------------------- | |
style drc | |
#---------------------------------------------------------------- | |
# NOTE: This style is used for DRC only, not for GDS output | |
#---------------------------------------------------------------- | |
scalefactor 10 nanometers | |
options calma-permissive-labels | |
# Ensure nwell overlaps dnwell at least 0.4um outside and 1.03um inside | |
templayer dnwell_shrink dnwell | |
shrink 1030 | |
templayer nwell_missing dnwell | |
grow 400 | |
and-not dnwell_shrink | |
and-not nwell | |
templayer pwell_in_dnwell dnwell | |
and-not nwell | |
# SONOS nFET devices must be in deep nwell | |
templayer dnwell_missing nsonos | |
and-not dnwell | |
# SONOS nFET devices must be in cell with abutment box | |
templayer abutment_box | |
boundary | |
templayer bbox_missing nsonos | |
and-not abutment_box | |
# Make sure nwell covers varactor poly | |
templayer var_poly_no_nwell | |
bloat-all varactor,mvvaractor *poly | |
grow 150 | |
and-not nwell | |
# Define MiM cap bottom plate for spacing rule | |
templayer mim_bottom | |
bloat-all *mimcap *metal3 | |
# Define MiM2 cap bottom plate for spacing rule | |
templayer mim2_bottom | |
bloat-all *mimcap2 *metal4 | |
# Note that metal fill is performed by the foundry and so is not | |
# an option for a cifoutput style. | |
# Check latchup rule (15um minimum from tap LICON center to any | |
# non-tap diffusion. Note that to count as a tap, the diffusion | |
# must be contacted to LI | |
templayer ptap_reach psc,mvpsc | |
and-not dnwell | |
# grow total is 15um. grow in 0.84um increments to ensure that | |
# no nwell ring is crossed | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 840 | |
and-not nwell,dnwell | |
grow 635 | |
and-not nwell,dnwell | |
templayer ptap_missing *ndiff,*mvndiff | |
and-not dnwell | |
and-not ptap_reach | |
templayer ntap_reach nsc,mvnsc | |
# grow total is 15um. grow in 1.27um increments to ensure that | |
# no nwell ring is crossed. There is no difference between | |
# ntaps in and out of deep nwell. | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 1270 | |
and nwell,pnp | |
grow 945 | |
and nwell,pnp | |
templayer ntap_missing *pdiff,*mvpdiff | |
and-not pwell_in_dnwell | |
and-not ntap_reach | |
templayer dptap_reach psc,mvpsc | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 840 | |
and-not nwell | |
and dnwell | |
grow 635 | |
and-not nwell | |
and dnwell | |
templayer dptap_missing *ndiff,*mvndiff | |
and dnwell | |
and-not dptap_reach | |
templayer pdiff_crosses_dnwell dnwell | |
grow 20 | |
and-not dnwell | |
and allpdifflv,allpdiffmv | |
# MV nwell must be 2um from any other nwell | |
templayer mvnwell | |
bloat-all alldiffmv nwell | |
grow-min 840 | |
bridge 700 600 | |
# Simple spacing checks to lvnwell must use CIF-DRC rule | |
templayer allmvdiffnowell *mvndiff,*mvpsd | |
templayer lvnwell nwell | |
and-not mvnwell | |
templayer nwell_with_tap | |
bloat-all nsc,mvnsc nwell,pnp | |
templayer nwell_missing_tap nwell,pnp | |
and-not nwell_with_tap | |
templayer tap_with_licon | |
bloat-all psc,mvpsc psd,mvpsd | |
bloat-all nsc,mvnsc nsd,mvnsd | |
templayer tap_missing_licon psd,nsd,mvpsd,mvnsd | |
and-not tap_with_licon | |
# Make sure varactor nwell contains no P diffusion | |
templayer pdiff_in_varactor_well | |
bloat-all varactor,mvvaractor nwell | |
and allpactive | |
# HVNTM spacing requires recreating HVNTM | |
templayer hvntm_block *mvpsd | |
grow 185 | |
templayer hvntm_generate | |
bloat-all mvnfet,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff | |
bloat-all mvvaractor *mvnsd | |
and-not hvntm_block | |
grow 185 | |
grow 345 | |
shrink 345 | |
and-not hvntm_block | |
templayer m1_small_hole allm1,obsm1,obslic | |
close 140000 | |
templayer m1_hole_empty m1_small_hole | |
and-not allm1,obsm1,obslic | |
templayer m2_small_hole allm2,obsm2 | |
close 140000 | |
templayer m2_hole_empty m2_small_hole | |
and-not allm2,obsm2 | |
templayer m1_huge allm1 | |
shrink 1500 | |
grow 1500 | |
templayer m1_large_halo m1_huge | |
grow 280 | |
and-not m1_huge | |
and allm1 | |
templayer m2_huge allm2 | |
shrink 1500 | |
grow 1500 | |
templayer m2_large_halo m2_huge | |
grow 280 | |
and-not m2_huge | |
and allm2 | |
templayer m3_huge allm3 | |
shrink 1500 | |
grow 1500 | |
templayer m3_large_halo m3_huge | |
grow 400 | |
and-not m3_huge | |
and allm3 | |
templayer m4_huge allm4 | |
shrink 1500 | |
grow 1500 | |
templayer m4_large_halo m4_huge | |
grow 400 | |
and-not m4_huge | |
and allm4 | |
#---------------------------------------------------------------- | |
style wafflefill | |
#---------------------------------------------------------------- | |
# Style used by scripts for automatically generating fill layers | |
# NOTE: Be sure to generate output on flattened layout. | |
#---------------------------------------------------------------- | |
scalefactor 10 nanometers | |
options calma-permissive-labels | |
gridlimit 5 | |
#---------------------------------------------------------------- | |
# Generate and retain a layer representing the bounding box | |
#---------------------------------------------------------------- | |
templayer topbox | |
bbox top | |
#---------------------------------------------------------------- | |
# Generate guard-band around nwells to keep FOM from crossing | |
# Spacing from LV nwell = Diff/Tap 9 = 0.34um | |
# Spacing from HV nwell = Diff/Tap 18 = 0.43um (= 0.18 + 0.25) | |
# Enclosure by nwell = Diff/Tap 8 = 0.18um | |
#---------------------------------------------------------------- | |
templayer mvnwell | |
bloat-all alldiffmv nwell | |
templayer lvnwell nwell | |
and-not mvnwell | |
templayer well_shrink mvnwell | |
shrink 250 | |
or lvnwell | |
shrink 180 | |
templayer well_guardband nwell | |
grow 340 | |
and-not well_shrink | |
#--------------------------------------------------- | |
# Diffusion and poly keep-out areas | |
#--------------------------------------------------- | |
templayer obstruct_fom alldiff,allpoly,rpw | |
grow 500 | |
or well_guardband | |
templayer obstruct_poly alldiff,allpoly,rpw | |
grow 1000 | |
#--------------------------------------------------- | |
# FOM and POLY fill | |
#--------------------------------------------------- | |
templayer fomfill_pass1 topbox | |
slots 0 4080 1320 0 4080 1320 1360 0 | |
and-not obstruct_fom | |
and topbox | |
shrink 2035 | |
grow 2035 | |
#--------------------------------------------------- | |
templayer obstruct_poly_pass1 fomfill_pass1 | |
grow 300 | |
or obstruct_poly | |
templayer polyfill_pass1 topbox | |
slots 0 720 360 0 720 360 240 0 | |
and-not obstruct_poly_pass1 | |
and topbox | |
shrink 355 | |
grow 355 | |
#--------------------------------------------------- | |
templayer obstruct_fom_pass2 fomfill_pass1 | |
grow 1290 | |
or polyfill_pass1 | |
grow 300 | |
or obstruct_fom | |
templayer fomfill_pass2 topbox | |
slots 0 2500 1320 0 2500 1320 1360 0 | |
and-not obstruct_fom_pass2 | |
and topbox | |
shrink 1245 | |
grow 1245 | |
#--------------------------------------------------- | |
templayer obstruct_poly_coarse polyfill_pass1 | |
grow 60 | |
or fomfill_pass1,fomfill_pass2 | |
grow 300 | |
or obstruct_poly | |
templayer polyfill_coarse topbox | |
slots 0 720 360 0 720 360 240 120 | |
and-not obstruct_poly_coarse | |
and topbox | |
shrink 355 | |
grow 355 | |
#--------------------------------------------------- | |
templayer obstruct_poly_medium polyfill_pass1,polyfill_coarse | |
grow 60 | |
or fomfill_pass1,fomfill_pass2 | |
grow 300 | |
or obstruct_poly | |
templayer polyfill_medium topbox | |
slots 0 540 360 0 540 360 240 100 | |
and-not obstruct_poly_medium | |
and topbox | |
shrink 265 | |
grow 265 | |
#--------------------------------------------------- | |
templayer obstruct_poly_fine polyfill_pass1,polyfill_coarse,polyfill_medium | |
grow 60 | |
or fomfill_pass1,fomfill_pass2 | |
grow 300 | |
or obstruct_poly | |
templayer polyfill_fine topbox | |
slots 0 480 360 0 480 360 240 200 | |
and-not obstruct_poly_fine | |
and topbox | |
shrink 235 | |
grow 235 | |
#--------------------------------------------------- | |
templayer obstruct_fom_coarse fomfill_pass1,fomfill_pass2 | |
grow 1290 | |
or polyfill_pass1,polyfill_coarse,polyfill_medium,polyfill_fine | |
grow 300 | |
or obstruct_fom | |
templayer fomfill_coarse topbox | |
slots 0 1500 1320 0 1500 1320 1360 0 | |
and-not obstruct_fom_coarse | |
and topbox | |
shrink 745 | |
grow 745 | |
#--------------------------------------------------- | |
templayer obstruct_fom_fine fomfill_pass1,fomfill_pass2,fomfill_coarse | |
grow 1290 | |
or polyfill_pass1,polyfill_coarse,polyfill_medium,polyfill_fine | |
grow 300 | |
or obstruct_fom | |
templayer fomfill_fine topbox | |
slots 0 500 400 0 500 400 160 0 | |
and-not obstruct_fom_fine | |
and topbox | |
shrink 245 | |
grow 245 | |
#--------------------------------------------------- | |
templayer fomfill | |
or fomfill_pass1 | |
or fomfill_pass2 | |
or fomfill_coarse | |
or fomfill_fine | |
templayer polyfill | |
or polyfill_pass1 | |
or polyfill_coarse | |
or polyfill_medium | |
or polyfill_fine | |
layer FOMMASK fomfill | |
calma 23 0 | |
layer POLYMASK polyfill | |
calma 28 0 | |
#--------------------------------------------------- | |
# MET1 fill | |
#--------------------------------------------------- | |
templayer obstruct_m1_coarse allm1,allpad,obsm1,m1fill,fillblock | |
grow 3000 | |
templayer met1fill_coarse topbox | |
slots 0 2000 200 0 2000 200 700 0 | |
and-not obstruct_m1_coarse | |
and topbox | |
shrink 995 | |
grow 995 | |
templayer obstruct_m1_medium allm1,allpad,obsm1,m1fill,fillblock | |
grow 2800 | |
or met1fill_coarse | |
grow 200 | |
templayer met1fill_medium topbox | |
slots 0 1000 200 0 1000 200 700 0 | |
and-not obstruct_m1_medium | |
and topbox | |
shrink 495 | |
grow 495 | |
templayer obstruct_m1_fine allm1,allpad,obsm1,m1fill,fillblock | |
grow 300 | |
or met1fill_coarse,met1fill_medium | |
grow 200 | |
templayer met1fill_fine topbox | |
slots 0 580 200 0 580 200 700 0 | |
and-not obstruct_m1_fine | |
and topbox | |
shrink 285 | |
grow 285 | |
templayer obstruct_m1_veryfine allm1,allpad,obsm1,m1fill,fillblock | |
grow 100 | |
or met1fill_coarse,met1fill_medium,met1fill_fine | |
grow 200 | |
templayer met1fill_veryfine topbox | |
slots 0 300 200 0 300 200 100 50 | |
and-not obstruct_m1_veryfine | |
and topbox | |
shrink 145 | |
grow 145 | |
layer MET1MASK met1fill_coarse | |
or met1fill_medium | |
or met1fill_fine | |
or met1fill_veryfine | |
calma 36 0 | |
#--------------------------------------------------- | |
# MET2 fill | |
#--------------------------------------------------- | |
templayer obstruct_m2 allm2,allpad,obsm2,m2fill,fillblock | |
grow 3000 | |
templayer met2fill_coarse topbox | |
slots 0 2000 200 0 2000 200 700 350 | |
and-not obstruct_m2 | |
and topbox | |
shrink 995 | |
grow 995 | |
templayer obstruct_m2_medium allm2,allpad,obsm2,m2fill,fillblock | |
grow 2800 | |
or met2fill_coarse | |
grow 200 | |
templayer met2fill_medium topbox | |
slots 0 1000 200 0 1000 200 700 350 | |
and-not obstruct_m2_medium | |
and topbox | |
shrink 495 | |
grow 495 | |
templayer obstruct_m2_fine allm2,allpad,obsm2,m2fill,fillblock | |
grow 300 | |
or met2fill_coarse,met2fill_medium | |
grow 200 | |
templayer met2fill_fine topbox | |
slots 0 580 200 0 580 200 700 350 | |
and-not obstruct_m2_fine | |
and topbox | |
shrink 285 | |
grow 285 | |
templayer obstruct_m2_veryfine allm2,allpad,obsm2,m2fill,fillblock | |
grow 100 | |
or met2fill_coarse,met2fill_medium,met2fill_fine | |
grow 200 | |
templayer met2fill_veryfine topbox | |
slots 0 300 200 0 300 200 100 100 | |
and-not obstruct_m2_veryfine | |
and topbox | |
shrink 145 | |
grow 145 | |
layer MET2MASK met2fill_coarse | |
or met2fill_medium | |
or met2fill_fine | |
or met2fill_veryfine | |
calma 41 0 | |
#--------------------------------------------------- | |
# MET3 fill | |
#--------------------------------------------------- | |
templayer obstruct_m3 allm3,allpad,obsm3,m3fill,fillblock | |
grow 3000 | |
templayer met3fill_coarse topbox | |
slots 0 2000 300 0 2000 300 700 700 | |
and-not obstruct_m3 | |
and topbox | |
shrink 995 | |
grow 995 | |
templayer obstruct_m3_medium allm3,allpad,obsm3,m3fill,fillblock | |
grow 2700 | |
or met3fill_coarse | |
grow 300 | |
templayer met3fill_medium topbox | |
slots 0 1000 300 0 1000 300 700 700 | |
and-not obstruct_m3_medium | |
and topbox | |
shrink 495 | |
grow 495 | |
templayer obstruct_m3_fine allm3,allpad,obsm3,m3fill,fillblock | |
grow 200 | |
or met3fill_coarse,met3fill_medium | |
grow 300 | |
templayer met3fill_fine topbox | |
slots 0 580 300 0 580 300 700 700 | |
and-not obstruct_m3_fine | |
and topbox | |
shrink 285 | |
grow 285 | |
templayer obstruct_m3_veryfine allm3,allpad,obsm3,m3fill,fillblock | |
# Note: Adding 0.1 to waffle rule to clear wide spacing rule | |
grow 100 | |
or met3fill_coarse,met3fill_medium,met3fill_fine | |
grow 300 | |
templayer met3fill_veryfine topbox | |
slots 0 400 300 0 400 300 150 200 | |
and-not obstruct_m3_veryfine | |
and topbox | |
shrink 195 | |
grow 195 | |
layer MET3MASK met3fill_coarse | |
or met3fill_medium | |
or met3fill_fine | |
or met3fill_veryfine | |
calma 34 0 | |
#--------------------------------------------------- | |
# MET4 fill | |
#--------------------------------------------------- | |
templayer obstruct_m4 allm4,allpad,obsm4,m4fill,fillblock | |
grow 3000 | |
templayer met4fill_coarse topbox | |
slots 0 2000 300 0 2000 300 700 1050 | |
and-not obstruct_m4 | |
and topbox | |
shrink 995 | |
grow 995 | |
templayer obstruct_m4_medium allm4,allpad,obsm4,m4fill,fillblock | |
grow 2700 | |
or met4fill_coarse | |
grow 300 | |
templayer met4fill_medium topbox | |
slots 0 1000 300 0 1000 300 700 1050 | |
and-not obstruct_m4_medium | |
shrink 495 | |
grow 495 | |
templayer obstruct_m4_fine allm4,allpad,obsm4,m4fill,fillblock | |
grow 200 | |
or met4fill_coarse,met4fill_medium | |
grow 300 | |
templayer met4fill_fine topbox | |
slots 0 580 300 0 580 300 700 1050 | |
and-not obstruct_m4_fine | |
and topbox | |
shrink 285 | |
grow 285 | |
templayer obstruct_m4_veryfine allm4,allpad,obsm4,m4fill,fillblock | |
# Note: Adding 0.1 to waffle rule to clear wide spacing rule | |
grow 100 | |
or met4fill_coarse,met4fill_medium,met4fill_fine | |
grow 300 | |
templayer met4fill_veryfine topbox | |
slots 0 400 300 0 400 300 150 300 | |
and-not obstruct_m4_veryfine | |
and topbox | |
shrink 195 | |
grow 195 | |
layer MET4MASK met4fill_coarse | |
or met4fill_medium | |
or met4fill_fine | |
or met4fill_veryfine | |
calma 51 0 | |
#--------------------------------------------------- | |
# MET5 fill | |
#--------------------------------------------------- | |
templayer obstruct_m5 allm5,allpad,obsm5,m5fill,fillblock | |
grow 3000 | |
templayer met5fill_gen topbox | |
slots 0 3000 1600 0 3000 1600 1000 100 | |
and-not obstruct_m5 | |
and topbox | |
shrink 1495 | |
grow 1495 | |
layer MET5MASK met5fill_gen | |
calma 59 0 | |
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 sky130 | |
scalefactor 10 nanometers | |
gridlimit 5 | |
options ignore-unknown-layer-labels no-reconnect-labels | |
ignore NPC | |
ignore SEALID | |
ignore CAPID | |
ignore LDNTM | |
ignore HVNTM | |
ignore POLYMOD | |
ignore LOWTAPDENSITY | |
layer pnp NWELL,WELLTXT,WELLPIN | |
and PNPID | |
labels NWELL | |
labels WELLTXT text | |
labels WELLPIN port | |
layer nwell NWELL,WELLTXT,WELLPIN | |
and-not PNPID | |
labels NWELL | |
labels WELLTXT text | |
labels WELLPIN port | |
layer pwell SUBTXT,SUBPIN | |
labels SUBTXT text | |
labels SUBPIN port | |
# Always draw pwell under p-tap | |
layer pwell TAP | |
and-not NWELL | |
layer dnwell DNWELL | |
labels DNWELL | |
layer npn DNWELL | |
and-not NWELL | |
and NPNID | |
layer rpw PWRES | |
and DNWELL | |
labels PWRES | |
templayer ndiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and-not NWELL | |
and-not PPLUS | |
and-not DIODE | |
and-not DIFFRES | |
and-not THKOX | |
and NPLUS | |
copyup ndifcheck | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
labels TAPPIN port | |
layer ndiff ndiffarea | |
# Copy ndiff areas up for contact checks | |
templayer xndifcheck ndifcheck | |
copyup ndifcheck | |
templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and-not NWELL | |
and-not PPLUS | |
and-not DIODE | |
and-not DIFFRES | |
and THKOX | |
and NPLUS | |
copyup ndifcheck | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
layer mvndiff mvndiffarea | |
# Copy ndiff areas up for contact checks | |
templayer mvxndifcheck mvndifcheck | |
copyup mvndifcheck | |
layer ndiode DIFF | |
and NPLUS | |
and DIODE | |
and-not NWELL | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and-not LVTN | |
labels DIFF | |
layer ndiodelvt DIFF | |
and NPLUS | |
and DIODE | |
and-not NWELL | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and LVTN | |
labels DIFF | |
templayer ndiodearea DIODE | |
and NPLUS | |
and-not THKOX | |
and-not NWELL | |
copyup DIODE,NPLUS | |
layer ndiffres DIFFRES | |
and NPLUS | |
and-not THKOX | |
labels DIFF | |
templayer pdiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and NWELL | |
and-not NPLUS | |
and-not DIODE | |
and-not THKOX | |
and PPLUS | |
copyup pdifcheck | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
layer pdiff pdiffarea | |
layer mvndiode DIFF | |
and NPLUS | |
and DIODE | |
and THKOX | |
and-not POLY | |
and-not PPLUS | |
and-not LVTN | |
labels DIFF | |
layer nndiode DIFF | |
and NPLUS | |
and DIODE | |
and THKOX | |
and-not POLY | |
and-not PPLUS | |
and LVTN | |
labels DIFF | |
templayer mvndiodearea DIODE | |
and NPLUS | |
and THKOX | |
and-not NWELL | |
copyup DIODE,NPLUS | |
layer mvndiffres DIFFRES | |
and NPLUS | |
and THKOX | |
labels DIFF | |
templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and NWELL | |
and-not NPLUS | |
and THKOX | |
and-not DIODE | |
and-not DIFFRES | |
and PPLUS | |
copyup mvpdifcheck | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
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 THKOX | |
and-not LVTN | |
and-not HVTP | |
and DIODE | |
labels DIFF | |
layer pdiodelvt DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and LVTN | |
and-not HVTP | |
and DIODE | |
labels DIFF | |
layer pdiodehvt DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and-not LVTN | |
and HVTP | |
and DIODE | |
labels DIFF | |
templayer pdiodearea DIODE | |
and PPLUS | |
and-not THKOX | |
copyup DIODE,PPLUS | |
# Define pfet areas as known pdiff, regardless of the presence of a well. | |
templayer pfetarea DIFF | |
and-not NPLUS | |
and-not THKOX | |
and POLY | |
layer pfet pfetarea | |
and-not LVTN | |
and-not HVTP | |
and-not STDCELL | |
and-not COREID | |
labels DIFF | |
layer scpfet pfetarea | |
and-not LVTN | |
and-not HVTP | |
and STDCELL | |
labels DIFF | |
layer scpfethvt pfetarea | |
and-not LVTN | |
and HVTP | |
and STDCELL | |
labels DIFF | |
layer ppu pfetarea | |
and-not LVTN | |
and HVTP | |
and COREID | |
labels DIFF | |
layer pfetlvt pfetarea | |
and LVTN | |
labels DIFF | |
layer pfetmvt pfetarea | |
and HVTR | |
labels DIFF | |
layer pfethvt pfetarea | |
and HVTP | |
and-not STDCELL | |
and-not COREID | |
labels DIFF | |
# Always force nwell under pfet (nwell encloses pdiff by 0.18) | |
layer nwell pfetarea | |
grow 180 | |
# Copy mvpdiff areas up for contact checks | |
templayer mvxpdifcheck mvpdifcheck | |
copyup mvpdifcheck | |
layer mvpdiode DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and THKOX | |
and DIODE | |
labels DIFF | |
templayer mvpdiodearea DIODE | |
and PPLUS | |
and THKOX | |
copyup DIODE,PPLUS | |
# Define pfet areas as known pdiff, | |
# regardless of the presence of a | |
# well. | |
templayer mvpfetarea DIFF | |
and-not NPLUS | |
and THKOX | |
and POLY | |
layer mvpfet mvpfetarea | |
labels DIFF | |
layer pdiff DIFF,DIFFTXT,DIFFPIN | |
and-not NPLUS | |
and-not POLY | |
and-not THKOX | |
and-not DIODE | |
and-not DIFFRES | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
layer pdiffres DIFFRES | |
and PPLUS | |
and NWELL | |
and-not THKOX | |
labels DIFF | |
layer nfet DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not THKOX | |
and-not LVTN | |
and-not SONOS | |
and-not STDCELL | |
labels DIFF | |
layer scnfet DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not NWELL | |
and-not THKOX | |
and-not LVTN | |
and-not SONOS | |
and STDCELL | |
labels DIFF | |
layer npass DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not NWELL | |
and COREID | |
labels DIFF | |
layer npd DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not NWELL | |
and COREID | |
# Shrink-grow operation eliminates the smaller npass device | |
shrink 70 | |
grow 70 | |
labels DIFF | |
layer nfetlvt DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not THKOX | |
and LVTN | |
and-not SONOS | |
labels DIFF | |
layer nsonos DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not THKOX | |
and LVTN | |
and SONOS | |
labels DIFF | |
templayer nsdarea TAP | |
and NPLUS | |
and NWELL | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
copyup nsubcheck | |
layer nsd nsdarea | |
labels TAP | |
layer nsd TAP,TAPPIN | |
and NPLUS | |
and-not POLY | |
and-not THKOX | |
labels TAP | |
labels TAPPIN port | |
layer corenvar TAP | |
and NPLUS | |
and POLY | |
and COREID | |
labels TAP | |
templayer nsdexpand nsdarea | |
grow 500 | |
# Copy nsub areas up for contact checks | |
templayer xnsubcheck nsubcheck | |
copyup nsubcheck | |
templayer psdarea TAP | |
and PPLUS | |
and-not NWELL | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and-not pfetexpand | |
copyup psubcheck | |
layer psd psdarea | |
labels TAP | |
layer psd TAP,TAPPIN | |
and PPLUS | |
and-not POLY | |
and-not THKOX | |
labels TAP | |
labels TAPPIN port | |
layer corepvar TAP | |
and PPLUS | |
and POLY | |
and COREID | |
labels TAP | |
templayer psdexpand psdarea | |
grow 500 | |
layer mvpdiff DIFF,DIFFTXT,DIFFPIN | |
and-not NPLUS | |
and-not POLY | |
and THKOX | |
and mvpfetexpand | |
labels DIFF | |
labels DIFFTXT text | |
labels DIFFPIN port | |
layer mvpdiffres DIFFRES | |
and PPLUS | |
and NWELL | |
and THKOX | |
and-not mvrdpioedge | |
labels DIFF | |
templayer mvnfetarea DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and-not LVTN | |
and THKOX | |
grow 1000 | |
templayer mvnnfetarea DIFF,TAP | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and LVTN | |
and THKOX | |
and-not mvnfetarea | |
layer mvnfet DIFF | |
and POLY | |
and-not PPLUS | |
and NPLUS | |
and THKOX | |
and-not mvnnfetarea | |
labels DIFF | |
layer mvnnfet mvnnfetarea | |
labels DIFF | |
templayer mvnsdarea TAP | |
and NPLUS | |
and NWELL | |
and-not POLY | |
and-not PPLUS | |
and THKOX | |
copyup mvnsubcheck | |
layer mvnsd mvnsdarea | |
labels TAP | |
layer mvnsd TAP,TAPPIN | |
and NPLUS | |
and THKOX | |
labels TAP | |
labels TAPPIN port | |
templayer mvnsdexpand mvnsdarea | |
grow 500 | |
# Copy nsub areas up for contact checks | |
templayer mvxnsubcheck mvnsubcheck | |
copyup mvnsubcheck | |
templayer mvpsdarea DIFF | |
and PPLUS | |
and-not NWELL | |
and-not POLY | |
and-not NPLUS | |
and THKOX | |
and-not mvpfetexpand | |
copyup mvpsubcheck | |
layer mvpsd mvpsdarea | |
labels DIFF | |
layer mvpsd TAP,TAPPIN | |
and PPLUS | |
and THKOX | |
labels TAP | |
labels TAPPIN port | |
templayer mvpsdexpand mvpsdarea | |
grow 500 | |
# Copy psub areas up for contact checks | |
templayer xpsubcheck psubcheck | |
copyup psubcheck | |
templayer mvxpsubcheck mvpsubcheck | |
copyup mvpsubcheck | |
layer psd TAP | |
and-not PPLUS | |
and-not NPLUS | |
and-not POLY | |
and-not THKOX | |
and-not pfetexpand | |
and psdexpand | |
layer nsd TAP | |
and-not PPLUS | |
and-not NPLUS | |
and-not POLY | |
and-not THKOX | |
and nsdexpand | |
layer mvpsd TAP | |
and-not PPLUS | |
and-not NPLUS | |
and-not POLY | |
and THKOX | |
and-not mvpfetexpand | |
and mvpsdexpand | |
layer mvnsd TAP | |
and-not PPLUS | |
and-not NPLUS | |
and-not POLY | |
and THKOX | |
and mvnsdexpand | |
templayer hresarea POLY | |
and RPM | |
grow 3000 | |
templayer uresarea POLY | |
and URPM | |
grow 3000 | |
templayer diffresarea DIFFRES | |
and-not THKOX | |
grow 3000 | |
templayer mvdiffresarea DIFFRES | |
and THKOX | |
grow 3000 | |
templayer resarea diffresarea,mvdiffresarea,hresarea,uresarea | |
layer pfet POLY | |
and DIFF | |
and diffresarea | |
and-not NPLUS | |
and-not STDCELL | |
layer scpfet POLY | |
and DIFF | |
and diffresarea | |
and-not HVTP | |
and-not NPLUS | |
and STDCELL | |
layer scpfethvt POLY | |
and DIFF | |
and diffresarea | |
and HVTP | |
and-not NPLUS | |
and STDCELL | |
templayer xpolyterm RPM,URPM | |
and POLY | |
and-not POLYRES | |
# add back the 0.06um contact surround in the direction of the resistor | |
grow 60 | |
and POLY | |
layer xpc xpolyterm | |
templayer polyarea POLY | |
and-not POLYRES | |
and-not POLYSHORT | |
and-not DIFF | |
and-not TAP | |
and-not RPM | |
and-not URPM | |
copyup polycheck | |
layer poly polyarea,POLYTXT,POLYPIN | |
labels POLY | |
labels POLYTXT text | |
labels POLYPIN port | |
# Copy (non-resistor) poly areas up for contact checks | |
templayer xpolycheck polycheck | |
copyup polycheck | |
layer mrp1 POLY | |
and POLYRES | |
and-not RPM | |
and-not URPM | |
labels POLY | |
layer rmp POLY | |
and POLYSHORT | |
labels POLY | |
layer xhrpoly POLY | |
and POLYRES | |
and RPM | |
and-not URPM | |
and PPLUS | |
and NPC | |
and-not xpolyterm | |
labels POLY | |
layer uhrpoly POLY | |
and POLYRES | |
and URPM | |
and-not RPM | |
and NPC | |
and-not xpolyterm | |
labels POLY | |
templayer ndcbase CONT | |
and DIFF | |
and NPLUS | |
and-not NWELL | |
and LI | |
and-not THKOX | |
layer ndc ndcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or ndcbase | |
labels CONT | |
templayer nscbase CONT | |
and DIFF,TAP | |
and NPLUS | |
and NWELL | |
and LI | |
and-not THKOX | |
layer nsc nscbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or nscbase | |
labels CONT | |
templayer pdcbase CONT | |
and DIFF | |
and PPLUS | |
and NWELL | |
and LI | |
and-not THKOX | |
layer pdc pdcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdcbase | |
labels CONT | |
templayer pdcnowell CONT | |
and DIFF | |
and PPLUS | |
and pfetexpand | |
and LI | |
and-not THKOX | |
layer pdc pdcnowell | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdcnowell | |
labels CONT | |
templayer pscbase CONT | |
and DIFF,TAP | |
and PPLUS | |
and-not NWELL | |
and-not pfetexpand | |
and LI | |
and-not THKOX | |
layer psc pscbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pscbase | |
labels CONT | |
templayer pcbase CONT | |
and POLY | |
and-not DIFF | |
and-not RPM,URPM | |
and LI | |
layer pc pcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pcbase | |
labels CONT | |
templayer ndicbase CONT | |
and DIFF | |
and NPLUS | |
and DIODE | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and-not LVTN | |
layer ndic ndicbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or ndicbase | |
labels CONT | |
templayer ndilvtcbase CONT | |
and DIFF | |
and NPLUS | |
and DIODE | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and LVTN | |
layer ndilvtc ndilvtcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or ndilvtcbase | |
labels CONT | |
templayer pdicbase CONT | |
and DIFF | |
and PPLUS | |
and DIODE | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and-not LVTN | |
and-not HVTP | |
layer pdic pdicbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdicbase | |
labels CONT | |
templayer pdilvtcbase CONT | |
and DIFF | |
and PPLUS | |
and DIODE | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and LVTN | |
and-not HVTP | |
layer pdilvtc pdilvtcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdilvtcbase | |
labels CONT | |
templayer pdihvtcbase CONT | |
and DIFF | |
and PPLUS | |
and DIODE | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and-not LVTN | |
and HVTP | |
layer pdihvtc pdihvtcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdihvtcbase | |
labels CONT | |
templayer mvndcbase CONT | |
and DIFF | |
and NPLUS | |
and-not NWELL | |
and LI | |
and THKOX | |
layer mvndc mvndcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvndcbase | |
labels CONT | |
templayer mvnscbase CONT | |
and DIFF,TAP | |
and NPLUS | |
and NWELL | |
and LI | |
and THKOX | |
layer mvnsc mvnscbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvnscbase | |
labels CONT | |
templayer mvpdcbase CONT | |
and DIFF | |
and PPLUS | |
and NWELL | |
and LI | |
and THKOX | |
layer mvpdc mvpdcbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpdcbase | |
labels CONT | |
templayer mvpdcnowell CONT | |
and DIFF | |
and PPLUS | |
and mvpfetexpand | |
and MET1 | |
and THKOX | |
layer mvpdc mvpdcnowell | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpdcnowell | |
labels CONT | |
templayer mvpscbase CONT | |
and DIFF,TAP | |
and PPLUS | |
and-not NWELL | |
and-not mvpfetexpand | |
and LI | |
and THKOX | |
layer mvpsc mvpscbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpscbase | |
labels CONT | |
templayer mvndicbase CONT | |
and DIFF | |
and NPLUS | |
and DIODE | |
and-not POLY | |
and-not PPLUS | |
and-not LVTN | |
and THKOX | |
layer mvndic mvndicbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvndicbase | |
labels CONT | |
templayer nndicbase CONT | |
and DIFF | |
and NPLUS | |
and DIODE | |
and-not POLY | |
and-not PPLUS | |
and LVTN | |
and THKOX | |
layer nndic nndicbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or nndicbase | |
labels CONT | |
templayer mvpdicbase CONT | |
and DIFF | |
and PPLUS | |
and DIODE | |
and-not POLY | |
and-not NPLUS | |
and THKOX | |
layer mvpdic mvpdicbase | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpdicbase | |
labels CONT | |
layer coreli LI,LITXT,LIPIN | |
and-not LIRES,LISHORT | |
and COREID | |
labels LI | |
labels LITXT text | |
labels LIPIN port | |
layer locali LI,LITXT,LIPIN | |
and-not LIRES,LISHORT | |
and-not COREID | |
labels LI | |
labels LITXT text | |
labels LIPIN port | |
layer rli LI | |
and LIRES,LISHORT | |
labels LIRES,LISHORT | |
layer lic MCON | |
grow 95 | |
shrink 95 | |
shrink 85 | |
grow 85 | |
or MCON | |
labels MCON | |
layer m1 MET1,MET1TXT,MET1PIN | |
and-not MET1RES,MET1SHORT | |
labels MET1 | |
labels MET1TXT text | |
labels MET1PIN port | |
layer rm1 MET1 | |
and MET1RES,MET1SHORT | |
labels MET1RES,MET1SHORT | |
layer m1fill MET1FILL | |
labels MET1FILL | |
layer mimcap MET3 | |
and CAPM | |
labels CAPM | |
layer mimcc VIA3 | |
and CAPM | |
grow 60 | |
grow 40 | |
shrink 40 | |
labels CAPM | |
layer mimcap2 MET4 | |
and CAPM2 | |
labels CAPM2 | |
layer mim2cc VIA4 | |
and CAPM2 | |
grow 190 | |
grow 210 | |
shrink 210 | |
labels CAPM2 | |
templayer m2cbase VIA1 | |
grow 55 | |
layer m2c m2cbase | |
grow 30 | |
shrink 30 | |
shrink 130 | |
grow 130 | |
or m2cbase | |
layer m2 MET2,MET2TXT,MET2PIN | |
and-not MET2RES,MET2SHORT | |
labels MET2 | |
labels MET2TXT text | |
labels MET2PIN port | |
layer rm2 MET2 | |
and MET2RES,MET2SHORT | |
labels MET2RES,MET2SHORT | |
layer m2fill MET2FILL | |
labels MET2FILL | |
templayer m3cbase VIA2 | |
grow 40 | |
layer m3c m3cbase | |
grow 60 | |
shrink 60 | |
shrink 140 | |
grow 140 | |
or m3cbase | |
layer m3 MET3,MET3TXT,MET3PIN | |
and-not MET3RES,MET3SHORT | |
and-not CAPM | |
labels MET3 | |
labels MET3TXT text | |
labels MET3PIN port | |
layer rm3 MET3 | |
and MET3RES,MET3SHORT | |
labels MET3RES,MET3SHORT | |
layer m3fill MET3FILL | |
labels MET3FILL | |
templayer via3base VIA3 | |
and-not CAPM | |
grow 60 | |
layer via3 via3base | |
grow 40 | |
shrink 40 | |
shrink 160 | |
grow 160 | |
or via3base | |
layer m4 MET4,MET4TXT,MET4PIN | |
and-not MET4RES,MET4SHORT | |
and-not CAPM2 | |
labels MET4 | |
labels MET4TXT text | |
labels MET4PIN port | |
layer rm4 MET4 | |
and MET4RES,MET4SHORT | |
labels MET4RES,MET4SHORT | |
layer m4fill MET4FILL | |
labels MET4FILL | |
layer m5 MET5,MET5TXT,MET5PIN | |
and-not MET5RES,MET5SHORT | |
labels MET5 | |
labels MET5TXT text | |
labels MET5PIN port | |
layer rm5 MET5 | |
and MET5RES,MET5SHORT | |
labels MET5RES,MET5SHORT | |
layer m5fill MET5FILL | |
labels MET5FILL | |
templayer via4base VIA4 | |
and-not CAPM2 | |
grow 190 | |
layer via4 via4base | |
grow 210 | |
shrink 210 | |
shrink 590 | |
grow 590 | |
or via4base | |
layer metrdl RDL,RDLTXT,RDLPIN | |
labels RDL | |
labels RDLTXT text | |
labels RDLPIN port | |
# 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,TAP | |
and-not PPLUS | |
and-not NPLUS | |
and-not POLY | |
copyup DIFF | |
# Handle contacts found by copyup | |
templayer ndiccopy CONT | |
and LI | |
and DIODE | |
and NPLUS | |
and-not THKOX | |
layer ndic ndiccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or ndiccopy | |
labels CONT | |
templayer mvndiccopy CONT | |
and LI | |
and DIODE | |
and NPLUS | |
and THKOX | |
layer mvndic mvndiccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvndiccopy | |
labels CONT | |
templayer pdiccopy CONT | |
and LI | |
and DIODE | |
and PPLUS | |
and-not THKOX | |
layer pdic pdiccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdiccopy | |
labels CONT | |
templayer mvpdiccopy CONT | |
and LI | |
and DIODE | |
and PPLUS | |
and THKOX | |
layer mvpdic mvpdiccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpdiccopy | |
labels CONT | |
templayer ndccopy CONT | |
and ndifcheck | |
layer ndc ndccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or ndccopy | |
labels CONT | |
templayer mvndccopy CONT | |
and mvndifcheck | |
layer mvndc mvndccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvndccopy | |
labels CONT | |
templayer pdccopy CONT | |
and pdifcheck | |
layer pdc pdccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pdccopy | |
labels CONT | |
templayer mvpdccopy CONT | |
and mvpdifcheck | |
layer mvpdc mvpdccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpdccopy | |
labels CONT | |
templayer pccopy CONT | |
and polycheck | |
layer pc pccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or pccopy | |
labels CONT | |
templayer nsccopy CONT | |
and nsubcheck | |
layer nsc nsccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or nsccopy | |
labels CONT | |
templayer mvnsccopy CONT | |
and mvnsubcheck | |
layer mvnsc mvnsccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvnsccopy | |
labels CONT | |
templayer psccopy CONT | |
and psubcheck | |
layer psc psccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or psccopy | |
labels CONT | |
templayer mvpsccopy CONT | |
and mvpsubcheck | |
layer mvpsc mvpsccopy | |
grow 85 | |
shrink 85 | |
shrink 85 | |
grow 85 | |
or mvpsccopy | |
labels CONT | |
# Find contacts not covered in | |
# metal and pull them into the | |
# next layer up | |
templayer gencont CONT | |
and LI | |
and-not DIFF,TAP | |
and-not POLY | |
and-not DIODE | |
and-not nsubcheck | |
and-not psubcheck | |
and-not mvnsubcheck | |
and-not mvpsubcheck | |
copyup CONT,LI | |
templayer barecont CONT | |
and-not LI | |
and-not nsubcheck | |
and-not psubcheck | |
and-not mvnsubcheck | |
and-not mvpsubcheck | |
copyup CONT | |
layer glass GLASS,PADTXT,PADPIN | |
labels GLASS | |
labels PADTXT text | |
labels PADPIN port | |
templayer boundary BOUND,STDCELL,PADCELL | |
boundary | |
layer comment LVSTEXT | |
labels LVSTEXT text | |
layer comment TTEXT | |
labels TTEXT text | |
layer fillblock FILLOBSM1,FILLOBSM2,FILLOBSM3,FILLOBSM4 | |
labels FILLOBSM1,FILLOBSM2,FILLOBSM3,FILLOBSM4 | |
# MOS Varactor | |
layer var POLY | |
and TAP | |
and NPLUS | |
and NWELL | |
and-not THKOX | |
and-not HVTP | |
# NOTE: Else forms a varactor that is not in the vendor netlist. | |
and-not COREID | |
labels POLY | |
layer varhvt POLY | |
and TAP | |
and NPLUS | |
and NWELL | |
and-not THKOX | |
and HVTP | |
labels POLY | |
layer mvvar POLY | |
and TAP | |
and NPLUS | |
and NWELL | |
and THKOX | |
labels POLY | |
calma NWELL 64 20 | |
calma DIFF 65 20 | |
calma DNWELL 64 18 | |
calma PWRES 64 13 | |
calma TAP 65 44 | |
# LVTN | |
calma LVTN 125 44 | |
# HVTR | |
calma HVTR 18 20 | |
# HVTP | |
calma HVTP 78 44 | |
# SONOS (TUNM) | |
calma SONOS 80 20 | |
# NPLUS = NSDM | |
calma NPLUS 93 44 | |
# PPLUS = PSDM | |
calma PPLUS 94 20 | |
# HVI | |
calma THKOX 75 20 | |
# NPC | |
calma NPC 95 20 | |
# P+ POLY MASK | |
calma RPM 86 20 | |
calma URPM 79 20 | |
calma LDNTM 11 44 | |
calma HVNTM 125 20 | |
# Poly resistor ID mark | |
calma POLYRES 66 13 | |
# Diffusion resistor ID mark | |
calma DIFFRES 65 13 | |
calma POLY 66 20 | |
calma POLYMOD 66 83 | |
# Diode ID mark | |
calma DIODE 81 23 | |
# Bipolar NPN mark | |
calma NPNID 82 20 | |
# Bipolar PNP mark | |
calma PNPID 82 44 | |
# Capacitor ID | |
calma CAPID 82 64 | |
# Core area ID mark | |
calma COREID 81 2 | |
# Standard cell ID mark | |
calma STDCELL 81 4 | |
# Padframe cell ID mark | |
calma PADCELL 81 3 | |
# Seal ring ID mark | |
calma SEALID 81 1 | |
# Low tap density ID mark | |
calma LOWTAPDENSITY 81 14 | |
# LICON | |
calma CONT 66 44 | |
calma LI 67 20 | |
calma MCON 67 44 | |
calma MET1 68 20 | |
calma VIA1 68 44 | |
calma MET2 69 20 | |
calma VIA2 69 44 | |
calma MET3 70 20 | |
calma VIA3 70 44 | |
calma MET4 71 20 | |
calma VIA4 71 44 | |
calma MET5 72 20 | |
calma RDL 74 20 | |
calma GLASS 76 20 | |
calma SUBPIN 64 59 | |
calma PADPIN 76 5 | |
calma DIFFPIN 65 6 | |
calma TAPPIN 65 5 | |
calma WELLPIN 64 5 | |
calma LIPIN 67 5 | |
calma POLYPIN 66 5 | |
calma MET1PIN 68 5 | |
calma MET2PIN 69 5 | |
calma MET3PIN 70 5 | |
calma MET4PIN 71 5 | |
calma MET5PIN 72 5 | |
calma RDLPIN 74 5 | |
calma LIRES 67 13 | |
calma MET1RES 68 13 | |
calma MET2RES 69 13 | |
calma MET3RES 70 13 | |
calma MET4RES 71 13 | |
calma MET5RES 72 13 | |
calma MET1FILL 68 28 | |
calma MET2FILL 69 28 | |
calma MET3FILL 70 28 | |
calma MET4FILL 71 28 | |
calma MET5FILL 72 28 | |
calma POLYSHORT 66 15 | |
calma LISHORT 67 15 | |
calma MET1SHORT 68 15 | |
calma MET2SHORT 69 15 | |
calma MET3SHORT 70 15 | |
calma MET4SHORT 71 15 | |
calma MET5SHORT 72 15 | |
calma SUBTXT 122 16 | |
calma PADTXT 76 16 | |
calma DIFFTXT 65 16 | |
calma POLYTXT 66 16 | |
calma WELLTXT 64 16 | |
calma LITXT 67 16 | |
calma MET1TXT 68 16 | |
calma MET2TXT 69 16 | |
calma MET3TXT 70 16 | |
calma MET4TXT 71 16 | |
calma MET5TXT 72 16 | |
calma RDLPIN 74 16 | |
calma BOUND 235 4 | |
calma LVSTEXT 83 44 | |
calma CAPM 89 44 | |
calma CAPM2 97 44 | |
calma FILLOBSM1 62 24 | |
calma FILLOBSM2 105 52 | |
calma FILLOBSM3 107 24 | |
calma FILLOBSM4 112 4 | |
#----------------------------------------------------------------------- | |
style vendorimport | |
scalefactor 10 nanometers | |
gridlimit 5 | |
options ignore-unknown-layer-labels no-reconnect-labels | |
ignore NPC | |
ignore SEALID | |
ignore CAPID | |
ignore LDNTM | |
ignore HVNTM | |
ignore POLYMOD | |
ignore LOWTAPDENSITY | |
layer pnp NWELL,WELLTXT,WELLPIN | |
and PNPID | |
labels NWELL | |
labels WELLTXT port | |
labels WELLPIN port | |
layer nwell NWELL,WELLTXT,WELLPIN | |
and-not PNPID | |
labels NWELL | |
labels WELLTXT port | |
labels WELLPIN port | |
layer pwell SUBTXT,SUBPIN | |
labels SUBTXT port | |
labels SUBPIN port | |
# Always draw pwell under p-tap | |
layer pwell TAP | |
and-not NWELL | |
layer dnwell DNWELL | |
labels DNWELL | |
layer npn DNWELL | |
and-not NWELL | |
and NPNID | |
layer rpw PWRES | |
and DNWELL | |
labels PWRES | |
templayer ndiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and-not NWELL | |
and-not PPLUS | |
and-not DIODE | |
and-not DIFFRES | |
and-not THKOX | |
and NPLUS | |
copyup ndifcheck | |
labels DIFF | |
labels DIFFTXT port | |
labels DIFFPIN port | |
labels TAPPIN port | |
layer ndiff ndiffarea | |
# Copy ndiff areas up for contact checks | |
templayer xndifcheck ndifcheck | |
copyup ndifcheck | |
templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and-not NWELL | |
and-not PPLUS | |
and-not DIODE | |
and-not DIFFRES | |
and THKOX | |
and NPLUS | |
copyup ndifcheck | |
labels DIFF | |
labels DIFFTXT port | |
labels DIFFPIN port | |
layer mvndiff mvndiffarea | |
# Copy ndiff areas up for contact checks | |
templayer mvxndifcheck mvndifcheck | |
copyup mvndifcheck | |
layer ndiode DIFF | |
and NPLUS | |
and DIODE | |
and-not NWELL | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and-not LVTN | |
labels DIFF | |
layer ndiodelvt DIFF | |
and NPLUS | |
and DIODE | |
and-not NWELL | |
and-not POLY | |
and-not PPLUS | |
and-not THKOX | |
and LVTN | |
labels DIFF | |
templayer ndiodearea DIODE | |
and NPLUS | |
and-not THKOX | |
and-not NWELL | |
copyup DIODE,NPLUS | |
layer ndiffres DIFFRES | |
and NPLUS | |
and-not THKOX | |
labels DIFF | |
templayer pdiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and NWELL | |
and-not NPLUS | |
and-not DIODE | |
and-not THKOX | |
and PPLUS | |
copyup pdifcheck | |
labels DIFF | |
labels DIFFTXT port | |
labels DIFFPIN port | |
layer pdiff pdiffarea | |
layer mvndiode DIFF | |
and NPLUS | |
and DIODE | |
and THKOX | |
and-not POLY | |
and-not PPLUS | |
and-not LVTN | |
labels DIFF | |
layer nndiode DIFF | |
and NPLUS | |
and DIODE | |
and THKOX | |
and-not POLY | |
and-not PPLUS | |
and LVTN | |
labels DIFF | |
templayer mvndiodearea DIODE | |
and NPLUS | |
and THKOX | |
and-not NWELL | |
copyup DIODE,NPLUS | |
layer mvndiffres DIFFRES | |
and NPLUS | |
and THKOX | |
labels DIFF | |
templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN | |
and-not POLY | |
and NWELL | |
and-not NPLUS | |
and THKOX | |
and-not DIODE | |
and-not DIFFRES | |
and PPLUS | |
copyup mvpdifcheck | |
labels DIFF | |
labels DIFFTXT port | |
labels DIFFPIN port | |
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 THKOX | |
and-not LVTN | |
and-not HVTP | |
and DIODE | |
labels DIFF | |
layer pdiodelvt DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and LVTN | |
and-not HVTP | |
and DIODE | |
labels DIFF | |
layer pdiodehvt DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and-not THKOX | |
and-not LVTN | |
and HVTP | |
and DIODE | |
labels DIFF | |
templayer pdiodearea DIODE | |
and PPLUS | |
and-not THKOX | |
copyup DIODE,PPLUS | |
# Define pfet areas as known pdiff, regardless of the presence of a well. | |
templayer pfetarea DIFF | |
and-not NPLUS | |
and-not THKOX | |
and POLY | |
layer pfet pfetarea | |
and-not LVTN | |
and-not HVTP | |
and-not STDCELL | |
and-not COREID | |
labels DIFF | |
layer scpfet pfetarea | |
and-not LVTN | |
and-not HVTP | |
and STDCELL | |
labels DIFF | |
layer scpfethvt pfetarea | |
and-not LVTN | |
and HVTP | |
and STDCELL | |
labels DIFF | |
layer ppu pfetarea | |
and-not LVTN | |
and HVTP | |
and COREID | |
labels DIFF | |
layer pfetlvt pfetarea | |
and LVTN | |
labels DIFF | |
layer pfetmvt pfetarea | |
and HVTR | |
labels DIFF | |
layer pfethvt pfetarea | |
and HVTP | |
and-not STDCELL | |
and-not COREID | |
labels DIFF | |
# Always force nwell under pfet (nwell encloses pdiff by 0.18) | |
layer nwell pfetarea | |
grow 180 | |
# Copy mvpdiff areas up for contact checks | |
templayer mvxpdifcheck mvpdifcheck | |
copyup mvpdifcheck | |
layer mvpdiode DIFF | |
and PPLUS | |
and-not POLY | |
and-not NPLUS | |
and THKOX | |
and DIODE | |
labels DIFF | |
templayer mvpdiodearea DIODE | |
and PPLUS | |
and THKOX | |
copyup DIODE,PPLUS | |
# Define pfet areas as known pdiff, | |
# regardless of the presence of a | |
# well. | |
templayer mvpfetarea DIFF | |
and-not NPLUS | |