Fix incorrect extracted parameters in spice files.
Magic was updated to fix the extracted parameter values.
Fixes https://github.com/google/skywater-pdk/issues/192
Signed-off-by: Tim 'mithro' Ansell <tansell@google.com>
diff --git a/cells/res_generic_nd/sky130_fd_pr__res_generic_nd.model.spice b/cells/res_generic_nd/sky130_fd_pr__res_generic_nd.model.spice
new file mode 100644
index 0000000..b0474c5
--- /dev/null
+++ b/cells/res_generic_nd/sky130_fd_pr__res_generic_nd.model.spice
@@ -0,0 +1,21 @@
+* Copyright 2020 The SkyWater PDK Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* https://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+
+* SKY130 Spice File.
+.subckt sky130_fd_pr__res_generic_nd t1 t2 b
++ w=1 l=1
+r0 t1 t2 sky130_fd_pr__res_generic_nd w = {w} l = {l}
+d0 b t1 sky130_fd_pr__diode_pw2nd_05v5 area = 'w*l*0.5' pj = 'w+l'
+d1 b t2 sky130_fd_pr__diode_pw2nd_05v5 area = 'w*l*0.5' pj = 'w+l'
+.ends sky130_fd_pr__res_generic_nd
diff --git a/cells/res_generic_pd/sky130_fd_pr__res_generic_pd.model.spice b/cells/res_generic_pd/sky130_fd_pr__res_generic_pd.model.spice
new file mode 100644
index 0000000..2a36824
--- /dev/null
+++ b/cells/res_generic_pd/sky130_fd_pr__res_generic_pd.model.spice
@@ -0,0 +1,21 @@
+* Copyright 2020 The SkyWater PDK Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* https://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+
+* SKY130 Spice File.
+.subckt sky130_fd_pr__res_generic_pd t1 t2 b
++ w=1 l=1
+r0 t1 t2 sky130_fd_pr__res_generic_pd w = {w} l = {l}
+d0 t1 b sky130_fd_pr__model__parasitic__diode_ps2nw area = 'w*l*0.5' pj = 'w+l'
+d1 t2 b sky130_fd_pr__model__parasitic__diode_ps2nw area = 'w*l*0.5' pj = 'w+l'
+.ends sky130_fd_pr__res_generic_pd
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po.model.spice
index 6652ae1..600a007 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po.model.spice
@@ -16,8 +16,12 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
-.subckt sky130_fd_pr__res_high_po r0 r1
+.subckt sky130_fd_pr__res_high_po r0 r1 b
+ w=1 l=1
.param mult = 1.0
+ rsheet = 317.3885
@@ -30,8 +34,21 @@
+ rbody_match = {body_pelgrom/sqrt(w*l*mult)*sky130_fd_pr__res_high_po__slope_spectre}
+ rend_match = {head_pelgrom/sqrt((w+0.525)*num_con_row*mult)*sky130_fd_pr__res_high_po__con_slope_spectre}
+ weff = {w+rbody_dw-0.0672*max(0.69-w,0)}
-+ rbody = {rsheet*(l+0.247)/weff*(1+rbody_match)}
-+ rhead = {rhead_ps/(weff+0.1558)*(1+rend_match)}
-rbody r0 rb r = {rbody*(1+v(r0,r1))}
-rhead rb r1 r = {rhead}
++ leff = {l+0.247}
++ res_match = {(body_pelgrom/sqrt(w*l*mult))*sky130_fd_pr__res_high_po__slope_spectre}
+rhead r0 rb rhead_model w = {weff+0.1558} l = 1.0
+rbody rb r1 rbody_model w = {weff} l = {leff}
+xc0 r0 r1 b sky130_fd_pr__model__parasitic__res_po w = {w} l = {l}
+.model rhead_model r sw_et=0 isnoisy=0
++ rsh = {345.8312*(1+sky130_fd_pr__res_high_po__var)*(1+rend_match)}
++ p2 = {-80.87e-3/cosh(6.34e-3*weff*weff)*(1-exp(-1.554/leff))}
++ q2 = {10.13/cosh(0.0898*weff*weff)}
++ tc1 = -4.3e-4 tc2 = 12e-6 tnom = 30.0
+.model rbody_model r sw_et=0 isnoisy=0
++ rsh = {rsheet*(1+sky130_fd_pr__res_high_po__var)*(1+res_match)}
++ p2 = {(w>0.6)?130.8e3*(1-exp(-1.818e-3*leff/weff))-867.4/weff+2236*weff/leff:300*(1-exp(-0.1124*leff/weff))+304.8*weff/leff}
++ q2 = {(w>0.6)?6.11*(1-exp(-852.8e-6*leff/weff))+1.375e-3*weff:0.5*0.3155*(1-exp(-0.05518*leff/weff))+1.19E-05*weff}
++ p3 = {(w>0.6)?380.3*weff/leff:0}
++ q3 = {(w>0.6)?42.62e-3*weff/leff:0}
++ tc1 = {tc1rpolybody} tc2 = {tc2rpolybody} tnom = 30.0
.ends sky130_fd_pr__res_high_po
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po_0p35.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po_0p35.model.spice
index 2e981f1..097a848 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po_0p35.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po_0p35.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_high_po_0p35 r0 r1 b
+
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po_0p69.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po_0p69.model.spice
index a823c27..4051622 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po_0p69.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po_0p69.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_high_po_0p69 r0 r1 b
+
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po_1p41.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po_1p41.model.spice
index bafca03..5249b91 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po_1p41.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po_1p41.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_high_po_1p41 r0 r1 b
+
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po_2p85.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po_2p85.model.spice
index aadba5a..ee9382c 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po_2p85.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po_2p85.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_high_po_2p85 r0 r1 b
+
diff --git a/cells/res_high_po/sky130_fd_pr__res_high_po_5p73.model.spice b/cells/res_high_po/sky130_fd_pr__res_high_po_5p73.model.spice
index d5a8c17..f182d09 100644
--- a/cells/res_high_po/sky130_fd_pr__res_high_po_5p73.model.spice
+++ b/cells/res_high_po/sky130_fd_pr__res_high_po_5p73.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_high_po_5p73 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po.model.spice
new file mode 100644
index 0000000..4314abd
--- /dev/null
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po.model.spice
@@ -0,0 +1,56 @@
+* Copyright 2020 The SkyWater PDK Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* https://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+
+* SKY130 Spice File.
+* statistics {
+* mismatch {
+* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
+* }
+.subckt sky130_fd_pr__res_xhigh_po r0 r1 sub
++ w=1 l=1
+.param mult = 1.0
++ rsheet = 2000.0
++ rend_mm = {0.0472/sqrt(w)}
++ leff = {l-0.0592}
++ weff = {w-0.056}
+* $ Resistor voltco fitting parameters
++ bp2 = -0.1228
++ bq2 = 1.304
++ bp22 = -0.2874
++ bp23 = 0.5252
+* $ Substrate voltco fitting parameters
++ sub1 = 1.2
++ sub2 = 41.26e-3
++ sub3 = 8.697e-3
++ sub4 = 24.0
++ sub5 = 39.86
++ body_pelgrom = 0.0347
++ res_match = {(body_pelgrom/sqrt(w*l*mult))*sky130_fd_pr__res_high_po__slope_spectre}
++ rhead0 = {188.2/(weff-0.0672*max(0.69-w,0)+1.41)}
++ rbody0 = {rsheet*leff/(weff-0.0672*max(0.69-w,0))}
++ rhead = {rhead0*(1+sky130_fd_pr__res_xhigh_po__var_mult)*(1+rend_mm/sqrt(mult)*sky130_fd_pr__res_high_po__con_slope_spectre)}
++ rbody = {rbody0*(1+sky130_fd_pr__res_xhigh_po__var_mult)*(1+res_match)}
++ Efac = {1/leff*(1+bp22/w+bp23*min(0.2,leff-0.5)*log(leff/w))}
+rend1 r0 t1 reshead r = {rhead}
+rend2 t2 r1 reshead r = {rhead}
+xc0 r0 r1 sub sky130_fd_pr__model__parasitic__res_po w = {w} l = {l}
+rbody t1 t2 resbody r = {rbody*(1-bp2+bp2*sqrt(1+(bq2*abs(v(t1,t2))*Efac)**2))*
++ (sub1+sub2*tanh(sub3*(min(v(r0,sub)+v(r1,sub),sub4)+sub5))) / (sub1+sub2*tanh(sub3*sub5)) }
+.model resbody r tc1 = {-1.47e-3-5e-7*sky130_fd_pr__res_xhigh_po__var_mult*rsheet} tc2 = 2.7e-6 tnom = 25.0
+.model reshead r tc1 = -4.3e-4 tc2 = -1.3e-5 tnom = 25.0
+.ends sky130_fd_pr__res_xhigh_po
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p35.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p35.model.spice
index 7de8040..ae6c399 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p35.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p35.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po_0p35 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p69.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p69.model.spice
index 6e62c24..3656a47 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p69.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p69.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po_0p69 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_1p41.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_1p41.model.spice
index 5789252..1c5a5f7 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_1p41.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_1p41.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po_1p41 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_2p85.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_2p85.model.spice
index f1db674..a5bb5f0 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_2p85.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_2p85.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po_2p85 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_5p73.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_5p73.model.spice
index 8cfb799..dacbe44 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_5p73.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_5p73.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po_5p73 r0 r1 b
+
diff --git a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po__base.model.spice b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po__base.model.spice
index 9a27020..2054731 100644
--- a/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po__base.model.spice
+++ b/cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po__base.model.spice
@@ -16,6 +16,10 @@
* statistics {
* mismatch {
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
.subckt sky130_fd_pr__res_xhigh_po__base r1 r2 b
+
diff --git a/cells/rf_nfet_01v8/sky130_fd_pr__rf_nfet_01v8_b.pm3.spice b/cells/rf_nfet_01v8/sky130_fd_pr__rf_nfet_01v8_b.pm3.spice
index 20e3cff..6066607 100644
--- a/cells/rf_nfet_01v8/sky130_fd_pr__rf_nfet_01v8_b.pm3.spice
+++ b/cells/rf_nfet_01v8/sky130_fd_pr__rf_nfet_01v8_b.pm3.spice
@@ -785,7 +785,7 @@
.ends sky130_fd_pr__rf_nfet_01v8_bM02
.subckt sky130_fd_pr__rf_nfet_01v8_bM02W3p00 d g s b
+
-.param l = 1 w = 3.01 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_01v8_bM02W3p00 d g s b sky130_fd_pr__rf_nfet_01v8_bM02__model l = {l} w = 3.01 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_01v8_bM02__model.3 nmos
* DC IV MOS Parameters
@@ -1543,7 +1543,7 @@
.ends sky130_fd_pr__rf_nfet_01v8_bM02W3p00
.subckt sky130_fd_pr__rf_nfet_01v8_bM02W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_01v8_bM02W5p00 d g s b sky130_fd_pr__rf_nfet_01v8_bM02__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_01v8_bM02__model.6 nmos
* DC IV MOS Parameters
@@ -3059,7 +3059,7 @@
.ends sky130_fd_pr__rf_nfet_01v8_bM04
.subckt sky130_fd_pr__rf_nfet_01v8_bM04W3p00 d g s b
+
-.param l = 1 w = 3.01 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_01v8_bM04W3p00 d g s b sky130_fd_pr__rf_nfet_01v8_bM04__model l = {l} w = 3.01 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_01v8_bM04__model.3 nmos
* DC IV MOS Parameters
@@ -3817,7 +3817,7 @@
.ends sky130_fd_pr__rf_nfet_01v8_bM04W3p00
.subckt sky130_fd_pr__rf_nfet_01v8_bM04W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_01v8_bM04W5p00 d g s b sky130_fd_pr__rf_nfet_01v8_bM04__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_01v8_bM04__model.6 nmos
* DC IV MOS Parameters
diff --git a/cells/rf_nfet_g5v0d10v5/sky130_fd_pr__rf_nfet_g5v0d10v5_b.pm3.spice b/cells/rf_nfet_g5v0d10v5/sky130_fd_pr__rf_nfet_g5v0d10v5_b.pm3.spice
index 31696f0..bf316dc 100644
--- a/cells/rf_nfet_g5v0d10v5/sky130_fd_pr__rf_nfet_g5v0d10v5_b.pm3.spice
+++ b/cells/rf_nfet_g5v0d10v5/sky130_fd_pr__rf_nfet_g5v0d10v5_b.pm3.spice
@@ -284,7 +284,7 @@
.ends sky130_fd_pr__rf_nfet_g5v0d10v5_bM02
.subckt sky130_fd_pr__rf_nfet_g5v0d10v5_bM02W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_g5v0d10v5_bM02W5p00 d g s b sky130_fd_pr__rf_nfet_g5v0d10v5_bM02__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_g5v0d10v5_bM02__model.1 nmos
* DC IV MOS Parameters
@@ -798,7 +798,7 @@
.ends sky130_fd_pr__rf_nfet_g5v0d10v5_bM04
.subckt sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00 d g s b sky130_fd_pr__rf_nfet_g5v0d10v5_bM04__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_g5v0d10v5_bM04__model.1 nmos
* DC IV MOS Parameters
@@ -1055,7 +1055,7 @@
.ends sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00
.subckt sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W7p00 d g s b
+
-.param l = 1 w = 7.09 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_g5v0d10v5_bM04W7p00 d g s b sky130_fd_pr__rf_nfet_g5v0d10v5_bM04__model l = {l} w = 7.09 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_g5v0d10v5_bM04__model.2 nmos
* DC IV MOS Parameters
@@ -1569,7 +1569,7 @@
.ends sky130_fd_pr__rf_nfet_g5v0d10v5_bM10
.subckt sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_g5v0d10v5_bM10W5p00 d g s b sky130_fd_pr__rf_nfet_g5v0d10v5_bM10__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_g5v0d10v5_bM10__model.1 nmos
* DC IV MOS Parameters
@@ -1826,7 +1826,7 @@
.ends sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W5p00
.subckt sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W7p00 d g s b
+
-.param l = 1 w = 7.09 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_nfet_g5v0d10v5_bM10W7p00 d g s b sky130_fd_pr__rf_nfet_g5v0d10v5_bM10__model l = {l} w = 7.09 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_nfet_g5v0d10v5_bM10__model.2 nmos
* DC IV MOS Parameters
diff --git a/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_b.pm3.spice b/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_b.pm3.spice
index adefbbd..ff41605 100644
--- a/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_b.pm3.spice
+++ b/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_b.pm3.spice
@@ -757,7 +757,7 @@
.ends sky130_fd_pr__rf_pfet_01v8_bM02
.subckt sky130_fd_pr__rf_pfet_01v8_bM02W3p00 d g s b
+
-.param l = 1 w = 3.01 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_pfet_01v8_bM02W3p00 d g s b sky130_fd_pr__rf_pfet_01v8_bM02__model l = {l} w = 3.01 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_pfet_01v8_bM02__model.3 pmos
* DC IV MOS Parameters
@@ -1485,7 +1485,7 @@
.ends sky130_fd_pr__rf_pfet_01v8_bM02W3p00
.subckt sky130_fd_pr__rf_pfet_01v8_bM02W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_pfet_01v8_bM02W5p00 d g s b sky130_fd_pr__rf_pfet_01v8_bM02__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_pfet_01v8_bM02__model.6 pmos
* DC IV MOS Parameters
@@ -2941,7 +2941,7 @@
.ends sky130_fd_pr__rf_pfet_01v8_bM04
.subckt sky130_fd_pr__rf_pfet_01v8_bM04W3p00 d g s b
+
-.param l = 1 w = 3.01 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_pfet_01v8_bM04W3p00 d g s b sky130_fd_pr__rf_pfet_01v8_bM04__model l = {l} w = 3.01 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_pfet_01v8_bM04__model.3 pmos
* DC IV MOS Parameters
@@ -3669,7 +3669,7 @@
.ends sky130_fd_pr__rf_pfet_01v8_bM04W3p00
.subckt sky130_fd_pr__rf_pfet_01v8_bM04W5p00 d g s b
+
-.param l = 1 w = 5.05 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
+.param l = 1 ad = 0 as = 0 pd = 0 ps = 0 nrd = 0 nrs = 0 sa = 0 sb = 0 sd = 0 mult = 1 nf = 1.0
msky130_fd_pr__rf_pfet_01v8_bM04W5p00 d g s b sky130_fd_pr__rf_pfet_01v8_bM04__model l = {l} w = 5.05 ad = {ad} as = {as} pd = {pd} ps = {ps} nrd = {nrd} nrs = {nrs} sa = {sa} sb = {sb} sd = {sd} nf = {nf}
.model sky130_fd_pr__rf_pfet_01v8_bM04__model.6 pmos
* DC IV MOS Parameters
diff --git a/models/parameters/montecarlo.spice b/models/parameters/montecarlo.spice
index 5d5e676..c8d42a7 100644
--- a/models/parameters/montecarlo.spice
+++ b/models/parameters/montecarlo.spice
@@ -379,6 +379,8 @@
+ sky130_fd_pr__special_nfet_pass_flash__vth0_diff_1 = '-3.54442e-03*lvn_threshold*lvn_threshold+4.54875e-02*lvn_threshold+-5.70930e-03'
+ sky130_fd_pr__special_nfet_pass_flash__wint_diff = '5.63000e-09*diff_cd'
+ sky130_fd_pr__res_high_po__var_mult = '1.25000e+00*ic_res'
++ sky130_fd_pr__res_high_po__var = '1.25000e+00*ic_res'
++ sky130_fd_pr__res_xhigh_po__var_mult = '1.25000e+00*ic_res'
+ mcl1d_ca_w_0_170_s_0_180 = '-5.50000e-07*ic_cap*ic_cap+-3.00000e-07*ic_cap+5.53000e-05'
+ mcl1d_ca_w_0_170_s_0_225 = '-5.50000e-07*ic_cap*ic_cap+-3.00000e-07*ic_cap+5.53000e-05'
+ mcl1d_ca_w_0_170_s_0_270 = '-5.50000e-07*ic_cap*ic_cap+-3.00000e-07*ic_cap+5.53000e-05'
diff --git a/models/parasitics/sky130_fd_pr__model__parasitic__res_po.model.spice b/models/parasitics/sky130_fd_pr__model__parasitic__res_po.model.spice
new file mode 100644
index 0000000..8de731a
--- /dev/null
+++ b/models/parasitics/sky130_fd_pr__model__parasitic__res_po.model.spice
@@ -0,0 +1,28 @@
+* Copyright 2020 The SkyWater PDK Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* https://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+
+* SKY130 Spice File.
+* statistics {
+* mismatch {
+* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
+* }
+.subckt sky130_fd_pr__model__parasitic__res_po r0 r1 sub
++ w=1 l=1
+c0 r0 sub c = {((l+2*2.08)*w*crpf_precision*1e-12+2*(l+2*2.08+w)*crpfsw_precision_1_1*1e-6)/2}
+c1 r1 sub c = {((l+2*2.08)*w*crpf_precision*1e-12+2*(l+2*2.08+w)*crpfsw_precision_1_1*1e-6)/2}
+.ends sky130_fd_pr__model__parasitic__res_po
diff --git a/models/r+c/res_high__cap_high__lin.spice b/models/r+c/res_high__cap_high__lin.spice
index ac4d220..93c7aa2 100644
--- a/models/r+c/res_high__cap_high__lin.spice
+++ b/models/r+c/res_high__cap_high__lin.spice
@@ -2,6 +2,8 @@
* P+ Poly Preres Corner Parameters
.param
+ sky130_fd_pr__res_high_po__var_mult = 5.0
++ sky130_fd_pr__res_high_po__var = 0.125
++ sky130_fd_pr__res_xhigh_po__var_mult = 0.15
+ camimc= 2.231e-15 $ Units: farad/micrometer^2
+ cpmimc = 0.35e-15 $ Units: farad/micrometer
+ cvpp_cor = 1.136
diff --git a/models/r+c/res_high__cap_low__lin.spice b/models/r+c/res_high__cap_low__lin.spice
index 81e9654..6c1f87c 100644
--- a/models/r+c/res_high__cap_low__lin.spice
+++ b/models/r+c/res_high__cap_low__lin.spice
@@ -2,6 +2,8 @@
* P+ Poly Preres Corner Parameters
.param
+ sky130_fd_pr__res_high_po__var_mult = 5.0
++ sky130_fd_pr__res_high_po__var = 0.125
++ sky130_fd_pr__res_xhigh_po__var_mult = 0.15
+ camimc= 1.778e-15 $ Units: farad/micrometer^2
+ cpmimc = 0.03e-15 $ Units: farad/micrometer
+ cvpp_cor = 0.862
diff --git a/models/r+c/res_low__cap_high__lin.spice b/models/r+c/res_low__cap_high__lin.spice
index 14d4544..a412063 100644
--- a/models/r+c/res_low__cap_high__lin.spice
+++ b/models/r+c/res_low__cap_high__lin.spice
@@ -2,6 +2,8 @@
* P+ Poly Preres Corner Parameters
.param
+ sky130_fd_pr__res_high_po__var_mult = -5.0
++ sky130_fd_pr__res_high_po__var = -0.125
++ sky130_fd_pr__res_xhigh_po__var_mult = -0.15
+ camimc= 2.231e-15 $ Units: farad/micrometer^2
+ cpmimc = 0.35e-15 $ Units: farad/micrometer
+ cvpp_cor = 1.136
diff --git a/models/r+c/res_low__cap_low__lin.spice b/models/r+c/res_low__cap_low__lin.spice
index 2cc43ab..fd186b4 100644
--- a/models/r+c/res_low__cap_low__lin.spice
+++ b/models/r+c/res_low__cap_low__lin.spice
@@ -2,6 +2,8 @@
* P+ Poly Preres Corner Parameters
.param
+ sky130_fd_pr__res_high_po__var_mult = -5.0
++ sky130_fd_pr__res_high_po__var = -0.125
++ sky130_fd_pr__res_xhigh_po__var_mult = -0.15
+ camimc= 1.778e-15 $ Units: farad/micrometer^2
+ cpmimc = 0.03e-15 $ Units: farad/micrometer
+ cvpp_cor = 0.862
diff --git a/models/r+c/res_typical__cap_typical__lin.spice b/models/r+c/res_typical__cap_typical__lin.spice
index 60acb93..d5880f0 100644
--- a/models/r+c/res_typical__cap_typical__lin.spice
+++ b/models/r+c/res_typical__cap_typical__lin.spice
@@ -2,6 +2,8 @@
* P+ Poly Preres Corner Parameters
.param
+ sky130_fd_pr__res_high_po__var_mult = 0.0
++ sky130_fd_pr__res_high_po__var = 0.0
++ sky130_fd_pr__res_xhigh_po__var_mult = 0.0
+ camimc= 2.00e-15 $ Units: farad/micrometer^2
+ cpmimc = 0.19e-15 $ Units: farad/micrometer
+ cvpp_cor = 1.00
diff --git a/models/sky130_fd_pr__model__linear.model.spice b/models/sky130_fd_pr__model__linear.model.spice
index c352622..9589fa4 100644
--- a/models/sky130_fd_pr__model__linear.model.spice
+++ b/models/sky130_fd_pr__model__linear.model.spice
@@ -20,7 +20,13 @@
* vary sky130_fd_pr__res_high_po__slope_spectre dist=gauss std=1.0
* vary sky130_fd_pr__res_high_po__con_slope_spectre dist=gauss std=1.0
* }
+* process {
+* vary sky130_fd_pr__res_xhigh_po__var_mult dist=gauss std=0.025
+* vary sky130_fd_pr__res_high_po__var dist=gauss std=0.025
+* }
* }
+.include "parasitics/sky130_fd_pr__model__parasitic__res_po.model.spice"
+.include "../cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po.model.spice"
.include "../cells/res_high_po/sky130_fd_pr__res_high_po.model.spice"
.include "../cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p35.model.spice"
.include "../cells/res_xhigh_po/sky130_fd_pr__res_xhigh_po_0p69.model.spice"
diff --git a/models/sky130_fd_pr__model__r+c.model.spice b/models/sky130_fd_pr__model__r+c.model.spice
index c042791..15a573e 100644
--- a/models/sky130_fd_pr__model__r+c.model.spice
+++ b/models/sky130_fd_pr__model__r+c.model.spice
@@ -149,3 +149,5 @@
.model mrcvia3 r tc1r = {tc1rvia3} tc2r = {tc2rvia3} res = {rcvia3} tref = 30.0
.model mrcvia4 r tc1r = {tc1rvia4} tc2r = {tc2rvia4} res = {rcvia4} tref = 30.0
.model mrcrdlcon r tc1r = {tc1rrdlcon} tc2r = {tc2rrdlcon} res = {rcrdlcon} tref = 25.0
+.include "../cells/res_generic_nd/sky130_fd_pr__res_generic_nd.model.spice"
+.include "../cells/res_generic_pd/sky130_fd_pr__res_generic_pd.model.spice"