You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6054 lines
155 KiB
Plaintext
6054 lines
155 KiB
Plaintext
###
|
|
### Source file sky130.tech
|
|
### Process this file with the preproc.py macro processor
|
|
### Note that the tech name is always TECHNAME for
|
|
### magic; this keeps compatibility between layouts
|
|
### for all process variants.
|
|
###
|
|
#------------------------------------------------------------------------
|
|
# 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.
|
|
#
|
|
#------------------------------------------------------------------------
|
|
tech
|
|
format 35
|
|
sky130
|
|
end
|
|
|
|
version
|
|
version REVISION
|
|
description "SkyWater SKY130: Open Source rules and DRC"
|
|
requires magic-8.3.260
|
|
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
|
|
# Status 1/3/21: Taking out of beta and declaring an official release.
|
|
#------------------------------------------------------------------------
|
|
|
|
#------------------------------------------------------------------------
|
|
# 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 nnfet 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_05v5 pbase NPN in deep nwell
|
|
# sky130_fd_pr__npn_11v0 pbase thick oxide gated NPN
|
|
# sky130_fd_pr__pnp_05v5 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)
|
|
# sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd ESD thickox nFET
|
|
# sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd ESD thickox pFET
|
|
# sky130_fd_pr__photodiode photo Photodiode
|
|
#
|
|
# (*) 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_05v0_nvt ESD native nFET
|
|
# 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
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
cap1,c1
|
|
#endif (MIM)
|
|
metal4,m4
|
|
#ifdef MIM
|
|
cap2,c2
|
|
#endif (MIM)
|
|
metal5,m5
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
metali,mi
|
|
#endif
|
|
block,b
|
|
comment,c
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Tile types
|
|
#-----------------------------------------------------
|
|
|
|
types
|
|
# Deep nwell
|
|
dwell dnwell,dnw
|
|
dwell isosubstrate,isosub
|
|
dwell photodiode,photo
|
|
|
|
# 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,nnfet
|
|
active mvnmos,mvntransistor,mvnfet
|
|
active mvpmos,mvptransistor,mvpfet
|
|
active mvnnmos,mvnntransistor,mvnnfet
|
|
-active mvnmosesd,mvntransistoresd,mvnfetesd
|
|
-active mvpmosesd,mvptransistoresd,mvpfetesd
|
|
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 fomfill
|
|
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,ptap
|
|
active nsubdiff,nsubstratendiff,nndiff,nnd,nsd,ntap
|
|
active mvpsubdiff,mvpsubstratepdiff,mvppdiff,mvppd,mvpsd,mvptap
|
|
active mvnsubdiff,mvnsubstratendiff,mvnndiff,mvnnd,mvnsd,mvntap
|
|
active psubdiffcont,psubstratepcontact,psc,ptapc
|
|
active nsubdiffcont,nsubstratencontact,nsc,ntapc
|
|
active mvpsubdiffcont,mvpsubstratepcontact,mvpsc,mvptapc
|
|
active mvnsubdiffcont,mvnsubstratencontact,mvnsc,mvntapc
|
|
-active obsactive
|
|
-active mvobsactive
|
|
|
|
# Poly
|
|
active poly,p,polysilicon
|
|
active polycont,pc,pcontact,polycut,polyc
|
|
active xpolycontact,xpolyc,xpc
|
|
-active polyfill
|
|
|
|
# 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,m1c,v0
|
|
-locali obsli1,obsli
|
|
-locali obsli1c,obsmcon
|
|
-locali lifill
|
|
|
|
# Metal 1
|
|
metal1 metal1,m1,met1
|
|
metal1 rmetal1,rm1,rmet1
|
|
metal1 via1,m2contact,m2cut,m2c,via,v,v1
|
|
-metal1 obsm1
|
|
metal1 padl
|
|
-metal1 m1fill
|
|
|
|
#ifdef RERAM
|
|
metal2 reram,rr
|
|
#endif
|
|
|
|
# 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
|
|
#ifdef METAL5
|
|
metal3 via3,v3
|
|
-metal3 m3fill
|
|
|
|
#ifdef MIM
|
|
cap1 mimcap,mim,capm
|
|
cap1 mimcapcontact,mimcapc,mimcc,capmc
|
|
#endif
|
|
|
|
# Metal 4
|
|
metal4 metal4,m4,met4
|
|
metal4 rmetal4,rm4,rmet4
|
|
-metal4 obsm4
|
|
metal4 via4,v4
|
|
-metal4 m4fill
|
|
|
|
#ifdef MIM
|
|
cap2 mimcap2,mim2,capm2
|
|
cap2 mimcap2contact,mimcap2c,mim2cc,capm2c
|
|
#endif
|
|
|
|
# Metal 5
|
|
metal5 metal5,m5,met5
|
|
metal5 rm5,rmetal5,rmet5
|
|
-metal5 obsm5
|
|
-metal5 m5fill
|
|
#endif (METAL5)
|
|
|
|
#ifdef REDISTRIBUTION
|
|
metal5 mrdlcontact,mrdlc,pi1
|
|
metali metalrdl,mrdl,metrdl,rdl
|
|
-metali obsmrdl
|
|
metali pi2
|
|
block ubm
|
|
#endif (REDISTRIBUTION)
|
|
|
|
# Miscellaneous
|
|
-block glass
|
|
-block fillblock,fillblock4
|
|
comment comment
|
|
-comment obscomment
|
|
# fixed resistor width identifiers
|
|
-comment res0p35
|
|
-comment res0p69
|
|
-comment res1p41
|
|
-comment res2p85
|
|
-comment res5p73
|
|
# fixed bipolar area identifiers
|
|
-comment pnp0p68
|
|
-comment pnp3p40
|
|
-comment npn1p00
|
|
-comment npn2p00
|
|
-comment npn11p0
|
|
|
|
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
|
|
|
|
mcon locali metal1
|
|
obsmcon obsli metal1
|
|
|
|
via1 metal1 metal2
|
|
via2 metal2 metal3
|
|
#ifdef METAL5
|
|
via3 metal3 metal4
|
|
via4 metal4 metal5
|
|
#endif (METAL5)
|
|
stackable
|
|
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
# MiM cap contacts are not stackable!
|
|
mimcc mimcap metal4
|
|
mim2cc mimcap2 metal5
|
|
#endif (MIM)
|
|
|
|
padl m1 m2 m3 m4 m5 glass
|
|
#else
|
|
padl m1 m2 m3 glass
|
|
#endif (!METAL5)
|
|
|
|
#ifdef REDISTRIBUTION
|
|
mrdlc metal5 mrdl
|
|
pi2 mrdl ubm
|
|
#endif (REDISTRIBUTION)
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Layer aliases
|
|
#-----------------------------------------------------
|
|
|
|
aliases
|
|
|
|
allwellplane nwell
|
|
allnwell nwell,obswell,pnp
|
|
|
|
allnfets nfet,npass,npd,scnfet,mvnfet,mvnfetesd,mvnnfet,nnfet,nfetlvt,nsonos
|
|
allpfets pfet,ppu,scpfet,scpfethvt,mvpfet,mvpfetesd,pfethvt,pfetlvt,pfetmvt
|
|
allfets allnfets,allpfets,varactor,mvvaractor,varhvt,corenvar,corepvar
|
|
allfetsstd nfet,mvnfet,mvnfetesd,mvnnfet,nnfet,nfetlvt,pfet,mvpfet,mvpfetesd,pfethvt,pfetlvt,pfetmvt
|
|
allfetsspecial scnfet,scpfet,scpfethvt
|
|
allfetscore npass,npd,nsonos,ppu,corenvar,corepvar
|
|
allfetsnolvt nfet,npass,npd,scnfet,mvnfet,mvnfetesd,mvnnfet,nnfet,nsonos,pfet,ppu,scpfet,scpfethvt,mvpfet,mvpfetesd,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,mvnfetesd,mvnnfet,nnfet
|
|
allpdiffmv *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet,mvpfetesd
|
|
alldiffmv allndiffmv,allpdiffmv
|
|
allndiffmvnontap *mvndif,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnfetesd,mvnnfet,nnfet
|
|
allpdiffmvnontap *mvpdif,*mvpdiode,mvpdiffres,mvpfet,mvpfetesd
|
|
alldiffmvnontap allndiffmvnontap,allpdiffmvnontap
|
|
allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres
|
|
allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres
|
|
alldiffmvnonfet allndiffmvnonfet,allpdiffmvnonfet
|
|
|
|
alldiffnonfet alldifflvnonfet,alldiffmvnonfet
|
|
alldiff alldifflv,alldiffmv,fomfill
|
|
|
|
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
|
|
#ifdef RERAM
|
|
allm2 *m2,rm2,reram
|
|
#else (!RERAM)
|
|
allm2 *m2,rm2
|
|
#endif (!RERAM)
|
|
allm3 *m3,rm3
|
|
#ifdef METAL5
|
|
allm4 *m4,rm4
|
|
allm5 *m5,rm5
|
|
#endif (METAL5)
|
|
|
|
allpad padl
|
|
|
|
psub pwell
|
|
|
|
obstypes obswell,obsactive,obsli,obsmcon,obsm1,obsm2,obsm3,obsm4,obsm5,obsmrdl,obscomment
|
|
idtypes res0p35,res0p69,res1p41,res2p85,res5p73,pnp0p68,pnp3p40,npn1p00,npn2p00,npn11p0
|
|
blocktypes fillblock,fillblock4
|
|
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Layer drawing styles
|
|
#-----------------------------------------------------
|
|
|
|
styles
|
|
styletype mos
|
|
dnwell cwell
|
|
isosub subcircuit
|
|
nwell nwell
|
|
pwell pwell
|
|
rpwell pwell ptransistor_stripes
|
|
photo nwell nwell_field_implant
|
|
ndiff ndiffusion
|
|
fomfill 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
|
|
nnfet ntransistor ndiff_in_nwell
|
|
|
|
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
|
|
mvnfetesd ntransistor ntransistor_stripes hvndiff_mask
|
|
mvnnfet ntransistor ndiff_in_nwell hvndiff_mask
|
|
mvpfet ptransistor ptransistor_stripes
|
|
mvpfetesd 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
|
|
polyfill 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
|
|
pnp0p68 implant1
|
|
pnp3p40 implant1
|
|
npn1p00 implant1
|
|
npn2p00 implant1
|
|
npn11p0 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
|
|
lifill metal1
|
|
coreli metal1
|
|
rli metal1 poly_resist_stripes
|
|
mcon metal1 metal2 via1arrow
|
|
obsli metal1
|
|
obsmcon metal1 metal2 via1arrow
|
|
|
|
metal1 metal2
|
|
m1fill metal2
|
|
rm1 metal2 poly_resist_stripes
|
|
obsm1 metal2
|
|
m2c metal2 metal3 via2arrow
|
|
|
|
#ifdef RERAM
|
|
reram metal2 metal3 via2 contact_X'es
|
|
#endif (RERAM)
|
|
|
|
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
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
mimcap metal3 mems
|
|
mimcc metal3 contact_X'es mems
|
|
mimcap2 metal4 mems
|
|
mim2cc metal4 contact_X'es mems
|
|
#endif (MIM)
|
|
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
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
mrdlc metal6 metal7 via6
|
|
metalrdl metal7
|
|
obsmrdl metal7
|
|
ubm metal8
|
|
pi2 metal7 metal8 via7
|
|
#endif (REDISTRIBUTION)
|
|
|
|
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
|
|
fillblock4 cwell
|
|
|
|
obswell cwell
|
|
obsactive implant4
|
|
|
|
#ifndef METAL5
|
|
padl metal4 via4 overglass
|
|
#else
|
|
padl metal6 via6 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 var poly nsd
|
|
|
|
decompose npass poly ndiff
|
|
decompose npd poly ndiff
|
|
decompose scnfet poly ndiff
|
|
decompose nfetlvt poly ndiff
|
|
decompose nsonos poly ndiff
|
|
|
|
decompose ppu poly pdiff
|
|
decompose scpfet poly pdiff
|
|
decompose scpfethvt poly pdiff
|
|
decompose pfethvt poly pdiff
|
|
decompose pfetlvt poly pdiff
|
|
decompose pfetmvt poly pdiff
|
|
decompose corenvar poly nsd
|
|
decompose corepvar poly psd
|
|
decompose varhvt poly nsd
|
|
|
|
compose mvnfet poly mvndiff
|
|
compose mvpfet poly mvpdiff
|
|
compose mvvar poly mvnsd
|
|
|
|
decompose nnfet poly mvndiff
|
|
decompose mvnfetesd poly mvndiff
|
|
decompose mvnnfet poly mvndiff
|
|
decompose mvpfetesd poly mvpdiff
|
|
|
|
paint obsmcon locali via1
|
|
paint obsmcon 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 mvpdc coreli mvpdc
|
|
paint mvndc coreli mvndc
|
|
paint mvnsc coreli mvnsc
|
|
paint mvpsc coreli mvpsc
|
|
|
|
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 coreli mvpdc mvpdc
|
|
paint coreli mvndc mvndc
|
|
paint coreli mvnsc mvnsc
|
|
paint coreli mvpsc mvpsc
|
|
|
|
#ifdef RERAM
|
|
paint reram metal2 reram
|
|
#endif (RERAM)
|
|
|
|
#ifdef METAL5
|
|
paint m4 obsm4 m4
|
|
paint m5 obsm5 m5
|
|
#endif (METAL5)
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Electrical connectivity
|
|
#-----------------------------------------------------
|
|
|
|
connect
|
|
*nwell,*nsd,*mvnsd,dnwell,pnp,photo *nwell,*nsd,*mvnsd,dnwell,pnp,photo
|
|
pwell,*psd,*mvpsd,npn,isosub pwell,*psd,*mvpsd,npn,isosub
|
|
*li,coreli,lifill *li,coreli,lifill
|
|
*m1,m1fill,obsmcon *m1,m1fill,obsmcon
|
|
#ifdef RERAM
|
|
*m2,m2fill,reram *m2,m2fill,reram
|
|
#else (!RERAM)
|
|
*m2,m2fill *m2,m2fill
|
|
#endif (!RERAM)
|
|
*m3,m3fill *m3,m3fill
|
|
#ifdef METAL5
|
|
*m4,m4fill *m4,m4fill
|
|
*m5,m5fill *m5,m5fill
|
|
#ifdef MIM
|
|
*mimcap *mimcap
|
|
*mimcap2 *mimcap2
|
|
#endif (MIM)
|
|
#endif (METAL5)
|
|
allnactivenonfet allnactivenonfet
|
|
allpactivenonfet allpactivenonfet
|
|
*poly,xpc,allfets,polyfill *poly,xpc,allfets,polyfill
|
|
#ifdef REDISTRIBUTION
|
|
# RDL connects to m5 (i.e., padl) through glass cut
|
|
*mrdl *mrdl
|
|
glass metrdl
|
|
#endif (REDISTRIBUTION)
|
|
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
|
|
|
|
#----------------------------------------------------------------
|
|
# DNWELL
|
|
#----------------------------------------------------------------
|
|
|
|
layer DNWELL dnwell,npn,photo
|
|
calma 64 18
|
|
|
|
layer PWRES rpw
|
|
and dnwell
|
|
calma 64 13
|
|
|
|
#----------------------------------------------------------------
|
|
# SUBCUT
|
|
#----------------------------------------------------------------
|
|
|
|
layer SUBCUT isosub
|
|
calma 81 53
|
|
|
|
#----------------------------------------------------------------
|
|
# NWELL
|
|
#----------------------------------------------------------------
|
|
|
|
layer NWELL allnwell
|
|
bloat-all rpw dnwell
|
|
and-not rpw,pwell
|
|
calma 64 20
|
|
|
|
layer WELLTXT
|
|
labels allnwell noport
|
|
calma 64 5
|
|
|
|
layer WELLPIN
|
|
labels allnwell port
|
|
calma 64 16
|
|
|
|
#----------------------------------------------------------------
|
|
# SUB (text/port only)
|
|
#----------------------------------------------------------------
|
|
|
|
layer SUBTXT
|
|
labels pwell noport
|
|
calma 64 59
|
|
|
|
layer SUBPIN
|
|
labels pwell port
|
|
calma 122 16
|
|
|
|
#----------------------------------------------------------------
|
|
# DIFF
|
|
#----------------------------------------------------------------
|
|
|
|
layer DIFF allnactivenontap,allpactivenontap,allactiveres
|
|
calma 65 20
|
|
|
|
layer DIFFTXT
|
|
labels allnactivenontap,allpactivenontap noport
|
|
calma 65 6
|
|
|
|
layer DIFFPIN
|
|
labels allnactivenontap,allpactivenontap port
|
|
calma 65 16
|
|
|
|
#----------------------------------------------------------------
|
|
# TAP
|
|
#----------------------------------------------------------------
|
|
|
|
layer TAP allnactivetap,allpactivetap
|
|
labels allnactivetap,allpactivetap port
|
|
calma 65 44
|
|
|
|
layer TAPTXT
|
|
labels allnactivetap,allpactivetap noport
|
|
calma 65 5
|
|
|
|
#----------------------------------------------------------------
|
|
# FOM
|
|
#----------------------------------------------------------------
|
|
|
|
layer FOMFILL fomfill
|
|
labels fomfill
|
|
calma 23 28
|
|
|
|
#----------------------------------------------------------------
|
|
# PSDM, NSDM (PPLUS, NPLUS implants)
|
|
#----------------------------------------------------------------
|
|
|
|
templayer basePSDM pdiffres,mvpdiffres
|
|
grow 15
|
|
or xhrpoly,uhrpoly,xpc
|
|
grow 110
|
|
bloat-or allpactivetap * 125 allnactivenontap 0
|
|
bloat-or allpactivenontap * 125 allnactivetap 0
|
|
|
|
templayer baseNSDM ndiffres,mvndiffres
|
|
grow 125
|
|
bloat-or allnactivetap * 125 allpactivenontap 0
|
|
bloat-or allnactivenontap * 125 allpactivetap 0
|
|
|
|
templayer extendPSDM basePSDM
|
|
bridge 380 380
|
|
and-not baseNSDM
|
|
|
|
layer PSDM basePSDM,extendPSDM
|
|
grow 185
|
|
shrink 185
|
|
close 265000
|
|
mask-hints PSDM
|
|
calma 94 20
|
|
|
|
templayer extendNSDM baseNSDM
|
|
bridge 380 380
|
|
and-not basePSDM
|
|
|
|
layer NSDM baseNSDM,extendNSDM
|
|
grow 185
|
|
shrink 185
|
|
close 265000
|
|
mask-hints NSDM
|
|
calma 93 44
|
|
|
|
#----------------------------------------------------------------
|
|
# LVID
|
|
#----------------------------------------------------------------
|
|
|
|
layer LVID nnfet
|
|
grow 100
|
|
calma 81 60
|
|
|
|
#----------------------------------------------------------------
|
|
# LVTN
|
|
#----------------------------------------------------------------
|
|
|
|
layer LVTN pfetlvt,nfetlvt,mvvar,mvnnfet,nnfet,nsonos,*pdiodelvt,*ndiodelvt,*nndiode
|
|
grow 180
|
|
bridge 380 380
|
|
grow 185
|
|
shrink 185
|
|
close 265000
|
|
mask-hints LVTN
|
|
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
|
|
mask-hints HVTP
|
|
calma 78 44
|
|
|
|
#----------------------------------------------------------------
|
|
# SONOS
|
|
#----------------------------------------------------------------
|
|
|
|
layer SONOS nsonos
|
|
grow 100
|
|
grow-min 410
|
|
bridge 500 410
|
|
grow 250
|
|
shrink 250
|
|
calma 80 20
|
|
|
|
#----------------------------------------------------------------
|
|
# The coreli layer indicates a cell needing COREID. Also,
|
|
# devices npd, npass, and ppu indicate a COREID cell. NOTE:
|
|
# SONOS does not use COREID, counter to SkyWater rules.
|
|
#----------------------------------------------------------------
|
|
|
|
layer COREID
|
|
bloat-all coreli,ppu,npd,npass,corepvar,corenvar CELLBOUND
|
|
mask-hints COREID
|
|
calma 81 2
|
|
|
|
#----------------------------------------------------------------
|
|
# STDCELL applies to all cells containing scnfet or scpfet.
|
|
#----------------------------------------------------------------
|
|
|
|
layer STDCELL scnfet
|
|
bloat-all scpfet,scpfethvt,scnfet CELLBOUND
|
|
mask-hints STDCELL
|
|
calma 81 4
|
|
|
|
#----------------------------------------------------------------
|
|
# ESDID is a marker layer for ESD devices in the padframe I/O.
|
|
#----------------------------------------------------------------
|
|
|
|
layer ESDID
|
|
bloat-all mvnfetesd *mvndiff,*poly
|
|
bloat-all mvpfetesd *mvpdiff,*poly
|
|
grow 100
|
|
mask-hints ESDID
|
|
calma 81 19
|
|
|
|
#----------------------------------------------------------------
|
|
# NPNID and PNPID apply to bipolar transistors
|
|
#----------------------------------------------------------------
|
|
|
|
layer NPNID
|
|
bloat-all npn dnwell
|
|
mask-hints NPNID
|
|
calma 82 20
|
|
|
|
templayer pnparea pnp
|
|
grow 400
|
|
|
|
layer PNPID
|
|
bloat-all pnparea *psd
|
|
or pnparea
|
|
mask-hints PNPID
|
|
calma 82 44
|
|
|
|
layer PHOTO photo
|
|
calma 81 81
|
|
|
|
#----------------------------------------------------------------
|
|
# 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,mvnfetesd,mvnnfet,nnfet,*mvndiode,mvrdn,*nndiode *mvndiff
|
|
bloat-all mvvaractor *mvnsd
|
|
and-not hvntm_block
|
|
grow 185
|
|
grow 345
|
|
shrink 345
|
|
and-not hvntm_block
|
|
mask-hints HVNTM
|
|
calma 125 20
|
|
|
|
#----------------------------------------------------------------
|
|
# POLY
|
|
#----------------------------------------------------------------
|
|
|
|
layer POLY allpoly
|
|
calma 66 20
|
|
|
|
layer POLYTXT
|
|
labels allpoly noport
|
|
calma 66 5
|
|
|
|
layer POLYPIN
|
|
labels allpoly port
|
|
calma 66 16
|
|
|
|
layer POLYFILL polyfill
|
|
labels polyfill
|
|
calma 28 28
|
|
|
|
#----------------------------------------------------------------
|
|
# 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
|
|
|
|
layer HVI thkox_area,small_ptap_mv
|
|
bridge 700 600
|
|
grow 345
|
|
shrink 345
|
|
mask-hints HVI
|
|
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)
|
|
#----------------------------------------------------------------
|
|
|
|
# Avoids a common case of NPC bridges too close to other LICON shapes.
|
|
templayer diffcutarea pdc,ndc,psc,nsc,mvpdc,mvndc,mvpsc,mvnsc
|
|
grow 90
|
|
|
|
layer NPC pc
|
|
squares-grid 0 170 170
|
|
grow 100
|
|
bridge 270 270
|
|
and-not diffcutarea
|
|
bridge 270 270
|
|
grow 130
|
|
shrink 130
|
|
mask-hints NPC
|
|
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 5
|
|
|
|
layer LIPIN
|
|
labels *locali,coreli port
|
|
calma 67 16
|
|
|
|
layer LIRES rli
|
|
labels rli
|
|
calma 67 13
|
|
|
|
layer LIFILL lifill
|
|
labels lifill
|
|
calma 56 28
|
|
|
|
#----------------------------------------------------------------
|
|
# MCON
|
|
#----------------------------------------------------------------
|
|
layer MCON mcon
|
|
squares-grid 0 170 190
|
|
calma 67 44
|
|
|
|
#----------------------------------------------------------------
|
|
# MET1
|
|
#----------------------------------------------------------------
|
|
layer MET1 allm1
|
|
calma 68 20
|
|
|
|
layer MET1TXT
|
|
labels allm1 noport
|
|
calma 68 5
|
|
|
|
layer MET1PIN
|
|
labels allm1 port
|
|
calma 68 16
|
|
|
|
layer MET1RES rm1
|
|
labels rm1
|
|
calma 68 13
|
|
|
|
layer MET1FILL m1fill
|
|
labels m1fill
|
|
calma 36 28
|
|
|
|
#----------------------------------------------------------------
|
|
# VIA1
|
|
#----------------------------------------------------------------
|
|
layer VIA1 via1
|
|
squares-grid 55 150 170
|
|
calma 68 44
|
|
|
|
#ifdef RERAM
|
|
#undef RERAM
|
|
layer VIA1 reram
|
|
squares-grid 55 150 170
|
|
calma 68 44
|
|
|
|
layer RERAM reram
|
|
squares-grid 55 230 230
|
|
calma 201 20
|
|
#define RERAM
|
|
#endif (RERAM)
|
|
|
|
#----------------------------------------------------------------
|
|
# MET2
|
|
#----------------------------------------------------------------
|
|
layer MET2 allm2
|
|
calma 69 20
|
|
|
|
layer MET2TXT
|
|
labels allm2 noport
|
|
calma 69 5
|
|
|
|
layer MET2PIN
|
|
labels allm2 port
|
|
calma 69 16
|
|
|
|
layer MET2RES rm2
|
|
labels rm2
|
|
calma 69 13
|
|
|
|
layer MET2FILL m2fill
|
|
labels m2fill
|
|
calma 41 28
|
|
|
|
#----------------------------------------------------------------
|
|
# VIA2
|
|
#----------------------------------------------------------------
|
|
layer VIA2 via2
|
|
squares-grid 40 200 200
|
|
calma 69 44
|
|
|
|
#----------------------------------------------------------------
|
|
# MET3
|
|
#----------------------------------------------------------------
|
|
layer MET3 allm3
|
|
calma 70 20
|
|
|
|
layer MET3TXT
|
|
labels allm3 noport
|
|
calma 70 5
|
|
|
|
layer MET3PIN
|
|
labels allm3 port
|
|
calma 70 16
|
|
|
|
layer MET3RES rm3
|
|
labels rm3
|
|
calma 70 13
|
|
|
|
layer MET3FILL m3fill
|
|
labels m3fill
|
|
calma 34 28
|
|
|
|
#ifdef METAL5
|
|
#----------------------------------------------------------------
|
|
# VIA3
|
|
#----------------------------------------------------------------
|
|
layer VIA3 via3
|
|
#ifdef MIM
|
|
or mimcc
|
|
#endif (MIM)
|
|
squares-grid 60 200 200
|
|
calma 70 44
|
|
|
|
#----------------------------------------------------------------
|
|
# MET4
|
|
#----------------------------------------------------------------
|
|
layer MET4 allm4
|
|
calma 71 20
|
|
|
|
layer MET4TXT
|
|
labels allm4 noport
|
|
calma 71 5
|
|
|
|
layer MET4PIN
|
|
labels allm4 port
|
|
calma 71 16
|
|
|
|
layer MET4RES rm4
|
|
labels rm4
|
|
calma 71 13
|
|
|
|
layer MET4FILL m4fill
|
|
labels m4fill
|
|
calma 51 28
|
|
|
|
#----------------------------------------------------------------
|
|
# VIA4
|
|
#----------------------------------------------------------------
|
|
layer VIA4 via4
|
|
#ifdef MIM
|
|
or mim2cc
|
|
#endif (MIM)
|
|
squares-grid 190 800 800
|
|
calma 71 44
|
|
|
|
#----------------------------------------------------------------
|
|
# MET5
|
|
#----------------------------------------------------------------
|
|
layer MET5 allm5,m5fill
|
|
calma 72 20
|
|
|
|
layer MET5TXT
|
|
labels allm5 noport
|
|
calma 72 5
|
|
|
|
layer MET5PIN
|
|
labels allm5 port
|
|
calma 72 16
|
|
|
|
layer MET5RES rm5
|
|
labels rm5
|
|
calma 72 13
|
|
|
|
layer MET5FILL m5fill
|
|
labels m5fill
|
|
calma 59 28
|
|
|
|
#endif (METAL5)
|
|
|
|
#ifdef REDISTRIBUTION
|
|
#----------------------------------------------------------------
|
|
# RDL
|
|
#----------------------------------------------------------------
|
|
layer RDL *metrdl
|
|
calma 74 20
|
|
|
|
layer RDLTXT
|
|
labels *metrdl noport
|
|
calma 74 5
|
|
|
|
layer RDLPIN
|
|
labels *metrdl port
|
|
calma 74 16
|
|
|
|
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
|
|
|
|
#endif REDISTRIBUTION
|
|
|
|
#----------------------------------------------------------------
|
|
# GLASS
|
|
#----------------------------------------------------------------
|
|
layer GLASS glass
|
|
calma 76 20
|
|
|
|
#ifdef MIM
|
|
#----------------------------------------------------------------
|
|
# CAPM
|
|
#----------------------------------------------------------------
|
|
layer CAPM *mimcap
|
|
labels mimcap
|
|
calma 89 44
|
|
|
|
layer CAPM2 *mimcap2
|
|
labels mimcap2
|
|
calma 97 44
|
|
#endif (MIM)
|
|
|
|
#----------------------------------------------------------------
|
|
# 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 FILLOBSFOM obsactive
|
|
calma 22 24
|
|
|
|
layer FILLOBSM1 fillblock,fillblock4
|
|
calma 62 24
|
|
|
|
layer FILLOBSM2 fillblock,fillblock4
|
|
calma 105 52
|
|
|
|
layer FILLOBSM3 fillblock,fillblock4
|
|
calma 107 24
|
|
|
|
layer FILLOBSM4 fillblock,fillblock4
|
|
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
|
|
#ifdef METAL5
|
|
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
|
|
#ifdef REDISTRIBUTION
|
|
render RDL metal7 11.8834 4.0
|
|
#endif (!REDISTRIBUTION)
|
|
#endif (!METAL5)
|
|
|
|
#----------------------------------------------------------------
|
|
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
|
|
|
|
# Define areas where mim2cc is inside the boundary of mimcc
|
|
# by more than the contact surround
|
|
templayer mim2_contact_overlap
|
|
bloat-all *mimcap2 mimcc
|
|
shrink 60
|
|
and-not *mimcap2
|
|
|
|
# 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
|
|
# Note that HVI may *abut* lvnwell; this can only be handled
|
|
# with mask-hints layers.
|
|
|
|
templayer drawn_hvi
|
|
mask-hints HVI
|
|
|
|
templayer allmvdiffnowell *mvndiff,*mvpsd
|
|
and-not drawn_hvi
|
|
|
|
templayer nwell_or_hvi nwell,drawn_hvi
|
|
|
|
templayer lvnwell nwell
|
|
and-not mvnwell
|
|
|
|
# Check for low-voltage diffusion in high-voltage well
|
|
templayer lvdiff_in_mvnwell *pdiff,*pdiode,pdiffres,*nsd
|
|
or pfet,ppu,scpfet,scpfethvt,pfetlvt,pfetmvt,pfethvt
|
|
and 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 allpactivetap psd,mvpsd
|
|
bloat-all allnactivetap nsd,mvnsd
|
|
|
|
templayer tap_missing_licon allnactivetap,allpactivetap
|
|
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,mvnfetesd,mvnnfet,nnfet,*mvndiode,mvrdn,*nndiode *mvndiff
|
|
bloat-all mvvaractor *mvnsd
|
|
and-not hvntm_block
|
|
grow 185
|
|
grow 345
|
|
shrink 345
|
|
and-not hvntm_block
|
|
|
|
# RPM spacing checks require recreating RPM
|
|
templayer rpm_generate
|
|
bloat-all xhrpoly,uhrpoly xpc
|
|
grow 200
|
|
grow-min 1270
|
|
grow 420
|
|
shrink 420
|
|
|
|
# Check distance RPM to NSDM
|
|
templayer rpm_nsd_check rpm_generate
|
|
grow 325
|
|
and allndifflv,allndiffmv
|
|
|
|
# Check distance RPM to (unrelated) POLY
|
|
templayer rpm_poly_check rpm_generate
|
|
grow 200
|
|
and-not xhrpoly,uhrpoly,xpc
|
|
and allpoly
|
|
|
|
# Check distance RPM to HVNTM
|
|
templayer rpm_hvntm_check rpm_generate
|
|
grow 385
|
|
and allndiffmvnontap
|
|
|
|
templayer m1_small_hole allm1,obsm1,obsmcon
|
|
close 140000
|
|
|
|
templayer m1_hole_empty m1_small_hole
|
|
and-not allm1,obsm1,obsmcon
|
|
|
|
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
|
|
|
|
#ifdef EXPERIMENTAL
|
|
#----------------------------------------------------------------
|
|
style paint
|
|
#----------------------------------------------------------------
|
|
# NOTE: This style is used for database manipulations only via
|
|
# the "cif paint" command.
|
|
#----------------------------------------------------------------
|
|
|
|
scalefactor 10 nanometers
|
|
|
|
templayer m1grow *m1
|
|
grow 290
|
|
|
|
# layer listrap: Use the following set of commands to strap local
|
|
# interconnect wires with metal1 (inside the cursor box) to satisfy
|
|
# the maximum aspect ratio rule for local interconnect:
|
|
#
|
|
# tech unlock *
|
|
# cif ostyle paint
|
|
# cif paint m1strap comment
|
|
# cif paint m1strap m1
|
|
# cif paint listrap viali
|
|
# erase comment
|
|
|
|
templayer m1strap *li
|
|
and-not m1grow
|
|
grow 30
|
|
|
|
templayer listrap comment
|
|
slots 30 170 170 60
|
|
|
|
#endif (EXPERIMENTAL)
|
|
|
|
#----------------------------------------------------------------
|
|
style density
|
|
#----------------------------------------------------------------
|
|
# Style used by scripts to check for fill density
|
|
#----------------------------------------------------------------
|
|
scalefactor 10 nanometers
|
|
options calma-permissive-labels
|
|
gridlimit 5
|
|
|
|
templayer fom_all alldiff,fomfill
|
|
|
|
templayer poly_all allpoly,polyfill
|
|
|
|
templayer li_all allli,lifill
|
|
|
|
templayer m1_all allm1,m1fill
|
|
|
|
templayer m2_all allm2,m2fill
|
|
|
|
templayer m3_all allm3,m3fill
|
|
|
|
templayer m4_all allm4,m4fill
|
|
|
|
templayer m5_all allm5,m5fill
|
|
|
|
#----------------------------------------------------------------
|
|
style wafflefill variants (),(tiled)
|
|
#----------------------------------------------------------------
|
|
# 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.
|
|
#
|
|
# For variant ():
|
|
# The bounding box is the full extent of geometry on the top level
|
|
# cell.
|
|
#
|
|
# For variant (tiled):
|
|
# Use with a script that breaks layout into flattened tiles and runs
|
|
# fill individually on each. The tiles should be larger than the
|
|
# step size, and each should draw a layer "comment" the size of the
|
|
# step box.
|
|
#----------------------------------------------------------------
|
|
|
|
variants ()
|
|
templayer topbox
|
|
bbox top
|
|
|
|
variants (tiled)
|
|
templayer topbox comment
|
|
# Each tile imposes the full keepout distance rule of
|
|
# 3um on all sides.
|
|
shrink 1500
|
|
|
|
variants *
|
|
|
|
#----------------------------------------------------------------
|
|
# 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 allnwell
|
|
and-not mvnwell
|
|
|
|
templayer well_shrink mvnwell
|
|
shrink 250
|
|
or lvnwell
|
|
shrink 180
|
|
templayer well_guardband allnwell
|
|
grow 340
|
|
and-not well_shrink
|
|
|
|
#---------------------------------------------------
|
|
# Diffusion and poly keep-out areas
|
|
#---------------------------------------------------
|
|
templayer obstruct_fom alldiff,allpoly,fomfill,polyfill,obsactive
|
|
or rpw,pnp,npn
|
|
grow 500
|
|
or well_guardband
|
|
|
|
templayer obstruct_poly alldiff,allpoly,fomfill,polyfill,obsactive
|
|
or rpw,pnp,npn
|
|
grow 1000
|
|
|
|
#---------------------------------------------------
|
|
# FOM and POLY fill
|
|
#---------------------------------------------------
|
|
templayer fomfill_pass1 topbox
|
|
# slots 0 4080 1320 0 4080 1320 1360 0
|
|
slots 0 4080 1600 0 4080 1600 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
|
|
|
|
#---------------------------------------------------
|
|
layer FOMFILL fomfill_pass1
|
|
or fomfill_pass2
|
|
or fomfill_coarse
|
|
or fomfill_fine
|
|
calma 23 28
|
|
|
|
layer POLYFILL polyfill_pass1
|
|
or polyfill_coarse
|
|
or polyfill_medium
|
|
or polyfill_fine
|
|
calma 28 28
|
|
|
|
#---------------------------------------------------------
|
|
# LI fill
|
|
# Note requirement that LI fill may not overlap (non-fill)
|
|
# diff or poly.
|
|
#---------------------------------------------------------
|
|
|
|
templayer obstruct_li_coarse allli,allpad,obsli,lifill,fillblock,fillblock4
|
|
grow 2800
|
|
or alldiff,allpoly
|
|
grow 200
|
|
templayer lifill_coarse topbox
|
|
# slots 0 3000 650 0 3000 650 700 0
|
|
slots 0 3000 900 0 3000 900 700 0
|
|
and-not obstruct_li_coarse
|
|
and topbox
|
|
shrink 1495
|
|
grow 1495
|
|
|
|
templayer obstruct_li_medium allli,allpad,obsli,lifill,fillblock,fillblock4
|
|
grow 2500
|
|
or lifill_coarse
|
|
grow 300
|
|
or alldiff,allpoly
|
|
grow 200
|
|
templayer lifill_medium topbox
|
|
slots 0 1500 500 0 1500 500 700 0
|
|
and-not obstruct_li_medium
|
|
and topbox
|
|
shrink 745
|
|
grow 745
|
|
|
|
templayer obstruct_li_fine allli,allpad,obsli,lifill,fillblock,fillblock4
|
|
or lifill_coarse,lifill_medium
|
|
grow 300
|
|
or alldiff,allpoly
|
|
grow 200
|
|
templayer lifill_fine topbox
|
|
slots 0 580 500 0 580 500 700 0
|
|
and-not obstruct_li_fine
|
|
and topbox
|
|
shrink 285
|
|
grow 285
|
|
|
|
layer LIFILL lifill_coarse
|
|
or lifill_medium
|
|
or lifill_fine
|
|
calma 56 28
|
|
|
|
#---------------------------------------------------
|
|
# MET1 fill
|
|
#---------------------------------------------------
|
|
|
|
templayer obstruct_m1_coarse allm1,allpad,obsm1,m1fill,fillblock,fillblock4
|
|
grow 3000
|
|
templayer met1fill_coarse topbox
|
|
# slots 0 2000 200 0 2000 200 700 0
|
|
slots 0 2000 800 0 2000 800 700 350
|
|
and-not obstruct_m1_coarse
|
|
and topbox
|
|
shrink 995
|
|
grow 995
|
|
|
|
templayer obstruct_m1_medium allm1,allpad,obsm1,m1fill,fillblock,fillblock4
|
|
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,fillblock4
|
|
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,fillblock4
|
|
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 MET1FILL met1fill_coarse
|
|
or met1fill_medium
|
|
or met1fill_fine
|
|
or met1fill_veryfine
|
|
calma 36 28
|
|
|
|
#---------------------------------------------------
|
|
# MET2 fill
|
|
#---------------------------------------------------
|
|
templayer obstruct_m2 allm2,allpad,obsm2,m2fill,fillblock,fillblock4
|
|
grow 3000
|
|
templayer met2fill_coarse topbox
|
|
# slots 0 2000 200 0 2000 200 700 350
|
|
slots 0 2000 800 0 2000 800 700 350
|
|
and-not obstruct_m2
|
|
and topbox
|
|
shrink 995
|
|
grow 995
|
|
|
|
templayer obstruct_m2_medium allm2,allpad,obsm2,m2fill,fillblock,fillblock4
|
|
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,fillblock4
|
|
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,fillblock4
|
|
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 MET2FILL met2fill_coarse
|
|
or met2fill_medium
|
|
or met2fill_fine
|
|
or met2fill_veryfine
|
|
calma 41 28
|
|
|
|
#---------------------------------------------------
|
|
# MET3 fill
|
|
#---------------------------------------------------
|
|
templayer obstruct_m3 allm3,allpad,obsm3,m3fill,fillblock,fillblock4
|
|
grow 3000
|
|
templayer met3fill_coarse topbox
|
|
# slots 0 2000 300 0 2000 300 700 700
|
|
slots 0 2000 800 0 2000 800 700 350
|
|
and-not obstruct_m3
|
|
and topbox
|
|
shrink 995
|
|
grow 995
|
|
|
|
templayer obstruct_m3_medium allm3,allpad,obsm3,m3fill,fillblock,fillblock4
|
|
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,fillblock4
|
|
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,fillblock4
|
|
# 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 MET3FILL met3fill_coarse
|
|
or met3fill_medium
|
|
or met3fill_fine
|
|
or met3fill_veryfine
|
|
calma 34 28
|
|
|
|
#ifdef METAL5
|
|
#---------------------------------------------------
|
|
# MET4 fill
|
|
#---------------------------------------------------
|
|
templayer obstruct_m4 allm4,allpad,obsm4,m4fill,fillblock,fillblock4
|
|
grow 3000
|
|
templayer met4fill_coarse topbox
|
|
# slots 0 2000 300 0 2000 300 700 1050
|
|
slots 0 2000 800 0 2000 800 700 350
|
|
and-not obstruct_m4
|
|
and topbox
|
|
shrink 995
|
|
grow 995
|
|
|
|
templayer obstruct_m4_medium allm4,allpad,obsm4,m4fill,fillblock,fillblock4
|
|
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
|
|
and topbox
|
|
shrink 495
|
|
grow 495
|
|
|
|
templayer obstruct_m4_fine allm4,allpad,obsm4,m4fill,fillblock,fillblock4
|
|
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,fillblock4
|
|
# 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 MET4FILL met4fill_coarse
|
|
or met4fill_medium
|
|
or met4fill_fine
|
|
or met4fill_veryfine
|
|
calma 51 28
|
|
|
|
#---------------------------------------------------
|
|
# MET5 fill
|
|
#---------------------------------------------------
|
|
templayer obstruct_m5 allm5,allpad,obsm5,m5fill,fillblock
|
|
grow 3000
|
|
templayer met5fill_coarse topbox
|
|
slots 0 5000 1600 0 5000 1600 1000 100
|
|
and-not obstruct_m5
|
|
and topbox
|
|
shrink 2495
|
|
grow 2495
|
|
|
|
templayer obstruct_m5_medium allm5,allpad,obsm5,m5fill,fillblock
|
|
grow 1400
|
|
or met5fill_coarse
|
|
grow 1600
|
|
templayer met5fill_medium topbox
|
|
slots 0 3000 1600 0 3000 1600 1000 100
|
|
and-not obstruct_m5_medium
|
|
and topbox
|
|
shrink 1495
|
|
grow 1495
|
|
|
|
layer MET5FILL met5fill_coarse
|
|
or met5fill_medium
|
|
calma 59 28
|
|
#endif (METAL5)
|
|
|
|
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 variants (vendor),()
|
|
scalefactor 10 nanometers
|
|
gridlimit 5
|
|
|
|
options ignore-unknown-layer-labels no-reconnect-labels
|
|
|
|
#ifndef MIM
|
|
ignore CAPM
|
|
ignore CAPM2
|
|
#endif (!MIM)
|
|
#ifndef METAL5
|
|
ignore MET4,VIA3
|
|
ignore MET5,VIA4
|
|
#endif
|
|
ignore NPC
|
|
ignore SEALID
|
|
ignore CAPID
|
|
ignore LDNTM
|
|
ignore HVNTM
|
|
ignore POLYMOD
|
|
ignore LOWTAPDENSITY
|
|
ignore FILLOBSPOLY
|
|
ignore MET5BLOCK
|
|
ignore OUTLINE
|
|
ignore POLYCUT
|
|
ignore POLYGATE
|
|
ignore DIFFCUT
|
|
ignore HVNWELLID
|
|
ignore PADDIFFID
|
|
ignore PADMETALID
|
|
ignore PADCENTERID
|
|
|
|
layer pnp NWELL,WELLTXT,WELLPIN
|
|
and PNPID
|
|
labels NWELL
|
|
variants (vendor)
|
|
labels WELLTXT port
|
|
variants ()
|
|
labels WELLTXT text
|
|
variants *
|
|
labels WELLPIN port
|
|
|
|
layer nwell NWELL,WELLTXT,WELLPIN
|
|
and-not PNPID
|
|
labels NWELL
|
|
variants (vendor)
|
|
labels WELLTXT port
|
|
variants ()
|
|
labels WELLTXT text
|
|
variants *
|
|
labels WELLPIN port
|
|
|
|
templayer nwellarea NWELL
|
|
copyup nwelcheck
|
|
|
|
# Copy nwell areas up for diffusion checks
|
|
templayer xnwelcheck nwelcheck
|
|
copyup nwelcheck
|
|
|
|
templayer hvarea HVI
|
|
copyup hvcheck
|
|
|
|
# Copy high-voltage (HVI) areas up for diffusion checks
|
|
templayer xhvcheck hvcheck
|
|
copyup hvcheck
|
|
|
|
# Always draw pwell under p-tap and n-diff. This is not always
|
|
# necessary but works better with deep nwell for correct extraction.
|
|
layer pwell TAP,DIFF
|
|
and-not NWELL,nwelcheck
|
|
grow 130
|
|
or SUBTXT,SUBPIN
|
|
grow 420
|
|
shrink 420
|
|
variants (vendor)
|
|
labels SUBTXT port
|
|
variants ()
|
|
labels SUBTXT text
|
|
variants *
|
|
labels SUBPIN port
|
|
|
|
layer dnwell DNWELL
|
|
labels DNWELL
|
|
|
|
layer isosub SUBCUT
|
|
labels SUBCUT
|
|
|
|
layer npn DNWELL
|
|
and-not NWELL,nwelcheck
|
|
and NPNID
|
|
|
|
layer photo DNWELL
|
|
and PHOTO
|
|
|
|
layer rpw PWRES
|
|
and DNWELL
|
|
labels PWRES
|
|
|
|
templayer ndiffarea DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not POLY
|
|
and-not NWELL,nwelcheck
|
|
and-not PSDM
|
|
and-not DIODE
|
|
and-not DIFFRES
|
|
and-not HVI,hvcheck
|
|
and NSDM
|
|
and-not CORELI
|
|
copyup ndifcheck
|
|
labels DIFF
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer ndiff ndiffarea
|
|
|
|
# Copy ndiff areas up for contact checks
|
|
templayer xndifcheck ndifcheck
|
|
copyup ndifcheck
|
|
|
|
templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not POLY
|
|
and-not NWELL,nwelcheck
|
|
and-not PSDM
|
|
and-not DIODE
|
|
and-not DIFFRES
|
|
and HVI,hvcheck
|
|
and NSDM
|
|
copyup ndifcheck
|
|
labels DIFF
|
|
labels DIFFTXT text
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer mvndiff mvndiffarea
|
|
|
|
# Copy ndiff areas up for contact checks
|
|
templayer mvxndifcheck mvndifcheck
|
|
copyup mvndifcheck
|
|
|
|
layer ndiode DIFF,barediff
|
|
and NSDM
|
|
and DIODE
|
|
and-not NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
labels DIFF
|
|
|
|
layer ndiodelvt DIFF,barediff
|
|
and NSDM
|
|
and DIODE
|
|
and-not NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
labels DIFF
|
|
|
|
templayer ndiodearea DIODE
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
and-not NWELL,nwelcheck
|
|
copyup DIODE,NSDM
|
|
|
|
layer ndiffres DIFFRES
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
labels DIFF
|
|
|
|
templayer pdiffarea DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not POLY
|
|
and NWELL,nwelcheck
|
|
and-not NSDM
|
|
and-not DIODE
|
|
and-not HVI,hvcheck
|
|
and PSDM
|
|
copyup pdifcheck
|
|
labels DIFF
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer pdiff pdiffarea
|
|
|
|
layer mvndiode DIFF,barediff
|
|
and NSDM
|
|
and DIODE
|
|
and HVI,hvcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not LVTN
|
|
labels DIFF
|
|
|
|
layer nndiode DIFF,barediff
|
|
and NSDM
|
|
and DIODE
|
|
and HVI,hvcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and LVTN
|
|
labels DIFF
|
|
|
|
templayer mvndiodearea DIODE
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
and-not NWELL,nwelcheck
|
|
copyup DIODE,NSDM
|
|
|
|
layer mvndiffres DIFFRES
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
labels DIFF
|
|
|
|
templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not POLY
|
|
and NWELL,nwelcheck
|
|
and-not NSDM
|
|
and HVI,hvcheck
|
|
and-not DIODE
|
|
and-not DIFFRES
|
|
and PSDM
|
|
copyup mvpdifcheck
|
|
labels DIFF
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer mvpdiff mvpdiffarea
|
|
|
|
# Copy pdiff areas up for contact checks
|
|
templayer xpdifcheck pdifcheck
|
|
copyup pdifcheck
|
|
|
|
layer pdiode DIFF,barediff
|
|
and PSDM
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and-not HVTP
|
|
and DIODE
|
|
labels DIFF
|
|
|
|
layer pdiodelvt DIFF,barediff
|
|
and PSDM
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
and-not HVTP
|
|
and DIODE
|
|
labels DIFF
|
|
|
|
layer pdiodehvt DIFF,barediff
|
|
and PSDM
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and HVTP
|
|
and DIODE
|
|
labels DIFF
|
|
|
|
templayer pdiodearea DIODE
|
|
and PSDM
|
|
and-not HVI,hvcheck
|
|
copyup DIODE,PSDM
|
|
|
|
# Define pfet areas as known pdiff, regardless of the presence of a well.
|
|
|
|
templayer pfetarea DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
|
|
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
|
|
and-not COREID
|
|
labels DIFF
|
|
|
|
layer scpfethvt pfetarea
|
|
and-not LVTN
|
|
and HVTP
|
|
and STDCELL
|
|
labels DIFF
|
|
|
|
layer ppu pfetarea
|
|
and-not LVTN
|
|
and HVTP
|
|
and COREID
|
|
# Shrink-grow operation eliminates the smaller parasitie device
|
|
# shrink 70
|
|
# grow 70
|
|
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
|
|
and-not COREID
|
|
grow 180
|
|
|
|
# Copy mvpdiff areas up for contact checks
|
|
templayer mvxpdifcheck mvpdifcheck
|
|
copyup mvpdifcheck
|
|
|
|
layer mvpdiode DIFF,barediff
|
|
and PSDM
|
|
and-not POLY
|
|
and-not NSDM
|
|
and HVI,hvcheck
|
|
and DIODE
|
|
labels DIFF
|
|
|
|
templayer mvpdiodearea DIODE
|
|
and PSDM
|
|
and HVI,hvcheck
|
|
copyup DIODE,PSDM
|
|
|
|
# Define pfet areas as known pdiff,
|
|
# regardless of the presence of a
|
|
# well.
|
|
|
|
templayer mvpfetarea DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not NSDM
|
|
and HVI,hvcheck
|
|
|
|
layer mvpfet mvpfetarea
|
|
and-not ESDID
|
|
labels DIFF
|
|
|
|
layer mvpfetesd mvpfetarea
|
|
and ESDID
|
|
labels DIFF
|
|
|
|
layer pdiff DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not NSDM
|
|
and-not POLY
|
|
and-not HVI,hvcheck
|
|
and-not DIODE
|
|
and-not DIFFRES
|
|
labels DIFF
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer pdiffres DIFFRES
|
|
and PSDM
|
|
and NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
labels DIFF
|
|
|
|
layer nfet DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and-not SONOS
|
|
and-not STDCELL
|
|
and-not COREID
|
|
labels DIFF
|
|
|
|
layer scnfet DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and-not SONOS
|
|
and STDCELL
|
|
labels DIFF
|
|
|
|
layer npass DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and COREID
|
|
labels DIFF
|
|
|
|
layer npd DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and COREID
|
|
# Shrink-grow operation eliminates the smaller npass device
|
|
shrink 70
|
|
grow 70
|
|
labels DIFF
|
|
|
|
# Devices abutting tap under gate are officially npd, not npass
|
|
layer npd TAP
|
|
grow 100
|
|
and DIFF
|
|
and POLY
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and COREID
|
|
labels DIFF
|
|
|
|
layer nfetlvt DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
and-not SONOS
|
|
labels DIFF
|
|
|
|
layer nsonos DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
and SONOS
|
|
labels DIFF
|
|
|
|
templayer nsdarea TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not HVI,hvcheck
|
|
and-not CORELI
|
|
copyup nsubcheck
|
|
|
|
layer nsd nsdarea
|
|
labels TAP
|
|
|
|
layer nsd TAP,TAPTXT
|
|
and NSDM
|
|
and-not POLY
|
|
and-not HVI,hvcheck
|
|
labels TAP
|
|
labels TAPTXT text
|
|
|
|
layer corenvar TAP
|
|
and NSDM
|
|
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 PSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and-not pfetexpand
|
|
copyup psubcheck
|
|
|
|
layer psd psdarea
|
|
labels TAP
|
|
|
|
layer psd TAP
|
|
and PSDM
|
|
and-not POLY
|
|
and-not HVI,hvcheck
|
|
labels TAP
|
|
labels TAPTXT text
|
|
|
|
layer corepvar TAP
|
|
and PSDM
|
|
and POLY
|
|
and COREID
|
|
labels TAP
|
|
|
|
templayer psdexpand psdarea
|
|
grow 500
|
|
|
|
layer mvpdiff DIFF,DIFFTXT,DIFFPIN,barediff
|
|
and-not NSDM
|
|
and-not POLY
|
|
and HVI,hvcheck
|
|
and mvpfetexpand
|
|
labels DIFF
|
|
variants (vendor)
|
|
labels DIFFTXT port
|
|
variants ()
|
|
labels DIFFTXT text
|
|
variants *
|
|
labels DIFFPIN port
|
|
|
|
layer mvpdiffres DIFFRES
|
|
and PSDM
|
|
and NWELL,nwelcheck
|
|
and HVI,hvcheck
|
|
and-not mvrdpioedge
|
|
labels DIFF
|
|
|
|
templayer mvnfetarea DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and-not LVTN
|
|
and HVI,hvcheck
|
|
grow 350
|
|
|
|
templayer mvnnfetarea DIFF,TAP,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and LVTN
|
|
and HVI,hvcheck
|
|
and-not mvnfetarea
|
|
|
|
layer mvnfetesd DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
and ESDID
|
|
and-not mvnnfetarea
|
|
labels DIFF
|
|
|
|
layer mvnfet DIFF,barediff
|
|
and POLY
|
|
or baretrans
|
|
and-not PSDM
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
and-not ESDID
|
|
and-not mvnnfetarea
|
|
labels DIFF
|
|
|
|
layer nnfet mvnnfetarea
|
|
and LVID
|
|
labels DIFF
|
|
|
|
layer mvnnfet mvnnfetarea
|
|
and-not LVID
|
|
labels DIFF
|
|
|
|
templayer mvnsdarea TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not PSDM
|
|
and HVI,hvcheck
|
|
copyup mvnsubcheck
|
|
|
|
layer mvnsd mvnsdarea
|
|
labels TAP
|
|
|
|
layer mvnsd TAP,TAPTXT
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
labels TAP
|
|
labels TAPTXT text
|
|
|
|
templayer mvnsdexpand mvnsdarea
|
|
grow 500
|
|
|
|
# Copy nsub areas up for contact checks
|
|
templayer mvxnsubcheck mvnsubcheck
|
|
copyup mvnsubcheck
|
|
|
|
templayer mvpsdarea DIFF,barediff
|
|
and PSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not POLY
|
|
and-not NSDM
|
|
and HVI,hvcheck
|
|
and-not mvpfetexpand
|
|
copyup mvpsubcheck
|
|
|
|
layer mvpsd mvpsdarea
|
|
labels DIFF
|
|
|
|
layer mvpsd TAP,TAPTXT
|
|
and PSDM
|
|
and HVI,hvcheck
|
|
labels TAP
|
|
labels TAPTXT text
|
|
|
|
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 PSDM
|
|
and-not NSDM
|
|
and-not POLY
|
|
and-not HVI,hvcheck
|
|
and-not pfetexpand
|
|
and psdexpand
|
|
|
|
layer nsd TAP
|
|
and-not PSDM
|
|
and-not NSDM
|
|
and-not POLY
|
|
and-not HVI,hvcheck
|
|
and nsdexpand
|
|
|
|
layer mvpsd TAP
|
|
and-not PSDM
|
|
and-not NSDM
|
|
and-not POLY
|
|
and HVI,hvcheck
|
|
and-not mvpfetexpand
|
|
and mvpsdexpand
|
|
|
|
layer mvnsd TAP
|
|
and-not PSDM
|
|
and-not NSDM
|
|
and-not POLY
|
|
and HVI,hvcheck
|
|
and mvnsdexpand
|
|
|
|
templayer hresarea POLY
|
|
and RPM
|
|
grow 3000
|
|
|
|
templayer uresarea POLY
|
|
and URPM
|
|
grow 3000
|
|
|
|
templayer diffresarea DIFFRES
|
|
and-not HVI,hvcheck
|
|
grow 3000
|
|
|
|
templayer mvdiffresarea DIFFRES
|
|
and HVI,hvcheck
|
|
grow 3000
|
|
|
|
templayer resarea diffresarea,mvdiffresarea,hresarea,uresarea
|
|
|
|
layer pfet POLY
|
|
and DIFF
|
|
and diffresarea
|
|
and-not NSDM
|
|
and-not STDCELL
|
|
|
|
layer scpfet POLY
|
|
and DIFF
|
|
and diffresarea
|
|
and-not HVTP
|
|
and-not NSDM
|
|
and STDCELL
|
|
|
|
layer scpfethvt POLY
|
|
and DIFF
|
|
and diffresarea
|
|
and HVTP
|
|
and-not NSDM
|
|
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,POLYTXT,POLYPIN
|
|
and-not POLYRES
|
|
and-not POLYSHORT
|
|
and-not DIFF
|
|
and-not TAP
|
|
and-not RPM
|
|
and-not URPM
|
|
copyup polycheck
|
|
|
|
layer poly polyarea
|
|
labels POLY
|
|
variants (vendor)
|
|
labels POLYTXT port
|
|
variants ()
|
|
labels POLYTXT text
|
|
variants *
|
|
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 PSDM
|
|
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
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
|
|
layer ndc ndcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or ndcbase
|
|
labels CONT
|
|
|
|
templayer nscbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF,TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
|
|
layer nsc nscbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or nscbase
|
|
labels CONT
|
|
|
|
templayer pdcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
|
|
layer pdc pdcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdcbase
|
|
labels CONT
|
|
|
|
templayer pdcnowell CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and pfetexpand
|
|
and-not HVI,hvcheck
|
|
|
|
layer pdc pdcnowell
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdcnowell
|
|
labels CONT
|
|
|
|
templayer pscbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF,TAP
|
|
and PSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not pfetexpand
|
|
and-not HVI,hvcheck
|
|
|
|
layer psc pscbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pscbase
|
|
labels CONT
|
|
|
|
templayer pcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and POLY
|
|
and-not DIFF
|
|
and-not RPM,URPM
|
|
|
|
layer pc pcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pcbase
|
|
labels CONT
|
|
|
|
templayer ndicbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
|
|
layer ndic ndicbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or ndicbase
|
|
labels CONT
|
|
|
|
templayer ndilvtcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
|
|
layer ndilvtc ndilvtcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or ndilvtcbase
|
|
labels CONT
|
|
|
|
templayer pdicbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and-not HVTP
|
|
|
|
layer pdic pdicbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdicbase
|
|
labels CONT
|
|
|
|
templayer pdilvtcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and LVTN
|
|
and-not HVTP
|
|
|
|
layer pdilvtc pdilvtcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdilvtcbase
|
|
labels CONT
|
|
|
|
templayer pdihvtcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not NSDM
|
|
and-not HVI,hvcheck
|
|
and-not LVTN
|
|
and HVTP
|
|
|
|
layer pdihvtc pdihvtcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdihvtcbase
|
|
labels CONT
|
|
|
|
templayer mvndcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and-not NWELL,nwelcheck
|
|
and HVI,hvcheck
|
|
|
|
layer mvndc mvndcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvndcbase
|
|
labels CONT
|
|
|
|
templayer mvnscbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF,TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and HVI,hvcheck
|
|
|
|
layer mvnsc mvnscbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvnscbase
|
|
labels CONT
|
|
|
|
templayer mvpdcbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and NWELL,nwelcheck
|
|
and HVI,hvcheck
|
|
|
|
layer mvpdc mvpdcbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvpdcbase
|
|
labels CONT
|
|
|
|
templayer mvpdcnowell CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and mvpfetexpand
|
|
and MET1
|
|
and HVI,hvcheck
|
|
|
|
layer mvpdc mvpdcnowell
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvpdcnowell
|
|
labels CONT
|
|
|
|
templayer mvpscbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF,TAP
|
|
and PSDM
|
|
and-not NWELL,nwelcheck
|
|
and-not mvpfetexpand
|
|
and HVI,hvcheck
|
|
|
|
layer mvpsc mvpscbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvpscbase
|
|
labels CONT
|
|
|
|
templayer mvndicbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not PSDM
|
|
and-not LVTN
|
|
and HVI,hvcheck
|
|
|
|
layer mvndic mvndicbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvndicbase
|
|
labels CONT
|
|
|
|
templayer nndicbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and NSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not PSDM
|
|
and LVTN
|
|
and HVI,hvcheck
|
|
|
|
layer nndic nndicbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or nndicbase
|
|
labels CONT
|
|
|
|
templayer mvpdicbase CONT
|
|
or barecont
|
|
and LI
|
|
or barelicont
|
|
and DIFF
|
|
and PSDM
|
|
and DIODE
|
|
and-not POLY
|
|
and-not NSDM
|
|
and HVI,hvcheck
|
|
|
|
layer mvpdic mvpdicbase
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvpdicbase
|
|
labels CONT
|
|
|
|
layer fomfill FOMFILL
|
|
labels FOMFILL
|
|
|
|
layer polyfill POLYFILL
|
|
labels POLYFILL
|
|
|
|
layer coreli LI,LITXT,LIPIN
|
|
and-not LIRES,LISHORT
|
|
and COREID
|
|
labels LI
|
|
variants (vendor)
|
|
labels LITXT port
|
|
variants ()
|
|
labels LITXT text
|
|
variants *
|
|
labels LIPIN port
|
|
|
|
layer locali LI,LITXT,LIPIN
|
|
and-not LIRES,LISHORT
|
|
and-not COREID
|
|
labels LI
|
|
variants (vendor)
|
|
labels LITXT port
|
|
variants ()
|
|
labels LITXT text
|
|
variants *
|
|
labels LIPIN port
|
|
|
|
layer rli LI
|
|
and LIRES,LISHORT
|
|
labels LIRES,LISHORT
|
|
|
|
layer lifill LIFILL
|
|
labels LIFILL
|
|
|
|
layer mcon MCON
|
|
grow 95
|
|
shrink 95
|
|
shrink 85
|
|
grow 85
|
|
or MCON
|
|
labels MCON
|
|
|
|
layer m1 MET1,MET1TXT,MET1PIN
|
|
and-not MET1RES,MET1SHORT
|
|
labels MET1
|
|
variants (vendor)
|
|
labels MET1TXT port
|
|
variants ()
|
|
labels MET1TXT text
|
|
variants *
|
|
labels MET1PIN port
|
|
|
|
layer rm1 MET1
|
|
and MET1RES,MET1SHORT
|
|
labels MET1RES,MET1SHORT
|
|
|
|
layer m1fill MET1FILL
|
|
labels MET1FILL
|
|
|
|
#ifdef MIM
|
|
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
|
|
|
|
#endif (MIM)
|
|
|
|
#ifdef RERAM
|
|
#undef RERAM
|
|
layer reram RERAM
|
|
and VIA1
|
|
grow 55
|
|
#define RERAM
|
|
#endif (RERAM)
|
|
|
|
templayer m2cbase VIA1
|
|
and-not COREID
|
|
grow 5
|
|
or VIA1
|
|
grow 50
|
|
#ifdef RERAM
|
|
#undef RERAM
|
|
and-not RERAM
|
|
#define RERAM
|
|
#endif (RERAM)
|
|
|
|
layer m2c m2cbase
|
|
grow 30
|
|
shrink 30
|
|
shrink 130
|
|
grow 130
|
|
or m2cbase
|
|
|
|
layer m2 MET2,MET2TXT,MET2PIN
|
|
and-not MET2RES,MET2SHORT
|
|
labels MET2
|
|
variants (vendor)
|
|
labels MET2TXT port
|
|
variants ()
|
|
labels MET2TXT text
|
|
variants *
|
|
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
|
|
labels MET3
|
|
variants (vendor)
|
|
labels MET3TXT port
|
|
variants ()
|
|
labels MET3TXT text
|
|
variants *
|
|
labels MET3PIN port
|
|
|
|
layer rm3 MET3
|
|
and MET3RES,MET3SHORT
|
|
labels MET3RES,MET3SHORT
|
|
|
|
layer m3fill MET3FILL
|
|
labels MET3FILL
|
|
|
|
#ifdef (METAL5)
|
|
|
|
templayer via3base VIA3
|
|
#ifdef MIM
|
|
and-not CAPM
|
|
#endif (MIM)
|
|
grow 60
|
|
|
|
layer via3 via3base
|
|
grow 40
|
|
shrink 40
|
|
shrink 160
|
|
grow 160
|
|
or via3base
|
|
|
|
layer m4 MET4,MET4TXT,MET4PIN
|
|
and-not MET4RES,MET4SHORT
|
|
labels MET4
|
|
variants (vendor)
|
|
labels MET4TXT port
|
|
variants ()
|
|
labels MET4TXT text
|
|
variants *
|
|
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
|
|
variants (vendor)
|
|
labels MET5TXT port
|
|
variants ()
|
|
labels MET5TXT text
|
|
variants *
|
|
labels MET5PIN port
|
|
|
|
layer rm5 MET5
|
|
and MET5RES,MET5SHORT
|
|
labels MET5RES,MET5SHORT
|
|
|
|
layer m5fill MET5FILL
|
|
labels MET5FILL
|
|
|
|
templayer via4base VIA4
|
|
#ifdef MIM
|
|
and-not CAPM2
|
|
#endif (MIM)
|
|
grow 190
|
|
|
|
layer via4 via4base
|
|
grow 210
|
|
shrink 210
|
|
shrink 590
|
|
grow 590
|
|
or via4base
|
|
#endif (METAL5)
|
|
|
|
#ifdef REDISTRIBUTION
|
|
layer metrdl RDL,RDLTXT,RDLPIN
|
|
labels RDL
|
|
variants (vendor)
|
|
labels RDLTXT port
|
|
variants ()
|
|
labels RDLTXT text
|
|
variants *
|
|
labels RDLPIN port
|
|
#endif
|
|
|
|
# Find diffusion not covered in
|
|
# NSDM or PSDM and pull it into
|
|
# the next layer up
|
|
|
|
templayer gentrans DIFF
|
|
and-not PSDM
|
|
and-not NSDM
|
|
and POLY
|
|
copyup baretrans
|
|
|
|
templayer gendiff DIFF,TAP
|
|
and-not PSDM
|
|
and-not NSDM
|
|
and-not POLY
|
|
and-not COREID
|
|
copyup barediff
|
|
|
|
# Handle contacts found by copyup
|
|
|
|
templayer ndiccopy CONT
|
|
and LI
|
|
and DIODE
|
|
and NSDM
|
|
and-not HVI,hvcheck
|
|
|
|
layer ndic ndiccopy
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or ndiccopy
|
|
labels CONT
|
|
|
|
templayer mvndiccopy CONT
|
|
and LI
|
|
and DIODE
|
|
and NSDM
|
|
and HVI,hvcheck
|
|
|
|
layer mvndic mvndiccopy
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or mvndiccopy
|
|
labels CONT
|
|
|
|
templayer pdiccopy CONT
|
|
and LI
|
|
and DIODE
|
|
and PSDM
|
|
and-not HVI,hvcheck
|
|
|
|
layer pdic pdiccopy
|
|
grow 85
|
|
shrink 85
|
|
shrink 85
|
|
grow 85
|
|
or pdiccopy
|
|
labels CONT
|
|
|
|
templayer mvpdiccopy CONT
|
|
and LI
|
|
and DIODE
|
|
and PSDM
|
|
and HVI,hvcheck
|
|
|
|
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 barelicont 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
|
|
and-not CORELI
|
|
copyup barelicont
|
|
|
|
templayer barecont CONT
|
|
and-not LI
|
|
and-not nsubcheck
|
|
and-not psubcheck
|
|
and-not mvnsubcheck
|
|
and-not mvpsubcheck
|
|
and-not CORELI
|
|
copyup barecont
|
|
|
|
layer glass GLASS,PADTXT,PADPIN
|
|
labels GLASS
|
|
variants (vendor)
|
|
labels PADTXT port
|
|
variants ()
|
|
labels PADTXT text
|
|
variants *
|
|
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
|
|
|
|
layer obsactive FILLOBSFOM
|
|
|
|
# MOS Varactor
|
|
|
|
layer var POLY
|
|
and TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
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 NSDM
|
|
and NWELL,nwelcheck
|
|
and-not HVI,hvcheck
|
|
and HVTP
|
|
labels POLY
|
|
|
|
layer mvvar POLY
|
|
and TAP
|
|
and NSDM
|
|
and NWELL,nwelcheck
|
|
and HVI,hvcheck
|
|
labels POLY
|
|
|
|
calma NWELL 64 20
|
|
calma DIFF 65 20
|
|
calma DNWELL 64 18
|
|
calma SUBCUT 81 53
|
|
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
|
|
# NSDM (NPLUS)
|
|
calma NSDM 93 44
|
|
# PSDM (PPLUS)
|
|
calma PSDM 94 20
|
|
# HVI (THKOX)
|
|
calma HVI 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
|
|
# 3.3V native FET ID mark
|
|
calma LVID 81 60
|
|
# 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
|
|
# Photodiode ID mark
|
|
calma PHOTO 81 81
|
|
# 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
|
|
# ESD area ID
|
|
calma ESDID 81 19
|
|
# Various unused layers
|
|
calma OUTLINE 236 0
|
|
calma POLYCUT 66 14
|
|
calma POLYGATE 66 9
|
|
calma DIFFCUT 65 14
|
|
calma HVNWELLID 81 63
|
|
calma MET5BLOCK 72 10
|
|
calma PADDIFFID 81 6
|
|
calma PADMETALID 81 8
|
|
calma PADCENTERID 81 20
|
|
|
|
# LICON
|
|
calma CONT 66 44
|
|
calma LI 67 20
|
|
calma MCON 67 44
|
|
|
|
calma MET1 68 20
|
|
calma VIA1 68 44
|
|
#ifdef RERAM
|
|
#undef RERAM
|
|
calma RERAM 201 20
|
|
#define RERAM
|
|
#endif (RERAM)
|
|
calma MET2 69 20
|
|
calma VIA2 69 44
|
|
calma MET3 70 20
|
|
#ifdef METAL5
|
|
calma VIA3 70 44
|
|
calma MET4 71 20
|
|
calma VIA4 71 44
|
|
calma MET5 72 20
|
|
#endif
|
|
#ifdef REDISTRIBUTION
|
|
calma RDL 74 20
|
|
#endif
|
|
calma GLASS 76 20
|
|
|
|
calma SUBTXT 64 59
|
|
calma PADTXT 76 5
|
|
calma DIFFTXT 65 6
|
|
calma TAPTXT 65 5
|
|
calma WELLTXT 64 5
|
|
calma LITXT 67 5
|
|
calma POLYTXT 66 5
|
|
calma MET1TXT 68 5
|
|
calma MET2TXT 69 5
|
|
calma MET3TXT 70 5
|
|
#ifdef METAL5
|
|
calma MET4TXT 71 5
|
|
calma MET5TXT 72 5
|
|
#endif
|
|
#ifdef REDISTRIBUTION
|
|
calma RDLTXT 74 5
|
|
#endif
|
|
|
|
calma LIRES 67 13
|
|
calma MET1RES 68 13
|
|
calma MET2RES 69 13
|
|
calma MET3RES 70 13
|
|
#ifdef METAL5
|
|
calma MET4RES 71 13
|
|
calma MET5RES 72 13
|
|
#endif
|
|
|
|
calma LIFILL 56 28
|
|
calma MET1FILL 36 28
|
|
calma MET2FILL 41 28
|
|
calma MET3FILL 34 28
|
|
#ifdef METAL5
|
|
calma MET4FILL 51 28
|
|
calma MET5FILL 59 28
|
|
#endif
|
|
|
|
calma POLYSHORT 66 15
|
|
calma LISHORT 67 15
|
|
calma MET1SHORT 68 15
|
|
calma MET2SHORT 69 15
|
|
calma MET3SHORT 70 15
|
|
#ifdef METAL5
|
|
calma MET4SHORT 71 15
|
|
calma MET5SHORT 72 15
|
|
#endif
|
|
|
|
calma SUBPIN 122 16
|
|
calma PADPIN 76 16
|
|
calma DIFFPIN 65 16
|
|
calma POLYPIN 66 16
|
|
calma WELLPIN 64 16
|
|
calma LIPIN 67 16
|
|
calma MET1PIN 68 16
|
|
calma MET2PIN 69 16
|
|
calma MET3PIN 70 16
|
|
#ifdef METAL5
|
|
calma MET4PIN 71 16
|
|
calma MET5PIN 72 16
|
|
#endif
|
|
#ifdef REDISTRIBUTION
|
|
calma RDLPIN 74 16
|
|
#endif
|
|
|
|
calma BOUND 235 4
|
|
|
|
calma LVSTEXT 83 44
|
|
|
|
#ifdef (MIM)
|
|
calma CAPM 89 44
|
|
calma CAPM2 97 44
|
|
#endif (MIM)
|
|
|
|
calma FILLOBSM1 62 24
|
|
calma FILLOBSM2 105 52
|
|
calma FILLOBSM3 107 24
|
|
calma FILLOBSM4 112 4
|
|
calma FILLOBSFOM 22 24
|
|
calma FILLOBSPOLY 33 24
|
|
|
|
calma FOMFILL 23 28
|
|
calma POLYFILL 28 28
|
|
calma LIFILL 56 28
|
|
calma MET1FILL 36 28
|
|
calma MET2FILL 41 28
|
|
calma MET3FILL 34 28
|
|
calma MET4FILL 51 28
|
|
calma MET5FILL 59 28
|
|
|
|
#-----------------------------------------------------------------------
|
|
|
|
style rdlimport
|
|
# This style is for reading shapes generated with the RDL layers
|
|
|
|
scalefactor 10 nanometers
|
|
gridlimit 5
|
|
|
|
options ignore-unknown-layer-labels no-reconnect-labels
|
|
|
|
layer mrdl RDL
|
|
layer mrdlc RDLC
|
|
|
|
calma RDL 10 0
|
|
calma RDLC 20 0
|
|
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Digital flow maze router cost parameters
|
|
#-----------------------------------------------------
|
|
|
|
mzrouter
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Vendor DRC rules
|
|
#-----------------------------------------------------
|
|
|
|
drc
|
|
|
|
style drc variants (fast),(full),(routing)
|
|
scalefactor 10
|
|
cifstyle drc
|
|
|
|
variants (fast),(full)
|
|
|
|
#-----------------------------
|
|
# DNWELL
|
|
#-----------------------------
|
|
|
|
width dnwell 3000 "Deep N-well width < %d (dnwell.2)"
|
|
spacing dnwell dnwell 6300 touching_ok "Deep N-well spacing < %d (dnwell.3)"
|
|
spacing allnwell dnwell 4500 surround_ok \
|
|
"Deep N-well spacing to N-well < %d (nwell.7)"
|
|
|
|
variants (full)
|
|
cifmaxwidth nwell_missing 0 bend_illegal \
|
|
"N-well overlap of Deep N-well < 0.4um outside, 1.03um inside (nwell.5a, 7)"
|
|
cifmaxwidth dnwell_missing 0 bend_illegal \
|
|
"SONOS nFET must be in Deep N-well (tunm.6a)"
|
|
|
|
cifmaxwidth pdiff_crosses_dnwell 0 bend_illegal \
|
|
"P+ diff cannot straddle Deep N-well (dnwell.5)"
|
|
variants (fast),(full)
|
|
|
|
width photo 3000 "Photodiode width < %d (photo.2)"
|
|
spacing photo photo 5000 touching_ok "Photodiode spacing < %d (photo.3)"
|
|
spacing photo dnwell 5300 touching_illegal \
|
|
"Photodiode spacing to deep nwell < %d (photo.4)"
|
|
|
|
#-----------------------------
|
|
# NWELL
|
|
#-----------------------------
|
|
|
|
width allnwell 840 "N-well width < %d (nwell.1)"
|
|
spacing allnwell allnwell 1270 touching_ok "N-well spacing < %d (nwell.2a)"
|
|
|
|
variants (full)
|
|
cifmaxwidth nwell_missing_tap 0 bend_illegal \
|
|
"All nwells must contain metal-connected N+ taps (nwell.4)"
|
|
|
|
cifspacing mvnwell lvnwell 2000 touching_illegal \
|
|
"Spacing of HV nwell to LV nwell < 2.0um (nwell.8)"
|
|
cifspacing mvnwell mvnwell 2000 touching_ok \
|
|
"Spacing of HV nwell to HV nwell < 2.0um (nwell.8)"
|
|
|
|
cifmaxwidth lvdiff_in_mvnwell 0 bend_illegal \
|
|
"All HV nwell can contain only HV diffusion (diff/tap.21)"
|
|
|
|
variants (fast),(full)
|
|
|
|
#-----------------------------
|
|
# DIFF
|
|
#-----------------------------
|
|
|
|
width *ndiff,nfet,scnfet,npd,npass,*nsd,*ndiode,ndiffres,*pdiff,pfet,scpfet,scpfethvt,ppu,*psd,*pdiode,pdiffres,fomfill \
|
|
150 "Diffusion width < %d (diff/tap.1)"
|
|
width *mvndiff,mvnfet,mvnfetesd,mvnnfet,nnfet,*mvndiode,*nndiode,mvndiffres,*mvpdiff,mvpfet,mvpfetesd,*mvpdiode,mvpdiffres 290 \
|
|
"MV Diffusion width < %d (diff/tap.14)"
|
|
|
|
width *mvnsd,*mvpsd 150 "MV Tap width < %d (diff/tap.1)"
|
|
extend *mvpsd *mvndiff 700 "MV Butting tap length < %d (diff/tap.16)"
|
|
extend *mvnsd *mvpdiff 700 "MV Butting tap length < %d (diff/tap.16)"
|
|
extend *psd *ndiff 290 "Butting tap length < %d (diff/tap.4)"
|
|
extend *nsd *pdiff 290 "Butting tap length < %d (diff/tap.4)"
|
|
width mvpdiffres 150 "MV P-Diffusion resistor width < %d (diff/tap.14a)"
|
|
spacing alldifflv,var,varhvt,corenvar,corepvar,fomfill \
|
|
alldifflv,var,varhvt,corenvar,corepvar,fomfill 270 touching_ok \
|
|
"Diffusion spacing < %d (diff/tap.3)"
|
|
spacing alldifflv,var,varhvt alldiffmv,mvvar 270 touching_illegal \
|
|
"LV to MV Diffusion spacing < %d (diff/tap.3)"
|
|
spacing alldiffmvnontap,mvvar alldiffmvnontap,mvvar 300 touching_ok \
|
|
"MV Diffusion spacing < %d (diff/tap.15a)"
|
|
spacing alldiffmv *mvnsd,*mvpsd 270 touching_ok \
|
|
"MV Diffusion to MV tap spacing < %d (diff/tap.3)"
|
|
spacing *mvndiff,mvnfet,mvnfetesd,mvnnfet,nnfet,*mvndiode,*nndiode,mvndiffres,mvvar *mvpsd 370 \
|
|
touching_ok "MV P-Diffusion to MV N-tap spacing < %d (diff/tap.15b)"
|
|
spacing *mvnsd,*mvpdiff,mvpfet,mvpfetesd,mvvar,*mvpdiode *mvpsd,*psd 760 touching_illegal \
|
|
"MV Diffusion in N-well to P-tap spacing < %d (diff/tap.20 + diff/tap.17,19)"
|
|
spacing *ndiff,*ndiode,nfet allnwell 340 touching_illegal \
|
|
"N-Diffusion spacing to N-well < %d (diff/tap.9)"
|
|
spacing *mvndiff,*mvndiode,mvnfet,mvnnfet,nnfet allnwell 340 touching_illegal \
|
|
"N-Diffusion spacing to N-well < %d (diff/tap.9)"
|
|
spacing *psd allnwell 130 touching_illegal \
|
|
"P-tap spacing to N-well < %d (diff/tap.11)"
|
|
spacing *mvpsd allnwell 130 touching_illegal \
|
|
"P-tap spacing to N-well < %d (diff/tap.11)"
|
|
surround *nsd allnwell 180 absence_illegal \
|
|
"N-well overlap of N-tap < %d (diff/tap.10)"
|
|
surround *mvnsd allnwell 330 absence_illegal \
|
|
"N-well overlap of MV N-tap < %d (diff/tap.19)"
|
|
surround *pdiff,*pdiode,pfet,scpfet,ppu allnwell 180 absence_illegal \
|
|
"N-well overlap of P-Diffusion < %d (diff/tap.8)"
|
|
surround *mvpdiff,*mvpdiode,mvpfet,mvpfetesd allnwell 330 absence_illegal \
|
|
"N-well overlap of P-Diffusion < %d (diff/tap.17)"
|
|
surround mvvar allnwell 560 absence_illegal \
|
|
"N-well overlap of MV varactor < %d (lvtn.10 + lvtn.4b)"
|
|
spacing *mvndiode *mvndiode 1070 touching_ok \
|
|
"MV N-diode spacing < %d (hvntm.2 + 2 * hvntm.3)"
|
|
|
|
variants (full)
|
|
cifspacing allmvdiffnowell lvnwell 825 touching_illegal \
|
|
"MV diffusion to LV nwell spacing < %d (hvi.5 + nsd/psd.5)"
|
|
cifspacing nwell_or_hvi nwell_or_hvi 700 touching_ok \
|
|
"HVI to HVI or LV nwell spacing < %d (hvi.5)"
|
|
variants (fast),(full)
|
|
|
|
spacing allnfets allpactivenonfet 270 touching_illegal \
|
|
"nFET cannot abut P-diffusion (diff/tap.3)"
|
|
spacing allpfets allnactivenonfet 270 touching_illegal \
|
|
"pFET cannot abut N-diffusion (diff/tap.3)"
|
|
|
|
# Butting junction rules
|
|
edge4way (*psd)/a ~(*ndiff,*psd)/a 125 ~(*ndiff)/a (*ndiff)/a 125 \
|
|
"N-Diffusion to P-tap spacing < %d across butted junction (psd.5b)"
|
|
edge4way (*ndiff)/a ~(*ndiff,*psd)/a 125 ~(*psd)/a (*psd)/a 125 \
|
|
"N-Diffusion to P-tap spacing < %d across butted junction (psd.5a)"
|
|
edge4way (*nsd)/a ~(*pdiff,*nsd)/a 125 ~(*pdiff)/a (*pdiff)/a 125 \
|
|
"P-Diffusion to N-tap spacing < %d across butted junction (nsd.5b)"
|
|
edge4way (*pdiff)/a ~(*pdiff,*nsd)/a 125 ~(*nsd)/a (*nsd)/a 125 \
|
|
"P-Diffusion to N-tap spacing < %d across butted junction (nsd.5a)"
|
|
|
|
edge4way (*mvpsd)/a ~(*mvndiff,*mvpsd)/a 125 ~(*mvndiff)/a (*mvndiff)/a 125 \
|
|
"MV N-Diffusion to MV P-tap spacing < %d across butted junction (psd.5b)"
|
|
edge4way (*mvndiff)/a ~(*mvndiff,*mvpsd)/a 125 ~(*mvpsd)/a (*mvpsd)/a 125 \
|
|
"MV N-Diffusion to MV P-tap spacing < %d across butted junction (psd.5a)"
|
|
edge4way (*mvnsd)/a ~(*mvpdiff,*mvnsd)/a 125 ~(*mvpdiff)/a (*mvpdiff)/a 125 \
|
|
"MV P-Diffusion to MV N-tap spacing < %d across butted junction (nsd.5b)"
|
|
edge4way (*mvpdiff)/a ~(*mvpdiff,*mvnsd)/a 125 ~(*mvnsd)/a (*mvnsd)/a 125 \
|
|
"MV P-Diffusion to MV N-tap spacing < %d across butted junction (nsd.5a)"
|
|
|
|
# Sandwiched butting junction restrictions
|
|
edge4way (*pdiff)/a (*nsd)/a 400 ~(*pdiff)/a 0 0 "NSDM width < %d (diff/tap.5)"
|
|
edge4way (*ndiff)/a (*psd)/a 400 ~(*ndiff)/a 0 0 "PSDM width < %d (diff/tap.5)"
|
|
|
|
area *nsd,*mvnsd 70110 150 "N-tap minimum area < 0.07011um^2 (nsd.10b)"
|
|
area *psd,*mvpsd 70110 150 "P-tap minimum area < 0.07011um^2 (psd.10b)"
|
|
|
|
#angles allactive 90 "Only 90 degree angles permitted on diff and tap (x.2)"
|
|
|
|
variants (full)
|
|
cifmaxwidth tap_missing_licon 0 bend_illegal "All taps must be contacted (licon.16)"
|
|
|
|
# Latchup rules
|
|
cifmaxwidth ptap_missing 0 bend_illegal \
|
|
"N-diff distance to P-tap must be < 15.0um (LU.2)"
|
|
cifmaxwidth dptap_missing 0 bend_illegal \
|
|
"N-diff distance to P-tap in deep nwell.must be < 15.0um (LU.2.1)"
|
|
cifmaxwidth ntap_missing 0 bend_illegal \
|
|
"P-diff distance to N-tap must be < 15.0um (LU.3)"
|
|
|
|
variants (fast),(full)
|
|
|
|
#-----------------------------
|
|
# POLY
|
|
#-----------------------------
|
|
|
|
width allpoly,polyfill 150 "poly width < %d (poly.1a)"
|
|
spacing allpoly,polyfill allpoly,polyfill 210 touching_ok "poly spacing < %d (poly.2)"
|
|
|
|
spacing allpolynonfet,polyfill \
|
|
*ndiff,*mvndiff,*ndiode,*nndiode,ndiffres,*ndiodelvt,*pdiff,*mvpdiff,*pdiode,pdiffres,*pdiodelvt,*pdiodehvt \
|
|
75 corner_ok allfets \
|
|
"poly spacing to Diffusion < %d (poly.4)"
|
|
spacing npres *nsd 480 touching_illegal \
|
|
"poly resistor spacing to N-tap < %d (poly.9)"
|
|
overhang *ndiff,rndiff nfet,scnfet,npd,npass,nsonos 250 "N-Diffusion overhang of nFET < %d (poly.7)"
|
|
overhang *mvndiff,mvrndiff mvnfet,mvnnfet,nnfet 250 \
|
|
"N-Diffusion overhang of nFET < %d (poly.7)"
|
|
overhang *pdiff,rpdiff pfet,scpfet,ppu 250 "P-Diffusion overhang of pmos < %d (poly.7)"
|
|
overhang *mvpdiff,mvrpdiff mvpfet,mvpfetesd 250 "P-Diffusion overhang of pmos < %d (poly.7)"
|
|
overhang *poly allfetsstd,allfetsspecial 130 "poly overhang of transistor < %d (poly.8)"
|
|
overhang *poly allfetscore 110 "poly overhang of SRAM core transistor < %d (poly.8)"
|
|
#rect_only allfets "No bends in transistors (poly.11)"
|
|
rect_only xhrpoly,uhrpoly "No bends in poly resistors (poly.11)"
|
|
extend xpc/a xhrpoly,uhrpoly 2160 \
|
|
"poly contact extends poly resistor by < %d (licon.1c + li.5)"
|
|
spacing xhrpoly,uhrpoly,xpc xhrpoly,uhrpoly,xpc 1240 touching_illegal \
|
|
"Distance between precision resistors < %d (rpm.2 + 2 * rpm.3)"
|
|
|
|
variants (fast)
|
|
|
|
spacing xhrpoly,uhrpoly,xpc allndifflv,allndiffmv 525 touching_illegal \
|
|
"Distance from precision resistor to N+ diffusion < %d (rpm.3 + rpm.6 + nsd.5a)"
|
|
spacing xhrpoly,uhrpoly,xpc *poly 400 touching_illegal \
|
|
"Distance from precision resistor to unrelated poly < %d (rpm.3 + rpm.7)"
|
|
spacing xhrpoly,uhrpoly,xpc allndiffmvnontap 585 touching_illegal \
|
|
"Distance from precision resistor to MV N+ device < %d (rpm.3 + rpm.9 + hvntm.3)"
|
|
|
|
# Minimum width requirement means actual spacing from res to ndiff has to be
|
|
# constructed from mask rules. These supercede the simpler checks.
|
|
|
|
variants (full)
|
|
|
|
cifmaxwidth rpm_nsd_check 0 bend_illegal \
|
|
"Distance from precision resistor to N+ diffusion < 0.525um (rpm.3 + rpm.6 + nsd.5a)"
|
|
cifmaxwidth rpm_poly_check 0 bend_illegal \
|
|
"Distance from precision resistor to unrelated poly < 0.4um (rpm.3 + rpm.7)"
|
|
cifmaxwidth rpm_hvntm_check 0 bend_illegal \
|
|
"Distance from precision resistor to MV N+ device < 0.585um (rpm.3 + rpm.9 + hvntm.3)"
|
|
|
|
variants (fast),(full)
|
|
|
|
#angles allpoly,polyfill 90 "Only 90 degree angles permitted on poly (x.2)"
|
|
|
|
#--------------------------------------------------------------------
|
|
# HVTP
|
|
#--------------------------------------------------------------------
|
|
|
|
spacing pfethvt,pdiodehvt,varactorhvt pfet,ppu,scpfet,mvpfet,mvpfetesd,pfetlvt,pfetmvt \
|
|
360 touching_illegal \
|
|
"Min. spacing between pFET and HVTP < %d (hvtp.4)"
|
|
|
|
spacing pfethvt,pdiodehvt,varactorhvt varactor 360 touching_illegal \
|
|
"Min. spacing between varactor and HVTP < %d (hvtp.4 + varac.3)"
|
|
|
|
#--------------------------------------------------------------------
|
|
# LVTN
|
|
#--------------------------------------------------------------------
|
|
|
|
spacing pfetlvt,nfetlvt,pdiodelvt,ndiodelvt \
|
|
allfetsnolvt 360 touching_illegal \
|
|
"Min. spacing between FET and LVTN < %d (lvtn.3a)"
|
|
|
|
spacing pfetlvt,nfetlvt,pdiodelvt,ndiodelvt scpfethvt,pfethvt,pdiodehvt,varactorhvt \
|
|
740 touching_illegal \
|
|
"Min. spacing between LVTN and HVTP < %d (lvtn.9)"
|
|
|
|
# Spacing across S/D direction requires edge rule
|
|
edge4way allfetsnolvt allactivenonfet 415 \
|
|
~(pfetlvt,nfetlvt,pdiodelvt,ndiodelvt)/a allfetsnolvt 415 \
|
|
"Min. spacing between FET and LVTN in S/D direction < %d (lvtn.3b)"
|
|
|
|
#--------------------------------------------------------------------
|
|
# NPC (Nitride poly Cut)
|
|
#--------------------------------------------------------------------
|
|
|
|
# Layer NPC is defined automatically around poly contacts (grow 0.1um)
|
|
|
|
#--------------------------------------------------------------------
|
|
# CONT (LICON, contact between poly/diff and LI)
|
|
#--------------------------------------------------------------------
|
|
|
|
width ndc/li 170 "N-diffusion contact width < %d (licon.1)"
|
|
width nsc/li 170 "N-tap contact width < %d (licon.1)"
|
|
width pdc/li 170 "P-diffusion contact width < %d (licon.1)"
|
|
width psc/li 170 "P-tap contact width < %d (licon.1)"
|
|
width ndic/li 170 "N-diode contact width < %d (licon.1)"
|
|
width pdic/li 170 "P-diode contact width < %d (licon.1)"
|
|
width pc/li 170 "poly contact width < %d (licon.1)"
|
|
|
|
width xpc/li 350 "poly resistor contact width < %d (licon.1b + 2 * li.5)"
|
|
area xpc/li 700000 350 "poly resistor contact length < 2.0um (licon.1c)"
|
|
area allli,*obsli 56100 170 "Local interconnect minimum area < %a (li.6)"
|
|
|
|
width mvndc/li 170 "N-diffusion contact width < %d (licon.1)"
|
|
width mvnsc/li 170 "N-tap contact width < %d (licon.1)"
|
|
width mvpdc/li 170 "P-diffusion contact width < %d (licon.1)"
|
|
width mvpsc/li 170 "P-tap contact width < %d (licon.1)"
|
|
width mvndic/li 170 "N-diode contact width < %d (licon.1)"
|
|
width mvpdic/li 170 "P-diode contact width < %d (licon.1)"
|
|
|
|
spacing allpdiffcont allndiffcont 170 touching_illegal \
|
|
"Diffusion contact spacing < %d (licon.2)"
|
|
spacing allndiffcont allndiffcont 170 touching_ok \
|
|
"Diffusion contact spacing < %d (licon.2)"
|
|
spacing allpdiffcont allpdiffcont 170 touching_ok \
|
|
"Diffusion contact spacing < %d (licon.2)"
|
|
spacing pc pc 170 touching_ok "Poly1 contact spacing < %d (licon.2)"
|
|
|
|
spacing pc alldiff 190 touching_illegal \
|
|
"poly contact spacing to diffusion < %d (licon.14)"
|
|
spacing pc allpdifflv,allpdiffmv 235 touching_illegal \
|
|
"poly contact spacing to P-diffusion < %d (licon.9 + psdm.5a)"
|
|
|
|
spacing ndc,pdc nfet,nfetlvt,pfet,pfethvt,pfetlvt,pfetmvt 55 touching_illegal \
|
|
"Diffusion contact to gate < %d (licon.11)"
|
|
spacing ndc,pdc scnfet,scpfet,scpfethvt 50 touching_illegal \
|
|
"Diffusion contact to standard cell gate < %d (licon.11)"
|
|
spacing ndc,pdc npd,npass,ppu 40 touching_illegal \
|
|
"Diffusion contact to SRAM gate < %d (licon.11)"
|
|
spacing ndc,pdc nsonos 75 touching_illegal \
|
|
"Diffusion contact to SONOS gate < %d (licon.11)"
|
|
spacing mvndc,mvpdc mvnfet,mvnfetesd,mvnnfet,nnfet,mvpfet,mvpfetesd 55 touching_illegal \
|
|
"Diffusion contact to gate < %d (licon.11)"
|
|
spacing nsc varactor,varhvt 250 touching_illegal \
|
|
"Diffusion contact to varactor gate < %d (licon.10)"
|
|
spacing mvnsc mvvar 250 touching_illegal \
|
|
"Diffusion contact to varactor gate < %d (licon.10)"
|
|
|
|
surround ndc/a *ndiff,nfet,scnfet,npd,npass,nfetlvt,rnd 40 absence_illegal \
|
|
"N-diffusion overlap of N-diffusion contact < %d (licon.5a)"
|
|
surround pdc/a *pdiff,pfet,scpfet,scpfethvt,ppu,pfethvt,pfetmvt,pfetlvt,rpd \
|
|
40 absence_illegal \
|
|
"P-diffusion overlap of P-diffusion contact < %d (licon.5a)"
|
|
surround ndic/a *ndi 40 absence_illegal \
|
|
"N-diode overlap of N-diode contact < %d (licon.5a)"
|
|
surround pdic/a *pdi 40 absence_illegal \
|
|
"P-diode overlap of N-diode contact < %d (licon.5a)"
|
|
|
|
spacing psc/a allnactivenontap 60 touching_illegal \
|
|
"Min. space between P-tap contact and butting N diffusion < %d (licon.5b)"
|
|
spacing nsc/a allpactivenontap 60 touching_illegal \
|
|
"Min. space between N-tap contact and butting P diffusion < %d (licon.5b)"
|
|
|
|
surround ndc/a *ndiff,nfet,scnfet,npd,npass,nfetlvt,rnd 60 directional \
|
|
"N-diffusion overlap of N-diffusion contact < %d in one direction (licon.5c)"
|
|
surround pdc/a *pdiff,pfet,scpfet,scpfethvt,ppu,pfethvt,pfetmvt,pfetlvt,rpd \
|
|
60 directional \
|
|
"P-diffusion overlap of P-diffusion contact < %d in one direction (licon.5c)"
|
|
surround ndic/a *ndi 60 directional \
|
|
"N-diode overlap of N-diode contact < %d in one direction (licon.5c)"
|
|
surround pdic/a *pdi 60 directional \
|
|
"P-diode overlap of N-diode contact < %d in one direction (licon.5c)"
|
|
|
|
surround nsc/a *nsd,corenvar 120 directional \
|
|
"N-tap overlap of N-tap contact < %d in one direction (licon.7)"
|
|
surround psc/a *psd,corepvar 120 directional \
|
|
"P-tap overlap of P-tap contact < %d in one direction (licon.7)"
|
|
|
|
surround mvndc/a *mvndiff,mvnfet,mvnfetesd,mvrnd 40 absence_illegal \
|
|
"N-diffusion overlap of N-diffusion contact < %d (licon.5a)"
|
|
surround mvpdc/a *mvpdiff,mvpfet,mvpfetesd,mvrpd 40 absence_illegal \
|
|
"P-diffusion overlap of P-diffusion contact < %d (licon.5a)"
|
|
surround mvndic/a *mvndi 40 absence_illegal \
|
|
"N-diode overlap of N-diode contact < %d (licon.5a)"
|
|
surround mvpdic/a *mvpdi 40 absence_illegal \
|
|
"P-diode overlap of N-diode contact < %d (licon.5a)"
|
|
|
|
spacing mvpsc/a allndiffmvnontap 60 touching_illegal \
|
|
"Min. space between P-tap contact and butting N diffusion < %d (licon.5b)"
|
|
spacing mvnsc/a allpdiffmvnontap 60 touching_illegal \
|
|
"Min. space between N-tap contact and butting P diffusion < %d (licon.5b)"
|
|
|
|
surround mvndc/a *mvndiff,mvnfet,mvnfetesd,mvrnd 60 directional \
|
|
"N-diffusion overlap of N-diffusion contact < %d in one direction (licon.5c)"
|
|
surround mvpdc/a *mvpdiff,mvpfet,mvpfetesd,mvrpd 60 directional \
|
|
"P-diffusion overlap of P-diffusion contact < %d in one direction (licon.5c)"
|
|
surround mvndic/a *mvndi 60 directional \
|
|
"N-diode overlap of N-diode contact < %d in one direction (licon.5c)"
|
|
surround mvpdic/a *mvpdi 60 directional \
|
|
"P-diode overlap of N-diode contact < %d in one direction (licon.5c)"
|
|
|
|
surround mvnsc/a *mvnsd 120 directional \
|
|
"N-tap overlap of N-tap contact < %d in one direction (licon.7)"
|
|
surround mvpsc/a *mvpsd 120 directional \
|
|
"P-tap overlap of P-tap contact < %d in one direction (licon.7)"
|
|
|
|
surround pc/a *poly,mrp1,xhrpoly,uhrpoly 50 absence_illegal \
|
|
"poly overlap of poly contact < %d (licon.8)"
|
|
surround pc/a *poly,mrp1,xhrpoly,uhrpoly 80 directional \
|
|
"poly overlap of poly contact < %d in one direction (licon.8a)"
|
|
|
|
exact_overlap (allcont)/a
|
|
|
|
#-------------------------------------------------------------
|
|
# LI - Local interconnect layer
|
|
#-------------------------------------------------------------
|
|
|
|
variants *
|
|
|
|
width *li 170 "Local interconnect width < %d (li.1)"
|
|
width rli 290 "Local interconnect width < %d (li.7)"
|
|
|
|
spacing *locali,rli *locali,rli,*obsli 170 touching_ok \
|
|
"Local interconnect spacing < %d (li.3)"
|
|
|
|
# Local interconnect in core (SRAM) cells has more relaxed rules. There are
|
|
# no special layers for the contacts in core cells, so they must be included
|
|
# in the rule.
|
|
width coreli,pc,ndc,nsc,pdc,psc,allli,*obsli 140 \
|
|
"Core local interconnect width < %d (li.c1)"
|
|
|
|
spacing coreli,pc,ndc,nsc,pdc,psc,mcon allli,*obsli 140 touching_ok \
|
|
"Core local interconnect spacing < %d (li.c2)"
|
|
|
|
surround pc/li *li,coreli 80 directional \
|
|
"Local interconnect overlap of poly contact < %d in one direction (li.5)"
|
|
|
|
surround ndc/li,nsc/li,pdc/li,psc/li,ndic/li,pdic/li,mvndc/li,mvnsc/li,mvpdc/li,mvpsc/li,mvndic/li,mvpdic/li \
|
|
*li,rli,coreli 80 directional \
|
|
"Local interconnect overlap of diffusion contact < %d in one direction (li.5)"
|
|
|
|
area allli,*obsli,coreli 56100 170 "Local interconnect minimum area < %a (li.6)"
|
|
|
|
angles *locali,rli 90 "Only 90 degree angles permitted on local interconnect (x.2)"
|
|
angles coreli 45 \
|
|
"Only 45 degree angles permitted on local interconnect in SRAM cell (x.2)"
|
|
|
|
#-------------------------------------------------------------
|
|
# MCON - Contact between local interconnect and metal1
|
|
#-------------------------------------------------------------
|
|
|
|
width mcon/m1 170 "mcon.width < %d (mcon.1)"
|
|
spacing mcon/m1 mcon/m1,obsmcon/m1 190 touching_ok "mcon.spacing < %d (mcon.2)"
|
|
|
|
exact_overlap mcon/li
|
|
|
|
#-------------------------------------------------------------
|
|
# METAL1 -
|
|
#-------------------------------------------------------------
|
|
|
|
width *m1,rm1 140 "Metal1 width < %d (met1.1)"
|
|
spacing allm1,m1fill allm1,*obsm1,m1fill 140 touching_ok "Metal1 spacing < %d (met1.2)"
|
|
area allm1,*obsm1 83000 140 "Metal1 minimum area < %a (met1.6)"
|
|
|
|
surround mcon/m1 *met1 30 absence_illegal \
|
|
"Metal1 overlap of local interconnect contact < %d (met1.4)"
|
|
surround mcon/m1 *met1 60 directional \
|
|
"Metal1 overlap of local interconnect contact < %d in one direction (met1.5)"
|
|
|
|
angles allm1,m1fill 45 "Only 45 and 90 degree angles permitted on metal1 (x.3a)"
|
|
|
|
variants (fast),(full)
|
|
widespacing allm1 3005 allm1,*obsm1,m1fill 280 touching_ok \
|
|
"Metal1 > 3um spacing to unrelated m1 < %d (met1.3b)"
|
|
widespacing *obsm1 3005 allm1 280 touching_ok \
|
|
"Metal1 > 3um spacing to unrelated m1 < %d (met1.3b)"
|
|
|
|
variants (full)
|
|
cifmaxwidth m1_hole_empty 0 bend_illegal \
|
|
"Min area of metal1 holes > 0.14um^2 (met1.7)"
|
|
|
|
cifspacing m1_large_halo m1_large_halo 280 touching_ok \
|
|
"Spacing of metal1 features attached to and within 0.28um of large metal1 < %d (met1.3a)"
|
|
variants *
|
|
|
|
#--------------------------------------------------
|
|
# VIA1
|
|
#--------------------------------------------------
|
|
|
|
width v1/m1 260 "Via1 width < %d (via.1a + 2 * via.4a)"
|
|
spacing v1 v1 60 touching_ok "Via1 spacing < %d (via.2 - 2 * via.4a)"
|
|
surround v1/m1 *m1,rm1 30 directional \
|
|
"Metal1 overlap of Via1 < %d in one direction (via.5a - via.4a)"
|
|
surround v1/m2 *m2,rm2 30 directional \
|
|
"Metal2 overlap of Via1 < %d in one direction (met2.5 - met2.4)"
|
|
|
|
exact_overlap v1/m1
|
|
|
|
#ifdef RERAM
|
|
#--------------------------------------------------
|
|
# ReRAM
|
|
#--------------------------------------------------
|
|
|
|
width reram 260 "ReRAM width < %d (rr1.1)"
|
|
spacing reram reram 55 touching_illegal "ReRAM spacing < %d (rr1.2)"
|
|
surround reram *m1,rm1 30 directional \
|
|
"Metal1 overlap of ReRAM < %d in one direction (via.5a - via.4a)"
|
|
surround reram *m2,rm2 30 directional \
|
|
"Metal2 overlap of ReRAM < %d in one direction (met2.5 - met2.4)"
|
|
|
|
no_overlap reram v1
|
|
|
|
#endif (RERAM)
|
|
|
|
#--------------------------------------------------
|
|
# METAL2 -
|
|
#--------------------------------------------------
|
|
|
|
width allm2,m2fill 140 "Metal2 width < %d (met2.1)"
|
|
spacing allm2 allm2,obsm2,m2fill 140 touching_ok "Metal2 spacing < %d (met2.2)"
|
|
area allm2,obsm2 67600 140 "Metal2 minimum area < %a (met2.6)"
|
|
|
|
angles allm2 45 "Only 45 and 90 degree angles permitted on metal2 (x.3a)"
|
|
|
|
variants (fast),(full)
|
|
widespacing allm2 3005 allm2,obsm2,m2fill 280 touching_ok \
|
|
"Metal2 > 3um spacing to unrelated m2 < %d (met2.3b)"
|
|
widespacing obsm2 3005 allm2 280 touching_ok \
|
|
"Metal2 > 3um spacing to unrelated m2 < %d (met2.3b)"
|
|
|
|
variants (full)
|
|
cifmaxwidth m2_hole_empty 0 bend_illegal \
|
|
"Min area of metal2 holes > 0.14um^2 (met2.7)"
|
|
|
|
cifspacing m2_large_halo m2_large_halo 280 touching_ok \
|
|
"Spacing of metal2 features attached to and within 0.28um of large metal2 < %d (met2.3a)"
|
|
variants *
|
|
|
|
#--------------------------------------------------
|
|
# VIA2
|
|
#--------------------------------------------------
|
|
|
|
width v2/m2 280 "via2 width < %d (via2.1a + 2 * via2.4)"
|
|
|
|
spacing v2 v2 120 touching_ok "via2 spacing < %d (via2.2 - 2 * via2.4)"
|
|
|
|
surround v2/m2 *m2,rm2 45 directional \
|
|
"Metal2 overlap of via2 < %d in one direction (via2.4a - via2.4)"
|
|
surround v2/m3 *m3,rm3 25 absence_illegal "Metal3 overlap of via2 < %d (met3.4)"
|
|
|
|
exact_overlap v2/m2
|
|
|
|
#--------------------------------------------------
|
|
# METAL3 -
|
|
#--------------------------------------------------
|
|
|
|
width allm3,m3fill 300 "Metal3 width < %d (met3.1)"
|
|
spacing allm3 allm3,obsm3,m3fill 300 touching_ok "Metal3 spacing < %d (met3.2)"
|
|
area allm3,obsm3 240000 300 "Metal3 minimum area < %a (met3.6)"
|
|
|
|
angles allm3 45 "Only 45 and 90 degree angles permitted on metal3 (x.3a)"
|
|
|
|
variants (fast),(full)
|
|
widespacing allm3,m3fill 3005 allm3,obsm3 400 touching_ok \
|
|
"Metal3 > 3um spacing to unrelated m3 < %d (met3.3d)"
|
|
widespacing obsm3 3005 allm3 400 touching_ok \
|
|
"Metal3 > 3um spacing to unrelated m3 < %d (met3.3d)"
|
|
variants (full)
|
|
cifspacing m3_large_halo m3_large_halo 400 touching_ok \
|
|
"Spacing of metal3 features attached to and within 0.40um of large metal3 < %d (met3.3c)"
|
|
variants *
|
|
|
|
|
|
#ifdef METAL5
|
|
#undef METAL5
|
|
#--------------------------------------------------
|
|
# VIA3 - Requires METAL5 Module
|
|
#--------------------------------------------------
|
|
|
|
width v3/m3 320 "via3 width < %d (via3.1 + 2 * via3.4)"
|
|
spacing v3 v3 80 touching_ok "via3 spacing < %d (via3.2 - 2 * via3.4)"
|
|
surround v3/m3 *m3,rm3 30 directional \
|
|
"Metal3 overlap of via3 in one direction < %d (via3.5 - via3.4)"
|
|
surround v3/m4 *m4,rm4 5 absence_illegal \
|
|
"Metal4 overlap of via3 < %d (met4.3 - via3.4)"
|
|
|
|
exact_overlap v3/m3
|
|
|
|
#-----------------------------
|
|
# METAL4 - METAL4 Module
|
|
#-----------------------------
|
|
|
|
variants *
|
|
|
|
width allm4,m4fill 300 "Metal4 width < %d (met4.1)"
|
|
spacing allm4 allm4,obsm4,m4fill 300 touching_ok "Metal4 spacing < %d (met4.2)"
|
|
area allm4,obsm4 240000 300 "Metal4 minimum area < %a (met4.4a)"
|
|
|
|
angles allm4 45 "Only 45 and 90 degree angles permitted on metal4 (x.3a)"
|
|
|
|
variants (fast),(full)
|
|
widespacing allm4,m4fill 3005 allm4,obsm4 400 touching_ok \
|
|
"Metal4 > 3um spacing to unrelated m4 < %d (met4.5b)"
|
|
widespacing obsm4 3005 allm4 400 touching_ok \
|
|
"Metal4 > 3um spacing to unrelated m4 < %d (met4.5b)"
|
|
variants (full)
|
|
cifspacing m4_large_halo m4_large_halo 400 touching_ok \
|
|
"Spacing of metal4 features attached to and within 0.40um of large metal4 < %d (met4.5a)"
|
|
variants *
|
|
|
|
#--------------------------------------------------
|
|
# VIA4 - Requires METAL5 Module
|
|
#--------------------------------------------------
|
|
|
|
width v4/m4 1180 "via4 width < %d (via4.1 + 2 * via4.4)"
|
|
spacing v4 v4 420 touching_ok "via4 spacing < %d (via4.2 - 2 * via4.4)"
|
|
surround v4/m5 *m5,rm5 120 absence_illegal \
|
|
"Metal5 overlap of via4 < %d (met5.3 - via4.4)"
|
|
|
|
exact_overlap v4/m4
|
|
|
|
#-----------------------------
|
|
# METAL5 - METAL5 Module
|
|
#-----------------------------
|
|
|
|
width allm5,m5fill 1600 "Metal5 width < %d (met5.1)"
|
|
spacing allm5 allm5,obsm5,m5fill 1600 touching_ok "Metal5 spacing < %d (met5.2)"
|
|
area allm5,obsm5 4000000 1600 "Metal5 minimum area < %a (met5.4)"
|
|
|
|
angles allm5 45 "Only 45 and 90 degree angles permitted on metal5 (x.3a)"
|
|
|
|
#define METAL5
|
|
#endif (METAL5)
|
|
|
|
#ifdef REDISTRIBUTION
|
|
|
|
variants (full)
|
|
|
|
width metrdl 10000 "RDL width < %d (rdl.1)"
|
|
spacing metrdl metrdl 10000 touching_ok "RDL spacing < %d (rdl.2)"
|
|
surround glass metrdl 10750 absence_ok "RDL must surround glass cut by %d (rdl.3)"
|
|
spacing padl metrdl 19660 surround_ok "RDL spacing to unrelated pad < %d (rdl.6)"
|
|
|
|
variants (fast),(full)
|
|
|
|
#endif (REDISTRIBUTION)
|
|
|
|
#--------------------------------------------------
|
|
# NMOS, PMOS
|
|
#--------------------------------------------------
|
|
|
|
edge4way *poly allfetsstd 420 allfets 0 0 \
|
|
"Transistor width < %d (diff/tap.2)"
|
|
edge4way *poly allfetsspecial 360 allfets 0 0 \
|
|
"Transistor in standard cell width < %d (diff/tap.2)"
|
|
edge4way *poly npass,npd,nsonos 210 allfets 0 0 \
|
|
"N-Transistor in SRAM core width < %d (diff/tap.2)"
|
|
edge4way *poly ppu 140 allfets 0 0 \
|
|
"P-Transistor in SRAM core width < %d (diff/tap.2)"
|
|
|
|
# Except: Note that standard cells allow transistor width minimum 0.36um
|
|
width pfetlvt 350 "LVT PMOS gate length < %d (poly.1b)"
|
|
|
|
spacing allpolynonfet,polyfill *nsd 55 corner_ok var,varhvt,corenvar \
|
|
"poly spacing to diffusion tap < %d (poly.5)"
|
|
spacing allpolynonfet,polyfill *psd 55 corner_ok corepvar \
|
|
"poly spacing to diffusion tap < %d (poly.5)"
|
|
spacing allpolynonfet,polyfill *mvnsd 55 corner_ok mvvar \
|
|
"poly spacing to diffusion tap < %d (poly.5)"
|
|
spacing allpolynonfet,polyfill *mvpsd 55 touching_illegal \
|
|
"poly spacing to diffusion tap < %d (poly.5)"
|
|
|
|
edge4way *psd *ndiff 300 ~(nfet,npass,npd,scnfet,nfetlvt,nsonos)/a *psd 300 \
|
|
"Butting P-tap spacing to NMOS gate < %d (poly.6)"
|
|
edge4way *nsd *pdiff 300 ~(pfet,ppu,scpfet,scpfethvt,pfetlvt,pfetmvt)/a *nsd 300 \
|
|
"Butting N-tap spacing to PMOS gate < %d (poly.6)"
|
|
edge4way *mvpsd *mvndiff 300 ~(mvnfet,mvnfetesd,mvnnfet,nnfet)/a *mvpsd 300 \
|
|
"Butting MV P-tap spacing to MV NMOS gate < %d (poly.6)"
|
|
edge4way *mvnsd *mvpdiff 300 ~(mvpfet,mvpfetesd)/a *mvnsd 300 \
|
|
"Butting MV N-tap spacing to MV PMOS gate < %d (poly.6)"
|
|
|
|
# No LV FETs in HV diff
|
|
spacing pfet,scpfet,scpfethvt,ppu,pfetlvt,pfetmvt,pfethvt,*pdiff *mvpdiff 360 touching_illegal \
|
|
"LV P-diffusion to MV P-diffusion < %d (diff/tap.23 + diff/tap.22)"
|
|
|
|
spacing nfet,scnfet,npd,npass,nfetlvt,varactor,varhvt,*ndiff *mvndiff 360 touching_illegal \
|
|
"LV N-diffusion to MV N-diffusion < %d (diff/tap.23 + diff/tap.22)"
|
|
|
|
# No HV FETs in LV diff
|
|
spacing mvpfet,mvpfetesd,*mvpdiff *pdiff 360 touching_illegal \
|
|
"MV P-diffusion to LV P-diffusion < %d (diff/tap.23 + diff/tap.22)"
|
|
|
|
spacing mvnfet,mvnfetesd,mvvaractor,*mvndiff *ndiff 360 touching_illegal \
|
|
"MV N-diffusion to LV N-diffusion < %d (diff/tap.23 + diff/tap.22)"
|
|
|
|
# Minimum length of MV FETs. Note that this is larger than the minimum
|
|
# width (0.29um), so an edge rule is required
|
|
|
|
edge4way mvndiff mvnfet,mvnfetesd 500 mvnfet,mvnfetesd 0 0 \
|
|
"MV NMOS minimum length < %d (poly.13)"
|
|
|
|
edge4way mvnsd mvvaractor 500 mvvaractor 0 0 \
|
|
"MV Varactor minimum length < %d (poly.13)"
|
|
|
|
edge4way mvpdiff mvpfet,mvpfetesd 500 mvpfet,mvpfetesd 0 0 \
|
|
"MV PMOS minimum length < %d (poly.13)"
|
|
|
|
#--------------------------------------------------
|
|
# mrp1 (N+ poly resistor)
|
|
#--------------------------------------------------
|
|
|
|
width mrp1 330 "mrp1 resistor width < %d (poly.3)"
|
|
|
|
#--------------------------------------------------
|
|
# xhrpoly (P+ poly resistor)
|
|
# uhrpoly (P+ poly resistor, 2kOhm/sq)
|
|
#--------------------------------------------------
|
|
|
|
# NOTE: u/xhrpoly resistor requires discrete widths 0.35, 0.69, ... up to 1.27.
|
|
width xhrpoly 350 "xhrpoly resistor width < %d (P+ poly.1a)"
|
|
width uhrpoly 350 "uhrpoly resistor width < %d (P+ poly.1a)"
|
|
|
|
spacing xhrpoly,uhrpoly,xpc alldiff 480 touching_illegal \
|
|
"xhrpoly/uhrpoly resistor spacing to diffusion < %d (poly.9)"
|
|
|
|
spacing mrp1,xhrpoly,uhrpoly,xpc allfets 480 touching_illegal \
|
|
"Poly resistor spacing to poly < %d (poly.9)"
|
|
|
|
spacing xhrpoly,uhrpoly,xpc *poly 480 touching_illegal \
|
|
"Poly resistor spacing to poly < %d (poly.9)"
|
|
|
|
spacing mrp1 *poly 480 touching_ok \
|
|
"Poly resistor spacing to poly < %d (poly.9)"
|
|
|
|
spacing mrp1,xhrpoly,uhrpoly,xpc alldiff 480 touching_illegal \
|
|
"Poly resistor spacing to diffusion < %d (poly.9)"
|
|
|
|
#------------------------------------
|
|
# nsonos
|
|
#------------------------------------
|
|
|
|
variants (full)
|
|
cifmaxwidth bbox_missing 0 bend_illegal \
|
|
"SONOS transistor must be in cell with abutment box (tunm.8)"
|
|
variants (fast),(full)
|
|
|
|
#------------------------------------
|
|
# MOS Varactor device rules
|
|
#------------------------------------
|
|
|
|
overhang *nsd var,varhvt 250 \
|
|
"N-Tap overhang of Varactor < %d (var.4)"
|
|
|
|
overhang *mvnsd mvvar 250 \
|
|
"N-Tap overhang of Varactor < %d (var.4)"
|
|
|
|
width var,varhvt,mvvar 180 "Varactor length < %d (var.1)"
|
|
extend var,varhvt,mvvar *poly 1000 "Varactor width < %d (var.2)"
|
|
|
|
variants (full)
|
|
cifmaxwidth var_poly_no_nwell 0 bend_illegal \
|
|
"N-well overlap of varactor poly < 0.15um (varac.5)"
|
|
|
|
cifmaxwidth pdiff_in_varactor_well 0 bend_illegal \
|
|
"Varactor N-well must not contain P+ diffusion (varac.7)"
|
|
variants (fast),(full)
|
|
|
|
#ifdef MIM
|
|
#-----------------------------------------------------------
|
|
# MiM CAP (CAPM) -
|
|
#-----------------------------------------------------------
|
|
|
|
width *mimcap 1000 "MiM cap width < %d (capm.1)"
|
|
spacing *mimcap *mimcap 840 touching_ok "MiM cap spacing < %d (capm.2a)"
|
|
spacing *mimcap via3/m3 80 touching_illegal \
|
|
"MiM cap spacing to via3 < %d (capm.5 - via3.4)"
|
|
surround *mimcc *mimcap 80 absence_illegal \
|
|
"MiM cap must surround MiM cap contact by %d (capm.4 - via3.4)"
|
|
rect_only *mimcap "MiM cap must be rectangular (capm.7)
|
|
|
|
surround *mimcap *metal3/m3 140 absence_illegal \
|
|
"Metal3 must surround MiM cap by %d (capm.3)"
|
|
spacing via2 *mimcap 100 touching_illegal \
|
|
"MiM cap spacing to via2 < %d (capm.8 - via2.4)"
|
|
spacing *mimcap *metal3/m3 500 surround_ok \
|
|
"MiM cap spacing to unrelated metal3 < %d (capm.11)"
|
|
|
|
variants (full)
|
|
cifspacing mim_bottom mim_bottom 1200 touching_ok \
|
|
"MiM cap bottom plate spacing < %d (capm.2b)"
|
|
variants (fast),(full)
|
|
|
|
# MiM cap contact rules (VIA3)
|
|
|
|
width mimcc/c1 320 "MiM cap contact width < %d (via3.1 + 2 * via3.4)"
|
|
spacing mimcc mimcc 80 touching_ok "MiM cap contact spacing < %d (via3.2 - 2 * via3.4)"
|
|
surround mimcc/m4 *m4 5 directional \
|
|
"Metal4 overlap of MiM cap contact in one direction < %d (met4.3 - via3.4)"
|
|
exact_overlap mimcc/c1
|
|
|
|
width *mimcap2 1000 "MiM2 cap width < %d (cap2m.1)"
|
|
spacing *mimcap2 *mimcap2 840 touching_ok "MiM2 cap spacing < %d (cap2m.2a)"
|
|
spacing *mimcap2 via4/m4 10 touching_illegal \
|
|
"MiM2 cap spacing to via4 < %d (cap2m.5 - via4.4)"
|
|
surround *mim2cc *mimcap2 10 absence_illegal \
|
|
"MiM2 cap must surround MiM cap 2 contact by %d (cap2m.4 - via4.4)"
|
|
rect_only *mimcap2 "MiM2 cap must be rectangular (cap2m.7)
|
|
|
|
surround *mimcap2 *metal4/m4 140 absence_illegal \
|
|
"Metal4 must surround MiM2 cap by %d (cap2m.3)"
|
|
spacing via3 *mimcap2 80 touching_illegal \
|
|
"MiM2 cap spacing to via3 < %d (cap2m.8 - via3.4)"
|
|
spacing *mimcap2 *metal4/m4 500 surround_ok \
|
|
"MiM2 cap spacing to unrelated metal4 < %d (cap2m.11)"
|
|
|
|
variants (full)
|
|
cifmaxwidth mim2_contact_overlap 0 bend_illegal \
|
|
"MiM2 cap contact must not cross MiM cap contact (cap2m.8)"
|
|
|
|
cifspacing mim2_bottom mim2_bottom 1200 touching_ok \
|
|
"MiM2 cap bottom plate spacing < %d (cap2m.2b)"
|
|
variants (fast),(full)
|
|
|
|
# MiM cap contact rules (VIA4)
|
|
|
|
width mim2cc/c2 1180 "MiM2 cap contact width < %d (via4.1 + 2 * via4.4)"
|
|
spacing mim2cc mim2cc 420 touching_ok \
|
|
"MiM2 cap contact spacing < %d (via4.2 - 2 * via4.4)"
|
|
surround mim2cc/m5 *m5 120 absence_illegal \
|
|
"Metal5 overlap of MiM2 cap contact < %d (met5.3 - via4.4)"
|
|
exact_overlap mim2cc/c2
|
|
|
|
#endif (MIM)
|
|
|
|
#----------------------------
|
|
# HVNTM
|
|
#----------------------------
|
|
variants (full)
|
|
cifspacing hvntm_generate hvntm_generate 700 touching_ok \
|
|
"HVNTM spacing < %d (hvntm.2)"
|
|
variants (fast),(full)
|
|
|
|
#----------------------------
|
|
# End DRC style
|
|
#----------------------------
|
|
|
|
end
|
|
|
|
#----------------------------
|
|
# LEF format definitions
|
|
#----------------------------
|
|
|
|
lef
|
|
|
|
masterslice pwell pwell PWELL substrate
|
|
masterslice nwell nwell NWELL
|
|
|
|
routing li li1 LI1 LI li
|
|
|
|
routing m1 met1 MET1 m1
|
|
routing m2 met2 MET2 m2
|
|
routing m3 met3 MET3 m3
|
|
#ifdef METAL5
|
|
routing m4 met4 MET4 m4
|
|
routing m5 met5 MET5 m5
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
routing mrdl met6 MET6 m6 MRDL METRDL
|
|
#endif
|
|
|
|
cut mcon mcon MCON Mcon
|
|
cut m2c via via1 VIA VIA1 cont2 via12
|
|
cut m3c via2 VIA2 cont3 via23
|
|
#ifdef METAL5
|
|
cut via3 via3 VIA3 cont4 via34
|
|
cut via4 via4 VIA4 cont5 via45
|
|
#endif (METAL5)
|
|
|
|
obs obsli li1
|
|
obs obsm1 met1
|
|
obs obsm2 met2
|
|
obs obsm3 met3
|
|
|
|
#ifdef METAL5
|
|
obs obsm4 met4
|
|
obs obsm5 met5
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
obs obsmrdl met6
|
|
#endif
|
|
|
|
# NOTE: obsmcon only used with li1, not obsli.
|
|
obs obsmcon mcon
|
|
|
|
# Vias on obstruction layers should be ignored, so cast to obstruction metal.
|
|
obs obsm1 via
|
|
obs obsm2 via2
|
|
#ifdef METAL5
|
|
obs obsm3 via3
|
|
obs obsm4 via4
|
|
#endif (METAL5)
|
|
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Device and Parasitic extraction
|
|
#-----------------------------------------------------
|
|
|
|
extract
|
|
style ngspice variants (),(orig),(si),(hrhc),(lrhc),(hrlc),(lrlc)
|
|
cscale 1
|
|
# NOTE: SkyWater SPICE libraries use .option scale 1E6 so all
|
|
# dimensions must be in units of microns in the extract file.
|
|
# Use extract style "ngspice(si)" to override this and produce
|
|
# a file with SI units for length/area.
|
|
|
|
variants (),(orig),(hrhc),(lrhc),(hrlc),(lrlc)
|
|
lambda 1E6
|
|
variants (si)
|
|
lambda 1.0
|
|
variants *
|
|
|
|
units microns
|
|
step 7
|
|
sidehalo 2
|
|
|
|
# NOTE: MiM cap layers have been purposely put out of order,
|
|
# may want to reconsider.
|
|
|
|
planeorder dwell 0
|
|
planeorder well 1
|
|
planeorder active 2
|
|
planeorder locali 3
|
|
planeorder metal1 4
|
|
planeorder metal2 5
|
|
planeorder metal3 6
|
|
#ifdef METAL5
|
|
planeorder metal4 7
|
|
planeorder metal5 8
|
|
#ifdef REDISTRIBUTION
|
|
planeorder metali 9
|
|
planeorder block 10
|
|
planeorder comment 11
|
|
planeorder cap1 12
|
|
planeorder cap2 13
|
|
#else (!REDISTRIBUTION)
|
|
planeorder block 9
|
|
planeorder comment 10
|
|
planeorder cap1 11
|
|
planeorder cap2 12
|
|
#endif (!REDISTRIBUTION)
|
|
#else (!METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
planeorder metali 7
|
|
planeorder block 8
|
|
planeorder comment 9
|
|
planeorder cap1 10
|
|
planeorder cap2 11
|
|
#else (!REDISTRIBUTION)
|
|
planeorder block 7
|
|
planeorder comment 8
|
|
planeorder cap1 9
|
|
planeorder cap2 10
|
|
#endif (!REDISTRIBUTION)
|
|
#endif (!METAL5)
|
|
|
|
height dnwell -0.1 0.1
|
|
height nwell,pwell 0.0 0.2062
|
|
height alldiff 0.2062 0.12
|
|
height fomfill 0.2062 0.12
|
|
height allpoly 0.3262 0.18
|
|
height polyfill 0.3262 0.18
|
|
height alldiffcont 0.3262 0.61
|
|
height pc 0.5062 0.43
|
|
height allli 0.9361 0.10
|
|
height mcon 1.0361 0.34
|
|
height allm1 1.3761 0.36
|
|
height m1fill 1.3761 0.36
|
|
#ifdef RERAM
|
|
height v1 1.7361 0.565
|
|
height allm2 2.3011 0.36
|
|
height m2fill 2.3011 0.36
|
|
height v2 2.6611 0.42
|
|
height allm3 3.0811 0.845
|
|
height m3fill 3.0811 0.845
|
|
#ifdef MIM
|
|
height mimcap 2.7611 0.2
|
|
height mimcap2 4.0261 0.2
|
|
height mimcc 2.9611 0.12
|
|
height mim2cc 4.2261 0.09
|
|
#endif (MIM)
|
|
#ifdef METAL5
|
|
height v3 3.9261 0.39
|
|
height allm4 4.3161 0.845
|
|
height m4fill 4.3161 0.845
|
|
height v4 5.1611 0.505
|
|
height allm5 5.6661 1.26
|
|
height m5fill 5.6661 1.26
|
|
#ifdef REDISTRIBUTION
|
|
height mrdlc 6.9261 0.63
|
|
height mrdl 7.5561 3.0
|
|
#endif (!REDISTRIBUTION)
|
|
#endif (!METAL5)
|
|
#else (!RERAM)
|
|
height v1 1.7361 0.27
|
|
height allm2 2.0061 0.36
|
|
height m2fill 2.0061 0.36
|
|
height v2 2.3661 0.42
|
|
height allm3 2.7861 0.845
|
|
height m3fill 2.7861 0.845
|
|
#ifdef MIM
|
|
height mimcap 2.4661 0.2
|
|
height mimcap2 3.7311 0.2
|
|
height mimcc 2.6661 0.12
|
|
height mim2cc 3.9311 0.09
|
|
#endif (MIM)
|
|
#ifdef METAL5
|
|
height v3 3.6311 0.39
|
|
height allm4 4.0211 0.845
|
|
height m4fill 4.0211 0.845
|
|
height v4 4.8661 0.505
|
|
height allm5 5.3711 1.26
|
|
height m5fill 5.3711 1.26
|
|
#ifdef REDISTRIBUTION
|
|
height mrdlc 6.6311 0.63
|
|
height mrdl 7.2611 3.0
|
|
#endif (!REDISTRIBUTION)
|
|
#endif (!METAL5)
|
|
#endif (!RERAM)
|
|
|
|
# Antenna check parameters
|
|
# Note that checks w/diode diffusion are not modeled
|
|
model partial
|
|
antenna poly sidewall 50 none
|
|
antenna allcont surface 3 none
|
|
antenna li sidewall 75 0 450
|
|
antenna mcon surface 3 0 18
|
|
antenna m1,m2,m3 sidewall 400 2600 400
|
|
antenna v1 surface 3 0 18
|
|
antenna v2 surface 6 0 36
|
|
#ifdef METAL5
|
|
antenna m4,m5 sidewall 400 2600 400
|
|
antenna v3,v4 surface 6 0 36
|
|
#endif (METAL5)
|
|
|
|
tiedown alldiffnonfet
|
|
|
|
substrate *ppdiff,*mvppdiff,space/w,pwell well $SUB -dnwell,isosub
|
|
|
|
# Resistances are in milliohms per square
|
|
# Optional 3rd argument is the corner adjustment fraction
|
|
# Device values come from trtc.cor (typical corner)
|
|
|
|
variants (),(orig),(si)
|
|
|
|
resist (pwell,isosub)/well 4400000
|
|
resist (dnwell)/dwell 2200000
|
|
resist (nwell)/well 950000
|
|
resist (rpw)/well 3050000 0.5
|
|
resist (*ndiff,nsd)/active 120000
|
|
resist (*pdiff,*psd)/active 197000
|
|
resist (*mvndiff,mvnsd)/active 114000
|
|
resist (*mvpdiff,*mvpsd)/active 191000
|
|
|
|
resist ndiffres/active 120000 0.5
|
|
resist pdiffres/active 197000 0.5
|
|
resist mvndiffres/active 114000 0.5
|
|
resist mvpdiffres/active 191000 0.5
|
|
resist mrp1/active 48200 0.5
|
|
resist xhrpoly/active 319800 0.5
|
|
resist uhrpoly/active 2000000 0.5
|
|
|
|
resist (allpolynonres)/active 48200
|
|
resist rmp/active 48200
|
|
|
|
resist (allli)/locali 12800
|
|
resist (allm1)/metal1 125
|
|
resist (allm2)/metal2 125
|
|
resist (allm3)/metal3 47
|
|
#ifdef METAL5
|
|
resist (allm4)/metal4 47
|
|
resist (allm5)/metal5 29
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
resist mrdl/metali 5
|
|
#endif (REDISTRIBUTION)
|
|
|
|
contact ndc,nsc 185000
|
|
contact pdc,psc 585000
|
|
contact mvndc,mvnsc 185000
|
|
contact mvpdc,mvpsc 585000
|
|
contact pc 152000
|
|
contact mcon 9300
|
|
#ifdef RERAM
|
|
contact m2c 9000
|
|
#else
|
|
contact m2c 4500
|
|
#endif
|
|
contact m3c 3410
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
contact mimcc 4500
|
|
contact mim2cc 3410
|
|
#endif (MIM)
|
|
contact via3 3410
|
|
contact via4 380
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
contact mrdlc 6
|
|
#endif (REDISTRIBUTION)
|
|
|
|
variants (hrhc),(hrlc)
|
|
|
|
# High-end corner resistances
|
|
# No corner values available for: substrate, xhrpoly, uhrpoly, RDL
|
|
resist (pwell,isosub)/well 4400000
|
|
resist (dnwell)/dwell 2575000
|
|
resist (nwell)/well 1350000
|
|
resist (rpw)/well 3535000 0.5
|
|
resist (*ndiff,nsd)/active 132000
|
|
resist (*pdiff,*psd)/active 228000
|
|
resist (*mvndiff,mvnsd)/active 126000
|
|
resist (*mvpdiff,*mvpsd)/active 228000
|
|
|
|
resist ndiffres/active 132000 0.5
|
|
resist pdiffres/active 228000 0.5
|
|
resist mvndiffres/active 126000 0.5
|
|
resist mvpdiffres/active 228000 0.5
|
|
resist mrp1/active 55800 0.5
|
|
resist xhrpoly/active 319800 0.5
|
|
resist uhrpoly/active 2000000 0.5
|
|
|
|
resist (allpolynonres)/active 55800
|
|
resist rmp/active 55800
|
|
|
|
resist (allli)/locali 17000
|
|
resist (allm1)/metal1 145
|
|
resist (allm2)/metal2 145
|
|
resist (allm3)/metal3 56
|
|
#ifdef METAL5
|
|
resist (allm4)/metal4 56
|
|
resist (allm5)/metal5 36
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
resist mrdl/metali 5
|
|
#endif (REDISTRIBUTION)
|
|
|
|
contact ndc,nsc 280000
|
|
contact pdc,psc 840000
|
|
contact mvndc,mvnsc 280000
|
|
contact mvpdc,mvpsc 840000
|
|
contact pc 252000
|
|
contact mcon 23000
|
|
#ifdef RERAM
|
|
contact m2c 30000
|
|
#else
|
|
contact m2c 15000
|
|
#endif
|
|
contact m3c 8000
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
contact mimcc 15000
|
|
contact mim2cc 8000
|
|
#endif (MIM)
|
|
contact via3 8000
|
|
contact via4 891
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
contact mrdlc 6
|
|
#endif (REDISTRIBUTION)
|
|
|
|
variants (lrhc),(lrlc)
|
|
|
|
# Low-end corner resistances
|
|
# No corner values available for: substrate, xhrpoly, uhrpoly, RDL
|
|
resist (pwell,isosub)/well 4400000
|
|
resist (dnwell)/dwell 1825000
|
|
resist (nwell)/well 550000
|
|
resist (rpw)/well 2565000 0.5
|
|
resist (*ndiff,nsd)/active 108000
|
|
resist (*pdiff,*psd)/active 166000
|
|
resist (*mvndiff,mvnsd)/active 102000
|
|
resist (*mvpdiff,*mvpsd)/active 160000
|
|
|
|
resist ndiffres/active 108000 0.5
|
|
resist pdiffres/active 166000 0.5
|
|
resist mvndiffres/active 102000 0.5
|
|
resist mvpdiffres/active 160000 0.5
|
|
resist mrp1/active 42200 0.5
|
|
resist xhrpoly/active 319800 0.5
|
|
resist uhrpoly/active 2000000 0.5
|
|
|
|
resist (allpolynonres)/active 42200
|
|
resist rmp/active 42200
|
|
|
|
resist (allli)/locali 10500
|
|
resist (allm1)/metal1 105
|
|
resist (allm2)/metal2 105
|
|
resist (allm3)/metal3 38
|
|
#ifdef METAL5
|
|
resist (allm4)/metal4 38
|
|
resist (allm5)/metal5 21
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
resist mrdl/metali 5
|
|
#endif (REDISTRIBUTION)
|
|
|
|
contact ndc,nsc 95000
|
|
contact pdc,psc 345000
|
|
contact mvndc,mvnsc 95000
|
|
contact mvpdc,mvpsc 345000
|
|
contact pc 52000
|
|
contact mcon 1600
|
|
#ifdef RERAM
|
|
contact m2c 4000
|
|
#else
|
|
contact m2c 2000
|
|
#endif
|
|
contact m3c 500
|
|
#ifdef METAL5
|
|
#ifdef MIM
|
|
contact mimcc 2000
|
|
contact mim2cc 500
|
|
#endif (MIM)
|
|
contact via3 500
|
|
contact via4 12
|
|
#endif (METAL5)
|
|
#ifdef REDISTRIBUTION
|
|
contact mrdlc 6
|
|
#endif (REDISTRIBUTION)
|
|
|
|
variants *
|
|
|
|
# These types should not be considered as electrical nodes
|
|
resist blocktypes None
|
|
resist obstypes None
|
|
resist idtypes None
|
|
resist comment None
|
|
|
|
#-------------------------------------------------------------------------
|
|
# Parasitic capacitance values: Use document (...)
|
|
#-------------------------------------------------------------------------
|
|
# 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. All values are taken from the
|
|
# document PEX/xRC/cap_models. Fringe capacitance values are approximated.
|
|
# Units are 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.
|
|
#-------------------------------------------------------------------------
|
|
|
|
variants (),(orig),(si),(hrhc),(lrhc),(hrlc),(lrlc)
|
|
# Nominal capacitances
|
|
|
|
#deep n-well
|
|
defaultareacap dnwell dwell 120
|
|
|
|
#p-well
|
|
defaultoverlap pwell well dnwell dwell 120
|
|
|
|
#n-well
|
|
# NOTE: This value not found in PEX files
|
|
defaultareacap nwell well 120
|
|
defaultoverlap nwell well isosub dwell 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 106
|
|
# defaultperimeter allpolynonfet active 57
|
|
|
|
defaultsidewall *poly active 23
|
|
defaultareacap *poly active nwell,obswell,pwell well 106
|
|
defaultperimeter *poly active nwell,obswell,pwell well 55
|
|
defaultsideoverlap *poly active nwell,obswell,pwell well 55
|
|
|
|
#locali
|
|
defaultsidewall allli locali 33
|
|
defaultoverlap allli locali dnwell,isosub dwell 37
|
|
defaultareacap allli locali nwell,obswell,pwell well 37
|
|
defaultperimeter allli locali nwell,obswell,pwell well 41
|
|
defaultoverlap allli locali nwell,obswell,pwell well 37
|
|
defaultsideoverlap allli locali nwell,obswell,pwell well 41
|
|
|
|
#locali->diff
|
|
defaultoverlap allli locali allactivenonfet active 37
|
|
defaultsideoverlap allli locali allactivenonfet active 41
|
|
|
|
#locali->poly
|
|
defaultoverlap allli locali allpolynonres active 94
|
|
defaultsideoverlap allli locali allpolynonres active 52
|
|
defaultsideoverlap *poly active allli locali 25
|
|
|
|
#metal1
|
|
defaultsidewall allm1 metal1 45
|
|
defaultoverlap allm1 metal1 dnwell,isosub dwell 26
|
|
defaultareacap allm1 metal1 nwell,obswell,pwell well 26
|
|
defaultperimeter allm1 metal1 nwell,obswell,pwell well 41
|
|
defaultoverlap allm1 metal1 nwell,obswell,pwell well 26
|
|
defaultsideoverlap allm1 metal1 nwell,obswell,pwell well 41
|
|
|
|
#metal1->diff
|
|
defaultoverlap allm1 metal1 allactivenonfet active 26
|
|
defaultsideoverlap allm1 metal1 allactivenonfet active 41
|
|
|
|
#metal1->poly
|
|
defaultoverlap allm1 metal1 allpolynonres active 45
|
|
defaultsideoverlap allm1 metal1 allpolynonres active 47
|
|
defaultsideoverlap *poly active allm1 metal1 17
|
|
|
|
#metal1->locali
|
|
defaultoverlap allm1 metal1 allli locali 114
|
|
defaultsideoverlap allm1 metal1 allli locali 59
|
|
defaultsideoverlap allli locali allm1 metal1 35
|
|
|
|
#metal2
|
|
defaultsidewall allm2 metal2 50
|
|
|
|
#ifdef RERAM
|
|
# For ReRAM, all parasitics account for the additional 0.295um between
|
|
# metal1 and metal2
|
|
|
|
defaultoverlap allm2 metal2 dnwell,isosub dwell 15
|
|
defaultareacap allm2 metal2 nwell,obswell,pwell well 15
|
|
defaultperimeter allm2 metal2 nwell,obswell,pwell well 33
|
|
defaultoverlap allm2 metal2 nwell,obswell,pwell well 15
|
|
defaultsideoverlap allm2 metal2 nwell,obswell,pwell well 33
|
|
|
|
#metal2->diff
|
|
defaultoverlap allm2 metal2 allactivenonfet active 15
|
|
defaultsideoverlap allm2 metal2 allactivenonfet active 33
|
|
|
|
#metal2->poly
|
|
defaultoverlap allm2 metal2 allpolynonres active 20
|
|
defaultsideoverlap allm2 metal2 allpolynonres active 34
|
|
defaultsideoverlap *poly active allm2 metal2 9
|
|
|
|
#metal2->locali
|
|
defaultoverlap allm2 metal2 allli locali 29
|
|
defaultsideoverlap allm2 metal2 allli locali 35
|
|
defaultsideoverlap allli locali allm2 metal2 17
|
|
|
|
#metal2->metal1
|
|
defaultoverlap allm2 metal2 allm1 metal1 64
|
|
defaultsideoverlap allm2 metal2 allm1 metal1 32
|
|
defaultsideoverlap allm1 metal1 allm2 metal2 23
|
|
|
|
#else (!RERAM)
|
|
defaultoverlap allm2 metal2 dnwell,isosub dwell 17
|
|
defaultareacap allm2 metal2 nwell,obswell,pwell well 17
|
|
defaultperimeter allm2 metal2 nwell,obswell,pwell well 38
|
|
defaultoverlap allm2 metal2 nwell,obswell,pwell well 17
|
|
defaultsideoverlap allm2 metal2 nwell,obswell,pwell well 38
|
|
|
|
#metal2->diff
|
|
defaultoverlap allm2 metal2 allactivenonfet active 17
|
|
defaultsideoverlap allm2 metal2 allactivenonfet active 38
|
|
|
|
#metal2->poly
|
|
defaultoverlap allm2 metal2 allpolynonres active 24
|
|
defaultsideoverlap allm2 metal2 allpolynonres active 41
|
|
defaultsideoverlap *poly active allm2 metal2 11
|
|
|
|
#metal2->locali
|
|
defaultoverlap allm2 metal2 allli locali 38
|
|
defaultsideoverlap allm2 metal2 allli locali 46
|
|
defaultsideoverlap allli locali allm2 metal2 22
|
|
|
|
#metal2->metal1
|
|
defaultoverlap allm2 metal2 allm1 metal1 134
|
|
defaultsideoverlap allm2 metal2 allm1 metal1 67
|
|
defaultsideoverlap allm1 metal1 allm2 metal2 48
|
|
|
|
#endif (!RERAM)
|
|
|
|
#metal3
|
|
defaultsidewall allm3 metal3 63
|
|
|
|
#ifdef RERAM
|
|
defaultoverlap allm3 metal3 dnwell,isosub dwell 11
|
|
defaultareacap allm3 metal3 nwell,obswell,pwell well 11
|
|
defaultperimeter allm3 metal3 nwell,obswell,pwell well 37
|
|
defaultoverlap allm3 metal3 nwell,obswell,pwell well 11
|
|
defaultsideoverlap allm3 metal3 nwell,obswell,pwell well 37
|
|
|
|
#metal3->diff
|
|
defaultoverlap allm3 metal3 allactive active 11
|
|
defaultsideoverlap allm3 metal3 allactive active 37
|
|
|
|
#metal3->poly
|
|
defaultoverlap allm3 metal3 allpolynonres active 14
|
|
defaultsideoverlap allm3 metal3 allpolynonres active 39
|
|
defaultsideoverlap *poly active allm3 metal3 8
|
|
|
|
#metal3->locali
|
|
defaultoverlap allm3 metal3 allli locali 18
|
|
defaultsideoverlap allm3 metal3 allli locali 40
|
|
defaultsideoverlap allli locali allm3 metal3 13
|
|
|
|
#metal3->metal1
|
|
defaultoverlap allm3 metal3 allm1 metal1 27
|
|
defaultsideoverlap allm3 metal3 allm1 metal1 43
|
|
defaultsideoverlap allm1 metal1 allm3 metal3 21
|
|
|
|
#else (!RERAM)
|
|
defaultoverlap allm3 metal3 dnwell,isosub dwell 12
|
|
defaultareacap allm3 metal3 nwell,obswell,pwell well 12
|
|
defaultperimeter allm3 metal3 nwell,obswell,pwell well 41
|
|
defaultoverlap allm3 metal3 nwell,obswell,pwell well 12
|
|
defaultsideoverlap allm3 metal3 nwell,obswell,pwell well 41
|
|
|
|
#metal3->diff
|
|
defaultoverlap allm3 metal3 allactive active 12
|
|
defaultsideoverlap allm3 metal3 allactive active 41
|
|
|
|
#metal3->poly
|
|
defaultoverlap allm3 metal3 allpolynonres active 16
|
|
defaultsideoverlap allm3 metal3 allpolynonres active 44
|
|
defaultsideoverlap *poly active allm3 metal3 9
|
|
|
|
#metal3->locali
|
|
defaultoverlap allm3 metal3 allli locali 21
|
|
defaultsideoverlap allm3 metal3 allli locali 47
|
|
defaultsideoverlap allli locali allm3 metal3 15
|
|
|
|
#metal3->metal1
|
|
defaultoverlap allm3 metal3 allm1 metal1 35
|
|
defaultsideoverlap allm3 metal3 allm1 metal1 55
|
|
defaultsideoverlap allm1 metal1 allm3 metal3 27
|
|
|
|
#endif (!RERAM)
|
|
|
|
#metal3->metal2
|
|
defaultoverlap allm3 metal3 allm2 metal2 86
|
|
defaultsideoverlap allm3 metal3 allm2 metal2 70
|
|
defaultsideoverlap allm2 metal2 allm3 metal3 44
|
|
|
|
#ifdef METAL5
|
|
#metal4
|
|
defaultsidewall allm4 metal4 67
|
|
#ifdef RERAM
|
|
# defaultareacap alltopm metal4 well 6
|
|
defaultoverlap allm4 metal4 dnwell,isosub dwell 8
|
|
areacap allm4/m4 8
|
|
defaultperimeter allm4 metal4 nwell,obswell,pwell well 34
|
|
defaultoverlap allm4 metal4 nwell,obswell,pwell well 8
|
|
defaultsideoverlap allm4 metal4 nwell,obswell,pwell well 34
|
|
|
|
#metal4->diff
|
|
defaultoverlap allm4 metal4 allactivenonfet active 8
|
|
defaultsideoverlap allm4 metal4 allactivenonfet active 34
|
|
|
|
#metal4->poly
|
|
defaultoverlap allm4 metal4 allpolynonres active 9
|
|
defaultsideoverlap allm4 metal4 allpolynonres active 35
|
|
defaultsideoverlap *poly active allm4 metal4 6
|
|
|
|
#metal4->locali
|
|
defaultoverlap allm4 metal4 allli locali 11
|
|
defaultsideoverlap allm4 metal4 allli locali 36
|
|
defaultsideoverlap allli locali allm4 metal4 9
|
|
|
|
#metal4->metal1
|
|
defaultoverlap allm4 metal4 allm1 metal1 13
|
|
defaultsideoverlap allm4 metal4 allm1 metal1 38
|
|
defaultsideoverlap allm1 metal1 allm4 metal4 15
|
|
|
|
#else (!RERAM)
|
|
# defaultareacap alltopm metal4 well 6
|
|
defaultoverlap allm4 metal4 dnwell,isosub dwell 8
|
|
areacap allm4/m4 8
|
|
defaultperimeter allm4 metal4 nwell,obswell,pwell well 37
|
|
defaultoverlap allm4 metal4 nwell,obswell,pwell well 8
|
|
defaultsideoverlap allm4 metal4 nwell,obswell,pwell well 37
|
|
|
|
#metal4->diff
|
|
defaultoverlap allm4 metal4 allactivenonfet active 8
|
|
defaultsideoverlap allm4 metal4 allactivenonfet active 37
|
|
|
|
#metal4->poly
|
|
defaultoverlap allm4 metal4 allpolynonres active 10
|
|
defaultsideoverlap allm4 metal4 allpolynonres active 38
|
|
defaultsideoverlap *poly active allm4 metal4 6
|
|
|
|
#metal4->locali
|
|
defaultoverlap allm4 metal4 allli locali 12
|
|
defaultsideoverlap allm4 metal4 allli locali 40
|
|
defaultsideoverlap allli locali allm4 metal4 10
|
|
|
|
#metal4->metal1
|
|
defaultoverlap allm4 metal4 allm1 metal1 15
|
|
defaultsideoverlap allm4 metal4 allm1 metal1 43
|
|
defaultsideoverlap allm1 metal1 allm4 metal4 16
|
|
|
|
#endif (!RERAM)
|
|
|
|
#metal4->metal2
|
|
defaultoverlap allm4 metal4 allm2 metal2 20
|
|
defaultsideoverlap allm4 metal4 allm2 metal2 46
|
|
defaultsideoverlap allm2 metal2 allm4 metal4 22
|
|
|
|
#metal4->metal3
|
|
defaultoverlap allm4 metal4 allm3 metal3 84
|
|
defaultsideoverlap allm4 metal4 allm3 metal3 71
|
|
defaultsideoverlap allm3 metal3 allm4 metal4 43
|
|
|
|
#metal5
|
|
defaultsidewall allm5 metal5 127
|
|
#ifdef RERAM
|
|
# defaultareacap allm5 metal5 well 6
|
|
defaultoverlap allm5 metal5 dnwell,isosub dwell 6
|
|
areacap allm5/m5 6
|
|
defaultoverlap allm5 metal5 nwell,obswell,pwell well 6
|
|
defaultperimeter allm5 metal5 nwell,obswell,pwell well 36
|
|
defaultsideoverlap allm5 metal5 nwell,obswell,pwell well 36
|
|
|
|
#metal5->diff
|
|
defaultoverlap allm5 metal5 allactivenonfet active 6
|
|
defaultsideoverlap allm5 metal5 allactivenonfet active 36
|
|
|
|
#metal5->poly
|
|
defaultoverlap allm5 metal5 allpolynonres active 7
|
|
defaultsideoverlap allm5 metal5 allpolynonres active 38
|
|
defaultsideoverlap *poly active allm5 metal5 6
|
|
|
|
#metal5->locali
|
|
defaultoverlap allm5 metal5 allli locali 8
|
|
defaultsideoverlap allm5 metal5 allli locali 39
|
|
defaultsideoverlap allli locali allm5 metal5 7
|
|
|
|
#metal5->metal1
|
|
defaultoverlap allm5 metal5 allm1 metal1 9
|
|
defaultsideoverlap allm5 metal5 allm1 metal1 40
|
|
defaultsideoverlap allm1 metal1 allm5 metal5 11
|
|
|
|
#else (!RERAM)
|
|
# defaultareacap allm5 metal5 well 6
|
|
defaultoverlap allm5 metal5 dnwell,isosub dwell 6
|
|
areacap allm5/m5 6
|
|
defaultoverlap allm5 metal5 nwell,obswell,pwell well 6
|
|
defaultperimeter allm5 metal5 nwell,obswell,pwell well 39
|
|
defaultsideoverlap allm5 metal5 nwell,obswell,pwell well 39
|
|
|
|
#metal5->diff
|
|
defaultoverlap allm5 metal5 allactivenonfet active 6
|
|
defaultsideoverlap allm5 metal5 allactivenonfet active 39
|
|
|
|
#metal5->poly
|
|
defaultoverlap allm5 metal5 allpolynonres active 7
|
|
defaultsideoverlap allm5 metal5 allpolynonres active 40
|
|
defaultsideoverlap *poly active allm5 metal5 6
|
|
|
|
#metal5->locali
|
|
defaultoverlap allm5 metal5 allli locali 8
|
|
defaultsideoverlap allm5 metal5 allli locali 41
|
|
defaultsideoverlap allli locali allm5 metal5 8
|
|
|
|
#metal5->metal1
|
|
defaultoverlap allm5 metal5 allm1 metal1 9
|
|
defaultsideoverlap allm5 metal5 allm1 metal1 43
|
|
defaultsideoverlap allm1 metal1 allm5 metal5 12
|
|
|
|
#endif (!RERAM)
|
|
|
|
#metal5->metal2
|
|
defaultoverlap allm5 metal5 allm2 metal2 11
|
|
defaultsideoverlap allm5 metal5 allm2 metal2 46
|
|
defaultsideoverlap allm2 metal2 allm5 metal5 16
|
|
|
|
#metal5->metal3
|
|
defaultoverlap allm5 metal5 allm3 metal3 20
|
|
defaultsideoverlap allm5 metal5 allm3 metal3 54
|
|
defaultsideoverlap allm3 metal3 allm5 metal5 28
|
|
|
|
#metal5->metal4
|
|
defaultoverlap allm5 metal5 allm4 metal4 68
|
|
defaultsideoverlap allm5 metal5 allm4 metal4 83
|
|
defaultsideoverlap allm4 metal4 allm5 metal5 47
|
|
#endif (METAL5)
|
|
|
|
variants *
|
|
|
|
#ifdef REDISTRIBUTION
|
|
#endif (REDISTRIBUTION)
|
|
|
|
# Devices: Base models (not subcircuit wrappers)
|
|
|
|
variants (),(si),(hrhc),(lrhc),(hrlc),(lrlc)
|
|
|
|
device msubcircuit sky130_fd_pr__pfet_01v8 pfet,scpfet \
|
|
*pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__special_pfet_pass ppu \
|
|
*pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__pfet_01v8_lvt pfetlvt \
|
|
*pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__pfet_01v8_mvt pfetmvt \
|
|
*pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__pfet_01v8_hvt pfethvt,scpfethvt \
|
|
*pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
|
|
device msubcircuit sky130_fd_pr__nfet_01v8 nfet,scnfet \
|
|
*ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__special_nfet_latch npd \
|
|
*ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__special_nfet_latch npd \
|
|
*ndiff,ndiffres *srampvar pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__special_nfet_pass npass \
|
|
*ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__nfet_01v8_lvt nfetlvt \
|
|
*ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_bs_flash__special_sonosfet_star nsonos \
|
|
*ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device subcircuit sky130_fd_pr__cap_var_lvt varactor \
|
|
*nndiff nwell error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
device subcircuit sky130_fd_pr__cap_var_hvt varhvt \
|
|
*nndiff nwell error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
device subcircuit sky130_fd_pr__cap_var mvvaractor \
|
|
*mvnndiff nwell error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
|
|
# Bipolars
|
|
device msubcircuit sky130_fd_pr__npn_05v5_W1p00L1p00 npn *ndiff dnwell space/w \
|
|
error +npn1p00
|
|
device msubcircuit sky130_fd_pr__npn_05v5_W1p00L2p00 npn *ndiff dnwell space/w \
|
|
error +npn2p00
|
|
device msubcircuit sky130_fd_pr__npn_05v5 npn *ndiff dnwell space/w error a2=area
|
|
device msubcircuit sky130_fd_pr__pnp_05v5_W0p68L0p68 pnp *pdiff \
|
|
pwell,space/w +pnp0p68
|
|
device msubcircuit sky130_fd_pr__pnp_05v5_W3p40L3p40 pnp *pdiff \
|
|
pwell,space/w +pnp3p40
|
|
device msubcircuit sky130_fd_pr__pnp_05v5 pnp *pdiff pwell,space/w a2=area
|
|
device msubcircuit sky130_fd_pr__npn_11v0_W1p00L1p00 npn *mvndiff \
|
|
dnwell space/w error +npn11p0
|
|
device msubcircuit sky130_fd_pr__npn_11v0 npn *mvndiff dnwell space/w error a2=area
|
|
|
|
# Ignore the extended-drain FET geometry that forms part of the high-voltage
|
|
# bipolar devices.
|
|
device msubcircuit Ignore mvnfet *mvndiff,mvndiffres dnwell pwell,space/w error +npn,pnp
|
|
device msubcircuit Ignore mvpfet *mvpdiff,mvpdiffres pwell,space/w nwell error +npn,pnp
|
|
|
|
# Extended drain devices (must appear before the regular devices)
|
|
device msubcircuit sky130_fd_pr__nfet_20v0_nvt mvnnfet *mvndiff,mvndiffres \
|
|
dnwell pwell,space/w error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
device msubcircuit sky130_fd_pr__nfet_20v0 mvnfet *mvndiff,mvndiffres \
|
|
dnwell pwell,space/w error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
device msubcircuit sky130_fd_pr__pfet_20v0 mvpfet *mvpdiff,mvpdiffres \
|
|
pwell,space/w nwell error l=l w=w a1=as a2=ad p1=ps p2=pd
|
|
|
|
device msubcircuit sky130_fd_pr__pfet_g5v0d10v5 mvpfet \
|
|
*mvpdiff,mvpdiffres *mvpdiff,mvpdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__nfet_g5v0d10v5 mvnfet \
|
|
*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__nfet_05v0_nvt mvnnfet \
|
|
*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__nfet_03v3_nvt nnfet \
|
|
*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd \
|
|
*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
device msubcircuit sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd \
|
|
*mvpdiff,mvpdiffres *mvpdiff,mvpdiffres nwell error l=l w=w \
|
|
a1=as p1=ps a2=ad p2=pd
|
|
|
|
device resistor sky130_fd_pr__res_generic_l1 rli1 *li,coreli
|
|
device resistor sky130_fd_pr__res_generic_m1 rmetal1 *metal1
|
|
device resistor sky130_fd_pr__res_generic_m2 rmetal2 *metal2
|
|
device resistor sky130_fd_pr__res_generic_m3 rmetal3 *metal3
|
|
#ifdef METAL5
|
|
device resistor sky130_fd_pr__res_generic_m4 rm4 *m4
|
|
device resistor sky130_fd_pr__res_generic_m5 rm5 *m5
|
|
#endif (METAL5)
|
|
device ndiode sky130_fd_pr__model__parasitic__diode_ps2dn \
|
|
photo pwell,space/w error a=area
|
|
|
|
device rsubcircuit sky130_fd_pr__res_high_po_0p35 xhrpoly \
|
|
xpc pwell,space/w error +res0p35 l=l
|
|
device rsubcircuit sky130_fd_pr__res_high_po_0p69 xhrpoly \
|
|
xpc pwell,space/w error +res0p69 l=l
|
|
device rsubcircuit sky130_fd_pr__res_high_po_1p41 xhrpoly \
|
|
xpc pwell,space/w error +res1p41 l=l
|
|
device rsubcircuit sky130_fd_pr__res_high_po_2p85 xhrpoly \
|
|
xpc pwell,space/w error +res2p85 l=l
|
|
device rsubcircuit sky130_fd_pr__res_high_po_5p73 xhrpoly \
|
|
xpc pwell,space/w error +res5p73 l=l
|
|
device rsubcircuit sky130_fd_pr__res_high_po xhrpoly \
|
|
xpc pwell,space/w error l=l w=w
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po_0p35 uhrpoly \
|
|
xpc pwell,space/w error +res0p35 l=l
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po_0p69 uhrpoly \
|
|
xpc pwell,space/w error +res0p69 l=l
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po_1p41 uhrpoly \
|
|
xpc pwell,space/w error +res1p41 l=l
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po_2p85 uhrpoly \
|
|
xpc pwell,space/w error +res2p85 l=l
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po_5p73 uhrpoly \
|
|
xpc pwell,space/w error +res5p73 l=l
|
|
device rsubcircuit sky130_fd_pr__res_xhigh_po uhrpoly \
|
|
xpc pwell,space/w error l=l w=w
|
|
|
|
device rsubcircuit sky130_fd_pr__res_generic_nd ndiffres \
|
|
*ndiff pwell,space/w error l=l w=w
|
|
device rsubcircuit sky130_fd_pr__res_generic_pd pdiffres \
|
|
*pdiff nwell error l=l w=w
|
|
device rsubcircuit sky130_fd_pr__res_iso_pw rpw \
|
|
pwell dnwell error l=l w=w
|
|
device rsubcircuit sky130_fd_pr__res_generic_nd__hv mvndiffres \
|
|
*mvndiff pwell,space/w error l=l w=w
|
|
device rsubcircuit sky130_fd_pr__res_generic_pd__hv mvpdiffres \
|
|
*mvpdiff nwell error l=l w=w
|
|
|
|
device resistor sky130_fd_pr__res_generic_po rmp *poly
|
|
device resistor sky130_fd_pr__res_generic_po mrp1 *poly
|
|
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5 *pdiode nwell a=area p=pj
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5_lvt *pdiodelvt nwell a=area p=pj
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5_hvt *pdiodehvt nwell a=area p=pj
|
|
device pdiode sky130_fd_pr__diode_pd2nw_11v0 *mvpdiode nwell a=area p=pj
|
|
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5 *ndiode pwell,space/w a=area p=pj
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5_lvt *ndiodelvt pwell,space/w a=area p=pj
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5_nvt *nndiode pwell,space/w a=area p=pj
|
|
device ndiode sky130_fd_pr__diode_pw2nd_11v0 *mvndiode pwell,space/w a=area p=pj
|
|
|
|
#ifdef RERAM
|
|
device csubcircuit sky130_fd_pr__reram_reram_cell reram m1 a=area_ox
|
|
#endif (RERAM)
|
|
|
|
#ifdef MIM
|
|
device csubcircuit sky130_fd_pr__cap_mim_m3_1 *mimcap *m3 w=w l=l
|
|
device csubcircuit sky130_fd_pr__cap_mim_m3_2 *mimcap2 *m4 w=w l=l
|
|
#endif (MIM)
|
|
|
|
variants (orig)
|
|
|
|
device mosfet sky130_fd_pr__pfet_01v8 scpfet,pfet pdiff,pdiffres,pdc nwell
|
|
device mosfet sky130_fd_pr__special_pfet_pass ppu pdiff,pdiffres,pdc nwell
|
|
device mosfet sky130_fd_pr__pfet_01v8_lvt pfetlvt pdiff,pdiffres,pdc nwell
|
|
device mosfet sky130_fd_pr__pfet_01v8_mvt pfetmvt pdiff,pdiffres,pdc nwell
|
|
device mosfet sky130_fd_pr__pfet_01v8_hvt scpfethvt,pfethvt pdiff,pdiffres,pdc nwell
|
|
device mosfet sky130_fd_pr__nfet_01v8 scnfet,nfet ndiff,ndiffres,ndc pwell,space/w
|
|
device mosfet sky130_fd_pr__special_nfet_pass npass ndiff,ndiffres,ndc pwell,space/w
|
|
device mosfet sky130_fd_pr__special_nfet_latch npd ndiff,ndiffres,ndc pwell,space/w
|
|
device mosfet sky130_fd_pr__special_nfet_latch npd ndiff,ndiffres,ndc pwell,space/w
|
|
device mosfet sky130_fd_pr__nfet_01v8_lvt nfetlvt ndiff,ndiffres,ndc pwell,space/w
|
|
device mosfet sky130_fd_bs_flash__special_sonosfet_star nsonos ndiff,ndiffres,ndc \
|
|
pwell,space/w
|
|
|
|
# Note that corenvar, corepvar are not considered devices, and extract as
|
|
# parasitic capacitance instead (but cap values need to be added).
|
|
|
|
# Extended drain devices (must appear before the regular devices)
|
|
device mosfet sky130_fd_pr__nfet_20v0_nvt mvnnfet *mvndiff,mvndiffres \
|
|
dnwell pwell,space/w error
|
|
device mosfet sky130_fd_pr__nfet_20v0 mvnfet *mvndiff,mvndiffres \
|
|
dnwell pwell,space/w error
|
|
device mosfet sky130_fd_pr__pfet_20v0 mvpfet *mvpdiff,mvpdiffres \
|
|
pwell,space/w nwell error
|
|
|
|
device mosfet sky130_fd_pr__pfet_g5v0d10v5 mvpfet mvpdiff,mvpdiffres,mvpdc nwell
|
|
device mosfet sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd mvpdiff,mvpdiffres,mvpdc nwell
|
|
device mosfet sky130_fd_pr__nfet_g5v0d10v5 mvnfet mvndiff,mvndiffres,mvndc pwell,space/w
|
|
device mosfet sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd mvndiff,mvndiffres,mvndc pwell,space/w
|
|
device mosfet sky130_fd_pr__nfet_05v0_nvt mvnnfet *mvndiff,mvndiffres pwell,space/w
|
|
device mosfet sky130_fd_pr__nfet_03v3_nvt nnfet *mvndiff,mvndiffres pwell,space/w
|
|
|
|
# These devices always extract as subcircuits
|
|
device subcircuit sky130_fd_pr__cap_var_lvt varactor *nndiff nwell error l=l w=w
|
|
device subcircuit sky130_fd_pr__cap_var_hvt varhvt *nndiff nwell error l=l w=w
|
|
device subcircuit sky130_fd_pr__cap_var mvvaractor *mvnndiff nwell error l=l w=w
|
|
|
|
device resistor sky130_fd_pr__res_generic_po rmp *poly
|
|
device resistor sky130_fd_pr__res_generic_l1 rli1 *li,coreli
|
|
device resistor sky130_fd_pr__res_generic_m1 rmetal1 *metal1
|
|
device resistor sky130_fd_pr__res_generic_m2 rmetal2 *metal2
|
|
device resistor sky130_fd_pr__res_generic_m3 rmetal3 *metal3
|
|
#ifdef METAL5
|
|
device resistor sky130_fd_pr__res_generic_m4 rm4 *m4
|
|
device resistor sky130_fd_pr__res_generic_m5 rm5 *m5
|
|
#endif (METAL5)
|
|
|
|
device resistor sky130_fd_pr__res_high_po_0p35 xhrpoly xpc +res0p35
|
|
device resistor sky130_fd_pr__res_high_po_0p69 xhrpoly xpc +res0p69
|
|
device resistor sky130_fd_pr__res_high_po_1p41 xhrpoly xpc +res1p41
|
|
device resistor sky130_fd_pr__res_high_po_2p85 xhrpoly xpc +res2p85
|
|
device resistor sky130_fd_pr__res_high_po_5p73 xhrpoly xpc +res5p73
|
|
device resistor sky130_fd_pr__res_high_po xhrpoly xpc
|
|
device resistor sky130_fd_pr__res_xhigh_po_0p35 uhrpoly xpc +res0p35
|
|
device resistor sky130_fd_pr__res_xhigh_po_0p69 uhrpoly xpc +res0p69
|
|
device resistor sky130_fd_pr__res_xhigh_po_1p41 uhrpoly xpc +res1p41
|
|
device resistor sky130_fd_pr__res_xhigh_po_2p85 uhrpoly xpc +res2p85
|
|
device resistor sky130_fd_pr__res_xhigh_po_5p73 uhrpoly xpc +res5p73
|
|
device resistor sky130_fd_pr__res_xhigh_po uhrpoly xpc
|
|
device resistor sky130_fd_pr__res_generic_po mrp1 *poly
|
|
device resistor sky130_fd_pr__res_generic_nd ndiffres *ndiff
|
|
device resistor sky130_fd_pr__res_generic_pd pdiffres *pdiff
|
|
device resistor mrdn_hv mvndiffres *mvndiff
|
|
device resistor mrdp_hv mvpdiffres *mvpdiff
|
|
device resistor sky130_fd_pr__res_iso_pw rpw pwell
|
|
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5 *ndiode pwell,space/w a=area
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5_lvt *ndiodelvt pwell,space/w a=area
|
|
device ndiode sky130_fd_pr__diode_pw2nd_05v5_nvt *nndiode pwell,space/w a=area
|
|
device ndiode sky130_fd_pr__diode_pw2nd_11v0 *mvndiode pwell,space/w a=area
|
|
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5 *pdiode nwell a=area
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5_lvt *pdiodelvt nwell a=area
|
|
device pdiode sky130_fd_pr__diode_pd2nw_05v5_hvt *pdiodehvt nwell a=area
|
|
device pdiode sky130_fd_pr__diode_pd2nw_11v0 *mvpdiode nwell a=area
|
|
|
|
device bjt sky130_fd_pr__npn_05v5_W1p00L1p00 npn *ndiff dnwell space/w error +npn1p00
|
|
device bjt sky130_fd_pr__npn_05v5_W1p00L2p00 npn *ndiff dnwell space/w error +npn2p00
|
|
device bjt sky130_fd_pr__npn_05v5 npn *ndiff dnwell space/w error a2=area
|
|
device bjt sky130_fd_pr__pnp_05v5_W0p68L0p68 pnp *pdiff pwell,space/w +pnp0p68
|
|
device bjt sky130_fd_pr__pnp_05v5_W3p40L3p40 pnp *pdiff pwell,space/w +pnp3p40
|
|
device bjt sky130_fd_pr__pnp_05v5 pnp *pdiff pwell,space/w a2=area
|
|
device bjt sky130_fd_pr__npn_11v0_W1p00L1p00 npn *mvndiff dnwell space/w error +npn11p0
|
|
device bjt sky130_fd_pr__npn_11v0 npn *mvndiff dnwell space/w error a2=area
|
|
|
|
#ifdef MIM
|
|
device capacitor sky130_fd_pr__cap_mim_m3_1 *mimcap *m3 1
|
|
device capacitor sky130_fd_pr__cap_mim_m3_2 *mimcap2 *m4 1
|
|
#endif (MIM)
|
|
|
|
end
|
|
|
|
#-----------------------------------------------------
|
|
# Wiring tool definitions
|
|
#-----------------------------------------------------
|
|
|
|
wiring
|
|
# All wiring values are in nanometers
|
|
scalefactor 10
|
|
|
|
contact mcon 170 li 0 0 m1 30 60
|
|
contact v1 260 m1 0 30 m2 0 30
|
|
contact v2 280 m2 0 45 m3 25 0
|
|
#ifdef METAL5
|
|
contact v3 320 m3 0 30 m4 5 5
|
|
contact v4 1180 m4 0 m5 120
|
|
#endif (METAL5)
|
|
|
|
contact pc 170 poly 50 80 li 0 80
|
|
contact pdc 170 pdiff 40 60 li 0 80
|
|
contact ndc 170 ndiff 40 60 li 0 80
|
|
contact psc 170 psd 40 60 li 0 80
|
|
contact nsc 170 nsd 40 60 li 0 80
|
|
|
|
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 fillblock4 no_color_at_all
|
|
draw fomfill no_color_at_all
|
|
draw polyfill no_color_at_all
|
|
draw m1fill no_color_at_all
|
|
draw m2fill no_color_at_all
|
|
draw m3fill no_color_at_all
|
|
draw m4fill no_color_at_all
|
|
draw m5fill no_color_at_all
|
|
draw nwell cwell
|
|
end
|
|
|