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"