Added preliminary support in the magic tech file for LDMOS devices (N and P) and the Schottky diode. Corrected DRC rules to allow either nwell or dnwell (or both) under devices. Many DRC rules for the new devices have not yet been implemented. Extraction should work but has not been tested yet.
diff --git a/VERSION b/VERSION index 0390ebe..0c4d136 100644 --- a/VERSION +++ b/VERSION
@@ -1 +1 @@ -1.0.440 +1.0.441
diff --git a/gf180mcu/magic/gf180mcu.tech b/gf180mcu/magic/gf180mcu.tech index 25b3ecf..8197334 100644 --- a/gf180mcu/magic/gf180mcu.tech +++ b/gf180mcu/magic/gf180mcu.tech
@@ -93,6 +93,10 @@ active nsubdiffcont,nsubstratencontact,nsc active mvpsubdiffcont,mvpsubstratepcontact,mvpsc active mvnsubdiffcont,mvnsubstratencontact,mvnsc + active ldndiff,ldndiffusion,ldndif + active ldpdiff,ldpdiffusion,ldpdif + active ldndiffc,ldndcontact,ldndc + active ldpdiffc,ldpdcontact,ldpdc -active obsactive -active mvobsactive # Varactors @@ -127,6 +131,8 @@ active mvndiffsilicide,mvrnds,mvrdns,mvrndiffs active mvpdiffsilicide,mvrpds,mvrdps,mvrpdiffs # Diodes + active schottky,skdi + active schottkyc,skdic active pdiode,pdi active ndiode,ndi active nndiode,nndi @@ -232,6 +238,7 @@ ndic ndiode metal1 nndic nndiode metal1 pdic pdiode metal1 + skdic schottky metal1 mvndc mvndiff metal1 mvpdc mvpdiff metal1 @@ -241,6 +248,9 @@ mvpdic mvpdiode metal1 mvnndic mvnndiode metal1 + ldndc ldndiff metal1 + ldpdc ldpdiff metal1 + via1 metal1 metal2 #ifdef METALS3 || METALS4 || METALS5 || METALS6 via2 metal2 metal3 @@ -308,12 +318,12 @@ allfetsmv mvnfet,mvpfet,mvnnfet,mvnvaractor,mvpvaractor,mvncap,mvpcap alllvnactivenonfet *ndiff,*nsd,*ndiode,*nndiode - allmvnactivenonfet *mvndiff,*mvnsd,*mvndiode,*mvnndiode + allmvnactivenonfet *mvndiff,*mvnsd,*mvndiode,*mvnndiode,*ldndiff allnactivenonfet alllvnactivenonfet,allmvnactivenonfet allnactive allnactivenonfet,allnfets alllvpactivenonfet *pdiff,*psd,*pdiode - allmvpactivenonfet *mvpdiff,*mvpsd,*mvpdiode + allmvpactivenonfet *mvpdiff,*mvpsd,*mvpdiode,*ldpdiff allpactivenonfet alllvpactivenonfet,allmvpactivenonfet allpactive allpactivenonfet,allpfets @@ -331,11 +341,11 @@ 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 + allndiffmv *mvndif,*mvnsd,*mvndiode,mvndiffres,mvnfet,mvnnfet,mvnvaractor,*mvnndiode,mvncap,*ldndiff + allpdiffmv *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet,mvpvaractor,mvpcap,*ldpdiff alldiffmv allndiffmv,allpdiffmv - allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,mvndiffres,*mvnndiode - allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres + allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,mvndiffres,*mvnndiode,*ldndiff + allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,*ldpdiff alldiffmvnonfet allndiffmvnonfet,allpdiffmvnonfet alldiffnonfet alldifflvnonfet,alldiffmvnonfet @@ -370,7 +380,7 @@ allcont alldiffcont,pc allres allpolyres,allactiveres - alldiode *pdiode,*ndiode,*nndiode,*mvpdiode,*mvndiode,*mvnndiode + alldiode *pdiode,*ndiode,*nndiode,*mvpdiode,*mvndiode,*mvnndiode,*schottky allm1 *m1,rm1 allm2 *m2,rm2 @@ -447,12 +457,16 @@ mvpfet ptransistor ptransistor_stripes mvnvar polysilicon ndiff_in_nwell hvndiff_mask mvpvar polysilicon pdiff_in_pwell hvpdiff_mask + ldndiff hvndiff + ldpdiff hvpdiff mvndc ndiffusion metal1 contact_X'es hvndiff_mask mvpdc pdiffusion metal1 contact_X'es hvpdiff_mask mvnsc ndiff_in_nwell metal1 contact_X'es hvndiff_mask mvpsc pdiff_in_pwell metal1 contact_X'es hvpdiff_mask mvncap ntransistor ntransistor_stripes hvndiff_mask mvpcap ptransistor ptransistor_stripes + ldndc hvndiff metal1 contact_X'es + ldpdc hvpdiff metal1 contact_X'es poly polysilicon pc polysilicon metal1 contact_X'es @@ -466,6 +480,8 @@ pdiodec pdiffusion pselect2 metal1 contact_X'es ndiodec ndiffusion nselect2 metal1 contact_X'es nndiodec ndiff_in_nwell nselect2 metal1 contact_X'es + schottky ndiffusion pdiffusion + schottkyc ndiffusion pdiffusion metal1 contact_X'es mvpdiode pdiffusion pselect2 hvpdiff_mask mvndiode ndiffusion nselect2 hvndiff_mask @@ -612,11 +628,13 @@ paint ndiff nwell pdiff paint psd nwell nsd paint psc nwell nsc + paint ldndiff nwell ldpdiff paint pdc pwell ndc paint pfet pwell nfet paint pdiff pwell ndiff paint nsd pwell psd paint nsc pwell psc + paint ldpdiff pwell ldndiff paint m1 obsm1 m1 paint m2 obsm2 m2 @@ -662,6 +680,7 @@ allnactivenonfet allnactivenonfet allpactivenonfet allpactivenonfet *poly,allfets *poly,allfets + *schottky *schottky end #----------------------------------------------------- @@ -719,8 +738,33 @@ #----------------------------------------------------- # DIFF (COMP) #----------------------------------------------------- - layer DIFF alldiff - labels alldiff + + # LDFETs cut the diffusion under the gate + templayer ldbreak1 *ldndiff,*ldpdiff + grow 160 + and mvnfet,mvpfet + + templayer ldbreak mvnfet,mvpfet + grow 200 + and ldndiff,ldpdiff + or ldbreak1 + + # Additional cut-back of LD diffusion for implant + templayer ldbreak2 mvnfet,mvpfet + grow 240 + and ldndiff,ldpdiff + + # Schottky diode drawn as abutting diffusion, but + # there is a 0.28um gap between the nsd and the + # Schottky diffusion. + templayer scsep *nsd + grow 280 + + layer DIFF schottky + and-not scsep + or alldiff + and-not ldbreak + labels alldiff,schottky calma 22 0 layer DIFFFILL filldiff @@ -728,6 +772,20 @@ calma 22 4 #----------------------------------------------------- +# LDFET implants +#----------------------------------------------------- + + layer MVNSD ldndiff + and-not ldbreak2 + grow 800 + calma 210 0 + + layer MVPSD ldpdiff + and-not ldbreak2 + grow 800 + calma 11 39 + +#----------------------------------------------------- # Bipolar ID markers #----------------------------------------------------- @@ -1264,6 +1322,14 @@ calma 115 5 #----------------------------------------------------- +# SCHOTTKY MARK +#----------------------------------------------------- + layer SCHOTTKY + bloat-all *schottky *nsd + grow 160 + calma 241 0 + +#----------------------------------------------------- # MOSCAP MARK #----------------------------------------------------- layer MOSCAP nvar,mvnvar,pvar,mvpvar,ncap,pcap,mvncap,mvpcap @@ -1324,7 +1390,7 @@ # Obstruction geometry #----------------------------------------------------- - templayer obstruct_diff alldiff,filldiff,obsactive + templayer obstruct_diff alldiff,schottky,filldiff,obsactive grow 2010 shrink 500 grow 500 @@ -1474,9 +1540,13 @@ options calma-permissive-labels gridlimit 5 + # Check that all p-diff and n-ohmic has either nwell or dnwell + templayer missing_nwell *nsd,*mvnsd,*pdiff,*mvpdiff,*pdiode,pdiffres,mvpdiffres,pfet,mvpfet,mvnvaractor + and-not dnwell,nwell + # Check for MV and LV devices in the same dnwell templayer mv_dnwell - bloat-all alldiffmv dnwell + bloat-all alldiffmv,schottky dnwell templayer bad_dnwell bloat-all alldifflv dnwell @@ -1495,7 +1565,7 @@ bloat-all alldiffmv nwell templayer bad_nwell - bloat-all alldifflv nwell + bloat-all alldifflv,schottky nwell and mv_nwell # Check for nwell resistor in deep nwell @@ -1691,6 +1761,32 @@ templayer mvxndifcheck mvndifcheck copyup mvndifcheck + # Save cathode areas of Schottky diodes + templayer sccathode SCHOTTKY + and DIFF + and NPLUS + + # Grow Schottky anode so that drawn device abuts + # the cathode. + layer schottky SCHOTTKY + and DIFF + and-not NPLUS + and-not PPLUS + or sccathode + grow 140 + shrink 140 + and-not sccathode + labels DIFF + + # Schottky contact + layer schottkyc SCHOTTKY + and CONT + and DIFF + and-not NPLUS + and-not PPLUS + grow 145 + shrink 140 + layer ndiode DIFF and NPLUS and DIODE @@ -2756,6 +2852,7 @@ calma CAP_LENGTH 117 10 #endif (MIM) calma DIODE 115 5 + calma SCHOTTKY 241 0 calma CAPDEF 117 5 calma BJTDEF 118 5 calma BJTDRC 127 5 @@ -2868,14 +2965,28 @@ "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 \ + + # NWELL and DNWELL are interchangeable under devices. + surround *nsd allnwell 120 absence_okay \ "N-well overlap of N-Ohmic < %d (DF.4a)" - surround *mvnsd allnwell 160 absence_illegal \ + surround *mvnsd allnwell 160 absence_okay \ "N-well overlap of N-Ohmic < %d (DF.4a)" - surround *pdiff,*pdiode,pfet,pcap allnwell 430 absence_illegal \ + surround *pdiff,*pdiode,pfet,pcap allnwell 430 absence_okay \ "N-well overlap of P-Diffusion < %d (DF.7)" - surround *mvpdiff,*mvpdiode,mvpfet,mvpcap allnwell 600 absence_illegal \ + surround *mvpdiff,*mvpdiode,mvpfet,mvpcap allnwell 600 absence_okay \ "N-well overlap of P-Diffusion < %d (DF.7)" + surround *nsd dnwell 620 absence_okay \ + "Deep N-well overlap of N-Ohmic < %d (DF.4b)" + surround *mvnsd dnwell 660 absence_okay \ + "Deep N-well overlap of N-Ohmic < %d (DF.4b)" + surround *pdiff,*pdiode,pfet,pcap dnwell 930 absence_okay \ + "Deep N-well overlap of P-Diffusion < %d (DF.4e)" + surround *mvpdiff,*mvpdiode,mvpfet,mvpcap dnwell 1100 absence_okay \ + "Deep N-well overlap of P-Diffusion < %d (DF.4e)" + # Use CIF-DRC rule to ensure that at least one exists. + cifmaxwidth missing_nwell 0 bend_illegal \ + "P-diffusion and M-ohmic must be over N-well or deep N-well (DN.11)" + surround *psd pwell 120 absence_ok \ "P-field overlap of P-Ohmic < %d (DF.5)" surround *mvpsd pwell 160 absence_ok \ @@ -4731,7 +4842,7 @@ # 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)*,** +# cap_mim_2f0fF capacitor (MiM)*,** # # efuse fuse @@ -4782,6 +4893,11 @@ device msubcircuit pnp_10p00x10p00 pnp *pdiff pwell,space/w error a1>99.0 a1<101.0 device msubcircuit pnp_05p00x05p00 pnp *pdiff pwell,space/w error a1>24.0 a1<26.0 + device msubcircuit nfet_10v0_asym mvnfet *mvndiff *ldndiff allpsub error \ + l=l w=w a1=as p1=ps a2=ad p2=pd + device msubcircuit pfet_10v0_asym mvpfet *mvpdiff *ldpdiff allnwell error \ + l=l w=w a1=as p1=ps a2=ad p2=pd + device rsubcircuit efuse efuse *poly device rsubcircuit rm1 rm1 *m1 l=r_length w=r_width @@ -4865,19 +4981,20 @@ device pdiode diode_pd2nw_06v0 *mvpdiode allnwell a=area p=pj device ndiode diode_nd2ps_06v0 *mvndiode allpsub a=area p=pj device ndiode diode_nd2ps_06v0_nvt *mvnndiode allpsub a=area p=pj + device pdiode sc_diode *schottky *nsd a=area p=pj #ifdef MIM #ifdef METALS6 - device csubcircuit cap_mim_2f0_m5m6_noshield *mimcap *m5 l=c_length w=c_width + device csubcircuit cap_mim_2f0fF *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 + device csubcircuit cap_mim_2f0fF *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 + device csubcircuit cap_mim_2f0fF *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 + device csubcircuit cap_mim_2f0fF *mimcap *m2 l=c_length w=c_width #endif #endif (MIM)