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)