Merge branch 'master' of opencircuitdesign.com:/home/tim/gitsrc/open_pdks/
Conflicts:
common/spectre_to_spice.py
Merged additional code for spectre_to_spice.py.
diff --git a/VERSION b/VERSION
index 15245f3..e8eb7f1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.32
+1.0.33
diff --git a/common/spectre_to_spice.py b/common/spectre_to_spice.py
index 8b22a6d..2a1ff64 100755
--- a/common/spectre_to_spice.py
+++ b/common/spectre_to_spice.py
@@ -176,7 +176,7 @@
finalline = re.sub('round\(', 'floor(0.5+', finalline)
- # Use of "no" and "yes" as parameter values is not allowed in ngspice.
+ # use of "no" and "yes" as parameter values is not allowed in ngspice.
finalline = re.sub('sw_et[ \t]*=[ \t]*{no}', 'sw_et=0', finalline)
finalline = re.sub('sw_et[ \t]*=[ \t]*{yes}', 'sw_et=1', finalline)
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech
index 193b56f..4b5ef0e 100644
--- a/sky130/magic/sky130.tech
+++ b/sky130/magic/sky130.tech
@@ -64,6 +64,9 @@
# sky130_fd_pr__diode_pw2nd_lvt ndiodelvt low Vt n+ diff diode
# sky130_fd_pr__diode_pd2nw_lvt pdiodelvt low Vt p+ diff diode
# sky130_fd_pr__diode_pd2nw_hvt pdiodehvt high Vt p+ diff diode
+# sky130_fd_pr__npn_05v0 pbase NPN in deep nwell
+# sky130_fd_pr__npn_11v0 mvpbase thick oxide gated NPN
+# sky130_fd_pr__pnp_05v0 nbase PNP
# xcmimc1 mimcap MiM cap 1st plate
# xcmimc2 mimcap2 MiM cap 2nd plate
# mrdn rdn n+ diff resistor
@@ -104,10 +107,6 @@
# nhvnativeesd ESD native nFET
# phvesd ESD thickox pFET
# fnpass flash nFET device
-# npnpar1x* parasitic NPN
-# npn_1x1_2p0_hv thickox gated parasitic NPN
-# pnppar parasitic PNP
-# pnppar5x parasitic PNP
# xesd_ndiode_h_*** ESD n+ diode
# xesd_pdiode_h_*** ESD p+ diode
# reslocsub local substrate island indicator
@@ -162,6 +161,9 @@
-well pwell,pw
-well rpw,rpwell
-well obswell
+ -well pbase,npn
+ -well mvpbase,mvnpn
+ -well nbase,pnp
# Transistors
active nmos,ntransistor,nfet
@@ -373,7 +375,7 @@
aliases
allwellplane nwell
- allnwell nwell,obswell
+ allnwell nwell,obswell,pnp
allnfets nfet,npass,npd,scnfet,mvnfet,mvnnfet,nfetlvt,nsonos
allpfets pfet,ppu,scpfet,mvpfet,pfethvt,pfetlvt,pfetmvt
@@ -477,6 +479,10 @@
nsc ndiff_in_nwell metal1 contact_X'es
psc pdiff_in_pwell metal1 contact_X'es
+ pnp nwell ntransistor_stripes
+ npn pwell ptransistor_stripes
+ mvnpn pwell hvpdiff_mask
+
pfetlvt ptransistor ptransistor_stripes implant1
pfetmvt ptransistor ptransistor_stripes implant3
pfethvt ptransistor ptransistor_stripes implant2
@@ -656,8 +662,8 @@
#-----------------------------------------------------
connect
- *nwell,*nsd,*mvnsd,dnwell *nwell,*nsd,*mvnsd,dnwell
- pwell,*psd,*mvpsd pwell,*psd,*mvpsd
+ *nwell,*nsd,*mvnsd,dnwell,pnp *nwell,*nsd,*mvnsd,dnwell,pnp
+ pwell,*psd,*mvpsd,npn pwell,*psd,*mvpsd,npn
*li,coreli *li,coreli
*m1,m1fill *m1,m1fill
*m2,m2fill *m2,m2fill
@@ -724,7 +730,7 @@
# DNWELL
#----------------------------------------------------------------
- layer DNWELL dnwell
+ layer DNWELL dnwell,pnp
calma 64 18
layer PWRES rpw
@@ -879,6 +885,22 @@
calma 81 4
#----------------------------------------------------------------
+# NPNID and PNPID apply to bipolar transistors
+#----------------------------------------------------------------
+
+ layer NPNID
+ bloat-all npn,mvnpn dnwell
+ calma 82 20
+
+ templayer pnparea pnp
+ grow 400
+
+ layer PNPID
+ bloat-all pnparea *psd
+ or pnparea
+ calma 82 44
+
+#----------------------------------------------------------------
# RPM
#----------------------------------------------------------------
@@ -1910,8 +1932,6 @@
#endif
ignore NPC
ignore SEALID
- ignore NPNID
- ignore PNPID
ignore CAPID
ignore LDNTM
ignore HVNTM
@@ -1919,6 +1939,13 @@
ignore LOWTAPDENSITY
layer nwell NWELL,WELLTXT,WELLPIN
+ and-not PNPID
+ labels NWELL
+ labels WELLTXT text
+ labels WELLPIN port
+
+ layer pnp NWELL,WELLTXT,WELLPIN
+ and PNPID
labels NWELL
labels WELLTXT text
labels WELLPIN port
@@ -1930,6 +1957,10 @@
layer dnwell DNWELL
labels DNWELL
+ layer npn DNWELL
+ and-not NWELL
+ and NPNID
+
layer rpw PWRES
and DNWELL
labels PWRES
@@ -3246,7 +3277,7 @@
# Bipolar NPN mark
calma NPNID 82 20
# Bipolar PNP mark
- calma PNPID 82 20
+ calma PNPID 82 44
# Capacitor ID
calma CAPID 82 64
# Core area ID mark
@@ -3357,8 +3388,6 @@
calma FILLOBSM3 107 24
calma FILLOBSM4 112 4
-end
-
#-----------------------------------------------------------------------
style vendorimport
@@ -3377,8 +3406,6 @@
#endif
ignore NPC
ignore SEALID
- ignore NPNID
- ignore PNPID
ignore CAPID
ignore LDNTM
ignore HVNTM
@@ -3386,6 +3413,13 @@
ignore LOWTAPDENSITY
layer nwell NWELL,WELLTXT,WELLPIN
+ and-not PNPID
+ labels NWELL
+ labels WELLTXT port
+ labels WELLPIN port
+
+ layer pnp NWELL,WELLTXT,WELLPIN
+ and PNPID
labels NWELL
labels WELLTXT port
labels WELLPIN port
@@ -3397,6 +3431,10 @@
layer dnwell DNWELL
labels DNWELL
+ layer npn DNWELL
+ and-not NWELL
+ and NPNID
+
layer rpw PWRES
and DNWELL
labels PWRES
@@ -4713,7 +4751,7 @@
# Bipolar NPN mark
calma NPNID 82 20
# Bipolar PNP mark
- calma PNPID 82 20
+ calma PNPID 82 44
# Capacitor ID
calma CAPID 82 64
# Core area ID mark
@@ -5870,6 +5908,9 @@
device msubcircuit sky130_fd_pr__nfet_05v0_nvt mvnnfet \
*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w
+ device msubcircuit sky130_fd_pr__npn_05v0 npn dnwell *ndiff space/w error a1=area
+ device msubcircuit sky130_fd_pr__pnp_05v0 pnp pwell,space/w *pdiff a1=area
+
device rsubcircuit short rmp \
*poly space/w,pwell,nwell error l=l w=w
device rsubcircuit short rli1 \
@@ -5928,27 +5969,27 @@
*mvpdiff nwell error l=l w=w
device subcircuit sky130-fd_pr__diode_pd2nw *pdiode \
- nwell a=a p=p
+ nwell a=area
device msubcircuit sky130_fd_pr__diode_pw2nd *ndiode \
- pwell,space/w a=a p=p
+ pwell,space/w a=area
device subcircuit pdiode_h *mvpdiode \
- nwell a=a p=p
+ nwell a=area
device msubcircuit ndiode_h *mvndiode \
- pwell,space/w a=a p=p
+ pwell,space/w a=area
# These are parasitic devices
device msubcircuit sky130_fd_pr__diode_pw2nd_lvt *ndiodelvt \
- pwell,space/w a=a p=p
+ pwell,space/w a=area
device subcircuit sky130_fd_pr__diode_pd2nw_lvt *pdiodelvt \
- nwell a=a p=p
+ nwell a=area
device subcircuit sky130_fd_pr_diode_pd2nw_hvt *pdiodehvt \
- nwell a=a p=p
+ nwell a=area
device msubcircuit sky130_fd_pr__diode_pw2nd_nvt *nndiode \
- pwell,space/w a=a p=p
+ pwell,space/w a=area
#ifdef MIM
- device subcircuit xcmimc1 *mimcap m3 nwell,pwell,space/w error a=a p=p s=subs
- device subcircuit xcmimc2 *mimcap2 m4,mimcc/m4 nwell,pwell,space/w error a=a p=p s=subs
+ device subcircuit xcmimc1 *mimcap m3 nwell,pwell,space/w error a=area s=subs
+ device subcircuit xcmimc2 *mimcap2 m4,mimcc/m4 nwell,pwell,space/w error a=area s=subs
#endif (MIM)
variants (orig)
@@ -6001,20 +6042,22 @@
device resistor mrdp_hv mvpdiffres *mvpdiff
device resistor xpwres rpw pwell
- device pdiode pdiode *pdiode nwell a=a p=p
- device ndiode ndiode *ndiode pwell,space/w a=a p=p
- device pdiode pdiode_h *mvpdiode nwell a=a p=p
- device ndiode ndiode_h *mvndiode pwell,space/w a=a p=p
+ device pdiode pdiode *pdiode nwell a=area
+ device ndiode ndiode *ndiode pwell,space/w a=area
+ device pdiode pdiode_h *mvpdiode nwell a=area
+ device ndiode ndiode_h *mvndiode pwell,space/w a=area
# These are parasitic devices
- device ndiode ndiode_lvt *ndiodelvt pwell,space/w a=a p=p
- device pdiode pdiode_lvt *pdiodelvt nwell a=a p=p
- device pdiode pdiode_hvt *pdiodehvt nwell a=a p=p
- device ndiode ndiode_native *nndiode pwell,space/w a=a p=p
+ device ndiode ndiode_lvt *ndiodelvt pwell,space/w a=area
+ device pdiode pdiode_lvt *pdiodelvt nwell a=area
+ device pdiode pdiode_hvt *pdiodehvt nwell a=area
+ device ndiode ndiode_native *nndiode pwell,space/w a=area
- device subcircuit pdiode_h *mvpdiode nwell a=a p=p
- device msubcircuit ndiode_h *mvndiode pwell,space/w a=a p=p
+ device bjt sky130_fd_pr__npn_05v0 npn dnwell *ndiff space/w error a1=area
+ device bjt sky130_fd_pr__pnp_05v0 pnp pwell,space/w *pdiff a1=area
+ device subcircuit pdiode_h *mvpdiode nwell a=area
+ device msubcircuit ndiode_h *mvndiode pwell,space/w a=area
#ifdef MIM
device capacitor xcmimc1 *mimcap *m3 1