| ### |
| ### Source file TECHNAME.tech |
| ### Process this file with the preproc.py macro processor |
| ### |
| #---------------------------------------------------------- |
| # Copyright (c) 2022 Efabless, Inc. |
| # Techfile created by R. Timothy Edwards for the Google/ |
| # Global Foundries Open PDK project. |
| # |
| #---------------------------------------------------------- |
| # This file is designed to be used with magic |
| # versions 8.3 or newer. |
| # |
| # Rules reflect lambda = 0.05um. Minimum grid is 0.005um |
| #---------------------------------------------------------- |
| tech |
| format 34 |
| TECHNAME |
| end |
| |
| version |
| version REVISION |
| description "Global Foundries 180mcu: open PDK rules and DRC" |
| requires magic-8.3.353 |
| end |
| |
| #----------------------------------------------------- |
| # Tile planes |
| #----------------------------------------------------- |
| |
| planes |
| dwell,dw |
| well,w |
| active,a |
| metal1,m1 |
| metal2,m2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| metal3,m3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| metal4,m4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| metal5,m5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| metaltp,mtp |
| #endif (METALS6) |
| block,b |
| comment,c |
| end |
| |
| #----------------------------------------------------- |
| # Tile types |
| #----------------------------------------------------- |
| |
| types |
| # Deep nwell |
| dwell deepnwell,dnwell,dnw |
| dwell isosubstrate,isosub |
| |
| # Wells outside deep nwell |
| well nwell,nw |
| well pwell,pw |
| # Well obstruction layer |
| -well obswell |
| # Well resistors |
| well rnw,rnwell |
| |
| # Transistors |
| active nmos,ntransistor,nfet |
| active pmos,ptransistor,pfet |
| active nnmos,nntransistor,nnfet |
| active mvnmos,mvntransistor,mvnfet |
| active mvpmos,mvptransistor,mvpfet |
| active mvnnmos,mvnntransistor,mvnnfet |
| # Diffusions |
| active ndiff,ndiffusion,ndif |
| active pdiff,pdiffusion,pdif |
| active mvndiff,mvndiffusion,mvndif |
| active mvpdiff,mvpdiffusion,mvpdif |
| active ndiffc,ndcontact,ndc |
| active pdiffc,pdcontact,pdc |
| active mvndiffc,mvndcontact,mvndc |
| active mvpdiffc,mvpdcontact,mvpdc |
| active psubdiff,psubstratepdiff,ppdiff,ppd,psd |
| active nsubdiff,nsubstratendiff,nndiff,nnd,nsd |
| active mvpsubdiff,mvpsubstratepdiff,mvppdiff,mvppd,mvpsd |
| active mvnsubdiff,mvnsubstratendiff,mvnndiff,mvnnd,mvnsd |
| active psubdiffcont,psubstratepcontact,psc |
| active nsubdiffcont,nsubstratencontact,nsc |
| active mvpsubdiffcont,mvpsubstratepcontact,mvpsc |
| active mvnsubdiffcont,mvnsubstratencontact,mvnsc |
| -active obsactive |
| -active mvobsactive |
| # Varactors |
| active nvaractor,nvaract,nvar |
| active pvaractor,pvaract,pvar |
| active mvnvaractor,mvnvaract,mvnvar |
| active mvpvaractor,mvpvaract,mvpvar |
| # MOSCAPs |
| -active nmoscap,ncap |
| -active pmoscap,pcap |
| -active mvnmoscap,mvncap |
| -active mvpmoscap,mvpcap |
| # Poly |
| active polysilicon,poly,p |
| active polycontact,pcontact,polycut,pc,polyc |
| # Resistors |
| active npolyres,npres,rnp |
| active ppolyres,ppres,rpp |
| active npolysilicide,nsresistor,nspres,rnps |
| active ppolysilicide,psresistor,pspres,rpps |
| #ifdef HRPOLY1K |
| active nhighres,nhires,hires |
| active mvnhighres,mvnhires,mvhires |
| #endif (HRPOLY1K) |
| active ndiffres,rnd,rdn,rndiff |
| active pdiffres,rpd,rdp,rpdiff |
| active ndiffsilicide,rnds,rdns,rndiffs |
| active pdiffsilicide,rpds,rdps,rpdiffs |
| active mvndiffres,mvrnd,mvrdn,mvrndiff |
| active mvpdiffres,mvrpd,mvrdp,mvrpdiff |
| active mvndiffsilicide,mvrnds,mvrdns,mvrndiffs |
| active mvpdiffsilicide,mvrpds,mvrdps,mvrpdiffs |
| # Diodes |
| active pdiode,pdi |
| active ndiode,ndi |
| active nndiode,nndi |
| active pdiodec,pdic |
| active ndiodec,ndic |
| active nndiodec,nndic |
| active mvpdiode,mvpdi |
| active mvndiode,mvndi |
| active mvnndiode,mvnndi |
| active mvpdiodec,mvpdic |
| active mvndiodec,mvndic |
| active mvnndiodec,mvnndic |
| |
| -active filldiff |
| -active fillpoly |
| |
| metal1 metal1,m1,met1 |
| metal1 rmetal1,rm1,rmet1 |
| -metal1 m1hole |
| metal1 via1,m2contact,m2cut,m2c,via,v,v1 |
| -metal1 obsm1 |
| -metal1 fillm1 |
| -metal1 obsv1 |
| metal1 padl |
| |
| metal2 metal2,m2,met2 |
| metal2 rmetal2,rm2,rmet2 |
| -metal2 m2hole |
| metal2 via2,m3contact,m3cut,m3c,v2 |
| -metal2 obsm2 |
| -metal2 fillm2 |
| -metal2 obsv2 |
| #ifdef MIM |
| #ifdef METALS3 |
| metal2 mimcap,mim,capm |
| metal2 mimcapcontact,mimcapc,mimcc,capmc |
| #elseif defined(METALS4) |
| metal3 mimcap,mim,capm |
| metal3 mimcapcontact,mimcapc,mimcc,capmc |
| #elseif defined(METALS5) |
| metal4 mimcap,mim,capm |
| metal4 mimcapcontact,mimcapc,mimcc,capmc |
| #elseif defined(METALS6) |
| metal5 mimcap,mim,capm |
| metal5 mimcapcontact,mimcapc,mimcc,capmc |
| #endif |
| #endif (MIM) |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| metal3 metal3,m3,met3 |
| metal3 rmetal3,rm3,rmet3 |
| -metal3 m3hole |
| -metal3 obsm3 |
| -metal3 fillm3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| metal3 via3,v3 |
| |
| metal4 metal4,m4,met4 |
| metal4 rmetal4,rm4,rmet4 |
| -metal4 m4hole |
| -metal4 obsm4 |
| -metal4 fillm4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef (METALS5 || METALS6) |
| metal4 via4,v4 |
| |
| metal5 metal5,m5,met5 |
| metal5 rm5,rmetal5,rmet5 |
| -metal5 m5hole |
| -metal5 obsm5 |
| -metal5 fillm5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| metal5 viatp,vtp |
| |
| metaltp metaltp,mtp,mettp |
| metaltp rmtp,rmetaltp,rmettp |
| -metaltp mtphole |
| -metaltp obsmtp |
| -metaltp fillmtp |
| #endif (METALS6) |
| |
| block glass |
| block fillblock |
| |
| -comment lvstext |
| comment comment |
| -comment obscomment |
| |
| end |
| |
| #----------------------------------------------------- |
| # Magic contact types |
| #----------------------------------------------------- |
| |
| contact |
| pc poly metal1 |
| ndc ndiff metal1 |
| pdc pdiff metal1 |
| nsc nsd metal1 |
| psc psd metal1 |
| ndic ndiode metal1 |
| nndic nndiode metal1 |
| pdic pdiode metal1 |
| |
| mvndc mvndiff metal1 |
| mvpdc mvpdiff metal1 |
| mvnsc mvnsd metal1 |
| mvpsc mvpsd metal1 |
| mvndic mvndiode metal1 |
| mvpdic mvpdiode metal1 |
| mvnndic mvnndiode metal1 |
| |
| via1 metal1 metal2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| via2 metal2 metal3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| via3 metal3 metal4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| via4 metal4 metal5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| viatp metal5 metaltp |
| #endif (METALS6) |
| |
| #ifdef MIM |
| #ifdef METALS3 |
| mimcc mimcap metal3 |
| #elseif defined(METALS4) |
| mimcc mimcap metal4 |
| #elseif defined(METALS5) |
| mimcc mimcap metal5 |
| #elseif defined(METALS6) |
| mimcc mimcap metaltp |
| #endif |
| #endif (MIM) |
| stackable |
| |
| #ifdef METALS3 |
| padl m1 m2 m3 glass |
| #elseif defined(METALS4) |
| padl m1 m2 m3 m4 glass |
| #elseif defined(METALS5) |
| padl m1 m2 m3 m4 m5 glass |
| #elseif defined(METALS6) |
| padl m1 m2 m3 m4 m5 mtp glass |
| #else |
| padl m1 m2 glass |
| #endif |
| end |
| |
| #----------------------------------------------------- |
| # Layer aliases |
| #----------------------------------------------------- |
| |
| aliases |
| |
| allnwell nwell,rnwell |
| |
| allpsub space/w,pwell |
| |
| # Similar to allpsub* but does not include space-on-well-plane |
| allpwell pwell |
| |
| # Allsubwell contains space-on-well-plane but not obstruction-on-well-plane |
| # Used for defining anything under a device that does not touch active/substrate |
| allsubwell allnwell,allpsub |
| # Allwells contains obstruction-on-well-plane but not space-on-well-plane |
| allwells allnwell,allpwell,obswell |
| |
| allnfets nfet,mvnfet,nnfet,mvnnfet,ncap,mvncap |
| allnfetsnonnat nfet,mvnfet,ncap,mvncap |
| allpfets pfet,mvpfet,pcap,mvpcap |
| allfets allnfets,allpfets,nvaractor,mvnvaractor,pvaractor,mvpvaractor |
| allfetsnonnat allnfetsnonnat,allpfets,nvaractor,mvnvaractor,pvaractor,mvpvaractor |
| allfetsmv mvnfet,mvpfet,mvnnfet,mvnvaractor,mvpvaractor,mvncap,mvpcap |
| |
| allnactivenonfet *ndiff,*nsd,*ndiode,*nndiode,*mvndiff,*mvnsd,*mvndiode,*mvnndiode |
| allnactive allnactivenonfet,allnfets |
| |
| allpactivenonfet *pdiff,*psd,*pdiode,*mvpdiff,*mvpsd,*mvpdiode |
| allpactive allpactivenonfet,allpfets |
| |
| allactivenonfet allnactivenonfet,allpactivenonfet |
| allactive allactivenonfet,allfets |
| |
| allactiveres ndiffres,pdiffres,mvndiffres,mvpdiffres |
| |
| allndifflv *ndif,*nsd,*ndiode,*nndiode,ndiffres,nfet,nnfet,ncap |
| allpdifflv *pdif,*psd,*pdiode,pdiffres,pfet,pcap |
| alldifflv allndifflv,allpdifflv |
| allndifflvnonfet *ndif,*nsd,*ndiode,*nndiode,ndiffres |
| allpdifflvnonfet *pdif,*psd,*pdiode,pdiffres |
| alldifflvnonfet allndifflvnonfet,allpdifflvnonfet |
| |
| allndiffmv *mvndif,*mvnsd,*mvndiode,mvndiffres,mvnfet,mvnnfet,mvnvaractor,*mvnndiode,mvncap |
| allpdiffmv *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet,mvpvaractor,mvpcap |
| alldiffmv allndiffmv,allpdiffmv |
| allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,mvndiffres,*mvnndiode |
| allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres |
| alldiffmvnonfet allndiffmvnonfet,allpdiffmvnonfet |
| |
| alldiffnonfet alldifflvnonfet,alldiffmvnonfet |
| alldiff alldifflv,alldiffmv |
| |
| #ifdef HRPOLY1K |
| allpolyres rpp,rnp,rpps,rnps,hires,mvhires |
| allpolysblkres rpp,rnp,hires,mvhires |
| allsblkdev rnp,rpp,rnd,rpd,hires,mvhires,mvrnd,mvrpd |
| #else (!HRPOLY1K) |
| allpolyres rpp,rnp,rpps,rnps |
| allpolysblkres rpp,rnp |
| allsblkdev rnp,rpp,rnd,rpd,mvrnd,mvrpd |
| #endif (!HRPOLY1K) |
| |
| allpolynonfet *poly,allpolyres |
| allpolynonres *poly,allfets |
| |
| allpoly allpolynonfet,allfets |
| allpolynoncap *poly,allfets,allpolyres |
| |
| allndiffcontlv ndc,nsc,ndic,nndic |
| allpdiffcontlv pdc,psc,pdic |
| allndiffcontmv mvndc,mvnsc,mvndic,mvnndic |
| allpdiffcontmv mvpdc,mvpsc,mvpdic |
| allndiffcont allndiffcontlv,allndiffcontmv |
| allpdiffcont allpdiffcontlv,allpdiffcontmv |
| alldiffcontlv allndiffcontlv,allpdiffcontlv |
| alldiffcontmv allndiffcontmv,allpdiffcontmv |
| alldiffcont alldiffcontlv,alldiffcontmv |
| |
| allcont alldiffcont,pc |
| |
| allres allpolyres,allactiveres |
| alldiode *pdiode,*ndiode,*nndiode,*mvpdiode,*mvndiode,*mvnndiode |
| |
| allm1 *m1,rm1 |
| allm2 *m2,rm2 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #ifdef MIM && METALS4 |
| allm3 *m3,rm3,*mimcap |
| #else (!(MIM && METALS4)) |
| allm3 *m3,rm3 |
| #endif (!(MIM && METALS4)) |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #ifdef MIM && METALS5 |
| allm4 *m4,rm4,*mimcap |
| #else (!(MIM && METALS5)) |
| allm4 *m4,rm4 |
| #endif (!(MIM && METALS5)) |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #ifdef MIM && METALS6 |
| allm5 *m5,rm5,*mimcap |
| #else (!(MIM && METALS6)) |
| allm5 *m5,rm5 |
| #endif (!(MIM && METALS6)) |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| allmtp *mtp,rmtp |
| #endif (METALS6) |
| |
| allpad padl |
| end |
| |
| #----------------------------------------------------- |
| # Layer drawing styles |
| #----------------------------------------------------- |
| |
| styles |
| styletype mos |
| dnwell cwell |
| isosub subcircuit |
| |
| nwell nwell |
| rnwell nwell ntransistor_stripes |
| pwell pwell |
| |
| ndiff ndiffusion |
| pdiff pdiffusion |
| nsd ndiff_in_nwell |
| psd pdiff_in_pwell |
| nfet ntransistor ntransistor_stripes |
| nnfet ntransistor ndiff_in_nwell |
| pfet ptransistor ptransistor_stripes |
| nvar polysilicon ndiff_in_nwell |
| pvar polysilicon pdiff_in_pwell |
| ndc ndiffusion metal1 contact_X'es |
| pdc pdiffusion metal1 contact_X'es |
| nsc ndiff_in_nwell metal1 contact_X'es |
| psc pdiff_in_pwell metal1 contact_X'es |
| ncap ntransistor ntransistor_stripes |
| pcap ptransistor ptransistor_stripes |
| |
| mvndiff ndiffusion hvndiff_mask |
| mvpdiff pdiffusion hvpdiff_mask |
| mvnsd ndiff_in_nwell hvndiff_mask |
| mvpsd pdiff_in_pwell hvpdiff_mask |
| mvnfet ntransistor ntransistor_stripes hvndiff_mask |
| mvnnfet ntransistor ndiff_in_nwell hvndiff_mask |
| mvpfet ptransistor ptransistor_stripes |
| mvnvar polysilicon ndiff_in_nwell hvndiff_mask |
| mvpvar polysilicon pdiff_in_pwell hvpdiff_mask |
| mvndc ndiffusion metal1 contact_X'es hvndiff_mask |
| mvpdc pdiffusion metal1 contact_X'es hvpdiff_mask |
| mvnsc ndiff_in_nwell metal1 contact_X'es hvndiff_mask |
| mvpsc pdiff_in_pwell metal1 contact_X'es hvpdiff_mask |
| mvncap ntransistor ntransistor_stripes hvndiff_mask |
| mvpcap ptransistor ptransistor_stripes |
| |
| poly polysilicon |
| pc polysilicon metal1 contact_X'es |
| npolyres polysilicon silicide_block nselect2 |
| ppolyres polysilicon silicide_block pselect2 |
| |
| pdiode pdiffusion pselect2 |
| ndiode ndiffusion nselect2 |
| nndiode ndiff_in_nwell nselect2 |
| pdiodec pdiffusion pselect2 metal1 contact_X'es |
| ndiodec ndiffusion nselect2 metal1 contact_X'es |
| nndiodec ndiff_in_nwell nselect2 metal1 contact_X'es |
| |
| mvpdiode pdiffusion pselect2 hvpdiff_mask |
| mvndiode ndiffusion nselect2 hvndiff_mask |
| mvnndiode ndiff_in_nwell nselect2 hvndiff_mask |
| mvpdiodec pdiffusion pselect2 metal1 contact_X'es hvpdiff_mask |
| mvndiodec ndiffusion nselect2 metal1 contact_X'es hvndiff_mask |
| mvnndiodec ndiff_in_nwell nselect2 metal1 contact_X'es hvndiff_mask |
| |
| metal1 metal1 |
| rm1 metal1 poly_resist_stripes |
| obsm1 metal1 |
| fillm1 metal1 |
| obsv1 metal1 metal2 via1arrow |
| m1hole obsmetal1 |
| m2c metal1 metal2 via1arrow |
| metal2 metal2 |
| rm2 metal2 poly_resist_stripes |
| obsm2 metal2 |
| fillm2 metal2 |
| obsv2 metal2 metal3 via2arrow |
| m2hole obsmetal2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| m3c metal2 metal3 via2arrow |
| metal3 metal3 |
| rm3 metal3 poly_resist_stripes |
| obsm3 metal3 |
| fillm3 metal3 |
| m3hole obsmetal3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| via3 metal3 metal4 via3alt |
| metal4 metal4 |
| rm4 metal4 poly_resist_stripes |
| obsm4 metal4 |
| fillm4 metal4 |
| m4hole obsmetal4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| via4 metal4 metal5 via4 |
| metal5 metal5 |
| rm5 metal5 poly_resist_stripes |
| obsm5 metal5 |
| fillm5 metal5 |
| m5hole obsmetal5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| viatp metal5 metal6 via5 |
| metaltp metal6 |
| rmtp metal6 poly_resist_stripes |
| obsmtp metal6 |
| fillmtp metal6 |
| mtphole obsmetal6 |
| #endif (METALS6) |
| |
| #ifdef MIM |
| #ifdef METALS3 |
| mimcap metal2 mems |
| mimcc metal2 contact_X'es mems |
| #elseif defined(METALS4) |
| mimcap metal3 mems |
| mimcc metal3 contact_X'es mems |
| #elseif defined(METALS5) |
| mimcap metal4 mems |
| mimcc metal4 contact_X'es mems |
| #elseif defined(METALS6) |
| mimcap metal5 mems |
| mimcc metal5 contact_X'es mems |
| #endif |
| #endif (MIM) |
| glass overglass |
| rnp poly_resist poly_resist_stripes ndop_stripes |
| rpp poly_resist poly_resist_stripes pdop_stripes |
| rnps poly_resist ndop_stripes |
| rpps poly_resist pdop_stripes |
| #ifdef HRPOLY1K |
| nhighres poly_resist silicide_block |
| mvnhighres poly_resist silicide_block hvndiff_mask |
| #endif (HRPOLY1K) |
| ndiffres ndiffusion ndop_stripes |
| pdiffres pdiffusion pdop_stripes |
| mvndiffres ndiffusion hvndiff_mask ndop_stripes |
| mvpdiffres pdiffusion hvpdiff_mask pdop_stripes |
| comment comment |
| lvstext comment |
| error_p error_waffle |
| error_s error_waffle |
| error_ps error_waffle |
| fillblock cwell |
| |
| obswell cwell |
| obsactive implant4 |
| filldiff ndiffusion |
| fillpoly polysilicon |
| |
| #ifdef METALS3 |
| padl metal3 via3 overglass |
| #elseif defined(METALS4) |
| padl metal4 via4 overglass |
| #elseif defined(METALS5) |
| padl metal5 via5 overglass |
| #elseif defined(METALS6) |
| padl metal6 via6 overglass |
| #else |
| padl metal2 via2 overglass |
| #endif |
| |
| magnet substrate_field_implant |
| rotate via3alt |
| fence via5 |
| end |
| |
| #----------------------------------------------------- |
| # Special paint/erase rules |
| #----------------------------------------------------- |
| |
| compose |
| compose nfet poly ndiff |
| compose pfet poly pdiff |
| compose nvar poly nsd |
| compose pvar poly psd |
| |
| compose mvnfet poly mvndiff |
| compose mvpfet poly mvpdiff |
| compose mvnvar poly mvnsd |
| compose mvpvar poly mvpsd |
| |
| #ifdef MIM |
| #ifdef METALS3 |
| paint mimcap m2 mimcap |
| paint mimcapc m2 mimcapc |
| #elseif defined(METALS4) |
| paint mimcap m3 mimcap |
| paint mimcapc m3 mimcapc |
| #elseif defined(METALS5) |
| paint mimcap m4 mimcap |
| paint mimcapc m4 mimcapc |
| #elseif defined(METALS6) |
| paint mimcap m5 mimcap |
| paint mimcapc m5 mimcapc |
| #endif |
| #endif (MIM) |
| paint ndc nwell pdc |
| paint nfet nwell pfet |
| paint ndiff nwell pdiff |
| paint psd nwell nsd |
| paint psc nwell nsc |
| paint pdc pwell ndc |
| paint pfet pwell nfet |
| paint pdiff pwell ndiff |
| paint nsd pwell psd |
| paint nsc pwell psc |
| |
| paint m1 obsm1 m1 |
| paint m2 obsm2 m2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| paint m3 obsm3 m3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| paint m4 obsm4 m4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| paint m5 obsm5 m5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| paint mtp obsmtp mtp |
| #endif (METALS6) |
| end |
| |
| #----------------------------------------------------- |
| # Electrical connectivity |
| #----------------------------------------------------- |
| |
| connect |
| nwell,*nsd,*mvnsd nwell,*nsd,*mvnsd |
| pwell,*psd,*mvpsd,isosub pwell,*psd,*mvpsd,isosub |
| *psd,*mvpsd *psd,*mvpsd |
| *m1 *m1 |
| *m2 *m2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| *m3 *m3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| *m4 *m4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| *m5 *m5 |
| #endif (METALS5 || METALS6) |
| #ifdef METAL6 |
| *mtp *mtp |
| #endif (METALS6) |
| #ifdef MIM |
| *mimcap *mimcap |
| #endif (MIM) |
| allnactivenonfet allnactivenonfet |
| allpactivenonfet allpactivenonfet |
| *poly,allfets *poly,allfets |
| end |
| |
| #----------------------------------------------------- |
| # CIF/GDS output layer definitions |
| #----------------------------------------------------- |
| # NOTE: All values in this section MUST be multiples of 25 |
| # or else magic will scale below the allowed layout grid size |
| |
| cifoutput |
| |
| #----------------------------------------------------- |
| style gdsii |
| #----------------------------------------------------- |
| scalefactor 50 nanometers |
| options calma-permissive-labels |
| gridlimit 5 |
| |
| # This section used for actual GDSII output |
| |
| #----------------------------------------------------- |
| # DNWELL |
| #----------------------------------------------------- |
| layer DNWELL dnwell |
| calma 12 0 |
| |
| #----------------------------------------------------- |
| # SUBCUT |
| #----------------------------------------------------- |
| layer SUBCUT isosub |
| calma 23 5 |
| |
| #----------------------------------------------------- |
| # NWELL |
| #----------------------------------------------------- |
| layer NWELL allnwell |
| labels allnwell noport |
| close 1000000 |
| calma 21 0 |
| |
| layer NWELLTXT |
| labels allnwell port |
| calma 21 10 |
| |
| #----------------------------------------------------- |
| # PWELL (LVPWELL) |
| #----------------------------------------------------- |
| layer PWELL pwell |
| labels pwell noport |
| calma 204 0 |
| |
| layer PWELLTXT |
| labels pwell port |
| calma 204 10 |
| |
| #----------------------------------------------------- |
| # DIFF (COMP) |
| #----------------------------------------------------- |
| layer DIFF alldiff |
| labels alldiff |
| calma 22 0 |
| |
| layer DIFFFILL filldiff |
| labels filldiff |
| calma 22 4 |
| |
| #----------------------------------------------------- |
| # PPLUS, NPLUS |
| #----------------------------------------------------- |
| |
| #ifdef HRPOLY1K |
| layer RESDEF |
| bloat-or hires,mvhires * 280 poly 0 |
| grow 200 |
| shrink 200 |
| calma 110 5 |
| |
| # hires requires PPLUS around terminals |
| templayer HRTERM |
| bloat-all hires,mvhires *poly |
| and-not hires,mvhires |
| |
| layer SBLK |
| bloat-or hires,mvhires * 280 poly 100 |
| calma 49 0 |
| #endif (HRPOLY1K) |
| |
| # rnps requires NPLUS |
| # rnp requires NPLUS |
| # rnd requires NPLUS |
| |
| layer NPLUS |
| bloat-all rnps *poly |
| bloat-all rnp *poly |
| bloat-all rnd *ndiff |
| grow 200 |
| grow 200 |
| shrink 200 |
| calma 32 0 |
| |
| # standard generation of NPLUS |
| |
| templayer nwell_shrink nwell |
| shrink 430 |
| |
| templayer shortntap *nsd,*mvnsd |
| and-not dnwell |
| and-not nwell_shrink |
| grow 160 |
| |
| templayer shortdntap dnwell |
| and pwell |
| grow 430 |
| and *nsd,*mvnsd |
| grow 160 |
| |
| layer NPLUS |
| bloat-or *ndif,*ndiode,*nndiode,ndiffres,*mvndif,*mvndiode,*mvnndiode,mvndiffres * 160 allpactivenonfet 0 |
| # NOTE: Rule CO.5a applies to butted contacts but Calibre rule is |
| # implemented for all contacts, so the Calibre rule is being followed. |
| bloat-or nsc,mvnsc * 95 |
| bloat-or *nsd,*mvnsd * 20 allpactivenonfet 0 |
| bloat-or allnfets,nvar,mvnvar * 230 |
| or shortntap,shortdntap |
| grow 200 |
| shrink 200 |
| mask-hints NPLUS |
| calma 32 0 |
| |
| # rpps requires PPLUS |
| # rpp requires PPLUS |
| # rpd requires PPLUS |
| |
| layer PPLUS |
| bloat-all rpps *poly |
| bloat-all rpp *poly |
| bloat-all rpd *pdiff |
| grow 200 |
| grow 200 |
| shrink 200 |
| mask-hints PPLUS |
| calma 31 0 |
| |
| # standard generation of PPLUS, including hires resistors |
| |
| templayer shortptap nwell |
| and-not dnwell |
| grow 430 |
| and *psd,*mvpsd |
| grow 160 |
| |
| templayer pwell_shrink pwell |
| and dnwell |
| shrink 430 |
| |
| templayer shortdptap *psd,*mvpsd |
| and dnwell |
| and-not pwell_shrink |
| grow 160 |
| |
| layer PPLUS |
| #ifdef HRPOLY1K |
| or HRTERM |
| grow 200 |
| and-not RESDEF |
| #endif (HRPOLY1K) |
| bloat-or *pdif,*pdiode,pdiffres,pfet,pcap,*mvpdif,*mvpdiode,mvpdiffres,mvpfet,mvpcap * 160 allnactivenonfet 0 |
| # NOTE: Rule CO.5b applies to butted contacts but Calibre rule is |
| # implemented for all contacts, so the Calibre rule is being followed. |
| bloat-or psc,mvpsc * 95 |
| bloat-or *psd,*mvpsd * 20 allnactivenonfet 0 |
| bloat-or allpfets,pvar,mvpvar * 230 |
| or shortptap,shortdptap |
| grow 200 |
| shrink 200 |
| calma 31 0 |
| |
| #----------------------------------------------------- |
| # DUALGATE (thickox) |
| #----------------------------------------------------- |
| |
| layer DUALGATE allfetsmv |
| bloat-all mvhires *poly |
| # Rule DV.8 (DUALGATE around poly) |
| grow 400 |
| # Rule DV.6 (DUALGATE around diff, LV substrate tap excepted) |
| bloat-or allndiffmv * 240 *psd 0 |
| bloat-or allpdiffmv * 240 |
| grow 219 |
| shrink 219 |
| mask-hints DUALGATE |
| calma 55 0 |
| |
| # DUALGATE completely covers deep nwell |
| layer DUALGATE |
| bloat-all alldiffmv dnwell |
| grow 500 |
| grow 219 |
| shrink 219 |
| calma 55 0 |
| |
| #----------------------------------------------------- |
| # NAT |
| #----------------------------------------------------- |
| |
| layer NAT |
| bloat-all *nndiode,nnfet *ndiff |
| bloat-all *mvnndiode,mvnnfet *mvndiff |
| grow 260 |
| grow 309 |
| shrink 309 |
| calma 5 0 |
| |
| #----------------------------------------------------- |
| # POLY |
| #----------------------------------------------------- |
| layer POLY allpoly |
| close 224000 |
| labels allpoly noport |
| calma 30 0 |
| |
| layer POLYTXT |
| labels allpoly port |
| calma 30 10 |
| |
| layer POLYFILL fillpoly |
| labels fillpoly |
| calma 30 4 |
| |
| #----------------------------------------------------- |
| # CONT |
| #----------------------------------------------------- |
| # NOTE: Contact arrays defined at 200 spacing for large array rule (4x4), |
| # otherwise spacing is 180 |
| |
| layer contlarge allcont |
| shrink 615 |
| grow 615 |
| |
| layer CONT allcont |
| and-not contlarge |
| squares-grid 5 220 250 |
| calma 33 0 |
| |
| layer CONT allcont |
| and contlarge |
| squares-grid 5 220 280 |
| calma 33 0 |
| |
| #----------------------------------------------------- |
| # MET1 |
| #----------------------------------------------------- |
| layer MET1 allm1 |
| labels allm1 noport |
| calma 34 0 |
| |
| layer MET1TXT |
| labels allm1 port |
| calma 34 10 |
| |
| layer M1BLOCK obsm1 |
| labels obsm1 |
| calma 34 5 |
| |
| layer M1FILL fillm1 |
| labels fillm1 |
| calma 34 4 |
| |
| #----------------------------------------------------- |
| # VIA1 |
| #----------------------------------------------------- |
| templayer via1large via1 |
| shrink 915 |
| grow 915 |
| |
| layer VIA1 via1 |
| and-not via1large |
| squares-grid 0 260 260 |
| calma 35 0 |
| |
| layer VIA1 via1 |
| and via1large |
| squares-grid 0 260 360 |
| calma 35 0 |
| |
| #----------------------------------------------------- |
| # MET2 |
| #----------------------------------------------------- |
| layer MET2 allm2 |
| labels allm2 noport |
| calma 36 0 |
| |
| layer MET2TXT |
| labels allm2 port |
| calma 36 10 |
| |
| layer M2BLOCK obsm2 |
| labels obsm2 |
| calma 36 5 |
| |
| layer M2FILL fillm2 |
| labels fillm2 |
| calma 36 4 |
| |
| #ifdef METALS3 || METALA4 || METALS5 || METALS6 |
| #----------------------------------------------------- |
| # VIA2 |
| #----------------------------------------------------- |
| templayer via2large via2 |
| shrink 915 |
| grow 915 |
| |
| layer VIA2 via2 |
| and-not via2large |
| squares-grid 10 260 260 |
| calma 38 0 |
| |
| layer VIA2 via2 |
| and via2large |
| squares-grid 10 260 360 |
| calma 38 0 |
| |
| #ifdef MIM && METALS3 |
| layer VIA2 mimcapc |
| squares-grid 10 260 500 |
| calma 38 0 |
| |
| #endif (MIM && METALS3) |
| |
| #----------------------------------------------------- |
| # MET3 |
| #----------------------------------------------------- |
| layer MET3 allm3 |
| labels allm3 noport |
| calma 42 0 |
| |
| layer MET3TXT |
| labels allm3 port |
| calma 42 10 |
| |
| layer M3BLOCK obsm3 |
| labels obsm3 |
| calma 42 5 |
| |
| layer M3FILL fillm3 |
| labels fillm3 |
| calma 42 4 |
| #endif (METALS3 || METALA4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #----------------------------------------------------- |
| # VIA3 |
| #----------------------------------------------------- |
| templayer via3large via3 |
| shrink 915 |
| grow 915 |
| |
| layer VIA3 via3 |
| and-not via3large |
| squares-grid 10 260 260 |
| calma 40 0 |
| |
| layer VIA3 via3 |
| and via3large |
| squares-grid 10 260 360 |
| calma 40 0 |
| |
| #ifdef MIM && METALS4 |
| layer VIA3 mimcapc |
| squares-grid 10 260 500 |
| calma 40 0 |
| |
| #endif (MIM && METALS4) |
| |
| #----------------------------------------------------- |
| # MET4 |
| #----------------------------------------------------- |
| layer MET4 allm4 |
| labels allm4 noport |
| calma 46 0 |
| |
| layer MET4TXT |
| labels allm4 port |
| calma 46 10 |
| |
| layer M4BLOCK obsm4 |
| labels obsm4 |
| calma 46 5 |
| |
| layer M4FILL fillm4 |
| labels fillm4 |
| calma 46 4 |
| |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #----------------------------------------------------- |
| # VIA4 |
| #----------------------------------------------------- |
| templayer via4large via4 |
| shrink 915 |
| grow 915 |
| |
| layer VIA4 via4 |
| and-not via4large |
| squares-grid 10 260 260 |
| calma 41 0 |
| |
| layer VIA4 via4 |
| and via4large |
| squares-grid 10 260 360 |
| calma 41 0 |
| |
| #ifdef (MIM && METALS5) |
| layer VIA4 mimcapc |
| squares-grid 10 260 500 |
| calma 41 0 |
| |
| #endif (MIM && METALS5) |
| |
| #----------------------------------------------------- |
| # MET5 |
| #----------------------------------------------------- |
| layer MET5 allm5 |
| labels allm5 noport |
| calma 81 0 |
| |
| layer MET5TXT |
| labels allm5 port |
| calma 81 10 |
| |
| layer M5BLOCK obsm5 |
| labels obsm5 |
| calma 81 5 |
| |
| layer M5FILL fillm5 |
| labels fillm5 |
| calma 81 4 |
| |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #----------------------------------------------------- |
| # VIATP |
| #----------------------------------------------------- |
| templayer viatplarge viatp |
| shrink 975 |
| grow 975 |
| |
| layer VIATP viatp |
| and-not viatplarge |
| squares-grid 10 260 260 |
| calma 129 0 |
| |
| layer VIATP viatp |
| and viatplarge |
| squares-grid 10 160 360 |
| calma 129 0 |
| |
| #ifdef MIM |
| layer VIATP mimcapc |
| squares-grid 10 260 500 |
| calma 129 0 |
| |
| #endif (MIM) |
| |
| #----------------------------------------------------- |
| # METTP |
| #----------------------------------------------------- |
| |
| layer METTP allmtp |
| labels allmtp noport |
| calma 53 0 |
| |
| layer METTPTXT |
| labels allmtp port |
| calma 53 10 |
| |
| layer MTPBLOCK obsmtp |
| labels obsmtp |
| calma 53 5 |
| |
| layer MTPFILL fillmtp |
| labels fillmtp |
| calma 53 4 |
| |
| #endif (METALS6) |
| |
| #----------------------------------------------------- |
| # GLASS |
| #----------------------------------------------------- |
| layer GLASS glass |
| calma 37 0 |
| |
| #----------------------------------------------------- |
| # PRBNDRY |
| #----------------------------------------------------- |
| layer PRBNDRY |
| boundary |
| calma 0 0 |
| |
| #ifdef MIM |
| #undef MIM |
| #----------------------------------------------------- |
| # CAPM |
| #----------------------------------------------------- |
| # NOTE: MiM bottom plate handled by alias "allm*" when MIM defined |
| |
| layer CAPM *mimcap |
| labels mimcap |
| calma 75 0 |
| |
| layer CAPDEF *mimcap |
| grow 200 |
| calma 117 5 |
| |
| layer CAP_LENGTH |
| mask-hints CAP_LENGTH |
| calma 117 10 |
| |
| #define MIM |
| #endif (MIM) |
| |
| #----------------------------------------------------- |
| # SBLK |
| #----------------------------------------------------- |
| |
| layer SBLK |
| bloat-all rnd *nfet |
| bloat-all rpd *pfet |
| bloat-all mvrnd *mvnfet |
| bloat-all mvrpd *mvpfet |
| and allfets |
| grow 220 |
| bloat-or allsblkdev * 0 space/a 220 |
| grow 215 |
| shrink 215 |
| mask-hints SBLK |
| calma 49 0 |
| |
| #----------------------------------------------------- |
| # RESDEF MARK |
| #----------------------------------------------------- |
| layer RESDEF allres |
| calma 110 5 |
| |
| #----------------------------------------------------- |
| # METAL RESISTOR IDs |
| #----------------------------------------------------- |
| layer MET1RES rm1 |
| calma 110 11 |
| |
| layer MET2RES rm2 |
| calma 110 12 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| layer MET3RES rm3 |
| calma 110 13 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| layer MET4RES rm4 |
| calma 110 14 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| layer MET5RES rm5 |
| calma 110 15 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| layer METTPRES rmtp |
| calma 110 16 |
| #endif (METALS6) |
| |
| #----------------------------------------------------- |
| # DIODE MARK |
| #----------------------------------------------------- |
| layer DIODE alldiode |
| calma 115 5 |
| |
| #----------------------------------------------------- |
| # MOSCAP MARK |
| #----------------------------------------------------- |
| layer MOSCAP nvar,mvnvar,pvar,mvpvar,ncap,pcap,mvncap,mvpcap |
| calma 166 5 |
| |
| #ifdef HRPOLY1K |
| #----------------------------------------------------- |
| # HRES |
| #----------------------------------------------------- |
| layer HRES |
| bloat-all hires,mvhires *poly |
| grow 400 |
| calma 62 0 |
| #endif (HRPOLY1K) |
| |
| #------------------------------------------------------------------------ |
| # FILLBLOCK (NOTE: two layers define this on active, then poly & metal) |
| #------------------------------------------------------------------------ |
| # layer FILLOBS fillblock |
| # calma 111 5 |
| |
| layer FILLOBS2 fillblock |
| calma 152 5 |
| |
| #---------------------------------------------------------- |
| style metfill |
| #---------------------------------------------------------- |
| # This section used for metal filling output by a sequence |
| # of cif paint commands |
| |
| scalefactor 50 nanometers |
| options calma-permissive-labels |
| gridlimit 5 |
| |
| #----------------------------------------------------- |
| # Fill layer geometry |
| #----------------------------------------------------- |
| |
| templayer fill_geometry_off0 |
| bbox top |
| slots 0 2000 1000 0 2000 1000 1000 0 |
| |
| templayer fill_geometry_off1 |
| bbox top |
| slots 0 2000 1000 0 2000 1000 1000 660 |
| |
| templayer fill_geometry_off2 |
| bbox top |
| slots 0 2000 1000 0 2000 1000 1000 1320 |
| |
| #ifdef THICKMET3P0 |
| templayer fill_geometry_thick |
| bbox top |
| slots 0 6000 2000 0 6000 2000 3000 2000 |
| #endif (THICKMET3P0) |
| |
| #----------------------------------------------------- |
| # Obstruction geometry |
| #----------------------------------------------------- |
| |
| templayer obstruct_diff alldiff,filldiff,obsactive |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| templayer obstruct_poly allpoly,fillpoly |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| templayer obstruct_m1 allm1,allpad,fillm1,obsm1 |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| templayer obstruct_m2 allm2,allpad,fillm2,obsm2 |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| templayer obstruct_m3 allm3,allpad,fillm3,obsm3 |
| grow 2010 |
| shrink 500 |
| grow 500 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| templayer obstruct_m4 allm4,allpad,fillm4,obsm4 |
| grow 2010 |
| shrink 500 |
| grow 500 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| templayer obstruct_m5 allm5,allpad,fillm5,obsm5 |
| grow 2010 |
| shrink 500 |
| grow 500 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #ifdef THICKMET3P0 |
| templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| #elseif defined(THICKMET0P9 || THICKMET1P1) |
| templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp |
| grow 2010 |
| shrink 500 |
| grow 500 |
| |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9 ) |
| templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp |
| grow 2010 |
| shrink 500 |
| grow 500 |
| #endif |
| #endif (METALS6) |
| |
| #----------------------------------------------------- |
| # DIFF FILL |
| #----------------------------------------------------- |
| layer difffill fill_geometry_off0 |
| shrink 995 |
| grow 995 |
| |
| #----------------------------------------------------- |
| # POLY FILL |
| #----------------------------------------------------- |
| layer polyfill fill_geometry_off1 |
| and-not obstruct_m1 |
| shrink 995 |
| grow 995 |
| |
| #----------------------------------------------------- |
| # MET1 FILL |
| #----------------------------------------------------- |
| layer met1fill fill_geometry_off2 |
| and-not obstruct_poly |
| and-not obstruct_m1 |
| and-not obstruct_m2 |
| shrink 995 |
| grow 995 |
| |
| #----------------------------------------------------- |
| # MET2 FILL |
| #----------------------------------------------------- |
| layer met2fill fill_geometry_off0 |
| and-not obstruct_m1 |
| and-not obstruct_m2 |
| shrink 995 |
| grow 995 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #----------------------------------------------------- |
| # MET3 FILL |
| #----------------------------------------------------- |
| layer met3fill fill_geometry_off1 |
| and-not obstruct_m2 |
| and-not obstruct_m3 |
| shrink 995 |
| grow 995 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #----------------------------------------------------- |
| # MET4 FILL |
| #----------------------------------------------------- |
| layer met4fill fill_geometry_off2 |
| and-not obstruct_m3 |
| and-not obstruct_m4 |
| shrink 995 |
| grow 995 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #----------------------------------------------------- |
| # MET5 FILL |
| #----------------------------------------------------- |
| layer met5fill fill_geometry_off0 |
| and-not obstruct_m4 |
| and-not obstruct_m5 |
| shrink 995 |
| grow 995 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #----------------------------------------------------- |
| # METTP FILL |
| #----------------------------------------------------- |
| layer mettpfill fill_geometry_off1 |
| and-not obstruct_m5 |
| and-not obstruct_mtp |
| shrink 995 |
| grow 995 |
| #endif (METALS6) |
| |
| #----------------------------------------------------------------------- |
| style drc |
| #----------------------------------------------------------------------- |
| # NOTE: this style is used for DRC only, not for GDS output |
| #----------------------------------------------------------------------- |
| |
| scalefactor 50 nanometers |
| options calma-permissive-labels |
| gridlimit 5 |
| |
| # Check for MV and LV devices in the same dnwell |
| templayer mv_dnwell |
| bloat-all alldiffmv dnwell |
| |
| templayer bad_dnwell |
| bloat-all alldifflv dnwell |
| and mv_dnwell |
| |
| # Check pwell in dnwell |
| templayer pwell_in_dnwell pwell |
| and dnwell |
| and-not mv_dnwell |
| |
| templayer mvpwell_in_dnwell pwell |
| and mv_dnwell |
| |
| # Check for MV and LV devices in the same nwell |
| templayer mv_nwell |
| bloat-all alldiffmv nwell |
| |
| templayer bad_nwell |
| bloat-all alldifflv nwell |
| and mv_nwell |
| |
| # Check for nwell resistor in deep nwell |
| templayer bad_rnw rnw |
| and dnwell |
| |
| # Define HRES layer for DRC checks |
| templayer res_hres |
| bloat-all mvhires,hires *poly |
| |
| # Check for contact at correct position for HIRES, LRES, PRES resistors |
| templayer res_cont res_hres |
| bloat-all rnp,rpp *poly |
| and pc |
| squares-grid 5 220 250 |
| |
| templayer res_cont_space_min mvhires,hires |
| # SBLK larger than defined resistor by 0.1um |
| grow 100 |
| # SBLK = resistor for rnp and rpp |
| or rnp,rpp |
| # SBLK spacing to contact |
| grow 220 |
| and res_cont |
| # If anything remains, contact is too close. |
| |
| templayer res_cont_space_max mvhires,hires |
| # SBLK larger than defined resistor by 0.1um |
| grow 100 |
| # SBLK = resistor for rnp and rpp |
| or rnp,rpp |
| # SBLK spacing to contact |
| grow 220 |
| # size of poly contact |
| grow 220 |
| and res_cont |
| |
| templayer res_no_cont res_cont |
| and-not res_cont_space_max |
| # If anything remains, contact is too far away |
| |
| # Check for HRES to poly and diffusion spacing |
| templayer res_hres_grow res_hres |
| grow 700 |
| |
| templayer res_diff_space res_hres_grow |
| and alldiff |
| # If anything remains, HRES is too close to diffusion |
| |
| templayer res_poly_space res_hres_grow |
| and-not res_hres |
| and allpoly |
| # If anything remains, HRES is too close to poly |
| |
| # Check for MiM cap bottom plate to other metal spacing rule (< 1.2um) |
| templayer mim_bottom_plate |
| #ifdef METALS3 |
| bloat-all *mim *m2 |
| #endif |
| #ifdef METALS4 |
| bloat-all *mim *m3 |
| #endif |
| #ifdef METALS5 |
| bloat-all *mim *m4 |
| #endif |
| #ifdef METALS6 |
| bloat-all *mim *m5 |
| #endif |
| |
| templayer mim_bottom_plate_space mim_bottom_plate |
| grow 1200 |
| #ifdef METALS3 |
| and m2 |
| #endif |
| #ifdef METALS4 |
| and m3 |
| #endif |
| #ifdef METALS5 |
| and m4 |
| #endif |
| #ifdef METALS6 |
| and m5 |
| #endif |
| and-not mim_bottom_plate |
| # If anything remains, bottom plate is too close |
| |
| # Check for MiM cap bottom plate surrounds contact (by 0.4um) |
| #ifdef METALS3 |
| templayer mim_bot_cont_surround via2 |
| #endif |
| #ifdef METALS4 |
| templayer mim_bot_cont_surround via3 |
| #endif |
| #ifdef METALS5 |
| templayer mim_bot_cont_surround via4 |
| #endif |
| #ifdef METALS6 |
| templayer mim_bot_cont_surround viamt |
| #endif |
| and mim_bottom_plate |
| squares-grid 10 260 500 |
| grow 400 |
| and-not mim_bottom_plate |
| # If anything remains, not enough surround |
| |
| end |
| |
| #----------------------------------------------------------------------- |
| cifinput |
| #----------------------------------------------------------------------- |
| |
| # NOTE: All values in this section MUST be multiples of 25 |
| # or else magic will scale below the allowed layout grid size |
| |
| style import |
| scalefactor 50 nanometers |
| gridlimit 5 |
| |
| options ignore-unknown-layer-labels options no-reconnect-labels |
| |
| ignore BJTDEF |
| ignore SRAMDEF |
| ignore FET5VDEF |
| ignore CAPDEF |
| ignore VTEXT |
| ignore FILLOBS |
| |
| layer pwell PWELL,PWELLTXT |
| labels PWELL |
| labels PWELLTXT port |
| |
| layer nwell NWELL,NWELLTXT |
| labels NWELL |
| labels NWELLTXT port |
| |
| layer dnwell DNWELL |
| labels DNWELL |
| |
| layer isosub SUBCUT |
| labels SUBCUT |
| |
| templayer ndiffarea DIFF |
| and-not POLY |
| and-not NWELL |
| and-not PPLUS |
| and-not SBLK |
| and-not DUALGATE |
| and NPLUS |
| copyup ndifcheck |
| |
| layer ndiff ndiffarea |
| labels DIFF |
| |
| layer filldiff DIFFFILL |
| labels DIFFFILL |
| |
| # Copy ndiff areas up for contact checks |
| templayer xndifcheck ndifcheck |
| copyup ndifcheck |
| |
| templayer mvndiffarea DIFF |
| and-not POLY |
| and-not NWELL |
| and-not PPLUS |
| and-not SBLK |
| and DUALGATE |
| and NPLUS |
| copyup mvndifcheck |
| |
| layer mvndiff mvndiffarea |
| labels DIFF |
| |
| # Copy mvndiff areas up for contact checks |
| templayer mvxndifcheck mvndifcheck |
| copyup mvndifcheck |
| |
| layer ndiode DIFF |
| and NPLUS |
| and DIODE |
| and-not NWELL |
| and-not POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and-not NAT |
| labels DIFF |
| |
| layer nndiode DIFF |
| and NPLUS |
| and DIODE |
| and-not NWELL |
| and-not POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and NAT |
| labels DIFF |
| |
| templayer ndiodearea DIODE |
| and NPLUS |
| and-not NWELL |
| and-not DUALGATE |
| copyup DIODE,NPLUS |
| |
| layer ndiffres DIFF |
| and-not POLY |
| and SBLK |
| and NPLUS |
| and-not DUALGATE |
| labels DIFF |
| |
| templayer pdiffarea DIFF |
| and-not POLY |
| and NWELL |
| and-not NPLUS |
| and-not SBLK |
| and-not DIODE |
| and PPLUS |
| and-not DUALGATE |
| copyup pdifcheck |
| |
| layer pdiff pdiffarea |
| labels DIFF |
| |
| layer mvndiode DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and DUALGATE |
| and-not NAT |
| labels DIFF |
| |
| layer mvnndiode DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and DUALGATE |
| and NAT |
| labels DIFF |
| |
| templayer mvndiodearea DIODE |
| and NPLUS |
| and-not NWELL |
| and DUALGATE |
| copyup DIODE,NPLUS |
| |
| layer mvndiffres DIFF |
| and-not POLY |
| and SBLK |
| and NPLUS |
| and DUALGATE |
| labels DIFF |
| |
| templayer mvpdiffarea DIFF |
| and-not POLY |
| and NWELL |
| and-not NPLUS |
| and-not SBLK |
| and-not DIODE |
| and DUALGATE |
| and PPLUS |
| copyup mvpdifcheck |
| |
| layer mvpdiff mvpdiffarea |
| labels DIFF |
| |
| # Copy pdiff areas up for contact checks |
| templayer xpdifcheck pdifcheck |
| copyup pdifcheck |
| |
| layer pdiode DIFF |
| and PPLUS |
| and-not POLY |
| and-not NPLUS |
| and-not DUALGATE |
| and DIODE |
| labels DIFF |
| |
| templayer pdiodearea DIODE |
| and PPLUS |
| copyup DIODE,PPLUS |
| |
| # Define pfet areas as known pdiff, |
| # regardless of the presence of a |
| # well. |
| |
| templayer pfetarea DIFF |
| and-not NPLUS |
| and-not DUALGATE |
| and POLY |
| |
| layer pfet pfetarea |
| and-not MOSCAP |
| labels DIFF |
| |
| layer pcap pfetarea |
| and MOSCAP |
| labels DIFF |
| |
| templayer pfetexpand pfetarea |
| grow 530 |
| |
| # Always force nwell under pfet |
| layer nwell pfetarea |
| grow 310 |
| |
| # Copy mvpdiff areas up for contact checks |
| templayer mvxpdifcheck mvpdifcheck |
| copyup mvpdifcheck |
| |
| layer mvpdiode DIFF |
| and PPLUS |
| and-not POLY |
| and-not NPLUS |
| and-not RESDEF |
| and DUALGATE |
| and DIODE |
| labels DIFF |
| |
| templayer mvpdiodearea DIODE |
| and PPLUS |
| copyup DIODE,PPLUS |
| |
| # Define pfet areas as known pdiff, |
| # regardless of the presence of a |
| # well. |
| |
| templayer mvpfetarea DIFF |
| and DUALGATE |
| and-not NPLUS |
| and POLY |
| |
| layer mvpfet mvpfetarea |
| and-not MOSCAP |
| labels DIFF |
| |
| layer mvpcap mvpfetarea |
| and MOSCAP |
| labels DIFF |
| |
| templayer mvpfetexpand mvpfetarea |
| grow 530 |
| |
| layer pdiff DIFF |
| and-not DUALGATE |
| and-not NPLUS |
| and-not POLY |
| and NWELL |
| and pfetexpand |
| labels DIFF |
| |
| layer pdiffres DIFF |
| and-not POLY |
| and PPLUS |
| and NWELL |
| and SBLK |
| labels DIFF |
| |
| layer nfet DIFF |
| and POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and-not NWELL |
| and NPLUS |
| and-not NAT |
| and-not MOSCAP |
| labels DIFF |
| |
| layer ncap DIFF |
| and POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and-not NWELL |
| and NPLUS |
| and-not NAT |
| and MOSCAP |
| labels DIFF |
| |
| layer nnfet DIFF |
| and POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and-not NWELL |
| and NPLUS |
| and NAT |
| labels DIFF |
| |
| templayer nsdarea DIFF |
| and NPLUS |
| and NWELL |
| and-not POLY |
| and-not PPLUS |
| and-not DUALGATE |
| |
| layer nsd nsdarea |
| labels DIFF |
| |
| templayer nsdexpand nsdarea |
| grow 500 |
| |
| # Copy nsub areas up for contact checks |
| templayer xnsubcheck nsubcheck |
| copyup nsubcheck |
| |
| templayer psdarea DIFF |
| and PPLUS |
| and-not DUALGATE |
| and-not NWELL |
| and-not POLY |
| and-not NPLUS |
| and-not pfetexpand |
| copyup psubcheck |
| |
| layer psd psdarea |
| labels DIFF |
| |
| templayer psdexpand psdarea |
| grow 500 |
| |
| layer mvpdiff DIFF |
| and-not NPLUS |
| and-not POLY |
| and NWELL |
| and DUALGATE |
| and mvpfetexpand |
| labels DIFF |
| |
| layer mvpdiffres DIFF |
| and-not POLY |
| and PPLUS |
| and SBLK |
| and DUALGATE |
| labels DIFF |
| |
| layer mvnfet DIFF |
| and POLY |
| and-not PPLUS |
| and NPLUS |
| and-not NAT |
| and-not NWELL |
| and DUALGATE |
| and-not MOSCAP |
| labels DIFF |
| |
| layer mvncap DIFF |
| and POLY |
| and-not PPLUS |
| and NPLUS |
| and-not NAT |
| and-not NWELL |
| and DUALGATE |
| and MOSCAP |
| labels DIFF |
| |
| layer mvnnfet DIFF |
| and POLY |
| and-not PPLUS |
| and NPLUS |
| and NAT |
| and-not NWELL |
| and DUALGATE |
| labels DIFF |
| |
| templayer mvnsdarea DIFF |
| and NPLUS |
| and-not POLY |
| and-not PPLUS |
| and NWELL |
| and DUALGATE |
| copyup mvnsubcheck |
| |
| layer mvnsd mvnsdarea |
| labels DIFF |
| |
| templayer mvnsdexpand mvnsdarea |
| grow 500 |
| |
| # Copy nsub areas up for contact checks |
| templayer mvxnsubcheck mvnsubcheck |
| copyup mvnsubcheck |
| |
| templayer mvpsdarea DIFF |
| and PPLUS |
| and-not NWELL |
| and-not POLY |
| and-not NPLUS |
| and DUALGATE |
| and-not mvpfetexpand |
| copyup mvpsubcheck |
| |
| layer mvpsd mvpsdarea |
| labels DIFF |
| |
| templayer mvpsdexpand mvpsdarea |
| grow 500 |
| |
| # Copy psub areas up for contact checks |
| templayer xpsubcheck psubcheck |
| copyup psubcheck |
| |
| templayer mvxpsubcheck mvpsubcheck |
| copyup mvpsubcheck |
| |
| layer psd DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and-not POLY |
| and-not DUALGATE |
| and-not pfetexpand |
| and psdexpand |
| |
| layer nsd DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and-not POLY |
| and NWELL |
| and-not DUALGATE |
| and nsdexpand |
| |
| layer mvpsd DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and-not POLY |
| and-not NWELL |
| and DUALGATE |
| and-not mvpfetexpand |
| and mvpsdexpand |
| |
| layer mvnsd DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and-not POLY |
| and NWELL |
| and DUALGATE |
| and mvnsdexpand |
| |
| templayer polyarea POLY |
| and-not DIFF |
| and-not SBLK |
| #ifdef HRPOLY1K |
| and-not HRES |
| #endif (HRPOLY1K) |
| copyup polycheck |
| |
| layer poly polyarea,POLYTXT |
| and-not RESDEF |
| labels POLY |
| labels POLYTXT text |
| |
| layer fillpoly POLYFILL |
| labels POLYFILL |
| |
| # Copy poly areas up for contact checks |
| templayer xpolycheck polycheck |
| copyup polycheck |
| |
| layer rpps POLY |
| and-not SBLK |
| and PPLUS |
| and RESDEF |
| labels POLY |
| |
| layer rnps POLY |
| and-not SBLK |
| and NPLUS |
| and RESDEF |
| labels POLY |
| |
| layer rpp POLY |
| and SBLK |
| and PPLUS |
| #ifdef HRPOLY1K |
| and-not HRES |
| #endif (HRPOLY1K) |
| and RESDEF |
| labels POLY |
| |
| # POLY + SBLK without RESDEF may be a salicide-blocked transistor. |
| # The SBLK will be regenerated on GDS output and the poly should be |
| # treated as regular poly. |
| layer poly POLY |
| and-not DIFF |
| and SBLK |
| and-not RESDEF |
| labels POLY |
| |
| layer rnp POLY |
| and SBLK |
| and NPLUS |
| and RESDEF |
| #ifdef HRPOLY1K |
| and-not HRES |
| #endif (HRPOLY1K) |
| labels POLY |
| |
| #ifdef HRPOLY1K |
| layer hires POLY |
| and SBLK |
| and HRES |
| and RESDEF |
| and-not DUALGATE |
| labels POLY |
| |
| layer mvhires POLY |
| and SBLK |
| and HRES |
| and RESDEF |
| and DUALGATE |
| labels POLY |
| |
| # We define poly under HRES but not under SBLK to be plain poly |
| layer poly POLY |
| and HRES |
| and-not SBLK |
| and-not RESDEF |
| #endif (HRPOLY1K) |
| |
| layer ndc CONT |
| and DIFF |
| and NPLUS |
| and-not NWELL |
| and MET1 |
| and-not DUALGATE |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer nsc CONT |
| and DIFF |
| and NPLUS |
| and NWELL |
| and MET1 |
| and-not DUALGATE |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer pdc CONT |
| and DIFF |
| and PPLUS |
| and NWELL |
| and MET1 |
| and-not DUALGATE |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer pdc CONT |
| and DIFF |
| and PPLUS |
| and MET1 |
| and-not DUALGATE |
| and-not DIODE |
| and pfetexpand |
| grow 145 |
| shrink 140 |
| |
| layer psc CONT |
| and DIFF |
| and PPLUS |
| and-not NWELL |
| and MET1 |
| and-not DUALGATE |
| and-not DIODE |
| and-not pfetexpand |
| grow 145 |
| shrink 140 |
| |
| layer pc CONT |
| and POLY |
| and-not DIFF |
| and MET1 |
| grow 145 |
| shrink 140 |
| |
| layer ndic CONT |
| and DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and-not NAT |
| grow 145 |
| shrink 140 |
| |
| layer nndic CONT |
| and DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and-not DUALGATE |
| and NAT |
| grow 145 |
| shrink 140 |
| |
| layer pdic CONT |
| and DIFF |
| and PPLUS |
| and DIODE |
| and-not POLY |
| and-not NPLUS |
| and-not DUALGATE |
| grow 145 |
| shrink 140 |
| |
| layer mvndc CONT |
| and DIFF |
| and NPLUS |
| and-not NWELL |
| and MET1 |
| and DUALGATE |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer mvnsc CONT |
| and DIFF |
| and NPLUS |
| and MET1 |
| and DUALGATE |
| and NWELL |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer mvpdc CONT |
| and DIFF |
| and PPLUS |
| and MET1 |
| and DUALGATE |
| and NWELL |
| and-not DIODE |
| grow 145 |
| shrink 140 |
| |
| layer mvpdc CONT |
| and DIFF |
| and PPLUS |
| and MET1 |
| and DUALGATE |
| and-not DIODE |
| and mvpfetexpand |
| grow 145 |
| shrink 140 |
| |
| layer mvpsc CONT |
| and DIFF |
| and PPLUS |
| and-not NWELL |
| and MET1 |
| and DUALGATE |
| and-not DIODE |
| and-not mvpfetexpand |
| grow 145 |
| shrink 140 |
| |
| layer mvndic CONT |
| and DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and DUALGATE |
| and-not NAT |
| grow 145 |
| shrink 140 |
| |
| layer mvnndic CONT |
| and DIFF |
| and NPLUS |
| and DIODE |
| and-not POLY |
| and-not PPLUS |
| and DUALGATE |
| and NAT |
| grow 145 |
| shrink 140 |
| |
| layer mvpdic CONT |
| and DIFF |
| and PPLUS |
| and DIODE |
| and-not POLY |
| and-not NPLUS |
| and DUALGATE |
| grow 145 |
| shrink 140 |
| |
| layer rm1 MET1 |
| and RESDEF |
| and MET1RES |
| |
| layer m1 MET1,MET1TXT |
| and-not MET1RES |
| labels MET1 |
| labels MET1TXT port |
| |
| layer obsm1 M1BLOCK |
| labels M1BLOCK |
| |
| layer fillm1 M1FILL |
| labels M1FILL |
| |
| layer m2c VIA1 |
| grow 130 |
| shrink 130 |
| |
| layer rm2 MET2 |
| and RESDEF |
| and MET2RES |
| |
| layer m2 MET2,MET2TXT |
| and-not MET2RES |
| labels MET2 |
| labels MET2TXT port |
| |
| layer obsm2 M2BLOCK |
| labels M2BLOCK |
| |
| layer fillm2 M2FILL |
| labels M2FILL |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| layer rm3 MET3 |
| and RESDEF |
| and MET3RES |
| |
| #ifdef METALS3 && MIM |
| templayer mimarea CAPDEF |
| and MET3 |
| #endif (METALS3 && MIM) |
| |
| layer m3 MET3,MET3TXT |
| and-not MET3RES |
| labels MET3 |
| labels MET3TXT port |
| |
| layer obsm3 M3BLOCK |
| labels M3BLOCK |
| |
| layer fillm3 M3FILL |
| labels M3FILL |
| |
| layer m3c VIA2 |
| #ifdef METALS3 && MIM |
| and-not CAPM |
| and-not mimarea |
| #endif (METALS3 && MIM) |
| grow 140 |
| shrink 130 |
| |
| #ifdef METALS3 && MIM |
| layer mimcc VIA2 |
| and MET3 |
| and CAPM |
| and CAPDEF |
| grow 90 |
| grow 250 |
| shrink 250 |
| #endif (METALS3 && MIM) |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| layer rm4 MET4 |
| and RESDEF |
| and MET4RES |
| |
| #ifdef METALS4 && MIM |
| templayer mimarea CAPDEF |
| and MET3 |
| #endif (METALS4 && MIM) |
| |
| layer m4 MET4,MET4TXT |
| and-not MET4RES |
| labels MET4 |
| labels MET4TXT port |
| |
| layer obsm4 M4BLOCK |
| labels M4BLOCK |
| |
| layer fillm4 M4FILL |
| labels M4FILL |
| |
| layer via3 VIA3 |
| #ifdef METALS4 && MIM |
| and-not CAPM |
| and-not mimarea |
| #endif (METALS4 && MIM) |
| grow 140 |
| shrink 130 |
| |
| #ifdef METALS4 && MIM |
| layer mimcc VIA3 |
| and MET4 |
| and CAPM |
| and CAPDEF |
| grow 90 |
| grow 250 |
| shrink 250 |
| #endif (METALS4 && MIM) |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| layer rm5 MET5 |
| and RESDEF |
| and MET5RES |
| |
| #ifdef METALS5 && MIM |
| templayer mimarea CAPDEF |
| and MET4 |
| #endif (METALS5 && MIM) |
| |
| layer m5 MET5,MET5TXT |
| and-not MET5RES |
| labels MET5 |
| labels MET5TXT port |
| |
| layer obsm5 M5BLOCK |
| labels M5BLOCK |
| |
| layer fillm5 M5FILL |
| labels M5FILL |
| |
| layer via4 VIA4 |
| #ifdef MIM && METALS5 |
| and-not CAPM |
| and-not mimarea |
| #endif (MIM && METALS5) |
| grow 140 |
| shrink 130 |
| |
| #ifdef METALS5 && MIM |
| layer mimcc VIA4 |
| and MET5 |
| and CAPM |
| and CAPDEF |
| grow 90 |
| grow 250 |
| shrink 250 |
| #endif (METALS5 && MIM) |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| layer rmtp METTP |
| and RESDEF |
| and METTPRES |
| |
| layer mtp METTP,METTPTXT |
| and-not METTPRES |
| labels METTP |
| labels METTPTXT port |
| |
| layer obsmtp MTPBLOCK |
| labels MTPBLOCK |
| |
| layer fillmtp MTPFILL |
| labels MTPFILL |
| |
| #ifdef MIM |
| templayer mimarea CAPDEF |
| and MET5 |
| #endif (MIM) |
| |
| layer viatp VIATP |
| and METTP |
| #ifdef MIM |
| and-not CAPM |
| and-not mimarea |
| #endif (MIM) |
| grow 5 |
| grow 265 |
| shrink 265 |
| |
| #ifdef MIM |
| layer mimcc VIATP |
| and METTP |
| and CAPM |
| and CAPDEF |
| grow 260 |
| shrink 250 |
| #endif (MIM) |
| #endif (METALS6) |
| |
| #ifdef MIM |
| layer mimcap CAPM |
| and CAPDEF |
| labels CAPM |
| |
| templayer nolayer CAP_LENGTH |
| #endif (MIM) |
| |
| # Find diffusion not covered in |
| # NPLUS or PPLUS and pull it into |
| # the next layer up |
| |
| templayer gentrans DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and POLY |
| copyup DIFF,POLY |
| |
| templayer gendiff DIFF |
| and-not PPLUS |
| and-not NPLUS |
| and-not POLY |
| copyup DIFF |
| |
| # Handle contacts found by copyup |
| |
| layer ndic CONT |
| and MET1 |
| and DIODE |
| and NPLUS |
| and-not DUALGATE |
| and-not NAT |
| grow 100 |
| shrink 100 |
| |
| layer mvndic CONT |
| and MET1 |
| and DIODE |
| and NPLUS |
| and DUALGATE |
| and-not NAT |
| grow 100 |
| shrink 100 |
| |
| layer mvnndic CONT |
| and MET1 |
| and DIODE |
| and NPLUS |
| and DUALGATE |
| and NAT |
| grow 100 |
| shrink 100 |
| |
| layer pdic CONT |
| and MET1 |
| and DIODE |
| and PPLUS |
| and-not DUALGATE |
| grow 100 |
| shrink 100 |
| |
| layer mvpdic CONT |
| and MET1 |
| and DIODE |
| and PPLUS |
| and DUALGATE |
| grow 100 |
| shrink 100 |
| |
| layer ndc CONT |
| and ndifcheck |
| grow 100 |
| shrink 100 |
| |
| layer mvndc CONT |
| and mvndifcheck |
| grow 100 |
| shrink 100 |
| |
| layer pdc CONT |
| and pdifcheck |
| grow 100 |
| shrink 100 |
| |
| layer mvpdc CONT |
| and mvpdifcheck |
| grow 100 |
| shrink 100 |
| |
| layer pc CONT |
| and polycheck |
| grow 100 |
| shrink 100 |
| |
| layer nsc CONT |
| and nsubcheck |
| grow 100 |
| shrink 100 |
| |
| layer mvnsc CONT |
| and mvnsubcheck |
| grow 100 |
| shrink 100 |
| |
| layer psc CONT |
| and psubcheck |
| grow 100 |
| shrink 100 |
| |
| layer mvpsc CONT |
| and mvpsubcheck |
| grow 100 |
| shrink 100 |
| |
| # Find contacts not covered in |
| # metal and pull them into the |
| # next layer up |
| |
| templayer gencont CONT |
| and MET1 |
| and-not DIFF |
| and-not POLY |
| and-not DIODE |
| and-not nsubcheck |
| and-not psubcheck |
| and-not mvnsubcheck |
| and-not mvpsubcheck |
| copyup CONT,MET1 |
| |
| templayer barecont CONT |
| and-not MET1 |
| and-not nsubcheck |
| and-not psubcheck |
| and-not mvnsubcheck |
| and-not mvpsubcheck |
| copyup CONT |
| |
| layer glass GLASS |
| labels GLASS |
| |
| templayer cellbound BOUND,PRBOUND |
| boundary |
| |
| layer lvstext TTEXT |
| labels TTEXT text |
| |
| # layer fillblock FILLOBS,FILLOBS2 |
| layer fillblock FILLOBS2 |
| labels FILLOBS2 |
| |
| # MOS Varactors |
| |
| layer nvar POLY |
| and DIFF |
| and NPLUS |
| and NWELL |
| and-not DUALGATE |
| labels POLY |
| |
| layer mvnvar POLY |
| and DIFF |
| and NPLUS |
| and NWELL |
| and DUALGATE |
| labels POLY |
| |
| layer pvar POLY |
| and DIFF |
| and PPLUS |
| and-not NWELL |
| and-not DUALGATE |
| labels POLY |
| |
| layer mvpvar POLY |
| and DIFF |
| and PPLUS |
| and-not NWELL |
| and DUALGATE |
| labels POLY |
| |
| calma DNWELL 12 0 |
| calma NWELL 21 0 |
| calma NWELLTXT 21 10 |
| calma PWELL 204 0 |
| calma PWELLTXT 204 10 |
| calma SUBCUT 23 5 |
| calma DIFF 22 0 |
| calma DIFFFILL 22 4 |
| calma POLY 30 0 |
| calma POLYFILL 30 4 |
| calma POLYTXT 30 10 |
| calma NPLUS 32 0 |
| calma PPLUS 31 0 |
| calma SBLK 49 0 |
| calma GLASS 37 0 |
| calma CONT 33 0 |
| calma MET1 34 0 |
| calma MET1TXT 34 10 |
| calma M1BLOCK 34 5 |
| calma M1FILL 34 4 |
| calma MET2RES 110 11 |
| calma VIA1 35 0 |
| calma MET2 36 0 |
| calma MET2TXT 36 10 |
| calma M2BLOCK 36 5 |
| calma M2FILL 36 4 |
| calma MET2RES 110 12 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| calma VIA2 38 0 |
| calma MET3 42 0 |
| calma MET3TXT 42 10 |
| calma M3BLOCK 42 5 |
| calma M3FILL 42 4 |
| calma MET3RES 110 13 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| calma VIA3 40 0 |
| calma MET4 46 0 |
| calma MET4TXT 46 10 |
| calma M4BLOCK 46 5 |
| calma M4FILL 46 4 |
| calma MET4RES 110 14 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| calma VIA4 41 0 |
| calma MET5 81 0 |
| calma MET5TXT 81 10 |
| calma M5BLOCK 81 5 |
| calma M5FILL 81 4 |
| calma MET5RES 110 15 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| calma VIATP 129 0 |
| calma METTP 53 0 |
| calma METTPTXT 53 10 |
| calma MTPBLOCK 53 5 |
| calma METTPRES 110 16 |
| #endif (METALS6) |
| #ifdef HRPOLY1K |
| calma HRES 62 0 |
| #endif (HRPOLY1K) |
| calma NAT 5 0 |
| #ifdef MIM |
| calma CAPM 75 0 |
| calma CAP_LENGTH 117 10 |
| #endif (MIM) |
| calma DIODE 115 5 |
| calma CAPDEF 117 5 |
| calma BJTDEF 118 5 |
| calma MOSCAP 166 5 |
| calma BOUND 0 0 |
| calma PRBOUND 63 0 |
| calma VTEXT 63 63 |
| calma FILLOBS 111 5 |
| calma FILLOBS2 152 5 |
| calma TTEXT 230 * |
| calma RESDEF 110 * |
| calma DUALGATE 55 0 |
| calma SRAMDEF 108 5 |
| calma FET5VDEF 112 1 |
| |
| end |
| |
| #----------------------------------------------------- |
| # Digital flow maze router cost parameters |
| #----------------------------------------------------- |
| |
| mzrouter |
| end |
| |
| #----------------------------------------------------- |
| # Vendor DRC rules |
| #----------------------------------------------------- |
| |
| drc |
| |
| style drc variants (fast),(full),(routing) |
| |
| scalefactor 50 |
| |
| cifstyle drc |
| |
| variants (fast),(full) |
| |
| #----------------------------- |
| # NWELL |
| #----------------------------- |
| |
| width allnwell 860 "N-well width < %d (NW.1a)" |
| spacing allnwell allnwell 600 touching_ok "N-well spacing < %d (NW.2a)" |
| # rnw spacing is to unrelated nwell only. |
| spacing rnw allnwell 1400 touching_ok "N-well resistor spacing < %d (NW.4)" |
| width rnw 2000 "N-well resistor width < %d (NW.1b)" |
| |
| variants (full) |
| cifspacing mv_nwell mv_nwell 740 touching_ok "MV N-well spacing < %d (NW.2a)" |
| variants * |
| |
| #----------------------------- |
| # DNWELL (deep nwell) |
| #----------------------------- |
| |
| width dnwell 1700 "Deep N-well width < %d (DN.1)" |
| spacing dnwell dnwell 2500 touching_ok "Deep N-well spacing < %d (DN.2a)" |
| |
| surround pwell dnwell 2500 absence_ok \ |
| "Deep N-well surround P-well < %d (LPW.3)" |
| |
| surround nwell dnwell 500 absence_ok \ |
| "Deep N-well surround N-well < %d (NW.5)" |
| |
| variants (full) |
| |
| cifwidth pwell_in_dnwell 600 "P-well in deep N-well size < %d (LPW.1)" |
| cifwidth mvpwell_in_dnwell 740 "HV P-well in deep N-well size < %d (LPW.1)" |
| |
| cifspacing pwell_in_dnwell pwell_in_dnwell 860 touching_ok \ |
| "P-well in deep N-well spacing < %d (LPW.2b)" |
| cifspacing mvpwell_in_dnwell mvpwell_in_dnwell 860 touching_ok \ |
| "MV P-well in deep N-well spacing < %d (LPW.2b)" |
| |
| cifmaxwidth bad_dnwell 0 bend_illegal \ |
| "Both LV and MV devices cannot be in the same deep N-well (DN.11) |
| |
| cifmaxwidth bad_nwell 0 bend_illegal \ |
| "Both LV and MV devices cannot be in the same N-well (DV.9) |
| |
| cifmaxwidth bad_rnw 0 bend_illegal \ |
| "N-well resistor cannot be in deep N-well (DN.12) |
| variants * |
| |
| spacing dnwell allnwell 3100 surround_ok \ |
| "Deep N-well spacing to N-well < %d (NW.3)" |
| |
| spacing pwell dnwell 1500 surround_ok \ |
| "Deep N-well spacing to P-well < %d (LPW.11)" |
| |
| #----------------------------- |
| # DIFF (diffusion) |
| #----------------------------- |
| |
| width alldifflv 220 "Diffusion width < %d (DF.1a)" |
| width alldiffmv 300 "Diffusion width < %d (DF.1a)" |
| area alldifflv 202500 220 "Diffusion minimum area < %a (DF.9)" |
| area alldiffmv 202500 300 "Diffusion minimum area < %a (DF.9)" |
| spacing alldifflv,nvar,pvar alldifflv,nvar,pvar 280 touching_ok \ |
| "Diffusion spacing < %d (DF.3a)" |
| spacing alldiffmv,mvnvar,mvpvar alldiffmv,mvnvar,mvpvar 360 touching_ok \ |
| "Diffusion spacing < %d (DF.3a)" |
| |
| spacing *ndiff,*ndiode,nfet,nnfet,ncap allnwell 430 touching_illegal \ |
| "N-Diffusion spacing to N-well < %d (DF.8)" |
| spacing *mvndiff,*mvndiode,mvnfet,mvncap,mvnnfet allnwell 600 touching_illegal \ |
| "N-Diffusion spacing to N-well < %d (DF.8)" |
| spacing *psd allnwell 120 touching_illegal \ |
| "P-Ohmic spacing to N-well < %d (DF.5)" |
| spacing *mvpsd allnwell 160 touching_illegal \ |
| "P-Ohmic spacing to N-well < %d (DF.5)" |
| surround *nsd allnwell 120 absence_illegal \ |
| "N-well overlap of N-Ohmic < %d (DF.4a)" |
| surround *mvnsd allnwell 160 absence_illegal \ |
| "N-well overlap of N-Ohmic < %d (DF.4a)" |
| surround *pdiff,*pdiode,pfet,pcap allnwell 430 absence_illegal \ |
| "N-well overlap of P-Diffusion < %d (DF.7)" |
| surround *mvpdiff,*mvpdiode,mvpfet,mvpcap allnwell 600 absence_illegal \ |
| "N-well overlap of P-Diffusion < %d (DF.7)" |
| surround *psd pwell 120 absence_ok \ |
| "P-field overlap of P-Ohmic < %d (DF.5)" |
| surround *mvpsd pwell 160 absence_ok \ |
| "MV P-field overlap of MV P-Ohmic < %d (DF.5)" |
| |
| # NAT requires additional spacing rules |
| spacing *nndiode,*mvnndiode *psd,*mvpsd 610 touching_illegal \ |
| "NAT Diffusion spacing to TAP diffusion < %d (NAT.5 + NAT.6)" |
| |
| #----------------------------- |
| # POLY |
| #----------------------------- |
| |
| width allpoly 180 "Poly width < %d (PL.1)" |
| spacing allpoly allpoly 240 touching_ok "Poly spacing < %d (PL.3a)" |
| spacing allpolynonfet alldifflvnonfet 100 corner_ok allfets \ |
| "Poly spacing to diffusion < %d (PL.5a)" |
| spacing allpolynonfet alldiffmvnonfet 300 corner_ok allfets \ |
| "Poly spacing to MV diffusion < %d (PL.5a) |
| overhang *ndiff,rndiff nfet,nnfet,ncap 230 "N-Diffusion overhang of nmos < %d (DF.6)" |
| overhang *mvndiff,mvrndiff mvnfet,mvncap,mvnnfet 230 \ |
| "N-Diffusion overhang of nmos < %d (DF.6)" |
| overhang *pdiff,rpdiff pfet,pcap 230 "P-Diffusion overhang of pmos < %d (DF.6)" |
| overhang *mvpdiff,mvrpdiff mvpfet,mvpcap 230 "P-Diffusion overhang of pmos < %d (DF.6)" |
| overhang *poly allfetsnonnat 220 "Poly overhang of transistor < %d (PL.4)" |
| overhang *poly nnfet,mvnnfet 350 "Poly overhang of NAT transistor < %d (NAT.6)" |
| |
| angles allfets 45-only "Only 45 degrees allowed on transistors (PL.6)" |
| |
| #----------------------------------------------------------------------------- |
| # SBLK - more rules to do here (note PRES refers only to unsalicided resistor) |
| #----------------------------------------------------------------------------- |
| |
| spacing allpolysblkres allpolysblkres 250 touching_ok \ |
| "Poly resistor spacing < %d (PRES.2) |
| |
| spacing allpolysblkres allpolynonres 450 touching_ok \ |
| "Poly resistor spacing to unrelated poly < %d (PRES.4)" |
| spacing allpolysblkres allactive,allactiveres 440 touching_illegal \ |
| "Poly resistor spacing to diffusion < %d (PRES.3)" |
| |
| spacing allactiveres allactiveres 400 touching_ok \ |
| "Diffusion resistor spacing < %d (NDRES.2) |
| |
| spacing allactiveres allactive 450 touching_ok \ |
| "Diffusion resistor spacing to unrelated diffusion < %d (NDRES.3)" |
| spacing allactiveres allpoly 450 touching_ok \ |
| "Diffusion resistor spacing to unrelated poly < %d (NDRES.4)" |
| |
| #----------------------------- |
| # CONT |
| #----------------------------- |
| # Drawn contact includes 5nm metal1 surround |
| width (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 230 \ |
| "Diffusion contact width < %d (CO.1 + 2 * CO.6)" |
| spacing (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 \ |
| (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 240 \ |
| touching_ok "Diffusion contact spacing < %d (CO.2a - CO.6)" |
| surround (ndc,nsc,pdc,psc,ndic,pdic,pc)/m1 *m1 55 35 \ |
| directional "Metal1 overlap of contact < %d in one direction (CO.6)" |
| surround ndc/a *ndiff 65 absence_illegal \ |
| "N-Diffusion overlap of contact < %d (CO.4)" |
| surround nsc/a *nsd 65 absence_illegal \ |
| "N-Diffusion overlap of contact < %d (CO.4)" |
| surround pdc/a *pdiff 65 absence_illegal \ |
| "P-Diffusion overlap of contact < %d (CO.4)" |
| surround psc/a *psd 65 absence_illegal \ |
| "P-Diffusion overlap of contact < %d (CO.4)" |
| surround ndic/a *ndiode 65 absence_illegal \ |
| "N-Diffusion overlap of contact < %d (CO.4)" |
| surround pdic/a *pdiode 65 absence_illegal \ |
| "P-Diffusion overlap of contact < %d (CO.4)" |
| surround pc/a *poly 65 absence_illegal "Poly overlap of contact < %d (CO.3)" |
| |
| width (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 230 \ |
| "MV Diffusion contact width < %d (CO.1 + 2 * CO.6)" |
| spacing (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 \ |
| (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 240 touching_ok \ |
| "Diffusion contact spacing < %d (CO.2a - CO.6)" |
| surround (mvndc,mvnsc,mvpdc,mvpsc,mvndic,mvnndic,mvpdic)/m1 *m1 55 35 directional \ |
| "Metal1 overlap of contact < %d in one direction (CO.6)" |
| surround mvndc/a *mvndiff 65 absence_illegal \ |
| "MV N-Diffusion overlap of contact < %d (CO.4)" |
| surround mvnsc/a *mvnsd 65 absence_illegal \ |
| "MV N-Diffusion overlap of contact < %d (CO.4)" |
| surround mvpdc/a *mvpdiff 65 absence_illegal \ |
| "MV P-Diffusion overlap of contact < %d (CO.4)" |
| surround mvpsc/a *mvpsd 65 absence_illegal \ |
| "MV P-Diffusion overlap of contact < %d (CO.4)" |
| surround mvndic/a *mvndiode 65 absence_illegal \ |
| "MV N-Diffusion overlap of contact < %d (CO.4)" |
| surround mvnndic/a *mvnndiode 65 absence_illegal \ |
| "MV NAT N-Diffusion overlap of contact < %d (CO.4)" |
| surround mvpdic/a *mvpdiode 65 absence_illegal \ |
| "MV P-Diffusion overlap of contact < %d (CO.4)" |
| |
| spacing allpdiffcont allndiffcont 240 touching_illegal \ |
| "Diffusion contact spacing < %d (CO.2a - CO.6)" |
| spacing allndiffcont allndiffcont 240 touching_ok \ |
| "Diffusion contact spacing < %d (CO.2a - CO.6)" |
| spacing allpdiffcont allpdiffcont 240 touching_ok \ |
| "Diffusion contact spacing < %d (CO.2a - CO.6)" |
| spacing pc pc 240 touching_ok "Poly contact spacing < %d (CO.2a - CO.6)" |
| spacing pc alldiff 165 touching_illegal \ |
| "Poly contact spacing to diffusion < %d (CO.8 - CO.6)" |
| spacing allpdiffcont,allndiffcont allpoly 145 touching_illegal \ |
| "Diffusion contact spacing to poly < %d (CO.7 - CO.6)" |
| |
| exact_overlap (ndc,pdc,psc,nsc,pc,ndic,pdic)/a |
| exact_overlap (mvndc,mvpdc,mvpsc,mvnsc,mvndic,mvnndic,mvpdic)/a |
| |
| variants * |
| |
| #----------------------------- |
| # METAL 1 |
| #----------------------------- |
| |
| width *m1,rm1 230 "Metal1 width < %d (M1.1)" |
| spacing allm1,obsm1 allm1,obsm1 230 touching_ok "Metal1 spacing < %d (M1.2a)" |
| area allm1,obsm1 144400 230 "Metal1 minimum area < %a (M1.3)" |
| |
| variants (fast),(full) |
| widespacing allm1,obsm1 10000 allm1,obsm1 300 touching_ok \ |
| "Metal1 > 10um spacing to unrelated m1 < %d (M1.2b)" |
| |
| variants * |
| |
| #-------------------------------------------------- |
| # VIA 1 |
| #-------------------------------------------------- |
| |
| width v1/m1 260 "Via1 width < %d (V1.1)" |
| spacing v1 v1 260 touching_ok "Via1 spacing < %d (V1.2a)" |
| surround v1/m1 *m1 60 40 directional \ |
| "Metal1 overlap of Via1 < %d in one direction (V1.3)" |
| surround v1/m2 *m2 10 absence_illegal \ |
| "Metal2 overlap of Via1 < %d (V1.4)" |
| surround v1/m2 *m2 60 40 directional \ |
| "Metal2 overlap of Via1 < %d in one direction (V1.4i)" |
| exact_overlap v1/m2 |
| |
| #----------------------------- |
| # METAL 2 |
| #----------------------------- |
| |
| width *m2,rm2 280 "Metal2 width < %d (M2.1)" |
| spacing allm2,obsm2 allm2,obsm2 280 touching_ok "Metal2 spacing < %d (M2.2a)" |
| area allm2,obsm2 144400 280 "Metal2 minimum area < %a (M2.3)" |
| |
| variants (fast),(full) |
| widespacing allm2,obsm2 10000 allm2,obsm2 300 touching_ok \ |
| "Metal2 > 10um spacing to unrelated m2 < %d (M2.2b)" |
| |
| variants * |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #-------------------------------------------------- |
| # VIA 2 |
| #-------------------------------------------------- |
| |
| width v2/m2 280 "Via2 width < %d (V2.1 + 2 * V2.3)" |
| spacing v2 v2 240 touching_ok "Via2 spacing < %d (V2.2a - 2 * V2.3)" |
| surround v2/m2 *m2 50 30 directional \ |
| "Metal2 overlap of Via2 < %d in one direction (V2.3i - V2.3)" |
| |
| exact_overlap v2/m3 |
| |
| #----------------------------- |
| # METAL 3 |
| #----------------------------- |
| |
| #ifdef METALS3 |
| # Metal 3 is the top metal |
| #ifdef THICKMET3P0 |
| width *m3,rm3 1800 "Thick Metal3 width < %d (MT30.1)" |
| spacing allm3,obsm3 allm3,obsm3 1800 touching_ok \ |
| "Thick Metal3 spacing < %d (MT30.2)" |
| |
| surround v2/m3 *m3 110 absence_illegal \ |
| "Thick Metal3 overlap of Via2 < %d (MT30.5 - V2.4)" |
| surround v2/m3 *m3 240 directional \ |
| "Thick Metal3 overlap of Via2 < %d in one direction (MT30.6 - V2.4)" |
| |
| #elseif defined(THICKMET0P9 || THICKMET1P1) |
| surround v2/m3 *m3 50 30 directional \ |
| "Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)" |
| |
| width *m3,rm3 440 "Metal3 width < %d (MT.1)" |
| spacing allm3,obsm3 allm3,obsm3 460 touching_ok "Metal3 spacing < %d (MT.2a)" |
| area allm3,obsm3 562500 440 "Metal3 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm3,obsm3 10000 allm3,obsm3 600 touching_ok \ |
| "Metal3 > %c spacing to unrelated m3 < %d (MT.2b)" |
| |
| #else (!(THICKMET3P0 || THICKMET0P9 || THICKMET1P1)) |
| surround v2/m3 *m3 50 30 directional \ |
| "Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)" |
| |
| width *m3,rm3 360 "Metal3 width < %d (MT.1)" |
| spacing allm3,obsm3 allm3,obsm3 380 touching_ok "Metal3 spacing < %d (MT.2a)" |
| area allm3,obsm3 562500 360 "Metal3 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm3,obsm3 10000 allm3,obsm3 500 touching_ok \ |
| "Metal3 > %c spacing to unrelated m3 < %d (MT.2b)" |
| #endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9)) |
| #else (!METALS3) |
| surround v2/m3 *m3 50 30 directional \ |
| "Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)" |
| |
| width *m3,rm3 280 "Metal3 width < %d (M3.1)" |
| spacing allm3,obsm3 allm3,obsm3 280 touching_ok "Metal3 spacing < %d (M3.2a)" |
| area allm3,obsm3 144400 280 "Metal3 minimum area < %a (M3.3)" |
| |
| variants (fast),(full) |
| widespacing allm3,obsm3 10000 allm3,obsm3 300 touching_ok \ |
| "Metal3 > %c spacing to unrelated m3 < %d (M3.2b)" |
| #endif (!METALS3) |
| |
| variants * |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #-------------------------------------------------------------- |
| # VIA 3 - Requires METAL4, METAL5, or METAL6 Module |
| #-------------------------------------------------------------- |
| |
| width v3/m3 280 "Via3 width < %d (V3.1 + 2 * V3.4)" |
| spacing v3 v3 240 touching_ok "Via3 spacing < %d (V3.2a - 2 * V3.4)" |
| surround v3/m3 *m3 50 30 directional \ |
| "Metal3 overlap of Via3 < %d in one direction (V3.3i - V3.3)" |
| |
| exact_overlap v3/m4 |
| |
| #----------------------------- |
| # METAL 4 - METAL4 Module |
| #----------------------------- |
| |
| #ifdef METALS4 |
| # Metal 4 is the top metal |
| #ifdef THICKMET3P0 |
| width *m4,rm4 1800 "Thick Metal4 width < %d (MT30.1)" |
| spacing allm4,obsm4 allm4,obsm4 1800 touching_ok "Metal4 spacing < %d (MT30.2)" |
| |
| surround v3/m4 *m4 110 absence_illegal \ |
| "Thick Metal4 overlap of Via3 < %d (MT30.5 - V3.4)" |
| surround v3/m4 *m4 240 directional \ |
| "Thick Metal4 overlap of Via3 < %d in one direction (MT30.6 - V3.4)" |
| |
| #elseif defined(THICKMET0P9 || THICKMET1P1) |
| surround v3/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)" |
| |
| width *m4,rm4 440 "Metal4 width < %d (MT.1)" |
| spacing allm4,obsm4 allm4,obsm4 460 touching_ok "Metal4 spacing < %d (MT.2a)" |
| area allm4,obsm4 562500 440 "Metal4 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm4,obsm4 10000 allm4,obsm4 600 touching_ok \ |
| "Metal4 > %c spacing to unrelated m4 < %d (MT.2b)" |
| #else (!(THICK3UMET || THICKMET1P1 || THICKMET0P9)) |
| surround v3/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)" |
| |
| width *m4,rm4 360 "Metal4 width < %d (MT.1)" |
| spacing allm4,obsm4 allm4,obsm4 380 touching_ok "Metal4 spacing < %d (MT.2a)" |
| area allm4,obsm4 562500 360 "Metal4 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm4,obsm4 10000 allm4,obsm4 500 touching_ok \ |
| "Metal4 > %c spacing to unrelated m4 < %d (MT.2b)" |
| #endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9)) |
| #else (!METALS4) |
| surround v3/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)" |
| |
| width *m4,rm4 200 "Metal4 width < %d (M4.1)" |
| spacing allm4,obsm4 allm4,obsm4 210 touching_ok "Metal4 spacing < %d (M4.2a)" |
| area allm4,obsm4 144000 200 "Metal4 minimum area < %a (M4.3)" |
| |
| variants (fast),(full) |
| widespacing allm4,obsm4 10000 allm4,obsm4 300 touching_ok \ |
| "Metal4 > %c spacing to unrelated m4 < %d (M4.2b)" |
| #endif (!METALS4) |
| |
| variants * |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #------------------------------------------------------ |
| # VIA 4 - Requires METAL5 Module |
| #------------------------------------------------------ |
| |
| width v4/m4 280 "Via4 width < %d (V4.1 + 2 * V4.4)" |
| spacing v4 v4 240 touching_ok "Via4 spacing < %d (V4.2a - 2 * V4.4)" |
| exact_overlap v4/m5 |
| |
| #----------------------------- |
| # METAL 5 - METAL5 Module |
| #----------------------------- |
| |
| #ifdef METALS5 |
| # Metal 5 is the top metal |
| #ifdef THICKMET3P0 |
| width *m5,rm5 1800 "Metal5 width < %d (MT30.1)" |
| spacing allm5,obsm5 allm5,obsm5 1800 touching_ok "Metal5 spacing < %d (MT30.2)" |
| |
| surround v4/m5 *m5 110 absence_illegal \ |
| "Metal5 overlap of Via4 < %d (MT30.5 - V4.4)" |
| surround v4/m5 *m5 240 directional \ |
| "Metal5 overlap of Via4 < %d in one direction (MT30.6 - V4.4)" |
| |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| surround v4/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)" |
| surround v4/m5 *m5 50 30 directional \ |
| "Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)" |
| |
| width *m5,rm5 440 "Metal5 width < %d (MT.1)" |
| spacing allm5,obsm5 allm5,obsm5 460 touching_ok "Metal5 spacing < %d (MT.2a)" |
| area allm5,obsm5 526500 440 "Metal5 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm5,obsm5 10000 allm5,obsm5 600 touching_ok \ |
| "Metal5 > %c spacing to unrelated m5 < %d (MT.2b)" |
| #else (!(THICK3UMET || THICKMET1P1 || THICKMET0P9)) |
| surround v4/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)" |
| surround v4/m5 *m5 50 30 directional \ |
| "Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)" |
| |
| width *m5,rm5 360 "Metal5 width < %d (MT.1)" |
| spacing allm5,obsm5 allm5,obsm5 380 touching_ok "Metal5 spacing < %d (MT.2a)" |
| area allm5,obsm5 562500 360 "Metal5 minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allm5,obsm5 10000 allm5,obsm5 500 touching_ok \ |
| "Metal5 > %c spacing to unrelated m5 < %d (MT.2b)" |
| #endif (!(THICK3UMET || THICKMET1P1 || THICKMET0P9)) |
| #else (!METALS5) |
| surround v4/m4 *m4 50 30 directional \ |
| "Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)" |
| surround v4/m5 *m5 50 30 directional \ |
| "Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)" |
| |
| width *m5,rm5 200 "Metal5 width < %d (M5.1)" |
| spacing allm5,obsm5 allm5,obsm5 210 touching_ok "Metal5 spacing < %d (M5.2a)" |
| area allm5,obsm5 144000 200 "Metal5 minimum area < %a (M5.3)" |
| |
| variants (fast),(full) |
| widespacing allm5,obsm5 10000 allm5,obsm5 300 touching_ok \ |
| "Metal5 > %c spacing to unrelated m5 < %d (M5.2b)" |
| |
| #endif (!METALS5) |
| |
| variants * |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #----------------------------------------------------------------------------------- |
| # VIA TP - Requires METAL6 Module |
| #----------------------------------------------------------------------------------- |
| |
| spacing vtp vtp 340 touching_ok "ViaTP spacing < %d (VT.2a - VT.3)" |
| |
| width vtp/m5 370 "ViaTP width < %d (VT.1+VT.3)" |
| surround vtp/m5 *m5 45 directional \ |
| "Metal 5 overlap of ViaTP in one direction < %d (VT.3)" |
| exact_overlap vtp/m5 |
| |
| #---------------------------------------------------------------------- |
| # METAL TP - Top metal for METAL6 module |
| #---------------------------------------------------------------------- |
| |
| variants * |
| # Metal TP is the top metal |
| #ifdef THICKMET3P0 |
| width allmtp 1800 "Thick Top Metal width < %d (MT30.1)" |
| spacing allmtp,obsmtp allmtk,obsmtk 1800 touching_ok\ |
| "Thick Top Metal spacing < %d (MT30.2a)" |
| |
| surround vtp/mtp *mtp 110 absence_illegal \ |
| "Thick Top Metal overlap of ViaTP < %d (MT30.5 - VTP.4)" |
| surround vtp/mtp *mtp 240 directional \ |
| "Thick Top Metal overlap of ViaTP < %d in one direction (MT30.6 - VTP.4)" |
| |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| surround vtp/mtp *mtp 80 absence_illegal \ |
| "Top Metal overlap of ViaTP < %d (VT.4 - VT.3)" |
| width allmtp 440 "Top Metal width < %d (MT.1)" |
| spacing allmtp,obsmtp allmtp,obsmtp 460 touching_ok\ |
| "Top Metal spacing < %d (MT.2a)" |
| area allmtp 562500 440 "Top Metal minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allmtp,obsmtp 10000 allmtp,obsmtp 600 touching_ok \ |
| "Top Metal > %c spacing to unrelated Top Metal < %d (MT.2b)" |
| |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| surround vtp/mtp *mtp 80 absence_illegal \ |
| "Top Metal overlap of ViaTP < %d (VT.4 - VT.3)" |
| |
| width allmtp 360 "Top Metal width < %d (MT.1)" |
| spacing allmtp,obsmtp allmtp,obsmtp 380 touching_ok\ |
| "Top Metal spacing < %d (MT.2a)" |
| area allmtp 562500 360 "Top Metal minimum area < %a (MT.4)" |
| |
| variants (fast),(full) |
| widespacing allmtp,obsmtp 10000 allmtp,obsmtp 500 touching_ok \ |
| "Top Metal > %c spacing to unrelated Top Metal < %d (MT.2b)" |
| |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| variants * |
| |
| #endif (METALS6) |
| |
| #-------------------------------------------------- |
| # NMOS, PMOS |
| #-------------------------------------------------- |
| |
| # NOTE: The layer width can be used for the smaller of |
| # (minimum length, minimum width). However, for many |
| # devices, minimum width is less than minimum length. |
| |
| extend nnfet *ndiff 400 exclusive "nn Transistor length < %d (DF.2c)" |
| |
| extend mvnnfet *mvndiff 1200 exclusive "MV nn Transistor length < %d (NAT.4)" |
| width mvnnfet 400 "MV nn Transistor width < %d (DF.2c)" |
| |
| extend pfet,pcap *pdiff 280 exclusive "Transistor length < %d (PL.1a)" |
| extend nfet,ncap *ndiff 280 exclusive "Transistor length < %d (PL.1a)" |
| width pfet,pcap 300 angles "Bent Transistor length < %d (PL.7)" |
| width nfet,ncap 300 angles "Bent Transistor length < %d (PL.7)" |
| |
| extend mvpfet,mvpcap *mvpdiff 500 exclusive "MV Transistor length < %d (PL.1a)" |
| extend mvnfet,mvncap *mvndiff 600 exclusive "MV Transistor length < %d (PL.1a)" |
| width mvpfet,mvpcap 700 angles "Bent MV Transistor length < %d (PL.7)" |
| width mvnfet,mvncap 700 angles "Bent MV Transistor length < %d (PL.7)" |
| |
| # NOTE: Use edge4way to deal with butted junctions |
| # spacing *nsd,*mvnsd pfet,pcap,mvnnfet,mvpfet,mvpcap 330 touching_illegal \ |
| # "n-ohmic spacing to PMOS gate < %d (NP.4b)" |
| # spacing *psd,*mvpsd nfet,ncap,nnfet,mvnfet,mvncap 330 touching_illegal \ |
| # "p-ohmic spacing to NMOS gate < %d (NP.4c)" |
| |
| edge4way pfet,pcap,mvpfet,mvpcap *poly/a 330 \ |
| ~(*nsd,*mvnsd)/a (*pdiff,*mvpdiff)/a 300 \ |
| "n-ohmic spacing to PMOS gate < %d (NP.4b + PP.4c)" |
| edge4way nfet,ncap,nnfet,mvnnfet,mvnfet,mvncap *poly/a 330 \ |
| ~(*psd,*mvpsd)/a (*ndiff,*mvndiff)/a 300 \ |
| "p-ohmic spacing to NMOS gate < %d (PP.4b + NP.4c)" |
| |
| # Butting junction rules (flag p/nsd distance to butting junction < 0.03um) |
| edge4way (*psd)/a ~(*ndiff,*psd)/a 330 ~(*ndiff)/a (*ndiff)/a 30 \ |
| "N-Diffusion to P-tap spacing < %d across butted junction (PP.4b + NP.4c)" |
| edge4way (*ndiff)/a ~(*ndiff,*psd)/a 330 ~(*psd)/a (*psd)/a 30 \ |
| "N-Diffusion to P-tap spacing < %d across butted junction (PP.4b + NP.4c)" |
| edge4way (*nsd)/a ~(*pdiff,*nsd)/a 330 ~(*pdiff)/a (*pdiff)/a 30 \ |
| "P-Diffusion to N-tap spacing < %d across butted junction (NP.4b + PP.4c)" |
| edge4way (*pdiff)/a ~(*pdiff,*nsd)/a 330 ~(*nsd)/a (*nsd)/a 30 \ |
| "P-Diffusion to N-tap spacing < %d across butted junction (NP.4b + PP.4c)" |
| |
| edge4way (*mvpsd)/a ~(*mvndiff,*mvpsd)/a 330 ~(*mvndiff)/a (*mvndiff)/a 30 \ |
| "MV N-Diffusion to MV P-tap spacing < %d across butted junction (PP.4b + NP.4c)" |
| edge4way (*mvndiff)/a ~(*mvndiff,*mvpsd)/a 330 ~(*mvpsd)/a (*mvpsd)/a 30 \ |
| "MV N-Diffusion to MV P-tap spacing < %d across butted junction (PP.4b + NP.4c)" |
| edge4way (*mvnsd)/a ~(*mvpdiff,*mvnsd)/a 330 ~(*mvpdiff)/a (*mvpdiff)/a 30 \ |
| "MV P-Diffusion to MV N-tap spacing < %d across butted junction (NP.4b + PP.4c)" |
| edge4way (*mvpdiff)/a ~(*mvpdiff,*mvnsd)/a 330 ~(*mvnsd)/a (*mvnsd)/a 30 \ |
| "MV P-Diffusion to MV N-tap spacing < %d across butted junction (NP.4b + PP.4c)" |
| |
| #-------------------------------------------------- |
| # RPP,RNP |
| #-------------------------------------------------- |
| width rpp 800 "ppolyres minimum width < %d (PRES.1)" |
| width rnp 800 "npolyres minimum width < %d (NRES.1)" |
| spacing rpp rpp 400 touching_ok "ppolyres minimum spacing < %d (PRES.2)" |
| spacing rnp rnp 400 touching_ok "npolyres minimum spacing < %d (NRES.2)" |
| |
| spacing rpp pc 215 touching_illegal "rpp spacing to Cont < %d (PRES.8 - CO.6)" |
| spacing rnp pc 215 touching_illegal "rnp spacing to Cont < %d (NRES.8 - CO.6)" |
| |
| #ifdef HRPOLY1K |
| #-------------------------------------------------- |
| # HIRES |
| #-------------------------------------------------- |
| width hires,mvhires 1000 "hires poly minimum width < %d (HRES.3)" |
| spacing hires,mvhires hires,mvhires 400 touching_ok \ |
| "hires poly minimum spacing < %d (HRES.2)" |
| |
| variants (full) |
| cifmaxwidth res_diff_space 0 bend_illegal \ |
| "High value resistor spacing to diffusion < 0.7um (HRES.5 + HRES.4)" |
| cifmaxwidth res_poly_space 0 bend_illegal \ |
| "High value resistor spacing to poly < 0.7um (HRES.6 + HRES.4)" |
| |
| cifmaxwidth res_cont_space_min 0 bend_illegal \ |
| "Unsalicided resistor spacing to poly contact must be 0.22um (PRES/LRES/HRES.7)" |
| cifmaxwidth res_no_cont 0 bend_illegal \ |
| "Unsalicided resistor spacing to poly contact must be 0.22um (PRES/LRES/HRES.7)" |
| variants * |
| #endif (HRPOLY1K) |
| |
| #-------------------------------------------------- |
| # RDN,RDP (Diffusion resistors) |
| #-------------------------------------------------- |
| width rdn 300 "N-diffusion resistor width < %d (DF.1b)" |
| width rdp 300 "P-diffusion resistor width < %d (DF.1b)" |
| |
| #------------------------------------ |
| # MOS Varactor device rules |
| #------------------------------------ |
| |
| overhang *nsd nvar 320 \ |
| "N-Ohmic overhang of Varactor < %d (FIXME)" |
| |
| overhang *mvnsd mvnvar 320 \ |
| "N-Ohmic overhang of Varactor < %d (FIXME)" |
| |
| width nvar,mvnvar 1000 \ |
| "Varactor length and width < %d (DF.1c)" |
| |
| overhang *psd pvar 320 \ |
| "P-Ohmic overhang of Varactor < %d (FIXME)" |
| |
| overhang *mvpsd mvpvar 320 \ |
| "P-Ohmic overhang of Varactor < %d (FIXME)" |
| |
| width pvar,mvpvar 1000 \ |
| "Varactor length and width < %d (DF.1c)" |
| |
| #ifdef MIM |
| #undef MIM |
| #------------------------------------------------- |
| # CAPM (FuseTop) |
| #------------------------------------------------- |
| |
| width *mimcap 5000 "MiM cap top plate width < %d (MIMTM.8a)" |
| spacing *mimcap *mimcap 600 touching_ok \ |
| "MiM cap top plate spacing < %d (MIMTM.6)" |
| surround mimcc mimcap 390 absence_illegal \ |
| "MiM cap must surround MiM cap contact by %d (MIMTM.4-VT.4)" |
| spacing pad *mimcap 50 touching_illegal "MiM cap cannot overlap pad (MIM1M.X)" |
| spacing mimcc mimcc 480 touching_ok "MiM cap contact spacing < %d (MIMTM.9 - VT.3)" |
| |
| #ifdef METALS3 |
| spacing via1 *mimcap 50 touching_illegal \ |
| "MiM cap cannot overlap via1 (MIMTM.10)" |
| spacing *mimcap *m2,rm2 1200 touching_ok \ |
| "MiM cap to Metal2 spacing < %d (MIMTM.1)" |
| spacing *mimcap via2/m3 390 touching_illegal \ |
| "MiM cap spacing to via2 < %d (MIMTM.5-VT.X)" |
| surround *mimcap m2 600 absence_illegal \ |
| "Bottom plate overlap of MiM cap < %d (MIMTM.3)" |
| width mimcapc/m3 280 "MiM Contact width < %d (VT.1+VT.3)" |
| #elseif defined(METALS4) |
| spacing via2 *mimcap 50 touching_illegal \ |
| "MiM cap cannot overlap via2 (MIMTM.10)" |
| spacing *mimcap *m3,rm3 1200 touching_ok \ |
| "MiM cap to Metal3 spacing < %d (MIMTM.1)" |
| spacing *mimcap via3/m4 390 touching_illegal \ |
| "MiM cap spacing to via3 < %d (MIMTM.5)" |
| surround *mimcap m3 600 absence_illegal \ |
| "Bottom plate overlap of MiM cap < %d (MIMTM.3)" |
| width mimcapc/m4 280 "MiM Contact width < %d (VT.1+VT.3)" |
| #elseif defined(METALS5) |
| spacing via3 *mimcap 50 touching_illegal \ |
| "MiM cap cannot overlap via3 (MIMTM.10)" |
| spacing *mimcap *m4,rm4 1200 touching_ok \ |
| "MiM cap to Metal4 spacing < %d (MIMTM.1)" |
| spacing *mimcap via4/m5 390 touching_illegal \ |
| "MiM cap spacing to via4 < %d (MIMTM.5)" |
| surround *mimcap m4 600 absence_illegal \ |
| "Bottom plate overlap of MiM cap < %d (MIMTM.3)" |
| width mimcapc/m5 280 "MiM Contact width < %d (VT.1+VT.3)" |
| #elseif defined(METALS6) |
| spacing via4 *mimcap 50 touching_illegal \ |
| "MiM cap cannot overlap via4 (MIMTM.10)" |
| spacing *mimcap *m5,rm5 1200 touching_ok \ |
| "MiM cap to Metal5 spacing < %d (MIMTM.1)" |
| spacing *mimcap viatp/mtp 390 touching_illegal \ |
| "MiM cap spacing to viaTP < %d (MIMTM.5)" |
| surround *mimcap m5 600 absence_illegal \ |
| "Bottom plate overlap of MiM cap < %d (MIMTM.3)" |
| width mimcapc/mtp 280 "MiM Contact width < %d (VT.1+VT.3)" |
| #endif |
| |
| variants (full) |
| cifmaxwidth mim_bottom_plate_space 0 bend_illegal \ |
| "MiM bottom plate to unrelated metal < 1.2um (MIMTM.1)" |
| cifmaxwidth mim_bot_cont_surround 0 bend_illegal \ |
| "MiM bottom plate surrounds contact < 0.4um (MIMTM.2)" |
| #define MIM |
| #endif (MIM) |
| |
| #---------------------------- |
| # End DRC style |
| #---------------------------- |
| |
| style empty |
| scalefactor 50 |
| stepsize 2000 |
| |
| end |
| |
| #---------------------------- |
| # LEF format definitions |
| #---------------------------- |
| |
| lef |
| |
| masterslice pwell Pwell PWELL |
| masterslice nwell Nwell NWELL |
| |
| routing m1 Metal1 METAL1 MET1 m1 met1 metal1 |
| routing m2 Metal2 METAL2 MET2 m2 met2 metal2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| routing m3 Metal3 METAL3 MET3 m3 met3 metal3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| routing m4 Metal4 METAL4 MET4 m4 met4 metal4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| routing m5 Metal5 METAL5 MET5 m5 met5 metal5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| routing mtp MetalTop Metal6 METAL6 METTP mtp mettp MET6 m6 met6 metal6 |
| #endif (METALS6) |
| |
| cut m2c Via1 VIA1 via1 cont2 via12 VIA12 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| cut m3c Via2 VIA2 via2 cont3 via23 VIA23 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| cut via3 Via3 VIA3 via3 cont4 via34 VIA34 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| cut via4 Via4 VIA4 via4 cont5 via45 VIA45 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| cut viatp Via5 viatp VIATP VIA5 vtp via5 cont6 via56 VIA56 |
| #endif (METALS6) |
| |
| obs obsm1 Metal1 |
| obs obsm2 Metal2 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| obs obsm3 Metal3 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| obs obsm4 Metal4 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| obs obsm5 Metal5 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| obs obsmtp Metal6 |
| #endif (METALS6) |
| |
| obs obsv1 Via1 |
| obs obsv2 Via2 |
| |
| end |
| |
| #----------------------------------------------------- |
| # Device and Parasitic extraction |
| #----------------------------------------------------- |
| |
| extract |
| style ngspice variants (),(hrhc),(lrhc),(hrlc),(lrlc) |
| cscale 1 |
| lambda 5.0 |
| units microns |
| step 7 |
| sidehalo 8 |
| fringeshieldhalo 8 |
| |
| planeorder dwell 0 |
| planeorder well 1 |
| planeorder active 2 |
| planeorder metal1 3 |
| planeorder metal2 4 |
| #ifdef METALS3 |
| planeorder metal3 5 |
| planeorder block 6 |
| planeorder comment 7 |
| #elseif defined(METALS4) |
| planeorder metal3 5 |
| planeorder metal4 6 |
| planeorder block 7 |
| planeorder comment 8 |
| #elseif defined(METALS5) |
| planeorder metal3 5 |
| planeorder metal4 6 |
| planeorder metal5 7 |
| planeorder block 8 |
| planeorder comment 9 |
| #elseif defined(METALS6) |
| planeorder metal3 5 |
| planeorder metal4 6 |
| planeorder metal5 7 |
| planeorder metaltp 8 |
| planeorder block 9 |
| planeorder comment 10 |
| #endif |
| |
| height dnwell -0.1 0.0 |
| height nwell,pwell 0.0 0.0145 |
| height alldiff 0.0145 0.30 |
| height allpoly 0.32 0.2 |
| height alldiffcont 0.3145 0.9155 |
| height pc 0.52 0.71 |
| height allm1 1.23 0.55 |
| height via 1.78 0.60 |
| height allm2 2.38 0.55 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| height via2 2.93 0.60 |
| height allm3 3.53 0.55 |
| #endif |
| #ifdef METALS4 || METALS5 || METALS6 |
| height via3 4.08 0.60 |
| height allm4 4.68 0.55 |
| #endif |
| #ifdef METALS5 || METALS6 |
| height via4 5.23 0.60 |
| #endif |
| #ifdef METALS5 |
| height allm5 5.83 1.0025 |
| #endif |
| #ifdef METALS6 |
| height allm5 5.83 0.55 |
| #endif |
| #ifdef METALS6 |
| height viatp 6.38 0.9 |
| height allmtp 7.28 1.0025 |
| #endif |
| |
| # Antenna check parameters |
| # (to be completed) |
| model partial |
| antenna poly sidewall 200 none |
| antenna allcont surface 10 none |
| antenna via1 surface 20 none |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| antenna via2 surface 20 none |
| #endif |
| #ifdef METALS4 || METALS5 || METALS6 |
| antenna via3 surface 20 none |
| #endif |
| #ifdef METALS5 || METALS6 |
| antenna via4 surface 20 none |
| #endif |
| #ifdef METALS6 |
| antenna viatp surface 20 none |
| #endif |
| #ifdef MIM |
| antenna mimcc surface 20 none |
| #endif |
| antenna m1,m2 sidewall 400 none |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| antenna m3 sidewall 400 none |
| #endif |
| #ifdef METALS4 || METALS5 || METALS6 |
| antenna m4 sidewall 400 none |
| #endif |
| #ifdef METALS5 || METALS6 |
| antenna m5 sidewall 400 none |
| #endif |
| #ifdef METALS6 |
| antenna mtp sidewall 400 none |
| #endif |
| |
| tiedown alldiffnonfet |
| |
| substrate *ppdiff,*mvppdiff,space/w,pwell well $SUB -dnwell,isosub |
| |
| # Layer resistance |
| |
| variants () |
| |
| # Resistances are in milliohms per square |
| # Optional 3rd argument is the corner adjustment fraction |
| # See document 180MCU_YI-141-EP059-01_10.pdf |
| |
| resist (nwell,dnwell)/well 1000000 |
| resist (pwell,isosub)/well 3250000 |
| |
| resist (*ndiff,nsd)/active 6300 |
| resist (*pdiff,*psd)/active 7000 |
| resist (*mvndiff,mvnsd)/active 6300 |
| resist (*mvpdiff,*mvpsd)/active 7000 |
| |
| resist (allpolynonres)/active 7300 |
| |
| resist (rnw)/well 1000000 0.5 |
| resist (rnd)/active 60000 0.5 |
| resist (rpd)/active 185000 0.5 |
| resist (mvrnd)/active 60000 0.5 |
| resist (mvrpd)/active 185000 0.5 |
| resist (rnds)/active 6300 0.5 |
| resist (rpds)/active 7000 0.5 |
| resist (mvrnds)/active 6300 0.5 |
| resist (mvrpds)/active 7000 0.5 |
| resist (rnps)/active 6800 0.5 |
| resist (rpps)/active 7300 0.5 |
| resist (rpp)/active 350000 0.5 |
| resist (rnp)/active 310000 0.5 |
| #ifdef HRPOLY1K |
| resist (hires,mvhires)/active 1000000 0.5 |
| #endif (HRPOLY1K) |
| |
| resist (allm1)/metal1 90 |
| resist (allm2)/metal2 90 |
| #ifdef METALS3 |
| #ifdef THICKMET3P0 |
| resist (allm3)/metal3 10 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm3)/metal3 40 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm3)/metal3 60 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS3) |
| #ifdef METALS4 || METALS5 || METALS6 |
| resist (allm3)/metal3 90 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 |
| #ifdef THICKMET3P0 |
| resist (allm4)/metal4 10 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm4)/metal4 40 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm4)/metal4 60 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS4) |
| #ifdef METALS5 || METALS6 |
| resist (allm4)/metal4 90 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS5 |
| #ifdef THICKMET3P0 |
| resist (allm5)/metal5 10 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm5)/metal5 40 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm5)/metal5 60 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS5) |
| #ifdef METALS6 |
| resist (allm5)/metal5 90 |
| #endif (METALS6) |
| |
| #ifdef METALS6 |
| #ifdef THICKMET3P0 |
| resist (allmtp)/metaltp 10 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allmtp)/metaltp 40 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allmtp)/metaltp 60 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS6) |
| |
| contact ndc,nsc 6300 |
| contact pdc,psc 5200 |
| contact mvndc,mvnsc 6300 |
| contact mvpdc,mvpsc 5200 |
| contact pc 8000 |
| contact m2c 4500 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| contact m3c 4500 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| contact via3 4500 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| contact via4 4500 |
| #endif (METALS5 || METALS6) |
| #ifdef MIM |
| contact mimcc 4500 |
| #endif (MIM) |
| #ifdef METALS6 |
| contact viatp 4500 |
| #endif (METALS6) |
| |
| variants (hrhc),(hrlc) |
| |
| # High-end corner resistances (milliohms per square) |
| |
| resist (nwell,dnwell)/well 1200000 |
| resist (pwell,isosub)/well 3250000 |
| |
| resist (*ndiff,nsd)/active 15000 |
| resist (*pdiff,*psd)/active 15000 |
| resist (*mvndiff,mvnsd)/active 15000 |
| resist (*mvpdiff,*mvpsd)/active 15000 |
| |
| resist (allpolynonres)/active 15000 |
| |
| resist (rnw)/well 1200000 0.5 |
| resist (rnd)/active 75000 0.5 |
| resist (rpd)/active 225000 0.5 |
| resist (mvrnd)/active 75000 0.5 |
| resist (mvrpd)/active 225000 0.5 |
| resist (rnds)/active 15000 0.5 |
| resist (rpds)/active 15000 0.5 |
| resist (mvrnds)/active 15000 0.5 |
| resist (mvrpds)/active 15000 0.5 |
| resist (rnps)/active 15000 0.5 |
| resist (rpps)/active 15000 0.5 |
| resist (rpp)/active 420000 0.5 |
| resist (rnp)/active 370000 0.5 |
| #ifdef HRPOLY1K |
| resist (hires,mvhires)/active 1200000 0.5 |
| #endif (HRPOLY1K) |
| |
| resist (allm1)/metal1 104 |
| resist (allm2)/metal2 104 |
| #ifdef METALS3 |
| #ifdef THICKMET3P0 |
| resist (allm3)/metal3 15 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm3)/metal3 49 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm3)/metal3 70 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS3) |
| #ifdef METALS4 || METALS5 || METALS6 |
| resist (allm3)/metal3 104 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 |
| #ifdef THICKMET3P0 |
| resist (allm4)/metal4 14 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm4)/metal4 49 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm4)/metal4 70 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS4) |
| #ifdef METALS5 || METALS6 |
| resist (allm4)/metal4 104 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS5 |
| #ifdef THICKMET3P0 |
| resist (allm5)/metal5 14 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm5)/metal5 49 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm5)/metal5 70 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS5) |
| #ifdef METALS6 |
| resist (allm5)/metal5 104 |
| #endif (METALS6) |
| |
| #ifdef METALS6 |
| #ifdef THICKMET3P0 |
| resist (allmtp)/metaltp 14 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allmtp)/metaltp 49 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allmtp)/metaltp 70 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS6) |
| |
| contact ndc,nsc 15000 |
| contact pdc,psc 15000 |
| contact mvndc,mvnsc 15000 |
| contact mvpdc,mvpsc 15000 |
| contact pc 15000 |
| contact m2c 15000 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| contact m3c 15000 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| contact via3 15000 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| contact via4 15000 |
| #endif (METALS5 || METALS6) |
| #ifdef MIM |
| contact mimcc 15000 |
| #endif (MIM) |
| #ifdef METALS6 |
| contact viatp 15000 |
| #endif (METALS6) |
| |
| variants (lrhc),(lrlc) |
| |
| # Low-end corner resistances (milliohms per square) |
| |
| resist (nwell,dnwell)/well 800000 |
| resist (pwell,isosub)/well 3250000 |
| |
| resist (*ndiff,nsd)/active 1000 |
| resist (*pdiff,*psd)/active 1000 |
| resist (*mvndiff,mvnsd)/active 1000 |
| resist (*mvpdiff,*mvpsd)/active 1000 |
| |
| resist (allpolynonres)/active 1000 |
| |
| resist (rnw)/well 8000000 0.5 |
| resist (rnd)/active 45000 0.5 |
| resist (rpd)/active 145000 0.5 |
| resist (mvrnd)/active 45000 0.5 |
| resist (mvrpd)/active 145000 0.5 |
| resist (rnds)/active 1000 0.5 |
| resist (rpds)/active 1000 0.5 |
| resist (mvrnds)/active 1000 0.5 |
| resist (mvrpds)/active 1000 0.5 |
| resist (rnps)/active 1000 0.5 |
| resist (rpps)/active 1000 0.5 |
| resist (rpp)/active 280000 0.5 |
| resist (rnp)/active 250000 0.5 |
| #ifdef HRPOLY1K |
| resist (hires,mvhires)/active 800000 0.5 |
| #endif (HRPOLY1K) |
| |
| resist (allm1)/metal1 76 |
| resist (allm2)/metal2 76 |
| #ifdef METALS3 |
| #ifdef THICKMET3P0 |
| resist (allm3)/metal3 6 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm3)/metal3 31 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm3)/metal3 50 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS3) |
| #ifdef METALS4 || METALS5 || METALS6 |
| resist (allm3)/metal3 76 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 |
| #ifdef THICKMET3P0 |
| resist (allm4)/metal4 6 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm4)/metal4 31 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm4)/metal4 50 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS4) |
| #ifdef METALS5 || METALS6 |
| resist (allm4)/metal4 76 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS5 |
| #ifdef THICKMET3P0 |
| resist (allm5)/metal5 6 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allm5)/metal5 31 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allm5)/metal5 50 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS5) |
| #ifdef METALS6 |
| resist (allm5)/metal5 76 |
| #endif (METALS6) |
| |
| #ifdef METALS6 |
| #ifdef THICKMET3P0 |
| resist (allmtp)/metaltp 6 |
| #elseif defined(THICKMET1P1 || THICKMET0P9) |
| resist (allmtp)/metaltp 31 |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| resist (allmtp)/metaltp 50 |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #endif (METALS6) |
| |
| contact ndc,nsc 0 |
| contact pdc,psc 0 |
| contact mvndc,mvnsc 0 |
| contact mvpdc,mvpsc 0 |
| contact pc 0 |
| contact m2c 0 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| contact m3c 0 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| contact via3 0 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| contact via4 0 |
| #endif (METALS5 || METALS6) |
| #ifdef MIM |
| contact mimcc 0 |
| #endif (MIM) |
| #ifdef METALS6 |
| contact viatp 0 |
| #endif (METALS6) |
| |
| variants * |
| |
| # These types should not be considered as electrical nodes |
| resist comment None |
| |
| #------------------------------------------------------------------------- |
| # Parasitic capacitance values: |
| #------------------------------------------------------------------------- |
| # This uses the new "default" definitions that determine the intervening |
| # planes from the planeorder stack, take care of the reflexive sideoverlap |
| # definitions, and generally clean up the section and make it more readable. |
| # |
| # Also uses "units microns" statement, so all parasitic capacitance values |
| # are taken directly from the source document PDS_035_03, in units of |
| # aF/um^2 for area caps and aF/um for perimeter and sidewall caps. |
| #------------------------------------------------------------------------- |
| # Remember that device capacitances to substrate are taken care of by the |
| # models. Thus, active and poly definitions ignore all "fet" types. |
| # fet types are excluded when computing parasitic capacitance to |
| # active from layers above them because poly is a shield; fet types are |
| # included for parasitics from layers above to poly. Resistor types |
| # should be removed from all parasitic capacitance calculations, or else |
| # they just create floating caps. Technically, the capacitance probably |
| # should be split between the two terminals. Unsure of the correct model. |
| # Because rnw is on the well plane, "defaultareacap" does not work for |
| # planes above diffusion because rnw cannot be removed from types on the |
| # well plane. Because of this, use the normal "areacap" to specify cap |
| # to substrate, and "defaultoverlap" to specify cap to nwell (but not rnw). |
| #------------------------------------------------------------------------- |
| |
| variants () |
| # Nominal capacitances |
| |
| #n-well |
| defaultareacap nwell well 120 |
| |
| #n-active |
| # Rely on device models to capture *ndiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allnactivenonfet active 790 |
| # defaultperimeter allnactivenonfet active 280 |
| |
| #p-active |
| # Rely on device models to capture *pdiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allpactivenonfet active 810 |
| # defaultperimeter allpactivenonfet active 300 |
| |
| #poly |
| # Do not extract parasitics from resistors |
| # defaultsidewall allpolynonfet active 22 |
| # defaultareacap allpolynonfet active 105 |
| # defaultperimeter allpolynonfet active 57 |
| |
| defaultsidewall *poly active 16.46 |
| defaultareacap *poly active nwell,obswell,pwell well 110.677 |
| defaultperimeter *poly active nwell,obswell,pwell well 51.29 |
| |
| #metal1 |
| defaultsidewall allm1 metal1 28.01 |
| defaultareacap allm1 metal1 nwell,obswell,pwell well 29.3046 |
| defaultperimeter allm1 metal1 nwell,obswell,pwell well 25.783 |
| defaultoverlap allm1 metal1 nwell well 29.3046 |
| |
| #metal1->diff |
| defaultoverlap allm1 metal1 allactivenonfet active 39.2181 |
| defaultsideoverlap allm1 metal1 allactivenonfet active 30.683 |
| |
| #metal1->poly |
| defaultoverlap allm1 metal1 allpolynonres active 51.4351 |
| defaultsideoverlap allm1 metal1 allpolynonres active 35.602 |
| |
| #metal2 |
| defaultsidewall allm2 metal2 30.381 |
| defaultareacap allm2 metal2 nwell,obswell,pwell well 15.0162 |
| defaultperimeter allm2 metal2 nwell,obswell,pwell well 18.263 |
| defaultoverlap allm2 metal2 nwell well 15.0162 |
| #metal2->active |
| defaultoverlap allm2 metal2 allactivenonfet active 17.2506 |
| defaultsideoverlap allm2 metal2 allactivenonfet active 20.018 |
| |
| #metal2->poly |
| defaultoverlap allm2 metal2 allpolynonres active 19.2632 |
| defaultsideoverlap allm2 metal2 allpolynonres active 21.531 |
| |
| #metal2->metal1 |
| defaultoverlap allm2 metal2 allm1 metal1 59.0279 |
| defaultsideoverlap allm2 metal2 allm1 metal1 40.880 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #metal3 |
| defaultsidewall allm3 metal3 30.774 |
| defaultareacap allm3 metal3 nwell,obswell,pwell well 10.0944 |
| defaultoverlap allm3 metal3 nwell well 10.0944 |
| defaultperimeter allm3 metal3 nwell,obswell,pwell well 13.52 |
| |
| #metal3->active |
| defaultoverlap allm3 metal3 allactive active 11.0571 |
| defaultsideoverlap allm3 metal3 allactive active 14.36 |
| |
| #metal3->poly |
| defaultoverlap allm3 metal3 allpolynonres active 11.8507 |
| defaultsideoverlap allm3 metal3 allpolynonres active 15.054 |
| |
| #metal3->metal1 |
| defaultoverlap allm3 metal3 allm1 metal1 20.2381 |
| defaultsideoverlap allm3 metal3 allm1 metal1 21.705 |
| |
| #metal3->metal2 |
| defaultoverlap allm3 metal3 allm2 metal2 59.0279 |
| defaultsideoverlap allm3 metal3 allm2 metal2 40.482 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #metal4 |
| defaultsidewall allm4 metal4 30.994 |
| defaultareacap allm4 metal4 nwell,obswell,pwell well 7.6025 |
| defaultoverlap allm4 metal4 nwell well 7.6025 |
| defaultperimeter allm4 metal4 well 10.649 |
| |
| #metal4->active |
| defaultoverlap allm4 metal4 allactivenonfet active 8.1360 |
| defaultsideoverlap allm4 metal4 allactivenonfet active 11.129 |
| |
| #metal4->poly |
| defaultoverlap allm4 metal4 allpolynonres active 8.5577 |
| defaultsideoverlap allm4 metal4 allpolynonres active 11.505 |
| |
| #metal4->metal1 |
| defaultoverlap allm4 metal4 allm1 metal1 12.2127 |
| defaultsideoverlap allm4 metal4 allm1 metal1 14.829 |
| |
| #metal4->metal2 |
| defaultoverlap allm4 metal4 allm2 metal2 20.2381 |
| defaultsideoverlap allm4 metal4 allm2 metal2 21.025 |
| |
| #metal4->metal3 |
| defaultoverlap allm4 metal4 allm3 metal3 59.0279 |
| defaultsideoverlap allm4 metal4 allm3 metal3 39.786 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 |
| #metal5 |
| defaultsidewall allm5 metal5 54.148 |
| #endif |
| #ifdef METALS6 |
| defaultsidewall allm5 metal5 31.121 |
| #endif |
| |
| #ifdef METALS5 || METALS6 |
| defaultareacap allm5 metal5 nwell,obswell,pwell well 5.7979 |
| defaultoverlap allm5 metal5 nwell well 5.7979 |
| defaultperimeter allm5 metal5 well 10.850 |
| |
| #metal5->active |
| defaultoverlap allm5 metal5 allactivenonfet active 6.1031 |
| defaultsideoverlap allm5 metal5 allactivenonfet active 11.258 |
| |
| #metal5->poly |
| defaultoverlap allm5 metal5 allpolynonres active 6.3374 |
| defaultsideoverlap allm5 metal5 allpolynonres active 11.570 |
| |
| #metal5->metal1 |
| defaultoverlap allm5 metal5 allm1 metal1 8.1418 |
| defaultsideoverlap allm5 metal5 allm1 metal1 13.958 |
| |
| #metal5->metal2 |
| defaultoverlap allm5 metal5 allm2 metal2 11.0677 |
| defaultsideoverlap allm5 metal5 allm2 metal2 17.640 |
| |
| #metal5->metal3 |
| defaultoverlap allm5 metal5 allm3 metal3 17.2765 |
| defaultsideoverlap allm5 metal5 allm3 metal3 24.286 |
| |
| #metal5->metal4 |
| defaultoverlap allm5 metal5 allm4 metal4 39.3519 |
| defaultsideoverlap allm5 metal5 allm4 metal4 39.586 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #metaltp |
| defaultsidewall allmtp metaltp 54.335 |
| defaultareacap allmtp metaltp nwell,obswell,pwell well 4.8793 |
| defaultoverlap allmtp metaltp nwell well 4.8793 |
| defaultperimeter allmtp metaltp well 9.5950 |
| |
| #metaltp->active |
| defaultoverlap allmtp metaltp allactivenonfet active 5.0937 |
| defaultsideoverlap allmtp metaltp allactivenonfet active 9.8790 |
| |
| #metaltp->poly |
| defaultoverlap allmtp metaltp allpolynonres active 5.2558 |
| defaultsideoverlap allmtp metaltp allpolynonres active 10.128 |
| |
| #metaltp->metal1 |
| defaultoverlap allmtp metaltp allm1 metal1 6.4394 |
| defaultsideoverlap allmtp metaltp allm1 metal1 11.765 |
| |
| #metaltp->metal2 |
| defaultoverlap allmtp metaltp allm2 metal2 8.1418 |
| defaultsideoverlap allmtp metaltp allm2 metal2 13.958 |
| |
| #metaltp->metal3 |
| defaultoverlap allmtp metaltp allm3 metal3 11.0677 |
| defaultsideoverlap allmtp metaltp allm3 metal3 17.640 |
| |
| #metaltp->metal4 |
| defaultoverlap allmtp metaltp allm3 metal3 17.2765 |
| defaultsideoverlap allmtp metaltp allm3 metal3 24.286 |
| |
| #metaltp->metal5 |
| defaultoverlap allmtp metaltp allm3 metal3 39.3519 |
| defaultsideoverlap allmtp metaltp allm3 metal3 39.586 |
| #endif (METALS6) |
| |
| #------------------------------------------------------------------------- |
| # Parasitic capacitance values for maximum corner |
| #------------------------------------------------------------------------- |
| |
| variants (hrhc),(lrhc) |
| # Maximum corner capacitances |
| |
| #n-well |
| defaultareacap nwell well 120 |
| |
| #n-active |
| # Rely on device models to capture *ndiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allnactivenonfet active 790 |
| # defaultperimeter allnactivenonfet active 280 |
| |
| #p-active |
| # Rely on device models to capture *pdiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allpactivenonfet active 810 |
| # defaultperimeter allpactivenonfet active 300 |
| |
| #poly |
| # Do not extract parasitics from resistors |
| # defaultsidewall allpolynonfet active 22 |
| # defaultareacap allpolynonfet active 105 |
| # defaultperimeter allpolynonfet active 57 |
| |
| defaultsidewall *poly active 16.56 |
| defaultareacap *poly active nwell,obswell,pwell well 130.2 |
| defaultperimeter *poly active nwell,obswell,pwell well 54.018 |
| |
| #metal1 |
| defaultsidewall allm1 metal1 29.294 |
| defaultareacap allm1 metal1 nwell,obswell,pwell well 33.126 |
| defaultperimeter allm1 metal1 nwell,obswell,pwell well 25.790 |
| defaultoverlap allm1 metal1 nwell well 33.126 |
| |
| #metal1->diff |
| defaultoverlap allm1 metal1 allactivenonfet active 43.636 |
| defaultsideoverlap allm1 metal1 allactivenonfet active 30.445 |
| |
| #metal1->poly |
| defaultoverlap allm1 metal1 allpolynonres active 60.321 |
| defaultsideoverlap allm1 metal1 allpolynonres active 36.440 |
| |
| #metal2 |
| defaultsidewall allm2 metal2 31.727 |
| defaultareacap allm2 metal2 nwell,obswell,pwell well 16.472 |
| defaultperimeter allm2 metal2 nwell,obswell,pwell well 18.124 |
| defaultoverlap allm2 metal2 nwell well 16.472 |
| #metal2->active |
| defaultoverlap allm2 metal2 allactivenonfet active 18.713 |
| defaultsideoverlap allm2 metal2 allactivenonfet active 19.744 |
| |
| #metal2->poly |
| defaultoverlap allm2 metal2 allpolynonres active 21.231 |
| defaultsideoverlap allm2 metal2 allpolynonres active 21.467 |
| |
| #metal2->metal1 |
| defaultoverlap allm2 metal2 allm1 metal1 73.632 |
| defaultsideoverlap allm2 metal2 allm1 metal1 43.788 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #metal3 |
| defaultsidewall allm3 metal3 32.049 |
| defaultoverlap allm3 metal3 nwell well 11.910 |
| defaultareacap allm3 metal3 nwell,obswell,pwell well 10.961 |
| defaultperimeter allm3 metal3 nwell,obswell,pwell well 13.270 |
| |
| #metal3->active |
| defaultoverlap allm3 metal3 allactive active 11.910 |
| defaultsideoverlap allm3 metal3 allactive active 14.034 |
| |
| #metal3->poly |
| defaultoverlap allm3 metal3 allpolynonres active 12.883 |
| defaultsideoverlap allm3 metal3 allpolynonres active 14.812 |
| |
| #metal3->metal1 |
| defaultoverlap allm3 metal3 allm1 metal1 22.675 |
| defaultsideoverlap allm3 metal3 allm1 metal1 21.903 |
| |
| #metal3->metal2 |
| defaultoverlap allm3 metal3 allm2 metal2 73.632 |
| defaultsideoverlap allm3 metal3 allm2 metal2 43.400 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #metal4 |
| defaultsidewall allm4 metal4 32.265 |
| defaultareacap allm4 metal4 nwell,obswell,pwell well 8.213 |
| defaultoverlap allm4 metal4 nwell well 8.213 |
| defaultperimeter allm4 metal4 well 10.397 |
| |
| #metal4->active |
| defaultoverlap allm4 metal4 allactivenonfet active 8.735 |
| defaultsideoverlap allm4 metal4 allactivenonfet active 10.831 |
| |
| #metal4->poly |
| defaultoverlap allm4 metal4 allpolynonres active 9.247 |
| defaultsideoverlap allm4 metal4 allpolynonres active 11.247 |
| |
| #metal4->metal1 |
| defaultoverlap allm4 metal4 allm1 metal1 13.400 |
| defaultsideoverlap allm4 metal4 allm1 metal1 14.625 |
| |
| #metal4->metal2 |
| defaultoverlap allm4 metal4 allm2 metal2 22.674 |
| defaultsideoverlap allm4 metal4 allm2 metal2 21.263 |
| |
| #metal4->metal3 |
| defaultoverlap allm4 metal4 allm3 metal3 73.63 |
| defaultsideoverlap allm4 metal4 allm3 metal3 42.64 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #metal5 |
| defaultsidewall allm5 metal5 57.012 |
| defaultareacap allm5 metal5 nwell,obswell,pwell well 6.241 |
| defaultoverlap allm5 metal5 nwell well 6.241 |
| defaultperimeter allm5 metal5 well 10.676 |
| |
| #metal5->active |
| defaultoverlap allm5 metal5 allactivenonfet active 6.537 |
| defaultsideoverlap allm5 metal5 allactivenonfet active 11.074 |
| |
| #metal5->poly |
| defaultoverlap allm5 metal5 allpolynonres active 6.820 |
| defaultsideoverlap allm5 metal5 allpolynonres active 11.431 |
| |
| #metal5->metal1 |
| defaultoverlap allm5 metal5 allm1 metal1 8.841 |
| defaultsideoverlap allm5 metal5 allm1 metal1 13.909 |
| |
| #metal5->metal2 |
| defaultoverlap allm5 metal5 allm2 metal2 12.108 |
| defaultsideoverlap allm5 metal5 allm2 metal2 17.722 |
| |
| #metal5->metal3 |
| defaultoverlap allm5 metal5 allm3 metal3 19.207 |
| defaultsideoverlap allm5 metal5 allm3 metal3 24.724 |
| |
| #metal5->metal4 |
| defaultoverlap allm5 metal5 allm4 metal4 46.18 |
| defaultsideoverlap allm5 metal5 allm4 metal4 41.628 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #metaltp |
| defaultsidewall allmtp metaltp 57.187 |
| defaultareacap allmtp metaltp nwell,obswell,pwell well 5.242 |
| defaultoverlap allmtp metaltp nwell well 5.242 |
| defaultperimeter allmtp metaltp well 9.407 |
| |
| #metaltp->active |
| defaultoverlap allmtp metaltp allactivenonfet active 5.450 |
| defaultsideoverlap allmtp metaltp allactivenonfet active 9.679 |
| |
| #metaltp->poly |
| defaultoverlap allmtp metaltp allpolynonres active 5.645 |
| defaultsideoverlap allmtp metaltp allpolynonres active 9.925 |
| |
| #metaltp->metal1 |
| defaultoverlap allmtp metaltp allm1 metal1 6.962 |
| defaultsideoverlap allmtp metaltp allm1 metal1 11.549 |
| |
| #metaltp->metal2 |
| defaultoverlap allmtp metaltp allm2 metal2 8.841 |
| defaultsideoverlap allmtp metaltp allm2 metal2 13.909 |
| |
| #metaltp->metal3 |
| defaultoverlap allmtp metaltp allm3 metal3 12.211 |
| defaultsideoverlap allmtp metaltp allm3 metal3 17.215 |
| |
| #metaltp->metal4 |
| defaultoverlap allmtp metaltp allm3 metal3 19.207 |
| defaultsideoverlap allmtp metaltp allm3 metal3 24.725 |
| |
| #metaltp->metal5 |
| defaultoverlap allmtp metaltp allm3 metal3 46.418 |
| defaultsideoverlap allmtp metaltp allm3 metal3 41.628 |
| #endif (METALS6) |
| |
| #------------------------------------------------------------------------- |
| # Parasitic capacitance values for minimum corner |
| #------------------------------------------------------------------------- |
| |
| variants (hrlc),(lrlc) |
| # Minimum corner capacitances |
| |
| #n-well |
| defaultareacap nwell well 120 |
| |
| #n-active |
| # Rely on device models to capture *ndiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allnactivenonfet active 790 |
| # defaultperimeter allnactivenonfet active 280 |
| |
| #p-active |
| # Rely on device models to capture *pdiff area cap |
| # Do not extract parasitics from resistors |
| # defaultareacap allpactivenonfet active 810 |
| # defaultperimeter allpactivenonfet active 300 |
| |
| #poly |
| # Do not extract parasitics from resistors |
| # defaultsidewall allpolynonfet active 22 |
| # defaultareacap allpolynonfet active 105 |
| # defaultperimeter allpolynonfet active 57 |
| |
| defaultsidewall *poly active 16.388 |
| defaultareacap *poly active nwell,obswell,pwell well 96.241 |
| defaultperimeter *poly active nwell,obswell,pwell well 48.943 |
| |
| #metal1 |
| defaultsidewall allm1 metal1 26.630 |
| defaultareacap allm1 metal1 nwell,obswell,pwell well 26.274 |
| defaultperimeter allm1 metal1 nwell,obswell,pwell well 25.666 |
| defaultoverlap allm1 metal1 nwell well 26.274 |
| |
| #metal1->diff |
| defaultoverlap allm1 metal1 allactivenonfet active 35.612 |
| defaultsideoverlap allm1 metal1 allactivenonfet active 30.684 |
| |
| #metal1->poly |
| defaultoverlap allm1 metal1 allpolynonres active 44.831 |
| defaultsideoverlap allm1 metal1 allpolynonres active 34.738 |
| |
| #metal2 |
| defaultsidewall allm2 metal2 29.023 |
| defaultareacap allm2 metal2 nwell,obswell,pwell well 13.797 |
| defaultperimeter allm2 metal2 nwell,obswell,pwell well 18.332 |
| defaultoverlap allm2 metal2 nwell well 13.797 |
| #metal2->active |
| defaultoverlap allm2 metal2 allactivenonfet active 16.000 |
| defaultsideoverlap allm2 metal2 allactivenonfet active 20.206 |
| |
| #metal2->poly |
| defaultoverlap allm2 metal2 allpolynonres active 17.629 |
| defaultsideoverlap allm2 metal2 allpolynonres active 21.511 |
| |
| #metal2->metal1 |
| defaultoverlap allm2 metal2 allm1 metal1 49.258 |
| defaultsideoverlap allm2 metal2 allm1 metal1 38.718 |
| |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| #metal3 |
| defaultsidewall allm3 metal3 28.809 |
| defaultoverlap allm3 metal3 nwell well 9.355 |
| defaultareacap allm3 metal3 nwell,obswell,pwell well 9.355 |
| defaultperimeter allm3 metal3 nwell,obswell,pwell well 13.710 |
| |
| #metal3->active |
| defaultoverlap allm3 metal3 allactive active 10.318 |
| defaultsideoverlap allm3 metal3 allactive active 14.637 |
| |
| #metal3->poly |
| defaultoverlap allm3 metal3 allpolynonres active 10.972 |
| defaultsideoverlap allm3 metal3 allpolynonres active 15.232 |
| |
| #metal3->metal1 |
| defaultoverlap allm3 metal3 allm1 metal1 18.275 |
| defaultsideoverlap allm3 metal3 allm1 metal1 21.483 |
| |
| #metal3->metal2 |
| defaultoverlap allm3 metal3 allm2 metal2 49.258 |
| defaultsideoverlap allm3 metal3 allm2 metal2 38.221 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS4 || METALS5 || METALS6 |
| #metal4 |
| defaultsidewall allm4 metal4 29.629 |
| defaultareacap allm4 metal4 nwell,obswell,pwell well 7.076 |
| defaultoverlap allm4 metal4 nwell well 7.076 |
| defaultperimeter allm4 metal4 well 10.870 |
| |
| #metal4->active |
| defaultoverlap allm4 metal4 allactivenonfet active 7.614 |
| defaultsideoverlap allm4 metal4 allactivenonfet active 11.375 |
| |
| #metal4->poly |
| defaultoverlap allm4 metal4 allpolynonres active 7.964 |
| defaultsideoverlap allm4 metal4 allpolynonres active 11.720 |
| |
| #metal4->metal1 |
| defaultoverlap allm4 metal4 allm1 metal1 11.219 |
| defaultsideoverlap allm4 metal4 allm1 metal1 14.805 |
| |
| #metal4->metal2 |
| defaultoverlap allm4 metal4 allm2 metal2 18.275 |
| defaultsideoverlap allm4 metal4 allm2 metal2 20.801 |
| |
| #metal4->metal3 |
| defaultoverlap allm4 metal4 allm3 metal3 49.258 |
| defaultsideoverlap allm4 metal4 allm3 metal3 37.616 |
| #endif (METALS4 || METALS5 || METALS6) |
| |
| #ifdef METALS5 || METALS6 |
| #metal5 |
| defaultsidewall allm5 metal5 51.169 |
| defaultareacap allm5 metal5 nwell,obswell,pwell well 5.414 |
| defaultoverlap allm5 metal5 nwell well 5.414 |
| defaultperimeter allm5 metal5 well 10.992 |
| |
| #metal5->active |
| defaultoverlap allm5 metal5 allactivenonfet active 5.723 |
| defaultsideoverlap allm5 metal5 allactivenonfet active 11.430 |
| |
| #metal5->poly |
| defaultoverlap allm5 metal5 allpolynonres active 5.919 |
| defaultsideoverlap allm5 metal5 allpolynonres active 11.703 |
| |
| #metal5->metal1 |
| defaultoverlap allm5 metal5 allm1 metal1 7.545 |
| defaultsideoverlap allm5 metal5 allm1 metal1 13.985 |
| |
| #metal5->metal2 |
| defaultoverlap allm5 metal5 allm2 metal2 10.192 |
| defaultsideoverlap allm5 metal5 allm2 metal2 17.610 |
| |
| #metal5->metal3 |
| defaultoverlap allm5 metal5 allm3 metal3 15.699 |
| defaultsideoverlap allm5 metal5 allm3 metal3 23.834 |
| |
| #metal5->metal4 |
| defaultoverlap allm5 metal5 allm4 metal4 34.153 |
| defaultsideoverlap allm5 metal5 allm4 metal4 37.782 |
| #endif (METALS5 || METALS6) |
| |
| #ifdef METALS6 |
| #metaltp |
| defaultsidewall allmtp metaltp 51.353 |
| defaultareacap allmtp metaltp nwell,obswell,pwell well 4.563 |
| defaultoverlap allmtp metaltp nwell well 4.563 |
| defaultperimeter allmtp metaltp well 9.764 |
| |
| #metaltp->active |
| defaultoverlap allmtp metaltp allactivenonfet active 4.781 |
| defaultsideoverlap allmtp metaltp allactivenonfet active 10.070 |
| |
| #metaltp->poly |
| defaultoverlap allmtp metaltp allpolynonres active 4.917 |
| defaultsideoverlap allmtp metaltp allpolynonres active 10.263 |
| |
| #metaltp->metal1 |
| defaultoverlap allmtp metaltp allm1 metal1 5.990 |
| defaultsideoverlap allmtp metaltp allm1 metal1 11.858 |
| |
| #metaltp->metal2 |
| defaultoverlap allmtp metaltp allm2 metal2 7.545 |
| defaultsideoverlap allmtp metaltp allm2 metal2 13.985 |
| |
| #metaltp->metal3 |
| defaultoverlap allmtp metaltp allm3 metal3 10.192 |
| defaultsideoverlap allmtp metaltp allm3 metal3 17.610 |
| |
| #metaltp->metal4 |
| defaultoverlap allmtp metaltp allm3 metal3 15.699 |
| defaultsideoverlap allmtp metaltp allm3 metal3 23.834 |
| |
| #metaltp->metal5 |
| defaultoverlap allmtp metaltp allm3 metal3 34.153 |
| defaultsideoverlap allmtp metaltp allm3 metal3 37.782 |
| #endif (METALS6) |
| |
| #------------------------------------------------------------------------- |
| |
| variants * |
| |
| # Devices: |
| # All devices except diodes are modeled as subcircuits |
| |
| # device list: |
| # nfet_03v3 mosfet |
| # pfet_03v3 mosfet |
| # nfet_06v0 mosfet (thick oxide) |
| # pfet_06v0 mosfet (thick oxide) |
| # nfet_06v0_nvt mosfet (native Vt) |
| # nfet_03v3_dss mosfet (unsalicided drain) |
| # pfet_03v3_dss mosfet (unsalicided drain) |
| # nfet_06v0_dss mosfet (unsalicided drain, thick oxide) |
| # pfet_06v0_dss mosfet (unsalicided drain, thick oxide) |
| # nfet_10v0_asym LDNMOS (extended drain) |
| # pfet_10v0_asym LDPMOS (extended drain) |
| # |
| # diode_nd2ps_03v3 diode (N+/pwell) |
| # diode_pd2nw_03v3 diode (P+/nwell) |
| # diode_nd2ps_06v0 diode (N+/pwell, high voltage) |
| # diode_pd2nw_06v0 diode (P+/nwell, high voltage) |
| # diode_nw2pw_03v3 diode (nwell/pwell) |
| # diode_nw2pw_06v0 diode (nwell/pwell, high voltage) |
| # diode_dnw2pw diode (pwell/dnwell) |
| # diode_dnw2ps diode (dnwll/substrate) |
| # sc_diode diode (Schottky) |
| # |
| # pnp_WxL BJT (10x10, 5x5, 0.42x10, 0.42x5 emitter sizes) |
| # npn_WxL BJT (10x10, 5x5, 0.54x16, 0.54x8, 0.54x4, 0.54x2) |
| # |
| # npolyf_u resistor (N+ poly, unsalicided) |
| # ppolyf_u resistor (P+ poly, unsalicided) |
| # ppolyf_u_1k resistor (high res resistor)* |
| # ppolyf_u_1k_6p0 resistor (high res resistor, high voltage)* |
| # nplus_u resistor (N+ diffusion, unsalicided) |
| # pplus_u resistor (P+ diffusion, unsalicided) |
| # npolyf_s resistor (N+ poly, salicided) |
| # ppolyf_s resistor (P+ poly, salicided) |
| # nplus_s resistor (N+ diffusion, salicided) |
| # pplus_s resistor (N+ diffusion, salicided) |
| # nwell resistor (N-well resistor) |
| # rm1 resistor (metal1) |
| # rm2 resistor (metal2) |
| # rm3 resistor (metal3) |
| # rm4 resistor (metal4) |
| # rm5 resistor (metal5) |
| # tm6k resistor (top metal, 0.6um thick (standard))** |
| # tm9k resistor (top metal, 0.9um thick) |
| # tm11k resistor (top metal, 1.1um thick) |
| # tm30k resistor (top metal, 3.0um thick) |
| # |
| # cap_nmos_03v3 mosfet (source-drain tied) |
| # cap_pmos_03v3 mosfet (source-drain tied) |
| # cap_nmos_06v0 mosfet (source-drain tied, high voltage) |
| # cap_pmos_06v0 mosfet (source-drain tied, high voltage) |
| # cap_nmos_03v3_b mosfet (n-varactor) |
| # cap_pmos_03v3_b mosfet (p-varactor) |
| # cap_nmos_06v0_b mosfet (n-varactor, high voltage) |
| # cap_pmos_06v0_b mosfet (p-varactor, high voltage) |
| # |
| # cap_mim_2f0_mXmY_noshield capacitor (MiM)*,** |
| |
| # |
| # *Note that there are multiple mutually exclusive process options for the |
| # high sheet rho resistor and MiM capacitor. This tech file assumes the |
| # options 1kOhm/sq for the resistor and 2fF/um for the MiM capacitor. |
| # |
| # **The top metal may be any of metal3 to metaltp, depending on the stackup |
| |
| device msubcircuit pfet_03v3 pfet pdiff,pdc pdiff,pdc allnwell error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd |
| device msubcircuit nfet_03v3 nfet ndiff,ndc ndiff,ndc allpsub error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd |
| device msubcircuit pfet_06v0 mvpfet mvpdiff,mvpdc mvpdiff,mvpdc allnwell error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd |
| device msubcircuit nfet_06v0 mvnfet mvndiff,mvndc mvndiff,mvndc allpsub error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd |
| device msubcircuit pfet_03v3_dss pfet pdiffres pdiffres allnwell error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab |
| device msubcircuit nfet_03v3_dss nfet ndiffres ndiffres allpsub error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab |
| device msubcircuit pfet_06v0_dss mvpfet mvpdiffres mvpdiffres allnwell error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab |
| device msubcircuit nfet_06v0_dss mvnfet mvndiffres mvndiffres allpsub error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd l1=s_sab l2=d_sab |
| device msubcircuit nfet_06v0_nvt mvnnfet mvndiff,mvndiffres,mvndc \ |
| mvndiff,mvndiffres,mvndc allpsub error \ |
| l=l w=w a1=as p1=ps a2=ad p2=pd |
| device subcircuit cap_nmos_03v3_b nvaractor *nndiff l=c_length w=c_width |
| device subcircuit cap_nmos_06v0_b mvnvaractor *mvnndiff l=c_length w=c_width |
| device subcircuit cap_pmos_03v3_b pvaractor *ppdiff l=c_length w=c_width |
| device subcircuit cap_pmos_06v0_b mvpvaractor *mvppdiff l=c_length w=c_width |
| device subcircuit cap_pmos_03v3 pcap pdiff,pdc l=c_length w=c_width |
| device subcircuit cap_nmos_03v3 ncap ndiff,ndc l=c_length w=c_width |
| device subcircuit cap_pmos_06v0 mvpcap mvpdiff,mvpdc l=c_length w=c_width |
| device subcircuit cap_nmos_06v0 mvncap mvndiff,mvndc l=c_length w=c_width |
| |
| device rsubcircuit rm1 rm1 *m1 l=r_length w=r_width |
| device rsubcircuit rm2 rm2 *m2 l=r_length w=r_width |
| #ifdef METALS4 || METALS5 || METALS6 |
| device rsubcircuit rm3 rm3 *m3 l=r_length w=r_width |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| device rsubcircuit rm4 rm4 *m4 l=r_length w=r_width |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| device rsubcircuit rm5 rm5 *m5 l=r_length w=r_width |
| #endif (METALS6) |
| |
| #ifdef THICKMET3P0 |
| #ifdef METALS3 |
| device rsubcircuit tm30k rm3 *m3 l=r_length w=r_width |
| #elseif defined (METALS4) |
| device rsubcircuit tm30k rm4 *m4 l=r_length w=r_width |
| #elseif defined (METALS5) |
| device rsubcircuit tm30k rm5 *m5 l=r_length w=r_width |
| #elseif defined (METALS6) |
| device rsubcircuit tm30k rmtp *mtp l=r_length w=r_width |
| #endif |
| #elseif defined (THICKMET1P1) |
| #ifdef METALS3 |
| device rsubcircuit tm11k rm3 *m3 l=r_length w=r_width |
| #elseif defined (METALS4) |
| device rsubcircuit tm11k rm4 *m4 l=r_length w=r_width |
| #elseif defined (METALS5) |
| device rsubcircuit tm11k rm5 *m5 l=r_length w=r_width |
| #elseif defined (METALS6) |
| device rsubcircuit tm11k rmtp *mtp l=r_length w=r_width |
| #endif |
| #elseif defined (THICKMET0P9) |
| #ifdef METALS3 |
| device rsubcircuit tm9k rm3 *m3 l=r_length w=r_width |
| #elseif defined (METALS4) |
| device rsubcircuit tm9k rm4 *m4 l=r_length w=r_width |
| #elseif defined (METALS5) |
| device rsubcircuit tm9k rm5 *m5 l=r_length w=r_width |
| #elseif defined (METALS6) |
| device rsubcircuit tm9k rmtp *mtp l=r_length w=r_width |
| #endif |
| #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| #ifdef METALS3 |
| device rsubcircuit tm6k rm3 *m3 l=r_length w=r_width |
| #elseif defined (METALS4) |
| device rsubcircuit tm6k rm4 *m4 l=r_length w=r_width |
| #elseif defined (METALS5) |
| device rsubcircuit tm6k rm5 *m5 l=r_length w=r_width |
| #elseif defined (METALS6) |
| device rsubcircuit tm6k rmtp *mtp l=r_length w=r_width |
| #endif |
| #endif (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) |
| |
| device rsubcircuit ppolyf_s rpps *poly allnwell,allpsub error l=r_length w=r_width |
| device rsubcircuit npolyf_s rnps *poly allnwell,allpsub error l=r_length w=r_width |
| device rsubcircuit ppolyf_u rpp *poly allnwell,allpsub error l=r_length w=r_width |
| device rsubcircuit npolyf_u rnp *poly allnwell,allpsub error l=r_length w=r_width |
| #ifdef HRPOLY1K |
| device rsubcircuit ppolyf_u_1k hires *poly allnwell,allpsub error l=r_length w=r_width |
| device rsubcircuit ppolyf_u_1k_6p0 mvhires *poly allnwell,allpsub error l=r_length w=r_width |
| #endif (HRPOLY1K) |
| device rsubcircuit pplus_u rpd *pdiff allnwell error l=r_length w=r_width |
| device rsubcircuit nplus_u rnd *ndiff allpsub error l=r_length w=r_width |
| device rsubcircuit pplus_s rpds *pdiff allnwell error l=r_length w=r_width |
| device rsubcircuit nplus_s rnds *ndiff allpsub error l=r_length w=r_width |
| device rsubcircuit pplus_u mvpdiffres *mvpdiff allnwell error l=r_length w=r_width |
| device rsubcircuit nplus_u mvndiffres *mvndiff allpsub error l=r_length w=r_width |
| device rsubcircuit nwell rnw nwell allpsub error l=r_length w=r_width |
| |
| # The following absorbs the source/drain resistor into a *_dss FET device |
| device subcircuit Short mvndiffres *mvndiff mvnfet allpsub error |
| device subcircuit Short mvpdiffres *mvpdiff mvpfet allnwell error |
| device subcircuit Short ndiffres *ndiff nfet allpsub error |
| device subcircuit Short pdiffres *pdiff pfet allnwell error |
| |
| device pdiode diode_pd2nw_03v3 *pdiode allnwell a=area p=pj |
| device ndiode diode_nd2ps_03v3 *ndiode allpsub a=area p=pj |
| device pdiode diode_pd2nw_06v0 *mvpdiode allnwell a=area p=pj |
| device ndiode diode_nd2ps_06v0 *mvndiode allpsub a=area p=pj |
| device ndiode diode_nd2ps_06v0_nvt *mvnndiode allpsub a=area p=pj |
| |
| #ifdef MIM |
| #ifdef METALS6 |
| device csubcircuit cap_mim_2f0_m5m6_noshield *mimcap *m5 l=c_length w=c_width |
| #endif |
| #ifdef METALS5 |
| device csubcircuit cap_mim_2f0_m4m5_noshield *mimcap *m4 l=c_length w=c_width |
| #endif |
| #ifdef METALS4 |
| device csubcircuit cap_mim_2f0_m3m4_noshield *mimcap *m3 l=c_length w=c_width |
| #endif |
| #ifdef METALS3 |
| device csubcircuit cap_mim_2f0_m2m3_noshield *mimcap *m2 l=c_length w=c_width |
| #endif |
| #endif (MIM) |
| |
| end |
| |
| #----------------------------------------------------- |
| # Wiring tool definitions |
| #----------------------------------------------------- |
| |
| wiring |
| scalefactor 50 |
| |
| contact v1 200 m1 5 45 m2 0 45 |
| #ifdef METALS3 || METALS4 || METALS5 || METALS6 |
| contact v2 200 m2 0 45 m3 0 45 |
| #endif (METALS3 || METALS4 || METALS5 || METALS6) |
| #ifdef METALS4 || METALS5 || METALS6 |
| contact v3 200 m3 0 45 m4 0 45 |
| #endif (METALS4 || METALS5 || METALS6) |
| #ifdef METALS5 || METALS6 |
| contact v4 200 m4 0 45 m5 0 45 |
| #endif (METALS5 || METALS6) |
| #ifdef METALS6 |
| contact vtp 370 m3 0 45 mtp 80 80 |
| #endif (METALS6) |
| |
| contact pdc 160 pdiff 70 70 m1 45 0 |
| contact ndc 160 ndiff 70 70 m1 45 0 |
| contact psc 160 ppdiff 70 70 m1 45 0 |
| contact nsc 160 nndiff 70 70 m1 45 0 |
| contact pc 160 poly 70 70 m1 45 0 |
| contact mvpdc 160 mvpdiff 70 70 m1 45 0 |
| contact mvndc 160 mvndiff 70 70 m1 45 0 |
| contact mvpsc 160 mvppdiff 70 70 m1 45 0 |
| contact mvnsc 160 mvnndiff 70 70 m1 45 0 |
| |
| end |
| |
| #----------------------------------------------------- |
| # Plain old router. . . |
| #----------------------------------------------------- |
| |
| router |
| end |
| |
| #------------------------------------------------------------ |
| # Plowing (restored in magic 8.2, need to fill this section) |
| #------------------------------------------------------------ |
| |
| plowing |
| end |
| |
| #----------------------------------------------------------------- |
| # No special plot layers defined (use default PNM color choices) |
| #----------------------------------------------------------------- |
| |
| plot |
| style pnm |
| default |
| draw fillblock no_color_at_all |
| draw nwell cwell |
| draw pwell cwell |
| draw dnwell cwell |
| end |
| |