Adding ldo_v2
diff --git a/caravel b/caravel index c294344..42c9cab 160000 --- a/caravel +++ b/caravel
@@ -1 +1 @@ -Subproject commit c2943440e278814787f761585b99b9ea3c1f4121 +Subproject commit 42c9cab06c7fdd94b7eacc12a5c4ff4a60338e74
diff --git a/mag/extracted.spi b/mag/extracted.spi new file mode 100644 index 0000000..7e4c850 --- /dev/null +++ b/mag/extracted.spi
@@ -0,0 +1,7 @@ +* NGSPICE file created from ldo_flattened_f.ext - technology: sky130A + + +* Top level circuit ldo_flattened_f + +.end +
diff --git a/mag/ldo_flattened_f.ext b/mag/ldo_flattened_f.ext new file mode 100644 index 0000000..71cf72c --- /dev/null +++ b/mag/ldo_flattened_f.ext
@@ -0,0 +1,7 @@ +timestamp 0 +version 8.3 +tech sky130A +style ngspice() +scale 1000 1 500000 +resistclasses 4400000 2200000 1700000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12200 125 125 47 47 29 5 +substrate "VSUBS" 0 0 -1073741817 -1073741817 space 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/mag/run_magic_lvs.tcl b/mag/run_magic_lvs.tcl new file mode 100644 index 0000000..ecf47e6 --- /dev/null +++ b/mag/run_magic_lvs.tcl
@@ -0,0 +1,17 @@ +# run_magic_drc.tcl --- +# batch script for running DRC + +crashbackups stop +drc euclidean on +drc style drc(full) +drc on +snap internal +gds flatglob *__example_* +gds flatten true +gds read /home/mustafa/mabrains/caravel_user_project_ldo/gds/ldo_v1/ldo_flattened_f.gds +load ldo_flattened_f +select top cell +expand +extract all +ext2spice lvs +ext2spice -M -o extracted.spi
diff --git a/xschem/bgr2.spice b/xschem/bgr2.spice new file mode 100644 index 0000000..e1ed9c7 --- /dev/null +++ b/xschem/bgr2.spice
@@ -0,0 +1,73 @@ +**.subckt bgr2 avdd agnd bg_out enable iref +*.ipin avdd +*.ipin agnd +*.opin bg_out +*.ipin enable +*.ipin iref +XM1 inn mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM2 inp mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM3 bg_out mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XQ1 agnd agnd net2 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ5 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ6 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ7 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ9 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ11 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ13 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ15 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ17 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XM7 net4 net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM12 net4 inp net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM21 mir inn net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM23 mir net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM15 net3 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM25 net5 mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM16 net5 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC1 mir agnd sky130_fd_pr__cap_mim_m3_1 W=16 L=16 MF=1 m=1 +XR1 net6 inp agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR2 net2 inn agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR3 net8 net2 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR10 net1 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=6 m=6 +XR4 agnd net7 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR11 agnd net8 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR6 net7 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR5 net9 bg_out agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR14 agnd net9 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=53 m=53 +XM19 mir enable avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM4 net10 bg_out avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM5 net10 bg_out agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=8 m=8 +XM6 avdd net10 inn agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM26 iref mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +**.ends +** flattened .save nodes +.end
diff --git a/xschem/erroramp2.spice b/xschem/erroramp2.spice new file mode 100644 index 0000000..d2391f0 --- /dev/null +++ b/xschem/erroramp2.spice
@@ -0,0 +1,36 @@ +**.subckt erroramp2 vb avdd agnd out neg pos +*.iopin vb +*.ipin avdd +*.ipin agnd +*.opin out +*.ipin neg +*.ipin pos +XM8 net2 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM9 net2 neg net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM10 net1 pos net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM11 net1 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM13 net3 vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM14 out net1 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=12 m=12 +XM18 out vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XM20 vb vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC3 net1 net4 sky130_fd_pr__cap_mim_m3_1 W=60 L=60 MF=1 m=1 +XR7 out net4 agnd sky130_fd_pr__res_xhigh_po_0p69 L=4.5 mult=1 m=1 +**.ends +** flattened .save nodes +.end
diff --git a/xschem/ldo_v2.spice b/xschem/ldo_v2.spice new file mode 100644 index 0000000..77ca453 --- /dev/null +++ b/xschem/ldo_v2.spice
@@ -0,0 +1,288 @@ +**.subckt ldo_v2 +XM8 net2 net2 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM9 net2 bg_out net3 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM10 net1 pos net3 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM11 net1 net2 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM13 net3 vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM14 out net1 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XM18 out vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XM20 vb vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM24 ldo_out net5 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=800 m=800 +XM26 vb mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC3 net1 net4 sky130_fd_pr__cap_mim_m3_1 W=60 L=60 MF=1 m=1 +XR7 out net4 GND sky130_fd_pr__res_xhigh_po_0p69 L=4.5 mult=1 m=1 +Vs VDD GND 2.3 +Vt net6 GND 0 +C2 net5 net6 5G m=1 +L1 out net5 5G m=1 +XR8 net7 ldo_out GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=8 m=8 +XR9 pos net7 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=3 m=3 +XR12 net8 pos GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=2 m=2 +XR13 GND net8 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=4 m=4 +XM1 inn mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM2 inp mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM3 bg_out mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XQ1 GND GND net10 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ5 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ6 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ7 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ9 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ11 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ13 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ15 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ17 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XM7 net12 net12 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM12 net12 inp net11 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM21 mir inn net11 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM23 mir net12 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM15 net11 net13 GND GND sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM25 net13 mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM16 net13 net13 GND GND sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC1 mir GND sky130_fd_pr__cap_mim_m3_1 W=16 L=16 MF=1 m=1 +XR1 net14 inp GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR2 net10 inn GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR3 net16 net10 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR10 net9 net14 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=6 m=6 +XR4 GND net15 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR11 GND net16 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR6 net15 net14 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR5 net17 bg_out GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR14 GND net17 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=53 m=53 +XM19 mir en VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=2 m=2 +Ven en GND 2.3 +XM4 net18 bg_out VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM5 net18 bg_out GND GND sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=8 m=8 +XM6 VDD net18 inn GND sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +**** begin user architecture code + + +.param R=18k +R10 ldo_out GND {R} +IL ldo_out 0 PWL(0 0.1m 10u 0.1m 20u 10m 30u 10m) +*CL ldo_out gnd 10p +.lib /home/mustafa/mabrains/pdks/share/pdk/sky130A/libs.tech/ngspice/sky130.lib_mod.spice tt + + + + +.nodeset v(inn)=1.2 +.nodeset v(inp)=1.2 +.nodeset v(mir)=1 +.nodeset v(net13)=1 +.nodeset v(bg_out)=1.1 +.nodeset v(ldo_out)=1.8 +.nodeset v(pos)=1.1 +*.nodeset v(net3)=0.8 +*.nodeset v(net1)=0.7 +.nodeset v(net14)=0.9 +*.nodeset v(net7)=0.75 +.nodeset v(vb)=0.9 + +.option temp=27 +*User_defined_functions +.control +define max(vector_name) (vecmax(vector_name)) +define min(vector_name) (vecmin(vector_name)) +.endc + + +*Temp_sweep +.control +alter IL 0 +dc temp 85 0 -1 +let temp_coeff=1000000*(max(ldo_out)-min(ldo_out))/85 +print temp_coeff +plot v(ldo_out) +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + +.control +alter IL 0 +*alter R10 1G +op +let iq =i(Vs) +print iq +*print all +set wr_singlescale +set wr_vecnames +set appendwrite +if v(ldo_out)>1 +wrdata op_point_test v(ldo_out) +end +.endc + + + +*Stability_Analysis +.control +alter IL 0 +alter Vs AC =0 +alter Vt AC=1 +ac dec 10 1 1G +plot vdb(out) +plot (180/pi)*vp(out) +let ph= (180/pi)*vp(out) +meas ac pm FIND ph WHEN vdb(out)=0 +.endc + + +*PSRR_Analysis +.control +alter IL 0 +alter Vs AC =1 +alter Vt AC=0 +alter L1 0 +alter C2 0 +ac dec 10 1 1G +meas AC PSRR100 FIND vdb(ldo_out) AT=100 +meas AC PSRR100k FIND vdb(ldo_out) AT=100k +plot vdb(ldo_out) +.endc + + + + +*supply_sweep +.control +alter IL 0 +dc Vs 2.8 0 -0.01 +plot vdd ldo_out +meas DC Vldo_Sup_2 FIND ldo_out AT=2 +meas DC Vldo_nom FIND ldo_out AT=2.3 +meas DC Vldo_Sup_2_8 FIND ldo_out AT=2.8 +let line_reg = abs((Vldo_Sup_2_8-Vldo_Sup_2)/0.8) +print line_reg +meas DC vin WHEN v(ldo_out)=1.764 +let dropout=vin-1.764 +print dropout +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + + + + +*Load_Reg_switches +*V1 c1 0 DC 0 PWL(0 5 20u 5 35u 0 50u 0 100u 0) +*V2 c2 0 DC 0 PWL(0 0 20u 0 35u 0 50u 5 100u 5) +*s1 ldo_out 2 c1 0 switch1 ON +*s2 ldo_out 3 c2 0 switch1 OFF +*.model switch1 sw vt=0.1 ron =0.1 roff =1G +*R1 2 0 18k +*R2 3 0 180 + +*.control +*alter R10 1G +*tran 0.1u 90u +*plot v(ldo_out) v(c1) v(c2) +*meas TRAN V_ldo_100u FIND v(ldo_out) AT=10u +*meas TRAN V_ldo_10m FIND v(ldo_out) AT=50u +*let load_reg= V_ldo_100u-V_ldo_10m +*print load_reg +*.endc + + +**Load_Transient +.control +alter IL 50u +alter R10 3600k +tran 0.1u 100u +meas TRAN V_ldo_100u FIND v(ldo_out) AT=5u +meas TRAN V_ldo_10m FIND v(ldo_out) AT=100u +let load_reg= V_ldo_100u-V_ldo_10m +let load_current =(-1*i(Vs)-131.8e-6) +print load_reg +plot load_current v(ldo_out)-1.8 +.endc + + +**Transient +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 1 3 10u 10u 1u 100u 200u ] +alter IL 0 +tran 0.1u 100u +plot vdd ldo_out +.endc + +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +plot vdd ldo_out +.endc + +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Ven[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +*meas TRAN st_up_time when v(ldo_out)>1.782 +plot en ldo_out +.endc + + + + + +**** end user architecture code +**.ends +.GLOBAL GND +.GLOBAL VDD +** flattened .save nodes +.end
diff --git a/xschem/ldo_v2/Error_Amp.sch b/xschem/ldo_v2/Error_Amp.sch new file mode 100644 index 0000000..7fc7f12 --- /dev/null +++ b/xschem/ldo_v2/Error_Amp.sch
@@ -0,0 +1,205 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 1050 -1430 1050 -1410 { lab=avdd} +N 1050 -1430 1300 -1430 { lab=avdd} +N 1300 -1430 1300 -1410 { lab=avdd} +N 1300 -1350 1300 -1310 { lab=#net1} +N 1090 -1380 1260 -1380 { lab=#net2} +N 1050 -1350 1050 -1310 { lab=#net2} +N 1050 -1250 1050 -1190 { lab=#net3} +N 1050 -1190 1300 -1190 { lab=#net3} +N 1300 -1250 1300 -1190 { lab=#net3} +N 1140 -1190 1140 -1170 { lab=#net3} +N 1050 -1280 1300 -1280 { lab=agnd} +N 1230 -1280 1230 -1100 { lab=agnd} +N 1140 -1100 1230 -1100 { lab=agnd} +N 1300 -1380 1400 -1380 { lab=avdd} +N 1400 -1430 1400 -1380 { lab=avdd} +N 1290 -1430 1400 -1430 { lab=avdd} +N 950 -1380 1050 -1380 { lab=avdd} +N 950 -1430 950 -1380 { lab=avdd} +N 950 -1430 1050 -1430 { lab=avdd} +N 1140 -1140 1230 -1140 { lab=agnd} +N 1520 -1400 1560 -1400 { lab=#net1} +N 1390 -1430 1520 -1430 { lab=avdd} +N 1600 -1400 1700 -1400 { lab=avdd} +N 1600 -1430 1700 -1430 { lab=avdd} +N 1700 -1430 1700 -1400 { lab=avdd} +N 1600 -1370 1600 -1330 { lab=out} +N 1230 -1100 1520 -1100 { lab=agnd} +N 1600 -1100 1690 -1100 { lab=agnd} +N 1520 -1260 1560 -1260 { lab=vb} +N 1070 -1140 1100 -1140 { lab=vb} +N 1160 -1380 1160 -1330 { lab=#net2} +N 1050 -1330 1160 -1330 { lab=#net2} +N 1520 -1330 1530 -1330 { lab=#net4} +N 1590 -1330 1600 -1330 { lab=out} +N 1600 -1330 1600 -1290 { lab=out} +N 1600 -1260 1700 -1260 { lab=agnd} +N 1700 -1260 1700 -1100 { lab=agnd} +N 1690 -1100 1700 -1100 { lab=agnd} +N 1600 -1230 1600 -1100 { lab=agnd} +N 990 -1280 1010 -1280 { lab=neg} +N 1340 -1280 1370 -1280 { lab=pos} +N 1520 -1400 1520 -1360 { lab=#net1} +N 1300 -1330 1360 -1330 { lab=#net1} +N 1330 -1360 1440 -1360 { lab=#net1} +N 1330 -1360 1330 -1330 { lab=#net1} +N 1600 -1330 1660 -1330 { lab=out} +N 1660 -1330 1670 -1330 { lab=out} +N 1670 -1330 1680 -1330 { lab=out} +N 1540 -1310 1560 -1310 { lab=agnd} +N 1480 -1310 1480 -1100 { lab=agnd} +N 720 -1220 760 -1220 { lab=vb} +N 720 -1270 720 -1220 { lab=vb} +N 720 -1270 800 -1270 { lab=vb} +N 800 -1190 800 -1170 { lab=agnd} +N 800 -1220 880 -1220 { lab=agnd} +N 880 -1220 880 -1180 { lab=agnd} +N 800 -1180 880 -1180 { lab=agnd} +N 690 -1220 720 -1220 { lab=vb} +N 800 -1270 800 -1250 { lab=vb} +N 800 -1320 800 -1270 { lab=vb} +N 1140 -1110 1140 -1100 { lab=agnd} +N 800 -1170 800 -1100 { lab=agnd} +N 800 -1100 1140 -1100 { lab=agnd} +N 1440 -1360 1520 -1360 { lab=#net1} +N 1520 -1430 1600 -1430 { lab=avdd} +N 1520 -1100 1540 -1100 { lab=agnd} +N 1540 -1100 1600 -1100 { lab=agnd} +N 1480 -1310 1540 -1310 { lab=agnd} +N 1360 -1330 1420 -1330 { lab=#net1} +N 1480 -1330 1520 -1330 { lab=#net4} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1070 -1380 0 1 {name=M8 +L=1.2 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 1030 -1280 0 0 {name=M9 +L=1 +W=2 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 1320 -1280 0 1 {name=M10 +L=1 +W=2 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1280 -1380 0 0 {name=M11 +L=1.2 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 1120 -1140 0 0 {name=M13 +L=1 +W=1 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1580 -1400 0 0 {name=M14 +L=1.2 +W=3 +nf=1 +mult=12 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 1580 -1260 0 0 {name=M18 +L=1 +W=1 +nf=1 +mult=12 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 1070 -1140 0 0 {name=l15 sig_type=std_logic lab=vb} +C {devices/lab_pin.sym} 1520 -1260 0 0 {name=l16 sig_type=std_logic lab=vb} +C {devices/lab_pin.sym} 1660 -1330 1 0 {name=l30 sig_type=std_logic lab=out} +C {sky130_fd_pr/cap_mim_m3_1.sym} 1450 -1330 3 1 {name=C3 model=cap_mim_m3_1 W=50 L=50 MF=1 spiceprefix=X} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1560 -1330 3 0 {name=R7 +W=0.69 +L=4.5 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=1} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 780 -1220 0 0 {name=M20 +L=1 +W=1 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 690 -1220 0 0 {name=l14 sig_type=std_logic lab=vb} +C {devices/opin.sym} 1670 -1330 0 0 {name=p1 lab=out} +C {devices/iopin.sym} 1140 -1430 0 0 {name=p2 lab=avdd} +C {devices/iopin.sym} 1160 -1100 0 0 {name=p3 lab=agnd} +C {devices/iopin.sym} 800 -1300 3 0 {name=p4 lab=vb} +C {devices/ipin.sym} 1000 -1280 0 0 {name=p5 lab=neg} +C {devices/ipin.sym} 1350 -1280 0 1 {name=p6 lab=pos}
diff --git a/xschem/ldo_v2/Error_Amp.spice b/xschem/ldo_v2/Error_Amp.spice new file mode 100644 index 0000000..93dc9a6 --- /dev/null +++ b/xschem/ldo_v2/Error_Amp.spice
@@ -0,0 +1,4 @@ +**.subckt Error_Amp +**.ends +** flattened .save nodes +.end
diff --git a/xschem/ldo_v2/Error_Amp.sym b/xschem/ldo_v2/Error_Amp.sym new file mode 100644 index 0000000..44c9d77 --- /dev/null +++ b/xschem/ldo_v2/Error_Amp.sym
@@ -0,0 +1,30 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=y1"} +V {} +S {} +E {} +L 4 810 -1510 810 -1250 {} +L 4 810 -1250 1040 -1380 {} +L 4 810 -1510 1040 -1380 {} +L 4 760 -1470 810 -1470 {} +L 4 760 -1380 810 -1380 {} +L 4 760 -1290 810 -1290 {} +L 4 1040 -1380 1060 -1380 {} +L 4 900 -1300 900 -1220 {} +L 4 900 -1520 900 -1460 {} +B 5 757.5 -1472.5 762.5 -1467.5 {name=neg +dir=inout} +B 5 757.5 -1292.5 762.5 -1287.5 {name=pos +dir=inout} +B 5 757.5 -1382.5 762.5 -1377.5 {name=vb +dir=inout} +B 5 1057.5 -1382.5 1062.5 -1377.5 {name=out +dir=inout} +B 5 897.5 -1522.5 902.5 -1517.5 {name=avdd +dir=inout} +B 5 897.5 -1222.5 902.5 -1217.5 {name=agnd +dir=inout} +T {@name} 880 -1390 0 0 0.2 0.2 {}
diff --git a/xschem/ldo_v2/bgr2.sch b/xschem/ldo_v2/bgr2.sch new file mode 100644 index 0000000..a174e7e --- /dev/null +++ b/xschem/ldo_v2/bgr2.sch
@@ -0,0 +1,536 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 1650 -990 1650 -940 { lab=agnd} +N 1500 -1080 1500 -1040 { lab=#net1} +N 1610 -1020 1610 -970 { lab=agnd} +N 1610 -970 1650 -970 { lab=agnd} +N 1460 -1010 1460 -960 { lab=agnd} +N 1460 -960 1500 -960 { lab=agnd} +N 1540 -1280 1610 -1280 { lab=mir} +N 1500 -1370 1500 -1310 { lab=avdd} +N 1500 -1370 1650 -1370 { lab=avdd} +N 1650 -1370 1650 -1310 { lab=avdd} +N 1640 -1370 1890 -1370 { lab=avdd} +N 1500 -980 1500 -970 { lab=agnd} +N 1500 -970 1500 -960 { lab=agnd} +N 1500 -940 1650 -940 { lab=agnd} +N 1500 -960 1500 -940 { lab=agnd} +N 1650 -1280 1690 -1280 { lab=avdd} +N 1690 -1370 1690 -1280 { lab=avdd} +N 1390 -1280 1500 -1280 { lab=avdd} +N 1390 -1370 1610 -1370 { lab=avdd} +N 640 -1370 640 -1310 { lab=avdd} +N 530 -1280 640 -1280 { lab=avdd} +N 530 -1370 530 -1280 { lab=avdd} +N 530 -1370 640 -1370 { lab=avdd} +N 640 -1370 730 -1370 { lab=avdd} +N 570 -1140 640 -1140 { lab=bg_out} +N 1430 -1240 1460 -1240 { lab=inp} +N 1650 -1240 1690 -1240 { lab=inn} +N 1330 -1000 1330 -960 { lab=agnd} +N 1270 -1030 1290 -1030 { lab=agnd} +N 1270 -1030 1270 -990 { lab=agnd} +N 1330 -1080 1330 -1060 { lab=#net1} +N 1250 -1000 1250 -960 { lab=agnd} +N 1190 -1030 1210 -1030 { lab=agnd} +N 1190 -1030 1190 -990 { lab=agnd} +N 1250 -1080 1250 -1060 { lab=#net1} +N 1160 -1000 1160 -960 { lab=agnd} +N 1100 -1030 1120 -1030 { lab=agnd} +N 1100 -1030 1100 -990 { lab=agnd} +N 1160 -1080 1160 -1060 { lab=#net1} +N 1050 -1000 1050 -960 { lab=agnd} +N 990 -1030 1010 -1030 { lab=agnd} +N 990 -1030 990 -990 { lab=agnd} +N 1050 -1080 1050 -1060 { lab=#net1} +N 960 -1000 960 -960 { lab=agnd} +N 900 -1030 920 -1030 { lab=agnd} +N 900 -1030 900 -990 { lab=agnd} +N 960 -1080 960 -1060 { lab=#net1} +N 850 -1000 850 -960 { lab=agnd} +N 790 -1030 810 -1030 { lab=agnd} +N 790 -1030 790 -990 { lab=agnd} +N 850 -1080 850 -1060 { lab=#net1} +N 750 -1000 750 -960 { lab=agnd} +N 690 -1030 710 -1030 { lab=agnd} +N 690 -1030 690 -990 { lab=agnd} +N 750 -1080 750 -1060 { lab=#net1} +N 1370 -940 1500 -940 { lab=agnd} +N 750 -1080 850 -1080 { lab=#net1} +N 840 -1080 960 -1080 { lab=#net1} +N 960 -1080 1050 -1080 { lab=#net1} +N 1050 -1080 1160 -1080 { lab=#net1} +N 1160 -1080 1250 -1080 { lab=#net1} +N 1240 -1080 1330 -1080 { lab=#net1} +N 680 -1370 1390 -1370 { lab=avdd} +N 1390 -1370 1390 -1280 { lab=avdd} +N 690 -990 690 -960 { lab=agnd} +N 690 -960 750 -960 { lab=agnd} +N 750 -960 850 -960 { lab=agnd} +N 850 -960 970 -960 { lab=agnd} +N 970 -960 1050 -960 { lab=agnd} +N 1050 -960 1160 -960 { lab=agnd} +N 1160 -960 1270 -960 { lab=agnd} +N 1270 -960 1330 -960 { lab=agnd} +N 620 -940 1370 -940 { lab=agnd} +N 790 -990 790 -960 { lab=agnd} +N 1100 -990 1100 -960 { lab=agnd} +N 1190 -990 1190 -960 { lab=agnd} +N 1270 -990 1270 -960 { lab=agnd} +N 900 -990 900 -960 { lab=agnd} +N 990 -990 990 -960 { lab=agnd} +N 610 -940 620 -940 { lab=agnd} +N 640 -960 640 -940 { lab=agnd} +N 680 -1280 710 -1280 { lab=mir} +N 1650 -1250 1650 -1240 { lab=inn} +N 2040 -1190 2250 -1190 { lab=agnd} +N 2250 -1240 2250 -1220 { lab=mir} +N 2250 -1370 2250 -1300 { lab=avdd} +N 1970 -1370 2250 -1370 { lab=avdd} +N 2040 -1370 2040 -1300 { lab=avdd} +N 2200 -1030 2200 -940 { lab=agnd} +N 2110 -1190 2110 -940 { lab=agnd} +N 1940 -1270 2040 -1270 { lab=avdd} +N 1940 -1370 1940 -1270 { lab=avdd} +N 2250 -1270 2360 -1270 { lab=avdd} +N 2360 -1370 2360 -1270 { lab=avdd} +N 2240 -1370 2360 -1370 { lab=avdd} +N 2200 -1060 2280 -1060 { lab=agnd} +N 2280 -1060 2280 -940 { lab=agnd} +N 1650 -940 2020 -940 { lab=agnd} +N 2110 -940 2200 -940 { lab=agnd} +N 2200 -940 2280 -940 { lab=agnd} +N 1980 -1190 2000 -1190 { lab=inp} +N 2290 -1190 2320 -1190 { lab=inn} +N 1890 -1370 1940 -1370 { lab=avdd} +N 1940 -1370 1970 -1370 { lab=avdd} +N 2020 -940 2110 -940 { lab=agnd} +N 1840 -1370 1840 -1230 { lab=avdd} +N 1840 -1200 1900 -1200 { lab=avdd} +N 1900 -1370 1900 -1200 { lab=avdd} +N 1770 -1200 1800 -1200 { lab=mir} +N 1840 -1050 1840 -940 { lab=agnd} +N 1790 -1080 1790 -940 { lab=agnd} +N 2250 -1230 2330 -1230 { lab=mir} +N 1650 -1060 1650 -1050 { lab=#net2} +N 2040 -1160 2040 -1120 { lab=#net3} +N 2040 -1240 2040 -1220 { lab=#net4} +N 2080 -1270 2210 -1270 { lab=#net4} +N 2150 -1270 2150 -1230 { lab=#net4} +N 2040 -1230 2150 -1230 { lab=#net4} +N 2250 -1160 2250 -1120 { lab=#net3} +N 2040 -1120 2250 -1120 { lab=#net3} +N 2200 -1120 2200 -1090 { lab=#net3} +N 1840 -1170 1840 -1110 { lab=#net5} +N 1880 -1080 1930 -1080 { lab=#net5} +N 1930 -1120 1930 -1080 { lab=#net5} +N 1840 -1120 1930 -1120 { lab=#net5} +N 1930 -1060 2160 -1060 { lab=#net5} +N 1930 -1080 1930 -1060 { lab=#net5} +N 1790 -1080 1840 -1080 { lab=agnd} +N 1300 -960 1300 -940 { lab=agnd} +N 1330 -1080 1500 -1080 { lab=#net1} +N 1650 -1150 1650 -1060 { lab=#net2} +N 1500 -1090 1500 -1070 { lab=#net1} +N 1500 -1250 1500 -1240 { lab=inp} +N 1650 -1160 1650 -1150 { lab=#net2} +N 1460 -1240 1480 -1240 { lab=inp} +N 1480 -1240 1500 -1240 { lab=inp} +N 2400 -1230 2410 -1230 { lab=mir} +N 2330 -1230 2400 -1230 { lab=mir} +N 2410 -1230 2430 -1230 { lab=mir} +N 390 -1370 420 -1370 { lab=avdd} +N 420 -940 440 -940 { lab=agnd} +N 320 -940 420 -940 { lab=agnd} +N 230 -940 320 -940 { lab=agnd} +N 640 -1150 640 -1120 { lab=bg_out} +N 640 -1250 640 -1210 { lab=bg_out} +N 640 -1210 640 -1150 { lab=bg_out} +N 1500 -1170 1500 -1150 { lab=#net6} +N 1500 -1240 1500 -1230 { lab=inp} +N 1400 -1160 1500 -1160 { lab=#net6} +N 1400 -1000 1400 -940 { lab=agnd} +N 640 -1120 640 -1090 { lab=bg_out} +N 620 -1060 620 -940 { lab=agnd} +N 1720 -1110 1720 -940 { lab=agnd} +N 1380 -1030 1380 -940 { lab=agnd} +N 1430 -1120 1480 -1120 { lab=agnd} +N 1430 -1120 1430 -940 { lab=agnd} +N 1590 -1190 1590 -940 { lab=agnd} +N 1370 -1200 1480 -1200 { lab=agnd} +N 1370 -1200 1370 -940 { lab=agnd} +N 420 -1370 530 -1370 { lab=avdd} +N 440 -940 610 -940 { lab=agnd} +N 1400 -1160 1400 -1150 { lab=#net6} +N 1400 -1090 1400 -1060 { lab=#net7} +N 1650 -1170 1650 -1160 { lab=#net2} +N 1590 -1200 1630 -1200 { lab=agnd} +N 1590 -1200 1590 -1190 { lab=agnd} +N 1700 -1000 1700 -940 { lab=agnd} +N 1700 -1080 1700 -1060 { lab=#net8} +N 1650 -1140 1700 -1140 { lab=#net2} +N 1650 -1240 1650 -1230 { lab=inn} +N 1370 -1120 1380 -1120 { lab=agnd} +N 640 -1030 640 -1020 { lab=#net9} +N 1560 -1300 1560 -1280 { lab=mir} +N 1540 -1330 1560 -1330 { lab=avdd} +N 1540 -1370 1540 -1330 { lab=avdd} +N 1560 -1370 1560 -1360 { lab=avdd} +N 1600 -1330 1620 -1330 { lab=enable} +N 210 -1370 210 -1270 { lab=avdd} +N 210 -1370 390 -1370 { lab=avdd} +N 220 -1240 310 -1240 { lab=avdd} +N 310 -1370 310 -1240 { lab=avdd} +N 210 -1240 220 -1240 { lab=avdd} +N 210 -1210 210 -1090 { lab=#net10} +N 210 -1030 210 -940 { lab=agnd} +N 210 -940 230 -940 { lab=agnd} +N 210 -1060 270 -1060 { lab=agnd} +N 270 -1060 270 -940 { lab=agnd} +N 130 -1240 170 -1240 { lab=bg_out} +N 130 -1240 130 -1060 { lab=bg_out} +N 130 -1060 170 -1060 { lab=bg_out} +N 210 -1140 280 -1140 { lab=#net10} +N 320 -1140 390 -1140 { lab=agnd} +N 390 -1140 390 -940 { lab=agnd} +N 320 -1180 320 -1170 { lab=avdd} +N 320 -1180 350 -1180 { lab=avdd} +N 350 -1370 350 -1180 { lab=avdd} +N 320 -1110 320 -1070 { lab=inn} +N 320 -1070 350 -1070 { lab=inn} +N 2420 -1230 2420 -1160 { lab=mir} +N 2420 -1100 2420 -940 { lab=agnd} +N 2280 -940 2420 -940 { lab=agnd} +N 2580 -1170 2610 -1170 { lab=bg_out} +N 2560 -1170 2580 -1170 { lab=bg_out} +N 2810 -1320 2810 -1300 { lab=avdd} +N 2810 -1270 2840 -1270 { lab=avdd} +N 2840 -1310 2840 -1270 { lab=avdd} +N 2810 -1310 2840 -1310 { lab=avdd} +N 2730 -1270 2770 -1270 { lab=mir} +N 2360 -1370 2810 -1370 { lab=avdd} +N 2810 -1370 2810 -1320 { lab=avdd} +N 2810 -1240 2810 -1180 { lab=iref} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1630 -1280 0 0 {name=M1 +L=2 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1520 -1280 0 1 {name=M2 +L=2 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 660 -1280 0 1 {name=M3 +L=2 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 570 -1140 0 0 {name=l1 sig_type=std_logic lab=bg_out} +C {sky130_fd_pr/pnp_05v5.sym} 1630 -1020 0 0 {name=Q1 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 1480 -1010 0 0 {name=Q5 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 1310 -1030 0 0 {name=Q6 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 1230 -1030 0 0 {name=Q7 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 1140 -1030 0 0 {name=Q9 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 1030 -1030 0 0 {name=Q11 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 940 -1030 0 0 {name=Q13 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 830 -1030 0 0 {name=Q15 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pnp_05v5.sym} 730 -1030 0 0 {name=Q17 +model=pnp_05v5_W0p68L0p68 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2060 -1270 0 1 {name=M7 +L=2 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 2020 -1190 0 0 {name=M12 +L=1 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 2270 -1190 0 1 {name=M21 +L=1 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2230 -1270 0 0 {name=M23 +L=2 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 2180 -1060 0 0 {name=M15 +L=2 +W=5 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1820 -1200 0 0 {name=M25 +L=2 +W=3 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 1860 -1080 0 1 {name=M16 +L=2 +W=5 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 710 -1280 0 1 {name=l7 sig_type=std_logic lab=mir} +C {devices/lab_pin.sym} 1570 -1280 3 0 {name=l8 sig_type=std_logic lab=mir} +C {devices/lab_pin.sym} 1770 -1200 0 0 {name=l11 sig_type=std_logic lab=mir} +C {devices/lab_pin.sym} 2320 -1190 0 1 {name=l13 sig_type=std_logic lab=inn} +C {devices/lab_pin.sym} 1980 -1190 0 0 {name=l18 sig_type=std_logic lab=inp} +C {devices/lab_pin.sym} 1430 -1240 0 0 {name=l19 sig_type=std_logic lab=inp} +C {devices/lab_pin.sym} 1690 -1240 0 1 {name=l20 sig_type=std_logic lab=inn} +C {sky130_fd_pr/cap_mim_m3_1.sym} 2420 -1130 0 0 {name=C1 model=cap_mim_m3_1 W=16 L=16 MF=1 spiceprefix=X} +C {devices/lab_pin.sym} 2380 -1230 1 0 {name=l21 sig_type=std_logic lab=mir} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1500 -1200 0 0 {name=R1 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=3} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1650 -1200 0 0 {name=R2 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=3} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1700 -1110 0 1 {name=R3 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1500 -1120 0 0 {name=R10 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=6} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1400 -1030 0 0 {name=R4 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=15} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1700 -1030 0 1 {name=R11 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=15} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 1400 -1120 0 0 {name=R6 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 640 -1060 0 0 {name=R5 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 640 -990 0 0 {name=R14 +W=0.69 +L=27 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=53} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 1580 -1330 0 1 {name=M19 +L=0.5 +W=0.42 +nf=1 +mult=2 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 190 -1240 0 0 {name=M4 +L=5 +W=0.42 +nf=1 +mult=2 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 190 -1060 0 0 {name=M5 +L=0.5 +W=10 +nf=1 +mult=8 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 300 -1140 0 0 {name=M6 +L=0.5 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 130 -1140 0 0 {name=l4 sig_type=std_logic lab=bg_out} +C {devices/lab_pin.sym} 350 -1070 0 1 {name=l22 sig_type=std_logic lab=inn} +C {devices/ipin.sym} 1080 -1370 0 0 {name=p1 lab=avdd} +C {devices/ipin.sym} 1110 -940 0 0 {name=p2 lab=agnd} +C {devices/opin.sym} 2610 -1170 0 0 {name=p3 lab=bg_out} +C {devices/lab_pin.sym} 2560 -1170 0 0 {name=l2 sig_type=std_logic lab=bg_out} +C {devices/ipin.sym} 1610 -1330 2 0 {name=p4 lab=enable} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2790 -1270 0 0 {name=M26 +L=2 +W=3 +nf=1 +mult=4 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 2730 -1270 2 1 {name=l32 sig_type=std_logic lab=mir} +C {devices/ipin.sym} 2810 -1180 1 0 {name=p6 lab=iref}
diff --git a/xschem/ldo_v2/bgr2.sym b/xschem/ldo_v2/bgr2.sym new file mode 100644 index 0000000..a08f951 --- /dev/null +++ b/xschem/ldo_v2/bgr2.sym
@@ -0,0 +1,28 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=xb2"} +V {} +S {} +E {} +L 4 1310 -1690 1310 -1610 {} +L 4 1310 -1610 1420 -1610 {} +L 4 1420 -1690 1420 -1610 {} +L 4 1310 -1690 1420 -1690 {} +L 4 1290 -1650 1310 -1650 {} +L 4 1360 -1720 1360 -1690 {} +L 4 1420 -1680 1440 -1680 {} +L 4 1420 -1620 1440 -1620 {} +L 4 1360 -1610 1360 -1570 {} +B 5 1437.5 -1682.5 1442.5 -1677.5 {name=bg_out +dir=inout} +B 5 1437.5 -1622.5 1442.5 -1617.5 {name=iref +dir=inout} +B 5 1357.5 -1572.5 1362.5 -1567.5 {name=agnd +dir=inout} +B 5 1357.5 -1722.5 1362.5 -1717.5 {name=avdd +dir=inout} +B 5 1287.5 -1652.5 1292.5 -1647.5 {name=enable +dir=inout} +T {@name} 1340 -1660 0 0 0.2 0.2 {}
diff --git a/xschem/ldo_v2/ldo_v2.sch b/xschem/ldo_v2/ldo_v2.sch index 6640fc0..85874ad 100644 --- a/xschem/ldo_v2/ldo_v2.sch +++ b/xschem/ldo_v2/ldo_v2.sch
@@ -263,8 +263,6 @@ N 1610 -1250 1610 -990 { lab=GND} N 660 -1420 770 -1420 { lab=VDD} N 680 -990 850 -990 { lab=GND} -N 2670 -1420 2670 -1360 { lab=VDD} -N 2600 -1420 2670 -1420 { lab=VDD} N 1640 -1210 1640 -1200 { lab=#net14} N 1640 -1140 1640 -1110 { lab=#net15} N 1890 -1220 1890 -1210 { lab=#net10} @@ -732,7 +730,7 @@ .control alter R10 36k alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] -alter @Vs[pulse] = [ 1.8 3 10u 10u 1u 100u 200u ] +alter @Vs[pulse] = [ 1 3 10u 10u 1u 100u 200u ] alter IL 0 tran 0.1u 100u plot vdd ldo_out
diff --git a/xschem/ldo_v2/ldo_v2.spice b/xschem/ldo_v2/ldo_v2.spice new file mode 100644 index 0000000..8da89e6 --- /dev/null +++ b/xschem/ldo_v2/ldo_v2.spice
@@ -0,0 +1,288 @@ +**.subckt ldo_v2 +XM8 net2 net2 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM9 net2 bg_out net3 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM10 net1 pos net3 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM11 net1 net2 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM13 net3 vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM14 out net1 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XM18 out vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XM20 vb vb GND GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM24 ldo_out net5 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=800 m=800 +XM26 vb mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC3 net1 net4 sky130_fd_pr__cap_mim_m3_1 W=60 L=60 MF=1 m=1 +XR7 out net4 GND sky130_fd_pr__res_xhigh_po_0p69 L=4.5 mult=1 m=1 +Vs VDD GND 2.3 +Vt net6 GND 0 +C2 net5 net6 5G m=1 +L1 out net5 5G m=1 +XR8 net7 ldo_out GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=8 m=8 +XR9 pos net7 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=3 m=3 +XR12 net8 pos GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=2 m=2 +XR13 GND net8 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=4 m=4 +XM1 inn mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM2 inp mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM3 bg_out mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XQ1 GND GND net10 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ5 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ6 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ7 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ9 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ11 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ13 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ15 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ17 GND GND net9 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XM7 net12 net12 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM12 net12 inp net11 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM21 mir inn net11 GND sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM23 mir net12 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM15 net11 net13 GND GND sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM25 net13 mir VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM16 net13 net13 GND GND sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC1 mir GND sky130_fd_pr__cap_mim_m3_1 W=16 L=16 MF=1 m=1 +XR1 net14 inp GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR2 net10 inn GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR3 net16 net10 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR10 net9 net14 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=6 m=6 +XR4 GND net15 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR11 GND net16 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR6 net15 net14 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR5 net17 bg_out GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR14 GND net17 GND sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=53 m=53 +XM19 mir en VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=2 m=2 +Ven en GND 2.3 +XM4 net18 bg_out VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM5 net18 bg_out GND GND sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=8 m=8 +XM6 VDD net18 inn GND sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +**** begin user architecture code + + +.param R=18k +R10 ldo_out GND {R} +IL ldo_out 0 PWL(0 0.1m 10u 0.1m 20u 10m 30u 10m) +*CL ldo_out gnd 10p +.lib /home/mustafa/mabrains/pdks/share/pdk/sky130A/libs.tech/ngspice/sky130.lib_mod.spice tt + + + + +.nodeset v(inn)=1.2 +.nodeset v(inp)=1.2 +.nodeset v(mir)=1 +.nodeset v(net13)=1 +.nodeset v(bg_out)=1.1 +.nodeset v(ldo_out)=1.8 +.nodeset v(pos)=1.1 +*.nodeset v(net3)=0.8 +*.nodeset v(net1)=0.7 +.nodeset v(net14)=0.9 +*.nodeset v(net7)=0.75 +.nodeset v(vb)=0.9 + +.option temp=27 +*User_defined_functions +.control +define max(vector_name) (vecmax(vector_name)) +define min(vector_name) (vecmin(vector_name)) +.endc + + +*Temp_sweep +.control +alter IL 0 +dc temp 85 0 -1 +let temp_coeff=1000000*(max(ldo_out)-min(ldo_out))/85 +print temp_coeff +plot v(ldo_out) +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + +.control +alter IL 0 +*alter R10 1G +op +let iq =i(Vs) +print iq +*print all +set wr_singlescale +set wr_vecnames +set appendwrite +if v(ldo_out)>1 +wrdata op_point_test v(ldo_out) +end +.endc + + + +*Stability_Analysis +.control +alter IL 0 +alter Vs AC =0 +alter Vt AC=1 +ac dec 10 1 1G +plot vdb(out) +plot (180/pi)*vp(out) +let ph= (180/pi)*vp(out) +meas ac pm FIND ph WHEN vdb(out)=0 +.endc + + +*PSRR_Analysis +.control +alter IL 0 +alter Vs AC =1 +alter Vt AC=0 +alter L1 0 +alter C2 0 +ac dec 10 1 1G +meas AC PSRR100 FIND vdb(ldo_out) AT=100 +meas AC PSRR100k FIND vdb(ldo_out) AT=100k +plot vdb(ldo_out) +.endc + + + + +*supply_sweep +.control +alter IL 0 +dc Vs 2.8 0 -0.01 +plot vdd ldo_out +meas DC Vldo_Sup_2 FIND ldo_out AT=2 +meas DC Vldo_nom FIND ldo_out AT=2.3 +meas DC Vldo_Sup_2_8 FIND ldo_out AT=2.8 +let line_reg = abs((Vldo_Sup_2_8-Vldo_Sup_2)/0.8) +print line_reg +meas DC vin WHEN v(ldo_out)=1.764 +let dropout=vin-1.764 +print dropout +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + + + + +*Load_Reg_switches +*V1 c1 0 DC 0 PWL(0 5 20u 5 35u 0 50u 0 100u 0) +*V2 c2 0 DC 0 PWL(0 0 20u 0 35u 0 50u 5 100u 5) +*s1 ldo_out 2 c1 0 switch1 ON +*s2 ldo_out 3 c2 0 switch1 OFF +*.model switch1 sw vt=0.1 ron =0.1 roff =1G +*R1 2 0 18k +*R2 3 0 180 + +*.control +*alter R10 1G +*tran 0.1u 90u +*plot v(ldo_out) v(c1) v(c2) +*meas TRAN V_ldo_100u FIND v(ldo_out) AT=10u +*meas TRAN V_ldo_10m FIND v(ldo_out) AT=50u +*let load_reg= V_ldo_100u-V_ldo_10m +*print load_reg +*.endc + + +**Load_Transient +.control +alter IL 50u +alter R10 3600k +tran 0.1u 100u +meas TRAN V_ldo_100u FIND v(ldo_out) AT=5u +meas TRAN V_ldo_10m FIND v(ldo_out) AT=100u +let load_reg= V_ldo_100u-V_ldo_10m +let load_current =(-1*i(Vs)-131.8e-6) +print load_reg +plot load_current v(ldo_out)-1.8 +.endc + + +**Transient +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 1.8 3 10u 10u 1u 100u 200u ] +alter IL 0 +tran 0.1u 100u +plot vdd ldo_out +.endc + +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +plot vdd ldo_out +.endc + +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Ven[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +*meas TRAN st_up_time when v(ldo_out)>1.782 +plot en ldo_out +.endc + + + + + +**** end user architecture code +**.ends +.GLOBAL GND +.GLOBAL VDD +** flattened .save nodes +.end
diff --git a/xschem/ldo_v2/ldo_v2_lvs.sch b/xschem/ldo_v2/ldo_v2_lvs.sch new file mode 100644 index 0000000..1af15e3 --- /dev/null +++ b/xschem/ldo_v2/ldo_v2_lvs.sch
@@ -0,0 +1,96 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 3160 -3340 3360 -3340 { lab=#net1} +N 3160 -3430 3160 -3400 { lab=#net2} +N 3160 -3430 3360 -3430 { lab=#net2} +N 3080 -3550 3080 -3440 { lab=#net3} +N 3080 -3550 3500 -3550 { lab=#net3} +N 3500 -3550 3500 -3480 { lab=#net3} +N 3800 -3350 3800 -3330 { lab=ldo_out} +N 3800 -3180 3800 -3160 { lab=pos} +N 3800 -3490 3800 -3410 { lab=#net3} +N 3800 -3380 3900 -3380 { lab=#net3} +N 3900 -3490 3900 -3380 { lab=#net3} +N 3720 -3170 3800 -3170 { lab=pos} +N 3800 -3340 3900 -3340 { lab=ldo_out} +N 3900 -3340 3940 -3340 { lab=ldo_out} +N 3800 -3570 3800 -3490 { lab=#net3} +N 3900 -3570 3900 -3490 { lab=#net3} +N 3800 -3570 3900 -3570 { lab=#net3} +N 3800 -3270 3800 -3260 { lab=#net4} +N 3800 -3200 3800 -3190 { lab=pos} +N 3820 -3280 3820 -3230 { lab=GND} +N 3820 -3300 3820 -3280 { lab=GND} +N 3800 -3190 3800 -3180 { lab=pos} +N 3800 -3100 3800 -3090 { lab=#net5} +N 3820 -3130 3820 -3060 { lab=GND} +N 3820 -3060 3820 -3030 { lab=GND} +N 3810 -3030 3820 -3030 { lab=GND} +N 3800 -3030 3810 -3030 { lab=GND} +N 3800 -3030 3800 -3020 { lab=GND} +N 3820 -3220 3820 -3130 { lab=GND} +N 3820 -3230 3820 -3220 { lab=GND} +N 3800 -3030 3800 -2990 { lab=GND} +N 3800 -2990 3800 -2980 { lab=GND} +N 3500 -3550 3800 -3550 { lab=#net3} +N 3660 -3380 3760 -3380 { lab=#net6} +N 3660 -3380 3660 -3340 { lab=#net6} +N 3080 -3290 3080 -3270 { lab=GND} +N 3500 -3180 3500 -3160 { lab=GND} +N 3640 -3170 3720 -3170 { lab=pos} +N 3640 -3170 3640 -3020 { lab=pos} +N 3320 -3020 3640 -3020 { lab=pos} +N 3320 -3250 3320 -3020 { lab=pos} +N 3320 -3250 3360 -3250 { lab=pos} +N 2980 -3370 3010 -3370 {} +C {ldo_v2/bgr2.sym} 1720 -1720 0 0 {name=xb2} +C {ldo_v1/Error_Amp.sym} 2600 -1960 0 0 {name=y1} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 3780 -3380 0 0 {name=M24 +L=0.5 +W=10 +nf=1 +mult=800 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 3720 -3170 1 0 {name=l25 sig_type=std_logic lab=pos} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 3800 -3230 0 1 {name=R2 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=3} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 3800 -3300 0 1 {name=R3 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=8} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 3800 -3130 0 1 {name=R1 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=2} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 3800 -3060 0 1 {name=R4 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=4} +C {devices/gnd.sym} 3800 -2980 0 0 {name=l2 lab=GND} +C {devices/opin.sym} 3890 -3340 0 0 {name=p3 lab=ldo_out +} +C {devices/gnd.sym} 3500 -3160 0 0 {name=l1 lab=GND} +C {devices/gnd.sym} 3080 -3270 0 0 {name=l3 lab=GND} +C {devices/ipin.sym} 3000 -3370 0 0 {name=p2 lab=en}
diff --git a/xschem/ldo_v2/ldo_v2_lvs.spice b/xschem/ldo_v2/ldo_v2_lvs.spice new file mode 100644 index 0000000..8057ce7 --- /dev/null +++ b/xschem/ldo_v2/ldo_v2_lvs.spice
@@ -0,0 +1,131 @@ +**.subckt ldo_v2_lvs ldo_out en +*.opin ldo_out +*.ipin en +xb2 net2 net1 GND net3 en bgr2 +y1 net2 pos net1 net6 net3 GND Error_Amp +XM24 ldo_out net6 net3 net3 sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=800 m=800 +XR2 pos net4 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=3 m=3 +XR3 net4 ldo_out GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=8 m=8 +XR1 net5 pos GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=2 m=2 +XR4 GND net5 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=4 m=4 +**.ends + +* expanding symbol: ldo_v2/bgr2.sym # of pins=5 +* sym_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v2/bgr2.sym +* sch_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v2/bgr2.sch +.subckt bgr2 bg_out iref agnd avdd enable +*.ipin avdd +*.ipin agnd +*.opin bg_out +*.ipin enable +*.ipin iref +XM1 inn mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM2 inp mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM3 bg_out mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XQ1 agnd agnd net2 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ5 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ6 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ7 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ9 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ11 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ13 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ15 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ17 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XM7 net4 net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM12 net4 inp net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM21 mir inn net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM23 mir net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM15 net3 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM25 net5 mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM16 net5 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC1 mir agnd sky130_fd_pr__cap_mim_m3_1 W=16 L=16 MF=1 m=1 +XR1 net6 inp agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR2 net2 inn agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR3 net8 net2 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR10 net1 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=6 m=6 +XR4 agnd net7 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR11 agnd net8 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR6 net7 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR5 net9 bg_out agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR14 agnd net9 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=53 m=53 +XM19 mir enable avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM4 net10 bg_out avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM5 net10 bg_out agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=8 m=8 +XM6 avdd net10 inn agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM26 iref mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +.ends + + +* expanding symbol: ldo_v1/Error_Amp.sym # of pins=6 +* sym_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v1/Error_Amp.sym +* sch_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v1/Error_Amp.sch +.subckt Error_Amp neg pos vb out avdd agnd +*.opin out +*.iopin avdd +*.iopin agnd +*.iopin vb +*.ipin neg +*.ipin pos +XM8 net2 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM9 net2 neg net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM10 net1 pos net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM11 net1 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM13 net3 vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM14 out net1 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=12 m=12 +XM18 out vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XC3 net1 net4 sky130_fd_pr__cap_mim_m3_1 W=50 L=50 MF=1 m=1 +XR7 out net4 agnd sky130_fd_pr__res_xhigh_po_0p69 L=4.5 mult=1 m=1 +XM20 vb vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +.ends + +.GLOBAL GND +** flattened .save nodes +.end
diff --git a/xschem/ldo_v2/ldo_v2_sim.sch b/xschem/ldo_v2/ldo_v2_sim.sch new file mode 100644 index 0000000..c7e55ca --- /dev/null +++ b/xschem/ldo_v2/ldo_v2_sim.sch
@@ -0,0 +1,290 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 3590 -3720 3790 -3720 { lab=#net1} +N 3590 -3810 3590 -3780 { lab=#net2} +N 3590 -3810 3790 -3810 { lab=#net2} +N 3510 -3930 3510 -3820 { lab=VDD} +N 3510 -3930 3930 -3930 { lab=VDD} +N 3930 -3930 3930 -3860 { lab=VDD} +N 4230 -3730 4230 -3710 { lab=ldo_out} +N 4230 -3560 4230 -3540 { lab=pos} +N 4230 -3870 4230 -3790 { lab=VDD} +N 4230 -3760 4330 -3760 { lab=VDD} +N 4330 -3870 4330 -3760 { lab=VDD} +N 4150 -3550 4230 -3550 { lab=pos} +N 4230 -3720 4330 -3720 { lab=ldo_out} +N 4330 -3720 4370 -3720 { lab=ldo_out} +N 4230 -3950 4230 -3870 { lab=VDD} +N 4330 -3950 4330 -3870 { lab=VDD} +N 4230 -3950 4330 -3950 { lab=VDD} +N 4230 -3650 4230 -3640 { lab=#net3} +N 4230 -3580 4230 -3570 { lab=pos} +N 4250 -3660 4250 -3610 { lab=GND} +N 4250 -3680 4250 -3660 { lab=GND} +N 4230 -3570 4230 -3560 { lab=pos} +N 4230 -3480 4230 -3470 { lab=#net4} +N 4250 -3510 4250 -3440 { lab=GND} +N 4250 -3440 4250 -3410 { lab=GND} +N 4240 -3410 4250 -3410 { lab=GND} +N 4230 -3410 4240 -3410 { lab=GND} +N 4230 -3410 4230 -3400 { lab=GND} +N 4250 -3600 4250 -3510 { lab=GND} +N 4250 -3610 4250 -3600 { lab=GND} +N 4230 -3410 4230 -3370 { lab=GND} +N 4230 -3370 4230 -3360 { lab=GND} +N 3930 -3930 4230 -3930 { lab=VDD} +N 4090 -3760 4190 -3760 { lab=#net5} +N 4090 -3760 4090 -3720 { lab=#net5} +N 3510 -3670 3510 -3650 { lab=GND} +N 3930 -3560 3930 -3540 { lab=GND} +N 4070 -3550 4150 -3550 { lab=pos} +N 4070 -3550 4070 -3400 { lab=pos} +N 3750 -3400 4070 -3400 { lab=pos} +N 3750 -3630 3750 -3400 { lab=pos} +N 3750 -3630 3790 -3630 { lab=pos} +N 3410 -3750 3440 -3750 { lab=en} +N 3030 -3530 3030 -3490 { lab=GND} +N 3030 -3610 3030 -3590 { lab=VDD} +N 2800 -3620 2800 -3600 { lab=en} +N 2800 -3540 2800 -3510 { lab=GND} +N 3820 -3970 3820 -3930 { lab=VDD} +N 3030 -3750 3030 -3610 { lab=VDD} +N 3030 -3750 3040 -3750 { lab=VDD} +C {ldo_v2/bgr2.sym} 2150 -2100 0 0 {name=xb2} +C {ldo_v1/Error_Amp.sym} 3030 -2340 0 0 {name=xy1} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 4210 -3760 0 0 {name=M24 +L=0.5 +W=10 +nf=1 +mult=800 +ad="'int((nf+1)/2) * W/nf * 0.29'" +pd="'2*int((nf+1)/2) * (W/nf + 0.29)'" +as="'int((nf+2)/2) * W/nf * 0.29'" +ps="'2*int((nf+2)/2) * (W/nf + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_pin.sym} 4150 -3550 1 0 {name=l25 sig_type=std_logic lab=pos} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 4230 -3610 0 1 {name=R2 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=3} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 4230 -3680 0 1 {name=R3 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=8} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 4230 -3510 0 1 {name=R1 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=2} +C {sky130_fd_pr/res_xhigh_po_0p69.sym} 4230 -3440 0 1 {name=R4 +W=0.69 +L=24 +model=res_xhigh_po_0p69 +spiceprefix=X +mult=4} +C {devices/gnd.sym} 4230 -3360 0 0 {name=l2 lab=GND} +C {devices/opin.sym} 4320 -3720 0 0 {name=p3 lab=ldo_out +} +C {devices/gnd.sym} 3930 -3540 0 0 {name=l1 lab=GND} +C {devices/gnd.sym} 3510 -3650 0 0 {name=l3 lab=GND} +C {devices/vsource.sym} 3030 -3560 0 0 {name=Vs value=2.3} +C {devices/vsource.sym} 2800 -3570 0 0 {name=Ven value=2.3} +C {devices/lab_pin.sym} 2800 -3620 0 0 {name=l27 sig_type=std_logic lab=en} +C {devices/gnd.sym} 3030 -3490 0 0 {name=l4 lab=GND} +C {devices/gnd.sym} 2800 -3510 0 0 {name=l5 lab=GND} +C {devices/vdd.sym} 3820 -3970 0 0 {name=l7 lab=VDD} +C {devices/vdd.sym} 3040 -3750 0 0 {name=l8 lab=VDD} +C {devices/code_shown.sym} 4760 -4550 0 0 {name= SPICE1 only_toplevel="false" value= +" + +.param R=36k +R10 ldo_out GND \{R\} +IL ldo_out 0 PWL(0 0.1m 10u 0.1m 20u 10m 30u 10m) +*CL ldo_out gnd 10p +.lib "/home/mustafa/mabrains/pdks/share/pdk/sky130A/libs.tech/ngspice/sky130.lib_mod.spice" tt + + + + + +.nodeset v(x1.inn)=1.2 +.nodeset v(x1.inp)=1.2 +.nodeset v(x1.mir)=1 +.nodeset v(x1.net5)=1 +.nodeset v(x1.bg_out)=1.1 +.nodeset v(ldo_out)=1.8 +.nodeset v(pos)=1.1 +*.nodeset v(net3)=0.8 +*.nodeset v(net1)=0.7 +.nodeset v(x1.net6)=0.9 +*.nodeset v(net7)=0.75 +.nodeset v(xy1.vb)=0.9 + + +.option temp=27 +*User_defined_functions +.control +define max(vector_name) (vecmax(vector_name)) +define min(vector_name) (vecmin(vector_name)) +.endc + + +*Temp_sweep +.control +alter IL 0 +dc temp 85 0 -1 +let temp_coeff=1000000*(max(ldo_out)-min(ldo_out))/85 +print temp_coeff +plot v(ldo_out) +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + +.control +alter IL 0 +*alter R10 1G +op +let iq =i(Vs) +print iq +*print all +set wr_singlescale +set wr_vecnames +set appendwrite +if v(ldo_out)>1 +wrdata op_point_test v(ldo_out) +end +.endc + + + +*Stability_Analysis +.control +alter IL 0 +alter Vs AC =0 +alter Vt AC=1 +ac dec 10 1 1G +plot vdb(out) +plot (180/pi)*vp(out) +let ph= (180/pi)*vp(out) +meas ac pm FIND ph WHEN vdb(out)=0 +.endc + + +*PSRR_Analysis +.control +alter IL 0 +alter Vs AC =1 +alter Vt AC=0 +alter L1 0 +alter C2 0 +ac dec 10 1 1G +meas AC PSRR100 FIND vdb(ldo_out) AT=100 +meas AC PSRR100k FIND vdb(ldo_out) AT=100k +plot vdb(ldo_out) +.endc + + + + +*supply_sweep +.control +alter IL 0 +dc Vs 2.8 0 -0.01 +plot vdd ldo_out +meas DC Vldo_Sup_2 FIND ldo_out AT=2 +meas DC Vldo_nom FIND ldo_out AT=2.3 +meas DC Vldo_Sup_2_8 FIND ldo_out AT=2.8 +let line_reg = abs((Vldo_Sup_2_8-Vldo_Sup_2)/0.8) +print line_reg +meas DC vin WHEN v(ldo_out)=1.764 +let dropout=vin-1.764 +print dropout +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + + + + +*Load_Reg_switches +*V1 c1 0 DC 0 PWL(0 5 20u 5 35u 0 50u 0 100u 0) +*V2 c2 0 DC 0 PWL(0 0 20u 0 35u 0 50u 5 100u 5) +*s1 ldo_out 2 c1 0 switch1 ON +*s2 ldo_out 3 c2 0 switch1 OFF +*.model switch1 sw vt=0.1 ron =0.1 roff =1G +*R1 2 0 18k +*R2 3 0 180 + +*.control +*alter R10 1G +*tran 0.1u 90u +*plot v(ldo_out) v(c1) v(c2) +*meas TRAN V_ldo_100u FIND v(ldo_out) AT=10u +*meas TRAN V_ldo_10m FIND v(ldo_out) AT=50u +*let load_reg= V_ldo_100u-V_ldo_10m +*print load_reg +*.endc + + +**Load_Transient +.control +alter IL 50u +alter R10 3600k +tran 0.1u 100u +meas TRAN V_ldo_100u FIND v(ldo_out) AT=5u +meas TRAN V_ldo_10m FIND v(ldo_out) AT=100u +let load_reg= V_ldo_100u-V_ldo_10m +let load_current =(-1*i(Vs)-131.8e-6) +print load_reg +plot load_current v(ldo_out)-1.8 +.endc + + +**Transient +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 1.8 3 10u 10u 1u 100u 200u ] +alter IL 0 +tran 0.1u 100u +plot vdd ldo_out +.endc +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +plot vdd ldo_out +.endc +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Ven[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +*meas TRAN st_up_time when v(ldo_out)>1.782 +plot en ldo_out +.endc + + + + + +"} +C {devices/lab_pin.sym} 3410 -3750 0 0 {name=l9 sig_type=std_logic lab=en}
diff --git a/xschem/ldo_v2/ldo_v2_sim.spice b/xschem/ldo_v2/ldo_v2_sim.spice new file mode 100644 index 0000000..ca5357b --- /dev/null +++ b/xschem/ldo_v2/ldo_v2_sim.spice
@@ -0,0 +1,316 @@ +**.subckt ldo_v2_sim ldo_out +*.opin ldo_out +xb2 net2 net1 GND VDD en bgr2 +xy1 net2 pos net1 net5 VDD GND Error_Amp +XM24 ldo_out net5 VDD VDD sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=800 m=800 +XR2 pos net3 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=3 m=3 +XR3 net3 ldo_out GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=8 m=8 +XR1 net4 pos GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=2 m=2 +XR4 GND net4 GND sky130_fd_pr__res_xhigh_po_0p69 L=24 mult=4 m=4 +Vs VDD GND 2.3 +Ven en GND 2.3 +**** begin user architecture code + + + +.param R=36k +R10 ldo_out GND {R} +IL ldo_out 0 PWL(0 0.1m 10u 0.1m 20u 10m 30u 10m) +*CL ldo_out gnd 10p +.lib /home/mustafa/mabrains/pdks/share/pdk/sky130A/libs.tech/ngspice/sky130.lib_mod.spice tt + + + + + +.nodeset v(x1.inn)=1.2 +.nodeset v(x1.inp)=1.2 +.nodeset v(x1.mir)=1 +.nodeset v(x1.net5)=1 +.nodeset v(x1.bg_out)=1.1 +.nodeset v(ldo_out)=1.8 +.nodeset v(pos)=1.1 +*.nodeset v(net3)=0.8 +*.nodeset v(net1)=0.7 +.nodeset v(x1.net6)=0.9 +*.nodeset v(net7)=0.75 +.nodeset v(xy1.vb)=0.9 + + +.option temp=27 +*User_defined_functions +.control +define max(vector_name) (vecmax(vector_name)) +define min(vector_name) (vecmin(vector_name)) +.endc + + +*Temp_sweep +.control +alter IL 0 +dc temp 85 0 -1 +let temp_coeff=1000000*(max(ldo_out)-min(ldo_out))/85 +print temp_coeff +plot v(ldo_out) +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + +.control +alter IL 0 +*alter R10 1G +op +let iq =i(Vs) +print iq +*print all +set wr_singlescale +set wr_vecnames +set appendwrite +if v(ldo_out)>1 +wrdata op_point_test v(ldo_out) +end +.endc + + + +*Stability_Analysis +.control +alter IL 0 +alter Vs AC =0 +alter Vt AC=1 +ac dec 10 1 1G +plot vdb(out) +plot (180/pi)*vp(out) +let ph= (180/pi)*vp(out) +meas ac pm FIND ph WHEN vdb(out)=0 +.endc + + +*PSRR_Analysis +.control +alter IL 0 +alter Vs AC =1 +alter Vt AC=0 +alter L1 0 +alter C2 0 +ac dec 10 1 1G +meas AC PSRR100 FIND vdb(ldo_out) AT=100 +meas AC PSRR100k FIND vdb(ldo_out) AT=100k +plot vdb(ldo_out) +.endc + + + + +*supply_sweep +.control +alter IL 0 +dc Vs 2.8 0 -0.01 +plot vdd ldo_out +meas DC Vldo_Sup_2 FIND ldo_out AT=2 +meas DC Vldo_nom FIND ldo_out AT=2.3 +meas DC Vldo_Sup_2_8 FIND ldo_out AT=2.8 +let line_reg = abs((Vldo_Sup_2_8-Vldo_Sup_2)/0.8) +print line_reg +meas DC vin WHEN v(ldo_out)=1.764 +let dropout=vin-1.764 +print dropout +set wr_singlescale +set wr_vecnames +set appendwrite +.endc + + + + + +*Load_Reg_switches +*V1 c1 0 DC 0 PWL(0 5 20u 5 35u 0 50u 0 100u 0) +*V2 c2 0 DC 0 PWL(0 0 20u 0 35u 0 50u 5 100u 5) +*s1 ldo_out 2 c1 0 switch1 ON +*s2 ldo_out 3 c2 0 switch1 OFF +*.model switch1 sw vt=0.1 ron =0.1 roff =1G +*R1 2 0 18k +*R2 3 0 180 + +*.control +*alter R10 1G +*tran 0.1u 90u +*plot v(ldo_out) v(c1) v(c2) +*meas TRAN V_ldo_100u FIND v(ldo_out) AT=10u +*meas TRAN V_ldo_10m FIND v(ldo_out) AT=50u +*let load_reg= V_ldo_100u-V_ldo_10m +*print load_reg +*.endc + + +**Load_Transient +.control +alter IL 50u +alter R10 3600k +tran 0.1u 100u +meas TRAN V_ldo_100u FIND v(ldo_out) AT=5u +meas TRAN V_ldo_10m FIND v(ldo_out) AT=100u +let load_reg= V_ldo_100u-V_ldo_10m +let load_current =(-1*i(Vs)-131.8e-6) +print load_reg +plot load_current v(ldo_out)-1.8 +.endc + + +**Transient +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 1.8 3 10u 10u 1u 100u 200u ] +alter IL 0 +tran 0.1u 100u +plot vdd ldo_out +.endc +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Vs[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +plot vdd ldo_out +.endc +.control +alter R10 36k +alter @IL[PWL] = [ 0 0 10u 0 20u 0 30u 0 ] +alter @Ven[pulse] = [ 0 2.3 10u 0.1u 1u 100u 200u ] +tran 0.1u 100u +*meas TRAN st_up_time when v(ldo_out)>1.782 +plot en ldo_out +.endc + + + + + + + +**** end user architecture code +**.ends + +* expanding symbol: ldo_v2/bgr2.sym # of pins=5 +* sym_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v2/bgr2.sym +* sch_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v2/bgr2.sch +.subckt bgr2 bg_out iref agnd avdd enable +*.ipin avdd +*.ipin agnd +*.opin bg_out +*.ipin enable +*.ipin iref +XM1 inn mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM2 inp mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM3 bg_out mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XQ1 agnd agnd net2 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ5 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ6 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ7 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ9 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ11 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ13 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ15 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XQ17 agnd agnd net1 sky130_fd_pr__pnp_05v5_W0p68L0p68 +XM7 net4 net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM12 net4 inp net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM21 mir inn net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM23 mir net4 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM15 net3 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XM25 net5 mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM16 net5 net5 agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=2 W=5 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +XC1 mir agnd sky130_fd_pr__cap_mim_m3_1 W=16 L=16 MF=1 m=1 +XR1 net6 inp agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR2 net2 inn agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=3 m=3 +XR3 net8 net2 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR10 net1 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=6 m=6 +XR4 agnd net7 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR11 agnd net8 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=15 m=15 +XR6 net7 net6 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR5 net9 bg_out agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=1 m=1 +XR14 agnd net9 agnd sky130_fd_pr__res_xhigh_po_0p69 L=27 mult=53 m=53 +XM19 mir enable avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=0.5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM4 net10 bg_out avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=5 W=0.42 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=2 m=2 +XM5 net10 bg_out agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=10 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=8 m=8 +XM6 avdd net10 inn agnd sky130_fd_pr__nfet_g5v0d10v5 L=0.5 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM26 iref mir avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +.ends + + +* expanding symbol: ldo_v1/Error_Amp.sym # of pins=6 +* sym_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v1/Error_Amp.sym +* sch_path: /home/mustafa/mabrains/caravel_user_project_ldo/xschem/ldo_v1/Error_Amp.sch +.subckt Error_Amp neg pos vb out avdd agnd +*.opin out +*.iopin avdd +*.iopin agnd +*.iopin vb +*.ipin neg +*.ipin pos +XM8 net2 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM9 net2 neg net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM10 net1 pos net3 agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM11 net1 net2 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=4 m=4 +XM13 net3 vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=8 m=8 +XM14 out net1 avdd avdd sky130_fd_pr__pfet_g5v0d10v5 L=1.2 W=3 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' ++ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' ++ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=12 m=12 +XM18 out vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=12 m=12 +XC3 net1 net4 sky130_fd_pr__cap_mim_m3_1 W=50 L=50 MF=1 m=1 +XR7 out net4 agnd sky130_fd_pr__res_xhigh_po_0p69 L=4.5 mult=1 m=1 +XM20 vb vb agnd agnd sky130_fd_pr__nfet_g5v0d10v5 L=1 W=1 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29' ++ pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' nrd='0.29 / W' nrs='0.29 / W' ++ sa=0 sb=0 sd=0 mult=4 m=4 +.ends + +.GLOBAL GND +.GLOBAL VDD +** flattened .save nodes +.end
diff --git a/xschem/op_point_test b/xschem/op_point_test new file mode 100644 index 0000000..f4a3fd4 --- /dev/null +++ b/xschem/op_point_test
@@ -0,0 +1,18 @@ + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + xb2.inn v(ldo_out) + 1.15218360e+00 1.80180765e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00 + net2 v(ldo_out) + 1.17000776e+00 1.80180100e+00