Added several patches and corrections to the device models:
Uncommented the poly resistor model definition (known issue for
some time), added subcircuit definitions for the high voltage
pdiff and ndiff resistors (including parasitic diode devices
at each terminal, as done for the low voltage pdiff/ndiff
resistors), and replaced the resistor names in the HVL digital
standard cell library (since there was no subcircuit model for
these, the names did not get remapped).
diff --git a/VERSION b/VERSION
index d9871d3..18168b2 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.151
+1.0.152
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 362e601..11b4497 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -395,6 +395,8 @@
HDLL_TECHLEF = techLEF/sky130_fd_sc_hdll
MLXX_SCRIPTS = scripts/sky130_ml_xx_hd
PR_SPICE = spi/sky130_fd_pr
+ HVL_SPICE = spi/sky130_fd_sc_hvl
+ HVL_CDL = cdl/sky130_fd_sc_hvl
else
IO_VERILOG = sky130_fd_io/verilog
HD_VERILOG = sky130_fd_sc_hd/verilog
@@ -408,6 +410,8 @@
HDLL_TECHLEF = sky130_fd_sc_hdll/techlef
MLXX_SCRIPTS = sky130_ml_xx_hd/scripts
PR_SPICE = sky130_fd_pr/spice
+ HVL_SPICE = sky130_fd_sc_hvl/spice
+ HVL_CDL = sky130_fd_sc_hvl/cdl
endif
all: all-a
@@ -721,6 +725,9 @@
# Custom: Add diodes as subcircuits to the r+c models file
cat ./custom/models/diode.spice >> \
${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/sky130_fd_pr__model__r+c.model.spice
+ # Custom: Add resistors as subcircuits to the r+c models file
+ cat ./custom/models/resistor.spice >> \
+ ${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/sky130_fd_pr__model__r+c.model.spice
# Custom: Patch the models to work around ngspice issue with the relative
# order of the "nf" and "mult" parameters.
@@ -735,6 +742,10 @@
patch -p4 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${PR_SPICE} \
< custom/patches/sky130_fd_pr_3.patch \
2>&1 | tee -a ${SKY130A}_make.log || true
+ # Custom: Patch the ngspice models to add the HV diffusion resistor subcircuits
+ patch -p2 -f -d ${STAGING_PATH}/${SKY130A}/libs.tech/ngspice \
+ < custom/patches/sky130_fd_pr_5.patch \
+ 2>&1 | tee -a ${SKY130A}_make.log || true
# Custom: Add "spinit" file
cat ./custom/models/spinit >> \
${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/spinit
@@ -831,6 +842,13 @@
patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HDLL_TECHLEF} \
< custom/patches/hdll_minenclosed.squeaky.patch \
2>&1 | tee -a ${SKY130A}_make.log || true
+ # Custom: Patch the HVL library to correct the resistor device names
+ patch -p3 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HVL_SPICE} \
+ < custom/patches/sky130_fd_pr_4.patch \
+ 2>&1 | tee -a ${SKY130A}_make.log || true
+ patch -p3 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HVL_CDL} \
+ < custom/patches/sky130_fd_pr_6.patch \
+ 2>&1 | tee -a ${SKY130A}_make.log || true
alpha-a:
# Install alphanumeric library.
diff --git a/sky130/custom/models/resistor.spice b/sky130/custom/models/resistor.spice
new file mode 100644
index 0000000..5be03fb
--- /dev/null
+++ b/sky130/custom/models/resistor.spice
@@ -0,0 +1,13 @@
+* Subcircuit definition HV diffusion resistors
+
+.subckt sky130_fd_pr__res_generic_nd__hv t1 t2 b w=1 l=1
+r0 t1 t2 sky130_fd_pr__res_generic_nd__hv w = {w} l = {l}
+d0 b t1 sky130_fd_pr__diode_pw2nd_11v0 area='w*l*0.5' pj='w+l'
+d1 b t2 sky130_fd_pr__diode_pw2nd_11v0 area='w*l*0.5' pj='w+l'
+.ends sky130_fd_pr__res_generic_nd__hv
+
+.subckt sky130_fd_pr__res_generic_pd__hv t1 t2 b w=1 l=1
+r0 t1 t2 sky130_fd_pr__res_generic_pd__hv w = {w} l = {l}
+d0 t1 b sky130_fd_pr__diode_pd2nw_11v0 area='w*l*0.5' pj='w+l'
+d1 t1 b sky130_fd_pr__diode_pd2nw_11v0 area='w*l*0.5' pj='w+l'
+.ends sky130_fd_pr__res_generic_pd__hv
diff --git a/sky130/custom/patches/sky130_fd_pr_4.patch b/sky130/custom/patches/sky130_fd_pr_4.patch
new file mode 100644
index 0000000..8408926
--- /dev/null
+++ b/sky130/custom/patches/sky130_fd_pr_4.patch
@@ -0,0 +1,14 @@
+diff -Naur libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice libs.ref.fixed/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice
+--- libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice 2021-04-27 15:36:47.000000000 -0400
++++ libs.ref.fixed/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice 2021-04-29 13:47:15.748574423 -0400
+@@ -1860,8 +1860,8 @@
+ .subckt sky130_fd_sc_hvl__schmittbuf_1 A VGND VNB VPB VPWR X
+ X0 a_117_181# A a_231_463# VPB sky130_fd_pr__pfet_g5v0d10v5 w=750000u l=500000u
+ X1 a_117_181# A a_217_207# VNB sky130_fd_pr__nfet_g5v0d10v5 w=420000u l=500000u
+-X2 a_78_463# VGND VNB mrdn_hv w=290000u l=1.355e+06u
+-X3 a_64_207# VPWR VPB mrdp_hv w=290000u l=3.11e+06u
++X2 a_78_463# VGND VNB sky130_fd_pr__res_generic_nd__hv w=290000u l=1.355e+06u
++X3 a_64_207# VPWR VPB sky130_fd_pr__res_generic_pd__hv w=290000u l=3.11e+06u
+ X4 a_231_463# A VPWR VPB sky130_fd_pr__pfet_g5v0d10v5 w=750000u l=500000u
+ X5 a_64_207# a_117_181# a_217_207# VNB sky130_fd_pr__nfet_g5v0d10v5 w=420000u l=500000u
+ X6 VGND a_117_181# X VNB sky130_fd_pr__nfet_g5v0d10v5 w=750000u l=500000u
diff --git a/sky130/custom/patches/sky130_fd_pr_5.patch b/sky130/custom/patches/sky130_fd_pr_5.patch
new file mode 100644
index 0000000..a2ad431
--- /dev/null
+++ b/sky130/custom/patches/sky130_fd_pr_5.patch
@@ -0,0 +1,12 @@
+diff -Naur libs.tech/ngspice/sky130_fd_pr__model__r+c.model.spice libs.tech.fixed/ngspice/sky130_fd_pr__model__r+c.model.spice
+--- libs.tech/ngspice/sky130_fd_pr__model__r+c.model.spice 2021-04-27 22:18:42.839340172 -0400
++++ libs.tech.fixed/ngspice/sky130_fd_pr__model__r+c.model.spice 2021-04-29 13:48:44.752431446 -0400
+@@ -131,7 +131,7 @@
+ .model sky130_fd_pr__res_generic_pd r tc1r = {tc1rsp} tc2r = {tc2rsp} rsh = {rdp} dw = {"-tol_pfom/2-pfom_dw/2"} tnom = 30.0
+ .model sky130_fd_pr__res_generic_nd__hv r tc1r = {tc1rsn_h} tc2r = {tc2rsn_h} rsh = {rdn_hv} dw = {"-tol_nfom/2-nfom_dw/2"} tnom = 30.0
+ .model sky130_fd_pr__res_generic_pd__hv r tc1r = {tc1rsp_h} tc2r = {tc2rsp_h} rsh = {rdp_hv} dw = {"-tol_pfom/2-pfom_dw/2"} tnom = 30.0
+-*.model sky130_fd_pr__res_generic_po r tc1r=tc1rsgpu tc2r=tc2rsgpu rsh=rp1 dw="-tol_poly/2-poly_dw/2" tnom=30
++.model sky130_fd_pr__res_generic_po r tc1r=tc1rsgpu tc2r=tc2rsgpu rsh=rp1 dw="-tol_poly/2-poly_dw/2" tnom=30
+ .model sky130_fd_pr__res_generic_nw r tc1r = {tc1rsnw} tc2r = {tc2rsnw} rsh = {rnw} dw = {"-tol_nw/2"} tnom = 30.0
+ .model sky130_fd_pr__res_generic_l1 r tc1r = {tc1rl1} tc2r = {tc2rl1} rsh = {rl1} dw = {"-tol_li/2-li_dw/2"} tnom = 30.0
+ .model sky130_fd_pr__res_generic_m1 r tc1r = {tc1rm1} tc2r = {tc2rm1} rsh = {rm1} dw = {"-tol_m1/2-m1_dw/2"} tnom = 30.0
diff --git a/sky130/custom/patches/sky130_fd_pr_6.patch b/sky130/custom/patches/sky130_fd_pr_6.patch
new file mode 100644
index 0000000..ea402c4
--- /dev/null
+++ b/sky130/custom/patches/sky130_fd_pr_6.patch
@@ -0,0 +1,14 @@
+diff -Naur libs.ref/sky130_fd_sc_hvl/cdl/sky130_fd_sc_hvl.cdl libs.ref.fixed/sky130_fd_sc_hvl/cdl/sky130_fd_sc_hvl.cdl
+--- libs.ref/sky130_fd_sc_hvl/cdl/sky130_fd_sc_hvl.cdl 2021-04-29 14:04:04.666906207 -0400
++++ libs.ref.fixed/sky130_fd_sc_hvl/cdl/sky130_fd_sc_hvl.cdl 2021-04-29 14:42:56.278560406 -0400
+@@ -2228,8 +2228,8 @@
+
+ .SUBCKT sky130_fd_sc_hvl__schmittbuf_1 A VGND VNB VPB VPWR X
+ *.PININFO A:I VGND:I VNB:I VPB:I VPWR:I X:O
+-rI39 net069 VGND mrdn_hv m=1 w=0.29 l=1.355 isHV=TRUE
+-rI38 VPWR net32 mrdp_hv m=1 w=0.29 l=3.11 isHV=TRUE
++rI39 net069 VGND sky130_fd_pr__res_generic_nd__hv m=1 w=0.29 l=1.355 isHV=TRUE
++rI38 VPWR net32 sky130_fd_pr__res_generic_pd__hv m=1 w=0.29 l=3.11 isHV=TRUE
+ MI5 net32 net36 net40 VNB nfet_g5v0d10v5 m=1 w=0.42 l=0.5 mult=1
+ + sa=0.265 sb=0.265 sd=0.28 topography=normal area=0.063 perim=1.14
+ MMN0 net36 A net40 VNB nfet_g5v0d10v5 m=1 w=0.42 l=0.5 mult=1 sa=0.265