Corrected the other problem with the PNP bipolar, which is that the model has a substrate pin defined, although the process requires that the collector of the PNP must be tied to the substrate, so the device cannot have an independent substrate.
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index 617b5ca..362e601 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -730,6 +730,11 @@ patch -p1 -f -d ${STAGING_PATH}/${SKY130A} \ < custom/patches/sky130_fd_pr_2.patch \ 2>&1 | tee -a ${SKY130A}_make.log || true + # Custom: Patch the models to remove the substrate pin from the PNP + # device, which has no independent substrate pin (collector=substrate) + 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: Add "spinit" file cat ./custom/models/spinit >> \ ${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/spinit
diff --git a/sky130/custom/patches/sky130_fd_pr_3.patch b/sky130/custom/patches/sky130_fd_pr_3.patch new file mode 100644 index 0000000..2ea440c --- /dev/null +++ b/sky130/custom/patches/sky130_fd_pr_3.patch
@@ -0,0 +1,37 @@ +diff -Naur sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W0p68L0p68.model.spice sky130A_patched/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W0p68L0p68.model.spice +--- sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W0p68L0p68.model.spice 2021-04-27 22:19:17.607243587 -0400 ++++ sky130A_patched/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W0p68L0p68.model.spice 2021-04-27 22:21:21.018900718 -0400 +@@ -21,12 +21,12 @@ + * vary sky130_fd_pr__pnp_05v5_W0p68L0p68__is_slope dist=gauss std=0.01662 + * } + * } +-.subckt sky130_fd_pr__pnp_05v5_W0p68L0p68 c b e s ++.subckt sky130_fd_pr__pnp_05v5_W0p68L0p68 c b e + + + .param mult = 1.0 + + sky130_fd_pr__pnp_05v5_W0p68L0p68__bf_mm = {(19.35*dkbfpp*MC_SWITCH*AGAUSS(0,0.05537,1)/sqrt(mult))} + + sky130_fd_pr__pnp_05v5_W0p68L0p68__is_mm = {(1.5075e-018*dkispp*MC_SWITCH*AGAUSS(0,0.01662,1)/sqrt(mult))} +-qsky130_fd_pr__pnp_05v5_W0p68L0p68 c b e s sky130_fd_pr__pnp_05v5_W0p68L0p68__model ++qsky130_fd_pr__pnp_05v5_W0p68L0p68 c b e c sky130_fd_pr__pnp_05v5_W0p68L0p68__model + .model sky130_fd_pr__pnp_05v5_W0p68L0p68__model pnp level = 1.0 + * General Parameters + + tref = 30.0 +diff -Naur sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice sky130A_patched/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice +--- sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice 2021-04-27 22:19:17.627243532 -0400 ++++ sky130A_patched/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice 2021-04-27 22:22:07.562771406 -0400 +@@ -27,13 +27,13 @@ + * vary sky130_fd_pr__pnp_05v5_W3p40L3p40__xti_slope dist=gauss std=0.06 + * } + * } +-.subckt sky130_fd_pr__pnp_05v5_W3p40L3p40 c b e s ++.subckt sky130_fd_pr__pnp_05v5_W3p40L3p40 c b e + + + .param mult = 1.0 + + sky130_fd_pr__pnp_05v5_W3p40L3p40__bf_mm = {(16.603*dkbfpp5x*sky130_fd_pr__pnp_05v5_W3p40L3p40__bf_slope*0.45/sqrt(mult))} + + sky130_fd_pr__pnp_05v5_W3p40L3p40__is_mm = {(7.1190e-018*1.00*dkispp5x*sky130_fd_pr__pnp_05v5_W3p40L3p40__is_slope*0.13/sqrt(mult))} + + sky130_fd_pr__pnp_05v5_W3p40L3p40__xti_mm = {(5*sky130_fd_pr__pnp_05v5_W3p40L3p40__xti_slope/sqrt(mult))} +-qsky130_fd_pr__pnp_05v5_W3p40L3p40 c b e s sky130_fd_pr__pnp_05v5_W3p40L3p40__model ++qsky130_fd_pr__pnp_05v5_W3p40L3p40 c b e c sky130_fd_pr__pnp_05v5_W3p40L3p40__model + .model sky130_fd_pr__pnp_05v5_W3p40L3p40__model pnp level = 1.0 + * General Parameters + + tref = 30 subs = 1.0