blob: 057706d93e4f2944e644edae2de837afdfa2ebe3 [file] [log] [blame]
* Self-biased current source testbench
* Include SkyWater sky130 device models
.lib "/usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice" tt
.param mc_mm_switch=0
.include "../mag/sbcs1v8.spice"
* supply voltages
vdda vdda 0 1.8
vssa vssa 0 0.0
.subckt p1_2 d g s b
xd d g x b sky130_fd_pr__pfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=4
xs x g s b sky130_fd_pr__pfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=4
.ends
.subckt p1_4 d g s b
xd d g x b p1_2
xs x g s b p1_2
.ends
.subckt p1_8 d g s b
xd d g x b p1_4
xs x g s b p1_4
.ends
.subckt p1_16 d g s b
xd d g x b p1_8
xs x g s b p1_8
.ends
.subckt p1_32 d g s b
xd d g x b p1_16
xs x g s b p1_16
.ends
.subckt p1_64 d g s b
xd d g x b p1_32
xs x g s b p1_32
.ends
.subckt p2_2 d g s b
xl d g s b p1_2
xr d g s b p1_2
.ends
.subckt p4_2 d g s b
xl d g s b p2_2
xr d g s b p2_2
.ends
.subckt p8_2 d g s b
xl d g s b p4_2
xr d g s b p4_2
.ends
.subckt p2_4 d g s b
xl d g s b p1_4
xr d g s b p1_4
.ends
.subckt p4_4 d g s b
xl d g s b p2_4
xr d g s b p2_4
.ends
.subckt p2_8 d g s b
xl d g s b p1_8
xr d g s b p1_8
.ends
.subckt buffer in out vdda vssa
xpa n p out in p1_16
xpb p p out out p1_16
xna n n vssa vssa sky130_fd_pr__nfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=8
xnb p n vssa vssa sky130_fd_pr__nfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=8
is vdda out 100n
.ends
* DUT
x0 io vdda vssa x sbcs1v8
vo io y 0.0
xpa n x y y p1_16
xpb1 ref ref y y sky130_fd_pr__pfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=64
xna n n vssa vssa sky130_fd_pr__nfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=8
xnb ref n vssa vssa sky130_fd_pr__nfet_01v8_lvt ad=8e+11p pd=3.6e+06u as=6e+11p ps=2.2e+06u w=1e+06u l=2e+06u m=8
x1 ref ref0 vdda vssa buffer
.option gmin=1e-13
.control
dc vdda 10m 1.95 10m
plot x ref
plot i(vo)
plot abs(deriv(ref)/ref) ylog
dc temp -40 125 1
meas dc r27 find ref at=27
let refN = ref/r27
plot refN
.endc
.end