xschem file updated with top level made
diff --git a/xschem/VCO.sch b/xschem/VCO.sch
new file mode 100644
index 0000000..0ef0290
--- /dev/null
+++ b/xschem/VCO.sch
@@ -0,0 +1,404 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+B 5 997.5 -682.5 1002.5 -677.5 {name=IN1
+dir=in}
+N 1670 -510 1670 -450 {
+lab=GND}
+N 1600 -510 1600 -450 {
+lab=GND}
+N 1480 -680 1480 -660 {
+lab=VDD}
+N 1430 -760 1510 -760 {
+lab=#net1}
+N 1510 -760 1510 -680 {
+lab=#net1}
+N 1430 -770 1530 -770 {
+lab=#net2}
+N 1530 -770 1530 -680 {
+lab=#net2}
+N 1430 -780 1560 -780 {
+lab=#net3}
+N 1560 -780 1560 -680 {
+lab=#net3}
+N 1430 -790 1580 -790 {
+lab=#net4}
+N 1580 -790 1580 -680 {
+lab=#net4}
+N 1430 -800 1610 -800 {
+lab=#net5}
+N 1610 -800 1610 -680 {
+lab=#net5}
+N 1430 -810 1630 -810 {
+lab=#net6}
+N 1630 -810 1630 -680 {
+lab=#net6}
+N 1430 -820 1660 -820 {
+lab=#net7}
+N 1660 -820 1660 -680 {
+lab=#net7}
+N 1430 -830 1680 -830 {
+lab=#net8}
+N 1680 -830 1680 -680 {
+lab=#net8}
+N 1530 -510 1530 -470 {
+lab=VBIASN1}
+N 1510 -850 1510 -760 {
+lab=#net1}
+N 1510 -880 1750 -880 {
+lab=#net1}
+N 1510 -880 1510 -850 {
+lab=#net1}
+N 1530 -900 1530 -770 {
+lab=#net2}
+N 1530 -900 1750 -900 {
+lab=#net2}
+N 1560 -930 1560 -780 {
+lab=#net3}
+N 1560 -930 1750 -930 {
+lab=#net3}
+N 1580 -950 1580 -790 {
+lab=#net4}
+N 1580 -950 1750 -950 {
+lab=#net4}
+N 1610 -980 1610 -800 {
+lab=#net5}
+N 1610 -980 1750 -980 {
+lab=#net5}
+N 1630 -1000 1750 -1000 {
+lab=#net6}
+N 1630 -1000 1630 -810 {
+lab=#net6}
+N 1660 -1030 1660 -820 {
+lab=#net7}
+N 1660 -1030 1750 -1030 {
+lab=#net7}
+N 1680 -1050 1750 -1050 {
+lab=#net8}
+N 1680 -1050 1680 -830 {
+lab=#net8}
+N 1980 -810 1980 -750 {
+lab=GND}
+N 1910 -810 1910 -750 {
+lab=GND}
+N 2070 -930 2140 -930 {
+lab=#net9}
+N 2070 -910 2140 -910 {
+lab=#net10}
+N 2070 -890 2140 -890 {
+lab=#net11}
+N 1880 -1150 1880 -1120 {
+lab=VDD}
+N 2590 -990 2590 -410 {
+lab=VBIASN1}
+N 1530 -470 1530 -410 {
+lab=VBIASN1}
+N 2350 -890 2350 -830 {
+lab=GND}
+N 2440 -890 2440 -830 {
+lab=GND}
+N 2070 -990 2250 -990 {
+lab=#net12}
+N 2070 -1020 2250 -1020 {
+lab=#net13}
+N 2320 -1140 2320 -1110 {
+lab=#net14}
+N 2380 -1170 2380 -1150 {
+lab=REF}
+N 2440 -1140 2440 -1110 {
+lab=VDD}
+N 2380 -1150 2380 -1110 {
+lab=REF}
+N 2200 -950 2250 -950 {
+lab=VCTRL}
+N 1790 -810 1790 -410 {
+lab=VBIASN1}
+N 1530 -410 1790 -410 {
+lab=VBIASN1}
+N 750 -1400 990 -1400 {
+lab=CTRL1}
+N 760 -1380 990 -1380 {
+lab=CTRL2}
+N 760 -1360 990 -1360 {
+lab=CTRL3}
+N 760 -1340 990 -1340 {
+lab=CTRL4}
+N 760 -1320 990 -1320 {
+lab=CTRL5}
+N 960 -530 990 -530 {
+lab=CTRL5}
+N 940 -550 990 -550 {
+lab=CTRL4}
+N 920 -570 990 -570 {
+lab=CTRL3}
+N 900 -590 990 -590 {
+lab=CTRL2}
+N 880 -610 990 -610 {
+lab=CTRL1}
+N 960 -640 990 -640 {
+lab=CTRL5}
+N 940 -660 990 -660 {
+lab=CTRL4}
+N 920 -680 990 -680 {
+lab=CTRL3}
+N 900 -700 990 -700 {
+lab=CTRL2}
+N 880 -720 990 -720 {
+lab=CTRL1}
+N 960 -750 990 -750 {
+lab=CTRL5}
+N 940 -770 990 -770 {
+lab=CTRL4}
+N 920 -790 990 -790 {
+lab=CTRL3}
+N 900 -810 990 -810 {
+lab=CTRL2}
+N 880 -830 990 -830 {
+lab=CTRL1}
+N 960 -860 990 -860 {
+lab=CTRL5}
+N 940 -880 990 -880 {
+lab=CTRL4}
+N 920 -900 990 -900 {
+lab=CTRL3}
+N 900 -920 990 -920 {
+lab=CTRL2}
+N 880 -940 990 -940 {
+lab=CTRL1}
+N 960 -990 990 -990 {
+lab=CTRL5}
+N 940 -1010 990 -1010 {
+lab=CTRL4}
+N 920 -1030 990 -1030 {
+lab=CTRL3}
+N 900 -1050 990 -1050 {
+lab=CTRL2}
+N 880 -1070 990 -1070 {
+lab=CTRL1}
+N 960 -1100 990 -1100 {
+lab=CTRL5}
+N 940 -1120 990 -1120 {
+lab=CTRL4}
+N 920 -1140 990 -1140 {
+lab=CTRL3}
+N 900 -1160 990 -1160 {
+lab=CTRL2}
+N 880 -1180 990 -1180 {
+lab=CTRL1}
+N 960 -1210 990 -1210 {
+lab=CTRL5}
+N 940 -1230 990 -1230 {
+lab=CTRL4}
+N 920 -1250 990 -1250 {
+lab=CTRL3}
+N 900 -1270 990 -1270 {
+lab=CTRL2}
+N 880 -1290 990 -1290 {
+lab=CTRL1}
+N 960 -1320 960 -530 {
+lab=CTRL5}
+N 940 -1340 940 -550 {
+lab=CTRL4}
+N 920 -1360 920 -570 {
+lab=CTRL3}
+N 900 -1380 900 -590 {
+lab=CTRL2}
+N 880 -1400 880 -600 {
+lab=CTRL1}
+N 1050 -1400 1050 -1390 {
+lab=#net7}
+N 1050 -1400 1160 -1400 {
+lab=#net7}
+N 1050 -1320 1120 -1320 {
+lab=GND}
+N 1050 -1290 1050 -1280 {
+lab=#net8}
+N 1050 -1290 1160 -1290 {
+lab=#net8}
+N 1050 -1210 1120 -1210 {
+lab=GND}
+N 1050 -1180 1050 -1170 {
+lab=#net5}
+N 1050 -1180 1160 -1180 {
+lab=#net5}
+N 1050 -1100 1120 -1100 {
+lab=GND}
+N 1050 -1070 1050 -1060 {
+lab=#net6}
+N 1050 -1070 1160 -1070 {
+lab=#net6}
+N 1050 -990 1120 -990 {
+lab=GND}
+N 1050 -940 1050 -930 {
+lab=#net3}
+N 1050 -940 1160 -940 {
+lab=#net3}
+N 1050 -860 1120 -860 {
+lab=GND}
+N 1050 -830 1050 -820 {
+lab=#net4}
+N 1050 -830 1160 -830 {
+lab=#net4}
+N 1050 -750 1120 -750 {
+lab=GND}
+N 1050 -720 1050 -710 {
+lab=#net1}
+N 1050 -720 1160 -720 {
+lab=#net1}
+N 1050 -640 1120 -640 {
+lab=GND}
+N 1050 -610 1050 -600 {
+lab=#net2}
+N 1050 -610 1160 -610 {
+lab=#net2}
+N 1050 -530 1120 -530 {
+lab=GND}
+N 1120 -1320 1120 -530 {
+lab=GND}
+N 1790 -410 2590 -410 {
+lab=VBIASN1}
+N 2140 -930 2160 -930 {
+lab=#net9}
+N 2160 -930 2160 -720 {
+lab=#net9}
+N 2120 -640 2120 -410 {
+lab=VBIASN1}
+N 2160 -720 2170 -720 {
+lab=#net9}
+N 2140 -680 2170 -680 {
+lab=#net11}
+N 2120 -640 2170 -640 {
+lab=VBIASN1}
+N 2270 -630 2270 -610 {
+lab=GND}
+N 2240 -620 2240 -600 {
+lab=GND}
+N 2210 -790 2210 -770 {
+lab=VDD}
+N 2310 -720 2360 -720 {
+lab=OUT0}
+N 2310 -690 2350 -690 {
+lab=OUT180}
+N 2140 -890 2140 -680 {
+lab=#net11}
+N 2070 -870 2120 -870 {
+lab=#net15}
+N 1160 -720 1430 -760 {
+lab=#net1}
+N 1160 -610 1430 -770 {
+lab=#net2}
+N 1160 -940 1430 -780 {
+lab=#net3}
+N 1160 -830 1430 -790 {
+lab=#net4}
+N 1160 -1400 1430 -820 {
+lab=#net7}
+N 1160 -1290 1430 -830 {
+lab=#net8}
+N 1160 -1180 1430 -800 {
+lab=#net5}
+N 1160 -1070 1430 -810 {
+lab=#net6}
+N 2290 -1330 2290 -1300 {
+lab=VDD}
+N 2240 -1270 2290 -1270 {
+lab=VDD}
+N 2240 -1320 2240 -1270 {
+lab=VDD}
+N 2240 -1320 2290 -1320 {
+lab=VDD}
+N 2290 -1240 2290 -1220 {
+lab=REF}
+N 2290 -1220 2330 -1220 {
+lab=REF}
+N 2330 -1270 2330 -1220 {
+lab=REF}
+N 2330 -1220 2380 -1220 {
+lab=REF}
+N 2380 -1220 2380 -1170 {
+lab=REF}
+N 2380 -1220 2450 -1220 {
+lab=REF}
+N 2190 -970 2200 -970 {
+lab=VCTRL}
+N 2200 -970 2200 -950 {
+lab=VCTRL}
+N 1880 -1190 1880 -1150 {
+lab=VDD}
+C {core_osc.sym} 1460 -540 0 0 {name=X1}
+C {devices/lab_pin.sym} 1480 -680 0 0 {name=l7 sig_type=std_logic lab=VDD
+}
+C {buffer_amp_vop.sym} 1750 -840 0 0 {name=X3}
+C {devices/lab_pin.sym} 1880 -1150 0 0 {name=l19 sig_type=std_logic lab=VDD
+}
+C {bias_calc.sym} 2260 -910 0 0 {}
+C {devices/lab_pin.sym} 2320 -1140 0 0 {name=l22 sig_type=std_logic lab=VDD
+}
+C {devices/lab_pin.sym} 2380 -1170 0 0 {name=l23 sig_type=std_logic lab=REF}
+C {devices/lab_pin.sym} 2440 -1140 0 0 {name=l25 sig_type=std_logic lab=VDD
+}
+C {devices/lab_pin.sym} 2200 -950 0 0 {name=l1 sig_type=std_logic lab=VCTRL
+}
+C {devices/lab_pin.sym} 1970 -410 0 0 {name=l37 sig_type=std_logic lab=VBIASN1
+}
+C {cap_bank.sym} 980 -530 0 0 {name=X4}
+C {cap_bank.sym} 980 -640 0 0 {name=X5}
+C {cap_bank.sym} 980 -750 0 0 {name=X6}
+C {cap_bank.sym} 980 -860 0 0 {name=X7}
+C {cap_bank.sym} 980 -990 0 0 {name=X8}
+C {cap_bank.sym} 980 -1100 0 0 {name=X9}
+C {cap_bank.sym} 980 -1210 0 0 {name=X10}
+C {cap_bank.sym} 980 -1320 0 0 {name=X11}
+C {devices/ipin.sym} 1120 -530 2 0 {name=p6 lab=GND}
+C {output_buffer.sym} 2200 -700 0 0 {name=X2}
+C {devices/lab_pin.sym} 2210 -790 0 0 {name=l39 sig_type=std_logic lab=VDD
+}
+C {devices/lab_pin.sym} 2290 -1330 0 0 {name=l141 sig_type=std_logic lab=VDD
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 2310 -1270 0 1 {name=M35
+L=0.35
+W=3
+nf=3
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {devices/ipin.sym} 750 -1400 0 0 {name=p5 lab=CTRL1}
+C {devices/ipin.sym} 760 -1380 0 0 {name=p1 lab=CTRL2}
+C {devices/ipin.sym} 760 -1360 0 0 {name=p2 lab=CTRL3}
+C {devices/ipin.sym} 760 -1340 0 0 {name=p3 lab=CTRL4}
+C {devices/ipin.sym} 760 -1320 0 0 {name=p4 lab=CTRL5}
+C {devices/ipin.sym} 2190 -970 0 0 {name=p7 lab=VCTRL}
+C {devices/ipin.sym} 2450 -1220 0 1 {name=p8 lab=REF}
+C {devices/ipin.sym} 1880 -1190 0 0 {name=p9 lab=VDD}
+C {devices/noconn.sym} 2140 -910 0 0 {name=l2}
+C {devices/noconn.sym} 2120 -870 0 0 {name=l3}
+C {devices/lab_pin.sym} 1100 -530 0 0 {name=l4 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 1600 -460 0 0 {name=l5 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 1670 -460 0 0 {name=l6 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 1910 -770 0 0 {name=l8 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 1980 -770 0 0 {name=l9 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 2240 -600 0 0 {name=l10 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 2270 -610 0 0 {name=l11 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 2350 -850 0 0 {name=l12 sig_type=std_logic lab=GND
+}
+C {devices/lab_pin.sym} 2440 -850 0 0 {name=l13 sig_type=std_logic lab=GND
+}
+C {devices/opin.sym} 2360 -720 0 0 {name=p10 lab=OUT0}
+C {devices/opin.sym} 2350 -690 0 0 {name=p11 lab=OUT180}
diff --git a/xschem/VCO.sym b/xschem/VCO.sym
new file mode 100644
index 0000000..3225e43
--- /dev/null
+++ b/xschem/VCO.sym
@@ -0,0 +1,75 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 1790 -570 1790 -490 {}
+L 4 1790 -570 1850 -570 {}
+L 4 1850 -570 1850 -490 {}
+L 4 1850 -490 1910 -490 {}
+L 4 1910 -570 1910 -490 {}
+L 4 1780 -470 1980 -630 {}
+L 4 1940 -630 1980 -630 {}
+L 4 1980 -630 1980 -590 {}
+L 4 1750 -430 1770 -370 {}
+L 4 1770 -370 1790 -430 {}
+L 4 1830 -430 1870 -430 {}
+L 4 1830 -430 1830 -370 {}
+L 4 1830 -370 1870 -370 {}
+L 4 1910 -430 1910 -370 {}
+L 4 1910 -370 1950 -370 {}
+L 4 1950 -430 1950 -370 {}
+L 4 1910 -430 1950 -430 {}
+L 4 1580 -600 1640 -600 {}
+L 4 1580 -520 1640 -520 {}
+L 4 1580 -500 1640 -500 {}
+L 4 1580 -480 1640 -480 {}
+L 4 1580 -460 1640 -460 {}
+L 4 1580 -440 1640 -440 {}
+L 4 1580 -380 1640 -380 {}
+L 4 1640 -280 2060 -280 {}
+L 4 1640 -680 2050 -680 {}
+L 4 2050 -680 2060 -680 {}
+L 4 1820 -720 1820 -680 {}
+L 4 1840 -270 1840 -240 {}
+L 4 1840 -280 1840 -270 {}
+L 4 1640 -680 1640 -280 {}
+L 4 2060 -680 2060 -280 {}
+L 4 2060 -460 2120 -460 {}
+L 4 2060 -520 2120 -520 {}
+B 5 1577.5 -602.5 1582.5 -597.5 {name=REF
+dir=in}
+B 5 1577.5 -522.5 1582.5 -517.5 {name=CTRL1
+dir=in}
+B 5 1577.5 -502.5 1582.5 -497.5 {name=CTRL2
+dir=in}
+B 5 1577.5 -482.5 1582.5 -477.5 {name=CTRL3
+dir=in}
+B 5 1577.5 -462.5 1582.5 -457.5 {name=CTRL4
+dir=in}
+B 5 1577.5 -442.5 1582.5 -437.5 {name=CTRL5
+dir=in}
+B 5 1577.5 -382.5 1582.5 -377.5 {name=VCTRL
+dir=in}
+B 5 1817.5 -722.5 1822.5 -717.5 {name=VDD
+dir=in}
+B 5 1837.5 -242.5 1842.5 -237.5 {name=GND
+dir=in}
+B 5 2117.5 -522.5 2122.5 -517.5 {name=OUT0
+dir=out}
+B 5 2117.5 -462.5 2122.5 -457.5 {name=OUT180
+dir=out}
+T {OUT0} 2070 -550 0 0 0.4 0.4 {}
+T {OUT180} 2070 -490 0 0 0.4 0.4 {}
+T {VDD} 1830 -710 0 0 0.4 0.4 {}
+T {GND} 1850 -270 0 0 0.4 0.4 {}
+T {REF} 1630 -600 2 0 0.4 0.4 {}
+T {CTRL1} 1650 -520 2 0 0.4 0.4 {}
+T {CTRL2} 1650 -500 2 0 0.4 0.4 {}
+T {CTRL3} 1650 -480 2 0 0.4 0.4 {}
+T {CTRL4} 1650 -460 2 0 0.4 0.4 {}
+T {CTRL5} 1650 -440 2 0 0.4 0.4 {}
+T {VCTRL} 1650 -380 2 0 0.4 0.4 {}
diff --git a/xschem/amp_dec.sch b/xschem/amp_dec.sch
new file mode 100644
index 0000000..34972ed
--- /dev/null
+++ b/xschem/amp_dec.sch
@@ -0,0 +1,181 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 140 -180 140 -140 {
+lab=AMP}
+N 210 -140 290 -140 {
+lab=AMP}
+N 290 -180 290 -140 {
+lab=AMP}
+N 290 -320 290 -240 {
+lab=VDD}
+N 290 -450 290 -380 {
+lab=VDD}
+N 210 -450 290 -450 {
+lab=VDD}
+N 140 -450 210 -450 {
+lab=VDD}
+N 140 -450 140 -380 {
+lab=VDD}
+N 140 -320 140 -240 {
+lab=VDD}
+N 70 -210 100 -210 {
+lab=IN1}
+N 220 -210 250 -210 {
+lab=IN2}
+N 140 -210 150 -210 {
+lab=#net1}
+N 280 -210 290 -210 {
+lab=#net1}
+N 290 -210 320 -210 {
+lab=#net1}
+N 140 -80 140 -40 {
+lab=GND}
+N 140 -140 210 -140 {
+lab=AMP}
+N 140 -380 140 -320 {
+lab=VDD}
+N 290 -380 290 -320 {
+lab=VDD}
+N 280 -80 280 -40 {
+lab=GND}
+N 500 -180 500 -140 {
+lab=AMP}
+N 650 -180 650 -140 {
+lab=AMP}
+N 650 -320 650 -240 {
+lab=VDD}
+N 650 -450 650 -380 {
+lab=VDD}
+N 500 -450 500 -380 {
+lab=VDD}
+N 500 -320 500 -240 {
+lab=VDD}
+N 430 -210 460 -210 {
+lab=IN3}
+N 580 -210 610 -210 {
+lab=IN4}
+N 500 -210 510 -210 {
+lab=#net1}
+N 640 -210 650 -210 {
+lab=#net1}
+N 650 -210 680 -210 {
+lab=#net1}
+N 500 -380 500 -320 {
+lab=VDD}
+N 650 -380 650 -320 {
+lab=VDD}
+N 290 -140 540 -140 {
+lab=AMP}
+N 100 -450 140 -450 {
+lab=VDD}
+N 290 -450 540 -450 {
+lab=VDD}
+N 540 -450 650 -450 {
+lab=VDD}
+N 540 -140 650 -140 {
+lab=AMP}
+N 140 -40 140 -20 {
+lab=GND}
+N 150 -210 160 -210 {
+lab=#net1}
+N 160 -210 160 30 {
+lab=#net1}
+N 140 30 160 30 {
+lab=#net1}
+N 160 30 280 30 {
+lab=#net1}
+N 140 -20 280 -20 {
+lab=GND}
+N 280 -40 280 -20 {
+lab=GND}
+N 260 -110 260 30 {
+lab=#net1}
+N 320 -210 320 30 {
+lab=#net1}
+N 280 30 320 30 {
+lab=#net1}
+N 320 30 680 30 {
+lab=#net1}
+N 680 -210 680 30 {
+lab=#net1}
+N 510 -210 520 -210 {
+lab=#net1}
+N 520 -210 520 30 {
+lab=#net1}
+N 650 -140 720 -140 {
+lab=AMP}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 120 -210 0 0 {name=M25
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/cap_mim_m3_1.sym} 140 -110 0 0 {name=C1 model=cap_mim_m3_1 W=20 L=30 MF=1 spiceprefix=X}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 270 -210 0 0 {name=M26
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 480 -210 0 0 {name=M27
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 630 -210 0 0 {name=M28
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/res_high_po_2p85.sym} 280 -110 0 0 {name=R18
+W=2.85
+L=42
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {devices/ipin.sym} 100 -450 0 0 {name=p2 lab=VDD}
+C {devices/ipin.sym} 140 30 0 0 {name=p3 lab=SUB}
+C {devices/ipin.sym} 140 -20 0 0 {name=p4 lab=GND}
+C {devices/ipin.sym} 70 -210 0 0 {name=p5 lab=IN1}
+C {devices/ipin.sym} 220 -210 0 0 {name=p6 lab=IN2}
+C {devices/ipin.sym} 430 -210 0 0 {name=p7 lab=IN3}
+C {devices/ipin.sym} 580 -210 0 0 {name=p8 lab=IN4}
+C {devices/opin.sym} 720 -140 0 0 {name=p1 lab=AMP}
diff --git a/xschem/amp_dec.sym b/xschem/amp_dec.sym
new file mode 100644
index 0000000..8328e5a
--- /dev/null
+++ b/xschem/amp_dec.sym
@@ -0,0 +1,71 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 40 -160 80 -160 {}
+L 4 40 -140 80 -140 {}
+L 4 40 -120 80 -120 {}
+L 4 40 -100 80 -100 {}
+L 4 80 -80 280 -80 {}
+L 4 80 -180 80 -80 {}
+L 4 80 -180 280 -180 {}
+L 4 280 -180 280 -80 {}
+L 4 280 -130 320 -130 {}
+L 4 120 -140 120 -100 {}
+L 4 120 -140 140 -140 {}
+L 4 140 -140 140 -100 {}
+L 4 140 -100 160 -100 {}
+L 4 160 -160 160 -100 {}
+L 4 160 -160 180 -160 {}
+L 4 180 -160 180 -100 {}
+L 4 180 -100 200 -100 {}
+L 4 200 -120 200 -100 {}
+L 4 200 -120 220 -120 {}
+L 4 220 -120 220 -100 {}
+L 4 220 -100 240 -100 {}
+L 4 120 -160 240 -160 {}
+L 4 240 -160 250 -170 {}
+L 4 240 -160 250 -150 {}
+L 4 110 -170 120 -160 {}
+L 4 110 -150 120 -160 {}
+L 4 120 -80 120 -40 {}
+L 4 240 -80 240 -40 {}
+L 4 170 -220 170 -180 {}
+L 4 160 -200 180 -200 {}
+L 4 170 -240 170 -220 {}
+L 4 100 -60 140 -60 {}
+L 4 120 -40 140 -60 {}
+L 4 100 -60 120 -40 {}
+L 4 120 -40 120 -20 {}
+L 4 240 -40 240 -20 {}
+L 4 220 -60 260 -60 {}
+L 4 220 -60 240 -40 {}
+L 4 240 -60 260 -40 {}
+L 4 260 -60 280 -40 {}
+L 4 320 -130 340 -130 {}
+B 5 37.5 -162.5 42.5 -157.5 {name=IN1
+dir=in}
+B 5 37.5 -142.5 42.5 -137.5 {name=IN2
+dir=in}
+B 5 37.5 -122.5 42.5 -117.5 {name=IN3
+dir=in}
+B 5 37.5 -102.5 42.5 -97.5 {name=IN4
+dir=in}
+B 5 337.5 -132.5 342.5 -127.5 {name=AMP
+dir=out}
+B 5 167.5 -242.5 172.5 -237.5 {name=VDD
+dir=in}
+B 5 117.5 -22.5 122.5 -17.5 {name=GND
+dir=in}
+B 5 237.5 -22.5 242.5 -17.5 {name=SUB
+dir=in}
+T {@NAME} 290 -60 0 0 0.4 0.4 {}
+T {amp} 290 -160 0 0 0.4 0.4 {}
+T {1} 60 -180 0 0 0.4 0.4 {}
+T {2} 60 -160 0 0 0.4 0.4 {}
+T {3} 60 -140 0 0 0.4 0.4 {}
+T {4} 60 -120 0 0 0.4 0.4 {}
diff --git a/xschem/analog_wrapper_tb.sch b/xschem/analog_wrapper_tb.sch
deleted file mode 100644
index d9b605c..0000000
--- a/xschem/analog_wrapper_tb.sch
+++ /dev/null
@@ -1,76 +0,0 @@
-v {xschem version=2.9.9 file_version=1.2 }
-G {}
-K {}
-V {}
-S {}
-E {}
-N 300 -290 510 -290 { lab=#net1}
-N 590 -290 590 -250 { lab=#net1}
-N 300 -250 430 -250 { lab=GND}
-N 510 -250 510 -150 { lab=GND}
-N 510 -150 780 -150 { lab=GND}
-N 780 -190 780 -150 { lab=GND}
-N 690 -190 690 -150 { lab=GND}
-N 590 -190 590 -150 { lab=GND}
-N 300 -210 400 -210 { lab=#net2}
-N 480 -270 480 -210 { lab=#net2}
-N 480 -270 690 -270 { lab=#net2}
-N 690 -270 690 -250 { lab=#net2}
-N 300 10 450 10 { lab=#net3}
-N 850 -270 850 0 { lab=io_analog[4]}
-N 780 -270 850 -270 { lab=io_analog[4]}
-N 780 -270 780 -250 { lab=io_analog[4]}
-N 300 30 470 30 { lab=#net4}
-N 300 50 410 50 { lab=#net5}
-N 530 10 660 10 { lab=io_analog[10:0]}
-N 510 -290 590 -290 { lab=#net1}
-N 430 -250 510 -250 { lab=GND}
-N 400 -210 480 -210 { lab=#net2}
-N 460 10 530 10 { lab=io_analog[10:0]}
-N 670 0 850 -0 { lab=io_analog[4]}
-N 300 -270 400 -270 { lab=#net8}
-N 300 -230 400 -230 { lab=#net9}
-N 300 -190 400 -190 { lab=#net10}
-N 300 -190 400 -190 { lab=#net10}
-N 300 -170 400 -170 { lab=#net11}
-N 290 -150 390 -150 { lab=#net12}
-N 290 -130 390 -130 { lab=#net13}
-N 290 -110 390 -110 { lab=#net14}
-N 300 -90 400 -90 { lab=#net15}
-N 300 -10 400 -10 { lab=#net16}
-N 300 70 400 70 { lab=#net17}
-N -60 -290 -0 -290 { lab=#net18}
-N -60 -270 0 -270 { lab=#net19}
-N -60 -250 0 -250 { lab=#net20}
-N -60 -230 0 -230 { lab=#net21}
-N -60 -210 0 -210 { lab=#net22}
-N -60 -210 0 -210 { lab=#net22}
-N -60 -190 0 -190 { lab=#net23}
-N -60 -190 0 -190 { lab=#net23}
-N -60 -170 0 -170 { lab=#net24}
-N -60 -150 0 -150 { lab=#net25}
-N -60 -130 0 -130 { lab=#net26}
-N -60 -110 0 -110 { lab=#net27}
-N -60 -90 0 -90 { lab=#net28}
-N -60 -70 0 -70 { lab=#net29}
-N -60 -50 0 -50 { lab=#net30}
-N 300 -70 400 -70 {}
-N 300 -50 400 -50 {}
-N 300 -30 400 -30 {}
-C {user_analog_project_wrapper.sym} 150 -110 0 0 {name=x1}
-C {devices/vsource.sym} 590 -220 0 0 {name=V1 value="PWL(0.0 0 400u 0 5.4m 3.3)"}
-C {devices/vsource.sym} 690 -220 0 0 {name=V2 value="PWL(0.0 0 300u 0 5.3 1.8)"}
-C {devices/vsource.sym} 780 -220 0 0 {name=V3 value="PWL(0.0 0 100u 0 5m 3.3)"}
-C {devices/bus_connect.sym} 660 10 1 1 {name=l1 lab=io_analog[4]}
-C {devices/gnd.sym} 730 -150 0 0 {name=l2 lab=GND}
-C {devices/lab_pin.sym} 570 10 0 0 {name=l12 sig_type=std_logic lab=io_analog[10:0]}
-C {devices/code.sym} 920 -130 0 0 {name=TT_MODELS only_toplevel=false
-format="tcleval(@value )" value=".lib \\\\$::SKYWATER_MODELS\\\\/sky130.lib.spice tt
-.include \\\\$::PDKPATH\\\\/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice"}
-C {devices/code_shown.sym} 1100 -130 0 0 {name=s1
-only_toplevel=false
-value=".control
-tran 10u 20m
-plot V(\\"io_out[11]\\") V(\\"io_out[12]\\") V(\\"io_out[15]\\") V(\\"io_out[16]\\")
-+ V(\\"gpio_analog[3]\\") V(\\"gpio_analog[7]\\")
-.endc"}
diff --git a/xschem/analog_wrapper_tb.spice b/xschem/analog_wrapper_tb.spice
deleted file mode 100644
index 523a509..0000000
--- a/xschem/analog_wrapper_tb.spice
+++ /dev/null
@@ -1,283 +0,0 @@
-**.subckt analog_wrapper_tb
-x1 net1 net6 GND net7 net2 net8 net9 net10 net16 net17 net18 net19 net20 net21[3] net21[2] net21[1]
-+ net21[0] net22[31] net22[30] net22[29] net22[28] net22[27] net22[26] net22[25] net22[24] net22[23] net22[22]
-+ net22[21] net22[20] net22[19] net22[18] net22[17] net22[16] net22[15] net22[14] net22[13] net22[12] net22[11]
-+ net22[10] net22[9] net22[8] net22[7] net22[6] net22[5] net22[4] net22[3] net22[2] net22[1] net22[0] net23[31]
-+ net23[30] net23[29] net23[28] net23[27] net23[26] net23[25] net23[24] net23[23] net23[22] net23[21] net23[20]
-+ net23[19] net23[18] net23[17] net23[16] net23[15] net23[14] net23[13] net23[12] net23[11] net23[10] net23[9]
-+ net23[8] net23[7] net23[6] net23[5] net23[4] net23[3] net23[2] net23[1] net23[0] net11 net12[31] net12[30]
-+ net12[29] net12[28] net12[27] net12[26] net12[25] net12[24] net12[23] net12[22] net12[21] net12[20] net12[19]
-+ net12[18] net12[17] net12[16] net12[15] net12[14] net12[13] net12[12] net12[11] net12[10] net12[9] net12[8]
-+ net12[7] net12[6] net12[5] net12[4] net12[3] net12[2] net12[1] net12[0] net24[127] net24[126] net24[125]
-+ net24[124] net24[123] net24[122] net24[121] net24[120] net24[119] net24[118] net24[117] net24[116] net24[115]
-+ net24[114] net24[113] net24[112] net24[111] net24[110] net24[109] net24[108] net24[107] net24[106] net24[105]
-+ net24[104] net24[103] net24[102] net24[101] net24[100] net24[99] net24[98] net24[97] net24[96] net24[95]
-+ net24[94] net24[93] net24[92] net24[91] net24[90] net24[89] net24[88] net24[87] net24[86] net24[85] net24[84]
-+ net24[83] net24[82] net24[81] net24[80] net24[79] net24[78] net24[77] net24[76] net24[75] net24[74] net24[73]
-+ net24[72] net24[71] net24[70] net24[69] net24[68] net24[67] net24[66] net24[65] net24[64] net24[63] net24[62]
-+ net24[61] net24[60] net24[59] net24[58] net24[57] net24[56] net24[55] net24[54] net24[53] net24[52] net24[51]
-+ net24[50] net24[49] net24[48] net24[47] net24[46] net24[45] net24[44] net24[43] net24[42] net24[41] net24[40]
-+ net24[39] net24[38] net24[37] net24[36] net24[35] net24[34] net24[33] net24[32] net24[31] net24[30] net24[29]
-+ net24[28] net24[27] net24[26] net24[25] net24[24] net24[23] net24[22] net24[21] net24[20] net24[19] net24[18]
-+ net24[17] net24[16] net24[15] net24[14] net24[13] net24[12] net24[11] net24[10] net24[9] net24[8] net24[7]
-+ net24[6] net24[5] net24[4] net24[3] net24[2] net24[1] net24[0] net13[127] net13[126] net13[125] net13[124]
-+ net13[123] net13[122] net13[121] net13[120] net13[119] net13[118] net13[117] net13[116] net13[115] net13[114]
-+ net13[113] net13[112] net13[111] net13[110] net13[109] net13[108] net13[107] net13[106] net13[105] net13[104]
-+ net13[103] net13[102] net13[101] net13[100] net13[99] net13[98] net13[97] net13[96] net13[95] net13[94]
-+ net13[93] net13[92] net13[91] net13[90] net13[89] net13[88] net13[87] net13[86] net13[85] net13[84] net13[83]
-+ net13[82] net13[81] net13[80] net13[79] net13[78] net13[77] net13[76] net13[75] net13[74] net13[73] net13[72]
-+ net13[71] net13[70] net13[69] net13[68] net13[67] net13[66] net13[65] net13[64] net13[63] net13[62] net13[61]
-+ net13[60] net13[59] net13[58] net13[57] net13[56] net13[55] net13[54] net13[53] net13[52] net13[51] net13[50]
-+ net13[49] net13[48] net13[47] net13[46] net13[45] net13[44] net13[43] net13[42] net13[41] net13[40] net13[39]
-+ net13[38] net13[37] net13[36] net13[35] net13[34] net13[33] net13[32] net13[31] net13[30] net13[29] net13[28]
-+ net13[27] net13[26] net13[25] net13[24] net13[23] net13[22] net13[21] net13[20] net13[19] net13[18] net13[17]
-+ net13[16] net13[15] net13[14] net13[13] net13[12] net13[11] net13[10] net13[9] net13[8] net13[7] net13[6]
-+ net13[5] net13[4] net13[3] net13[2] net13[1] net13[0] net25[127] net25[126] net25[125] net25[124] net25[123]
-+ net25[122] net25[121] net25[120] net25[119] net25[118] net25[117] net25[116] net25[115] net25[114] net25[113]
-+ net25[112] net25[111] net25[110] net25[109] net25[108] net25[107] net25[106] net25[105] net25[104] net25[103]
-+ net25[102] net25[101] net25[100] net25[99] net25[98] net25[97] net25[96] net25[95] net25[94] net25[93]
-+ net25[92] net25[91] net25[90] net25[89] net25[88] net25[87] net25[86] net25[85] net25[84] net25[83] net25[82]
-+ net25[81] net25[80] net25[79] net25[78] net25[77] net25[76] net25[75] net25[74] net25[73] net25[72] net25[71]
-+ net25[70] net25[69] net25[68] net25[67] net25[66] net25[65] net25[64] net25[63] net25[62] net25[61] net25[60]
-+ net25[59] net25[58] net25[57] net25[56] net25[55] net25[54] net25[53] net25[52] net25[51] net25[50] net25[49]
-+ net25[48] net25[47] net25[46] net25[45] net25[44] net25[43] net25[42] net25[41] net25[40] net25[39] net25[38]
-+ net25[37] net25[36] net25[35] net25[34] net25[33] net25[32] net25[31] net25[30] net25[29] net25[28] net25[27]
-+ net25[26] net25[25] net25[24] net25[23] net25[22] net25[21] net25[20] net25[19] net25[18] net25[17] net25[16]
-+ net25[15] net25[14] net25[13] net25[12] net25[11] net25[10] net25[9] net25[8] net25[7] net25[6] net25[5]
-+ net25[4] net25[3] net25[2] net25[1] net25[0] net26[26] net26[25] net26[24] net26[23] net26[22] net26[21]
-+ net26[20] net26[19] net26[18] net26[17] net26[16] net26[15] net26[14] net26[13] net26[12] net26[11] net26[10]
-+ net26[9] net26[8] net26[7] net26[6] net26[5] net26[4] net26[3] net26[2] net26[1] net26[0] net27[26]
-+ net27[25] net27[24] net27[23] net27[22] net27[21] net27[20] net27[19] net27[18] net27[17] net27[16] net27[15]
-+ net27[14] net27[13] net27[12] net27[11] net27[10] net27[9] net27[8] net27[7] net27[6] net27[5] net27[4]
-+ net27[3] net27[2] net27[1] net27[0] net29[26] net29[25] net29[24] net29[23] net29[22] net29[21] net29[20]
-+ net29[19] net29[18] net29[17] net29[16] net29[15] net29[14] net29[13] net29[12] net29[11] net29[10] net29[9]
-+ net29[8] net29[7] net29[6] net29[5] net29[4] net29[3] net29[2] net29[1] net29[0] net30[26] net30[25]
-+ net30[24] net30[23] net30[22] net30[21] net30[20] net30[19] net30[18] net30[17] net30[16] net30[15] net30[14]
-+ net30[13] net30[12] net30[11] net30[10] net30[9] net30[8] net30[7] net30[6] net30[5] net30[4] net30[3]
-+ net30[2] net30[1] net30[0] net31[17] net31[16] net31[15] net31[14] net31[13] net31[12] net31[11] net31[10]
-+ net31[9] net31[8] net31[7] net31[6] net31[5] net31[4] net31[3] net31[2] net31[1] net31[0] net14[17]
-+ net14[16] net14[15] net14[14] net14[13] net14[12] net14[11] net14[10] net14[9] net14[8] net14[7] net14[6]
-+ net14[5] net14[4] net14[3] net14[2] net14[1] net14[0] net3[10] net3[9] net3[8] net3[7] net3[6] net3[5]
-+ net3[4] net3[3] net3[2] net3[1] net3[0] net4[2] net4[1] net4[0] net5[2] net5[1] net5[0] net28 net15[2]
-+ net15[1] net15[0] user_analog_project_wrapper
-V1 net1 GND PWL(0.0 0 400u 0 5.4m 3.3)
-V2 net2 GND PWL(0.0 0 300u 0 5.3 1.8)
-V3 io_analog[4] GND PWL(0.0 0 100u 0 5m 3.3)
-**** begin user architecture code
-.lib /usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
-.include /usr/share/pdk/sky130A/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice
-
-.control
-tran 10u 20m
-plot V("io_out[11]") V("io_out[12]") V("io_out[15]") V("io_out[16]") V("gpio_analog[3]")
-+ V("gpio_analog[7]")
-.endc
-
-**** end user architecture code
-**.ends
-
-* expanding symbol: user_analog_project_wrapper.sym # of pins=32
-* sym_path: /home/tim/gits/caravel_user_project_analog/xschem/user_analog_project_wrapper.sym
-* sch_path: /home/tim/gits/caravel_user_project_analog/xschem/user_analog_project_wrapper.sch
-.subckt user_analog_project_wrapper vdda1 vdda2 vssa1 vssa2 vccd1 vccd2 vssd1 vssd2 wb_clk_i
-+ wb_rst_i wbs_stb_i wbs_cyc_i wbs_we_i wbs_sel_i[3] wbs_sel_i[2] wbs_sel_i[1] wbs_sel_i[0] wbs_dat_i[31]
-+ wbs_dat_i[30] wbs_dat_i[29] wbs_dat_i[28] wbs_dat_i[27] wbs_dat_i[26] wbs_dat_i[25] wbs_dat_i[24] wbs_dat_i[23]
-+ wbs_dat_i[22] wbs_dat_i[21] wbs_dat_i[20] wbs_dat_i[19] wbs_dat_i[18] wbs_dat_i[17] wbs_dat_i[16] wbs_dat_i[15]
-+ wbs_dat_i[14] wbs_dat_i[13] wbs_dat_i[12] wbs_dat_i[11] wbs_dat_i[10] wbs_dat_i[9] wbs_dat_i[8] wbs_dat_i[7]
-+ wbs_dat_i[6] wbs_dat_i[5] wbs_dat_i[4] wbs_dat_i[3] wbs_dat_i[2] wbs_dat_i[1] wbs_dat_i[0] wbs_adr_i[31]
-+ wbs_adr_i[30] wbs_adr_i[29] wbs_adr_i[28] wbs_adr_i[27] wbs_adr_i[26] wbs_adr_i[25] wbs_adr_i[24] wbs_adr_i[23]
-+ wbs_adr_i[22] wbs_adr_i[21] wbs_adr_i[20] wbs_adr_i[19] wbs_adr_i[18] wbs_adr_i[17] wbs_adr_i[16] wbs_adr_i[15]
-+ wbs_adr_i[14] wbs_adr_i[13] wbs_adr_i[12] wbs_adr_i[11] wbs_adr_i[10] wbs_adr_i[9] wbs_adr_i[8] wbs_adr_i[7]
-+ wbs_adr_i[6] wbs_adr_i[5] wbs_adr_i[4] wbs_adr_i[3] wbs_adr_i[2] wbs_adr_i[1] wbs_adr_i[0] wbs_ack_o
-+ wbs_dat_o[31] wbs_dat_o[30] wbs_dat_o[29] wbs_dat_o[28] wbs_dat_o[27] wbs_dat_o[26] wbs_dat_o[25] wbs_dat_o[24]
-+ wbs_dat_o[23] wbs_dat_o[22] wbs_dat_o[21] wbs_dat_o[20] wbs_dat_o[19] wbs_dat_o[18] wbs_dat_o[17] wbs_dat_o[16]
-+ wbs_dat_o[15] wbs_dat_o[14] wbs_dat_o[13] wbs_dat_o[12] wbs_dat_o[11] wbs_dat_o[10] wbs_dat_o[9] wbs_dat_o[8]
-+ wbs_dat_o[7] wbs_dat_o[6] wbs_dat_o[5] wbs_dat_o[4] wbs_dat_o[3] wbs_dat_o[2] wbs_dat_o[1] wbs_dat_o[0]
-+ la_data_in[127] la_data_in[126] la_data_in[125] la_data_in[124] la_data_in[123] la_data_in[122] la_data_in[121]
-+ la_data_in[120] la_data_in[119] la_data_in[118] la_data_in[117] la_data_in[116] la_data_in[115] la_data_in[114]
-+ la_data_in[113] la_data_in[112] la_data_in[111] la_data_in[110] la_data_in[109] la_data_in[108] la_data_in[107]
-+ la_data_in[106] la_data_in[105] la_data_in[104] la_data_in[103] la_data_in[102] la_data_in[101] la_data_in[100]
-+ la_data_in[99] la_data_in[98] la_data_in[97] la_data_in[96] la_data_in[95] la_data_in[94] la_data_in[93]
-+ la_data_in[92] la_data_in[91] la_data_in[90] la_data_in[89] la_data_in[88] la_data_in[87] la_data_in[86]
-+ la_data_in[85] la_data_in[84] la_data_in[83] la_data_in[82] la_data_in[81] la_data_in[80] la_data_in[79]
-+ la_data_in[78] la_data_in[77] la_data_in[76] la_data_in[75] la_data_in[74] la_data_in[73] la_data_in[72]
-+ la_data_in[71] la_data_in[70] la_data_in[69] la_data_in[68] la_data_in[67] la_data_in[66] la_data_in[65]
-+ la_data_in[64] la_data_in[63] la_data_in[62] la_data_in[61] la_data_in[60] la_data_in[59] la_data_in[58]
-+ la_data_in[57] la_data_in[56] la_data_in[55] la_data_in[54] la_data_in[53] la_data_in[52] la_data_in[51]
-+ la_data_in[50] la_data_in[49] la_data_in[48] la_data_in[47] la_data_in[46] la_data_in[45] la_data_in[44]
-+ la_data_in[43] la_data_in[42] la_data_in[41] la_data_in[40] la_data_in[39] la_data_in[38] la_data_in[37]
-+ la_data_in[36] la_data_in[35] la_data_in[34] la_data_in[33] la_data_in[32] la_data_in[31] la_data_in[30]
-+ la_data_in[29] la_data_in[28] la_data_in[27] la_data_in[26] la_data_in[25] la_data_in[24] la_data_in[23]
-+ la_data_in[22] la_data_in[21] la_data_in[20] la_data_in[19] la_data_in[18] la_data_in[17] la_data_in[16]
-+ la_data_in[15] la_data_in[14] la_data_in[13] la_data_in[12] la_data_in[11] la_data_in[10] la_data_in[9]
-+ la_data_in[8] la_data_in[7] la_data_in[6] la_data_in[5] la_data_in[4] la_data_in[3] la_data_in[2] la_data_in[1]
-+ la_data_in[0] la_data_out[127] la_data_out[126] la_data_out[125] la_data_out[124] la_data_out[123]
-+ la_data_out[122] la_data_out[121] la_data_out[120] la_data_out[119] la_data_out[118] la_data_out[117]
-+ la_data_out[116] la_data_out[115] la_data_out[114] la_data_out[113] la_data_out[112] la_data_out[111]
-+ la_data_out[110] la_data_out[109] la_data_out[108] la_data_out[107] la_data_out[106] la_data_out[105]
-+ la_data_out[104] la_data_out[103] la_data_out[102] la_data_out[101] la_data_out[100] la_data_out[99] la_data_out[98]
-+ la_data_out[97] la_data_out[96] la_data_out[95] la_data_out[94] la_data_out[93] la_data_out[92] la_data_out[91]
-+ la_data_out[90] la_data_out[89] la_data_out[88] la_data_out[87] la_data_out[86] la_data_out[85] la_data_out[84]
-+ la_data_out[83] la_data_out[82] la_data_out[81] la_data_out[80] la_data_out[79] la_data_out[78] la_data_out[77]
-+ la_data_out[76] la_data_out[75] la_data_out[74] la_data_out[73] la_data_out[72] la_data_out[71] la_data_out[70]
-+ la_data_out[69] la_data_out[68] la_data_out[67] la_data_out[66] la_data_out[65] la_data_out[64] la_data_out[63]
-+ la_data_out[62] la_data_out[61] la_data_out[60] la_data_out[59] la_data_out[58] la_data_out[57] la_data_out[56]
-+ la_data_out[55] la_data_out[54] la_data_out[53] la_data_out[52] la_data_out[51] la_data_out[50] la_data_out[49]
-+ la_data_out[48] la_data_out[47] la_data_out[46] la_data_out[45] la_data_out[44] la_data_out[43] la_data_out[42]
-+ la_data_out[41] la_data_out[40] la_data_out[39] la_data_out[38] la_data_out[37] la_data_out[36] la_data_out[35]
-+ la_data_out[34] la_data_out[33] la_data_out[32] la_data_out[31] la_data_out[30] la_data_out[29] la_data_out[28]
-+ la_data_out[27] la_data_out[26] la_data_out[25] la_data_out[24] la_data_out[23] la_data_out[22] la_data_out[21]
-+ la_data_out[20] la_data_out[19] la_data_out[18] la_data_out[17] la_data_out[16] la_data_out[15] la_data_out[14]
-+ la_data_out[13] la_data_out[12] la_data_out[11] la_data_out[10] la_data_out[9] la_data_out[8] la_data_out[7]
-+ la_data_out[6] la_data_out[5] la_data_out[4] la_data_out[3] la_data_out[2] la_data_out[1] la_data_out[0]
-+ la_oenb[127] la_oenb[126] la_oenb[125] la_oenb[124] la_oenb[123] la_oenb[122] la_oenb[121] la_oenb[120]
-+ la_oenb[119] la_oenb[118] la_oenb[117] la_oenb[116] la_oenb[115] la_oenb[114] la_oenb[113] la_oenb[112]
-+ la_oenb[111] la_oenb[110] la_oenb[109] la_oenb[108] la_oenb[107] la_oenb[106] la_oenb[105] la_oenb[104]
-+ la_oenb[103] la_oenb[102] la_oenb[101] la_oenb[100] la_oenb[99] la_oenb[98] la_oenb[97] la_oenb[96] la_oenb[95]
-+ la_oenb[94] la_oenb[93] la_oenb[92] la_oenb[91] la_oenb[90] la_oenb[89] la_oenb[88] la_oenb[87] la_oenb[86]
-+ la_oenb[85] la_oenb[84] la_oenb[83] la_oenb[82] la_oenb[81] la_oenb[80] la_oenb[79] la_oenb[78] la_oenb[77]
-+ la_oenb[76] la_oenb[75] la_oenb[74] la_oenb[73] la_oenb[72] la_oenb[71] la_oenb[70] la_oenb[69] la_oenb[68]
-+ la_oenb[67] la_oenb[66] la_oenb[65] la_oenb[64] la_oenb[63] la_oenb[62] la_oenb[61] la_oenb[60] la_oenb[59]
-+ la_oenb[58] la_oenb[57] la_oenb[56] la_oenb[55] la_oenb[54] la_oenb[53] la_oenb[52] la_oenb[51] la_oenb[50]
-+ la_oenb[49] la_oenb[48] la_oenb[47] la_oenb[46] la_oenb[45] la_oenb[44] la_oenb[43] la_oenb[42] la_oenb[41]
-+ la_oenb[40] la_oenb[39] la_oenb[38] la_oenb[37] la_oenb[36] la_oenb[35] la_oenb[34] la_oenb[33] la_oenb[32]
-+ la_oenb[31] la_oenb[30] la_oenb[29] la_oenb[28] la_oenb[27] la_oenb[26] la_oenb[25] la_oenb[24] la_oenb[23]
-+ la_oenb[22] la_oenb[21] la_oenb[20] la_oenb[19] la_oenb[18] la_oenb[17] la_oenb[16] la_oenb[15] la_oenb[14]
-+ la_oenb[13] la_oenb[12] la_oenb[11] la_oenb[10] la_oenb[9] la_oenb[8] la_oenb[7] la_oenb[6] la_oenb[5]
-+ la_oenb[4] la_oenb[3] la_oenb[2] la_oenb[1] la_oenb[0] io_in[26] io_in[25] io_in[24] io_in[23] io_in[22]
-+ io_in[21] io_in[20] io_in[19] io_in[18] io_in[17] io_in[16] io_in[15] io_in[14] io_in[13] io_in[12] io_in[11]
-+ io_in[10] io_in[9] io_in[8] io_in[7] io_in[6] io_in[5] io_in[4] io_in[3] io_in[2] io_in[1] io_in[0]
-+ io_in_3v3[26] io_in_3v3[25] io_in_3v3[24] io_in_3v3[23] io_in_3v3[22] io_in_3v3[21] io_in_3v3[20] io_in_3v3[19]
-+ io_in_3v3[18] io_in_3v3[17] io_in_3v3[16] io_in_3v3[15] io_in_3v3[14] io_in_3v3[13] io_in_3v3[12] io_in_3v3[11]
-+ io_in_3v3[10] io_in_3v3[9] io_in_3v3[8] io_in_3v3[7] io_in_3v3[6] io_in_3v3[5] io_in_3v3[4] io_in_3v3[3]
-+ io_in_3v3[2] io_in_3v3[1] io_in_3v3[0] io_out[26] io_out[25] io_out[24] io_out[23] io_out[22] io_out[21]
-+ io_out[20] io_out[19] io_out[18] io_out[17] io_out[16] io_out[15] io_out[14] io_out[13] io_out[12] io_out[11]
-+ io_out[10] io_out[9] io_out[8] io_out[7] io_out[6] io_out[5] io_out[4] io_out[3] io_out[2] io_out[1] io_out[0]
-+ io_oeb[26] io_oeb[25] io_oeb[24] io_oeb[23] io_oeb[22] io_oeb[21] io_oeb[20] io_oeb[19] io_oeb[18] io_oeb[17]
-+ io_oeb[16] io_oeb[15] io_oeb[14] io_oeb[13] io_oeb[12] io_oeb[11] io_oeb[10] io_oeb[9] io_oeb[8] io_oeb[7]
-+ io_oeb[6] io_oeb[5] io_oeb[4] io_oeb[3] io_oeb[2] io_oeb[1] io_oeb[0] gpio_analog[17] gpio_analog[16]
-+ gpio_analog[15] gpio_analog[14] gpio_analog[13] gpio_analog[12] gpio_analog[11] gpio_analog[10] gpio_analog[9]
-+ gpio_analog[8] gpio_analog[7] gpio_analog[6] gpio_analog[5] gpio_analog[4] gpio_analog[3] gpio_analog[2]
-+ gpio_analog[1] gpio_analog[0] gpio_noesd[17] gpio_noesd[16] gpio_noesd[15] gpio_noesd[14] gpio_noesd[13]
-+ gpio_noesd[12] gpio_noesd[11] gpio_noesd[10] gpio_noesd[9] gpio_noesd[8] gpio_noesd[7] gpio_noesd[6] gpio_noesd[5]
-+ gpio_noesd[4] gpio_noesd[3] gpio_noesd[2] gpio_noesd[1] gpio_noesd[0] io_analog[10] io_analog[9] io_analog[8]
-+ io_analog[7] io_analog[6] io_analog[5] io_analog[4] io_analog[3] io_analog[2] io_analog[1] io_analog[0]
-+ io_clamp_high[2] io_clamp_high[1] io_clamp_high[0] io_clamp_low[2] io_clamp_low[1] io_clamp_low[0] user_clock2
-+ user_irq[2] user_irq[1] user_irq[0]
-*.iopin vdda1
-*.iopin vdda2
-*.iopin vssa1
-*.iopin vssa2
-*.iopin vccd1
-*.iopin vccd2
-*.iopin vssd1
-*.iopin vssd2
-*.ipin wb_clk_i
-*.ipin wb_rst_i
-*.ipin wbs_stb_i
-*.ipin wbs_cyc_i
-*.ipin wbs_we_i
-*.ipin wbs_sel_i[3],wbs_sel_i[2],wbs_sel_i[1],wbs_sel_i[0]
-*.ipin
-*+ wbs_dat_i[31],wbs_dat_i[30],wbs_dat_i[29],wbs_dat_i[28],wbs_dat_i[27],wbs_dat_i[26],wbs_dat_i[25],wbs_dat_i[24],wbs_dat_i[23],wbs_dat_i[22],wbs_dat_i[21],wbs_dat_i[20],wbs_dat_i[19],wbs_dat_i[18],wbs_dat_i[17],wbs_dat_i[16],wbs_dat_i[15],wbs_dat_i[14],wbs_dat_i[13],wbs_dat_i[12],wbs_dat_i[11],wbs_dat_i[10],wbs_dat_i[9],wbs_dat_i[8],wbs_dat_i[7],wbs_dat_i[6],wbs_dat_i[5],wbs_dat_i[4],wbs_dat_i[3],wbs_dat_i[2],wbs_dat_i[1],wbs_dat_i[0]
-*.ipin
-*+ wbs_adr_i[31],wbs_adr_i[30],wbs_adr_i[29],wbs_adr_i[28],wbs_adr_i[27],wbs_adr_i[26],wbs_adr_i[25],wbs_adr_i[24],wbs_adr_i[23],wbs_adr_i[22],wbs_adr_i[21],wbs_adr_i[20],wbs_adr_i[19],wbs_adr_i[18],wbs_adr_i[17],wbs_adr_i[16],wbs_adr_i[15],wbs_adr_i[14],wbs_adr_i[13],wbs_adr_i[12],wbs_adr_i[11],wbs_adr_i[10],wbs_adr_i[9],wbs_adr_i[8],wbs_adr_i[7],wbs_adr_i[6],wbs_adr_i[5],wbs_adr_i[4],wbs_adr_i[3],wbs_adr_i[2],wbs_adr_i[1],wbs_adr_i[0]
-*.opin wbs_ack_o
-*.opin
-*+ wbs_dat_o[31],wbs_dat_o[30],wbs_dat_o[29],wbs_dat_o[28],wbs_dat_o[27],wbs_dat_o[26],wbs_dat_o[25],wbs_dat_o[24],wbs_dat_o[23],wbs_dat_o[22],wbs_dat_o[21],wbs_dat_o[20],wbs_dat_o[19],wbs_dat_o[18],wbs_dat_o[17],wbs_dat_o[16],wbs_dat_o[15],wbs_dat_o[14],wbs_dat_o[13],wbs_dat_o[12],wbs_dat_o[11],wbs_dat_o[10],wbs_dat_o[9],wbs_dat_o[8],wbs_dat_o[7],wbs_dat_o[6],wbs_dat_o[5],wbs_dat_o[4],wbs_dat_o[3],wbs_dat_o[2],wbs_dat_o[1],wbs_dat_o[0]
-*.ipin
-*+ la_data_in[127],la_data_in[126],la_data_in[125],la_data_in[124],la_data_in[123],la_data_in[122],la_data_in[121],la_data_in[120],la_data_in[119],la_data_in[118],la_data_in[117],la_data_in[116],la_data_in[115],la_data_in[114],la_data_in[113],la_data_in[112],la_data_in[111],la_data_in[110],la_data_in[109],la_data_in[108],la_data_in[107],la_data_in[106],la_data_in[105],la_data_in[104],la_data_in[103],la_data_in[102],la_data_in[101],la_data_in[100],la_data_in[99],la_data_in[98],la_data_in[97],la_data_in[96],la_data_in[95],la_data_in[94],la_data_in[93],la_data_in[92],la_data_in[91],la_data_in[90],la_data_in[89],la_data_in[88],la_data_in[87],la_data_in[86],la_data_in[85],la_data_in[84],la_data_in[83],la_data_in[82],la_data_in[81],la_data_in[80],la_data_in[79],la_data_in[78],la_data_in[77],la_data_in[76],la_data_in[75],la_data_in[74],la_data_in[73],la_data_in[72],la_data_in[71],la_data_in[70],la_data_in[69],la_data_in[68],la_data_in[67],la_data_in[66],la_data_in[65],la_data_in[64],la_data_in[63],la_data_in[62],la_data_in[61],la_data_in[60],la_data_in[59],la_data_in[58],la_data_in[57],la_data_in[56],la_data_in[55],la_data_in[54],la_data_in[53],la_data_in[52],la_data_in[51],la_data_in[50],la_data_in[49],la_data_in[48],la_data_in[47],la_data_in[46],la_data_in[45],la_data_in[44],la_data_in[43],la_data_in[42],la_data_in[41],la_data_in[40],la_data_in[39],la_data_in[38],la_data_in[37],la_data_in[36],la_data_in[35],la_data_in[34],la_data_in[33],la_data_in[32],la_data_in[31],la_data_in[30],la_data_in[29],la_data_in[28],la_data_in[27],la_data_in[26],la_data_in[25],la_data_in[24],la_data_in[23],la_data_in[22],la_data_in[21],la_data_in[20],la_data_in[19],la_data_in[18],la_data_in[17],la_data_in[16],la_data_in[15],la_data_in[14],la_data_in[13],la_data_in[12],la_data_in[11],la_data_in[10],la_data_in[9],la_data_in[8],la_data_in[7],la_data_in[6],la_data_in[5],la_data_in[4],la_data_in[3],la_data_in[2],la_data_in[1],la_data_in[0]
-*.opin
-*+ la_data_out[127],la_data_out[126],la_data_out[125],la_data_out[124],la_data_out[123],la_data_out[122],la_data_out[121],la_data_out[120],la_data_out[119],la_data_out[118],la_data_out[117],la_data_out[116],la_data_out[115],la_data_out[114],la_data_out[113],la_data_out[112],la_data_out[111],la_data_out[110],la_data_out[109],la_data_out[108],la_data_out[107],la_data_out[106],la_data_out[105],la_data_out[104],la_data_out[103],la_data_out[102],la_data_out[101],la_data_out[100],la_data_out[99],la_data_out[98],la_data_out[97],la_data_out[96],la_data_out[95],la_data_out[94],la_data_out[93],la_data_out[92],la_data_out[91],la_data_out[90],la_data_out[89],la_data_out[88],la_data_out[87],la_data_out[86],la_data_out[85],la_data_out[84],la_data_out[83],la_data_out[82],la_data_out[81],la_data_out[80],la_data_out[79],la_data_out[78],la_data_out[77],la_data_out[76],la_data_out[75],la_data_out[74],la_data_out[73],la_data_out[72],la_data_out[71],la_data_out[70],la_data_out[69],la_data_out[68],la_data_out[67],la_data_out[66],la_data_out[65],la_data_out[64],la_data_out[63],la_data_out[62],la_data_out[61],la_data_out[60],la_data_out[59],la_data_out[58],la_data_out[57],la_data_out[56],la_data_out[55],la_data_out[54],la_data_out[53],la_data_out[52],la_data_out[51],la_data_out[50],la_data_out[49],la_data_out[48],la_data_out[47],la_data_out[46],la_data_out[45],la_data_out[44],la_data_out[43],la_data_out[42],la_data_out[41],la_data_out[40],la_data_out[39],la_data_out[38],la_data_out[37],la_data_out[36],la_data_out[35],la_data_out[34],la_data_out[33],la_data_out[32],la_data_out[31],la_data_out[30],la_data_out[29],la_data_out[28],la_data_out[27],la_data_out[26],la_data_out[25],la_data_out[24],la_data_out[23],la_data_out[22],la_data_out[21],la_data_out[20],la_data_out[19],la_data_out[18],la_data_out[17],la_data_out[16],la_data_out[15],la_data_out[14],la_data_out[13],la_data_out[12],la_data_out[11],la_data_out[10],la_data_out[9],la_data_out[8],la_data_out[7],la_data_out[6],la_data_out[5],la_data_out[4],la_data_out[3],la_data_out[2],la_data_out[1],la_data_out[0]
-*.ipin
-*+ io_in[26],io_in[25],io_in[24],io_in[23],io_in[22],io_in[21],io_in[20],io_in[19],io_in[18],io_in[17],io_in[16],io_in[15],io_in[14],io_in[13],io_in[12],io_in[11],io_in[10],io_in[9],io_in[8],io_in[7],io_in[6],io_in[5],io_in[4],io_in[3],io_in[2],io_in[1],io_in[0]
-*.ipin
-*+ io_in_3v3[26],io_in_3v3[25],io_in_3v3[24],io_in_3v3[23],io_in_3v3[22],io_in_3v3[21],io_in_3v3[20],io_in_3v3[19],io_in_3v3[18],io_in_3v3[17],io_in_3v3[16],io_in_3v3[15],io_in_3v3[14],io_in_3v3[13],io_in_3v3[12],io_in_3v3[11],io_in_3v3[10],io_in_3v3[9],io_in_3v3[8],io_in_3v3[7],io_in_3v3[6],io_in_3v3[5],io_in_3v3[4],io_in_3v3[3],io_in_3v3[2],io_in_3v3[1],io_in_3v3[0]
-*.ipin user_clock2
-*.opin
-*+ io_out[26],io_out[25],io_out[24],io_out[23],io_out[22],io_out[21],io_out[20],io_out[19],io_out[18],io_out[17],io_out[16],io_out[15],io_out[14],io_out[13],io_out[12],io_out[11],io_out[10],io_out[9],io_out[8],io_out[7],io_out[6],io_out[5],io_out[4],io_out[3],io_out[2],io_out[1],io_out[0]
-*.opin
-*+ io_oeb[26],io_oeb[25],io_oeb[24],io_oeb[23],io_oeb[22],io_oeb[21],io_oeb[20],io_oeb[19],io_oeb[18],io_oeb[17],io_oeb[16],io_oeb[15],io_oeb[14],io_oeb[13],io_oeb[12],io_oeb[11],io_oeb[10],io_oeb[9],io_oeb[8],io_oeb[7],io_oeb[6],io_oeb[5],io_oeb[4],io_oeb[3],io_oeb[2],io_oeb[1],io_oeb[0]
-*.iopin
-*+ gpio_analog[17],gpio_analog[16],gpio_analog[15],gpio_analog[14],gpio_analog[13],gpio_analog[12],gpio_analog[11],gpio_analog[10],gpio_analog[9],gpio_analog[8],gpio_analog[7],gpio_analog[6],gpio_analog[5],gpio_analog[4],gpio_analog[3],gpio_analog[2],gpio_analog[1],gpio_analog[0]
-*.iopin
-*+ gpio_noesd[17],gpio_noesd[16],gpio_noesd[15],gpio_noesd[14],gpio_noesd[13],gpio_noesd[12],gpio_noesd[11],gpio_noesd[10],gpio_noesd[9],gpio_noesd[8],gpio_noesd[7],gpio_noesd[6],gpio_noesd[5],gpio_noesd[4],gpio_noesd[3],gpio_noesd[2],gpio_noesd[1],gpio_noesd[0]
-*.iopin
-*+ io_analog[10],io_analog[9],io_analog[8],io_analog[7],io_analog[6],io_analog[5],io_analog[4],io_analog[3],io_analog[2],io_analog[1],io_analog[0]
-*.iopin io_clamp_high[2],io_clamp_high[1],io_clamp_high[0]
-*.iopin io_clamp_low[2],io_clamp_low[1],io_clamp_low[0]
-*.opin user_irq[2],user_irq[1],user_irq[0]
-*.ipin
-*+ la_oenb[127],la_oenb[126],la_oenb[125],la_oenb[124],la_oenb[123],la_oenb[122],la_oenb[121],la_oenb[120],la_oenb[119],la_oenb[118],la_oenb[117],la_oenb[116],la_oenb[115],la_oenb[114],la_oenb[113],la_oenb[112],la_oenb[111],la_oenb[110],la_oenb[109],la_oenb[108],la_oenb[107],la_oenb[106],la_oenb[105],la_oenb[104],la_oenb[103],la_oenb[102],la_oenb[101],la_oenb[100],la_oenb[99],la_oenb[98],la_oenb[97],la_oenb[96],la_oenb[95],la_oenb[94],la_oenb[93],la_oenb[92],la_oenb[91],la_oenb[90],la_oenb[89],la_oenb[88],la_oenb[87],la_oenb[86],la_oenb[85],la_oenb[84],la_oenb[83],la_oenb[82],la_oenb[81],la_oenb[80],la_oenb[79],la_oenb[78],la_oenb[77],la_oenb[76],la_oenb[75],la_oenb[74],la_oenb[73],la_oenb[72],la_oenb[71],la_oenb[70],la_oenb[69],la_oenb[68],la_oenb[67],la_oenb[66],la_oenb[65],la_oenb[64],la_oenb[63],la_oenb[62],la_oenb[61],la_oenb[60],la_oenb[59],la_oenb[58],la_oenb[57],la_oenb[56],la_oenb[55],la_oenb[54],la_oenb[53],la_oenb[52],la_oenb[51],la_oenb[50],la_oenb[49],la_oenb[48],la_oenb[47],la_oenb[46],la_oenb[45],la_oenb[44],la_oenb[43],la_oenb[42],la_oenb[41],la_oenb[40],la_oenb[39],la_oenb[38],la_oenb[37],la_oenb[36],la_oenb[35],la_oenb[34],la_oenb[33],la_oenb[32],la_oenb[31],la_oenb[30],la_oenb[29],la_oenb[28],la_oenb[27],la_oenb[26],la_oenb[25],la_oenb[24],la_oenb[23],la_oenb[22],la_oenb[21],la_oenb[20],la_oenb[19],la_oenb[18],la_oenb[17],la_oenb[16],la_oenb[15],la_oenb[14],la_oenb[13],la_oenb[12],la_oenb[11],la_oenb[10],la_oenb[9],la_oenb[8],la_oenb[7],la_oenb[6],la_oenb[5],la_oenb[4],la_oenb[3],la_oenb[2],la_oenb[1],la_oenb[0]
-x1 vdda1 vccd1 gpio_analog[3] io_out[11] io_out[12] vssa1 example_por
-x2 io_analog[4] vccd1 gpio_analog[7] io_out[15] io_out[16] vssa1 example_por
-R1 vssa1 io_clamp_low[2] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R2 vssa1 io_clamp_high[2] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R4 vssa1 io_clamp_low[1] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R5 vssa1 io_clamp_high[1] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R6 vssa1 io_clamp_low[0] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R7 io_analog[4] io_clamp_high[0] sky130_fd_pr__res_generic_m3 W=11 L=0.25 m=1
-R8 vssd1 io_oeb[12] sky130_fd_pr__res_generic_m3 W=0.56 L=0.49 m=1
-R9 vssd1 io_oeb[16] sky130_fd_pr__res_generic_m3 W=0.56 L=0.31 m=1
-R11 vssd1 io_oeb[11] sky130_fd_pr__res_generic_m3 W=0.56 L=0.58 m=1
-R12 vssd1 io_oeb[15] sky130_fd_pr__res_generic_m3 W=0.56 L=0.6 m=1
-.ends
-
-
-* expanding symbol: example_por.sym # of pins=6
-* sym_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sym
-* sch_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sch
-.subckt example_por vdd3v3 vdd1v8 porb_h porb_l por_l vss
-*.iopin vdd3v3
-*.iopin vss
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-*.iopin vdd1v8
-XC1 net9 vss sky130_fd_pr__cap_mim_m3_1 W=30 L=30 MF=1 m=1
-XC2 vss net9 sky130_fd_pr__cap_mim_m3_2 W=30 L=30 MF=1 m=1
-XM1 net3 net7 net5 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM2 net2 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XR1 net4 vdd3v3 vss sky130_fd_pr__res_xhigh_po_0p69 L=500 mult=1 m=1
-XM4 net5 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM5 net3 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XR2 vss net4 vss sky130_fd_pr__res_xhigh_po_0p69 L=150 mult=1 m=1
-XM7 net2 net2 net1 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM8 net1 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XM10 net7 net4 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XM9 net7 net7 net6 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM11 net6 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=16 nf=8 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=1 m=1
-XM12 net8 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM13 net9 net2 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XR3 vss vss vss sky130_fd_pr__res_xhigh_po_0p69 L=25 mult=2 m=2
-x2 net10 vss vss vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8
-x3 net10 vss vss vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8
-x4 net10 vss vss vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8
-x5 net9 vss vss vdd3v3 vdd3v3 net10 sky130_fd_sc_hvl__schmittbuf_1
-.ends
-
-.GLOBAL GND
-** flattened .save nodes
-.end
diff --git a/xschem/bias_calc.sch b/xschem/bias_calc.sch
new file mode 100644
index 0000000..f388939
--- /dev/null
+++ b/xschem/bias_calc.sch
@@ -0,0 +1,339 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+B 5 87.5 -202.5 92.5 -197.5 {name=VDD
+dir=in}
+N 140 -250 210 -250 {
+lab=#net1}
+N 140 -250 140 -230 {
+lab=#net1}
+N 210 -250 300 -250 {
+lab=#net1}
+N 300 -250 300 -230 {
+lab=#net1}
+N 140 -170 140 -130 {
+lab=#net2}
+N 300 -170 300 -130 {
+lab=#net3}
+N 460 -330 460 -290 {
+lab=BIAS2V}
+N 470 -250 540 -250 {
+lab=#net4}
+N 470 -250 470 -230 {
+lab=#net4}
+N 540 -250 630 -250 {
+lab=#net4}
+N 630 -250 630 -230 {
+lab=#net4}
+N 470 -170 470 -130 {
+lab=BIASOUT}
+N 630 -170 630 -130 {
+lab=#net5}
+N 470 -200 560 -200 {
+lab=PSUB}
+N 590 -150 590 -100 {
+lab=#net5}
+N 590 -150 630 -150 {
+lab=#net5}
+N 430 -120 590 -120 {
+lab=#net5}
+N 40 -200 100 -200 {
+lab=AMP}
+N 60 40 220 40 {
+lab=#net6}
+N 410 -200 430 -200 {
+lab=#net3}
+N 410 -200 410 -150 {
+lab=#net3}
+N 300 -150 410 -150 {
+lab=#net3}
+N 360 -240 360 -200 {
+lab=VOP}
+N 340 -200 360 -200 {
+lab=VOP}
+N 70 -480 460 -480 {
+lab=BIAS2V}
+N 460 -480 460 -330 {
+lab=BIAS2V}
+N 130 -480 130 -290 {
+lab=BIAS2V}
+N 70 -500 560 -500 {
+lab=PSUB}
+N 670 -200 720 -200 {
+lab=VCTRL}
+N 560 -200 630 -200 {
+lab=PSUB}
+N 230 -200 300 -200 {
+lab=PSUB}
+N 230 -290 230 -200 {
+lab=PSUB}
+N 140 -200 230 -200 {
+lab=PSUB}
+N 70 -520 210 -520 {
+lab=VDD}
+N 210 -520 540 -520 {
+lab=VDD}
+N 430 -110 430 -100 {
+lab=#net5}
+N 430 -120 430 -110 {
+lab=#net5}
+N 60 20 650 20 {
+lab=SUB}
+N 650 -100 650 20 {
+lab=SUB}
+N 630 -100 650 -100 {
+lab=SUB}
+N 470 -100 490 -100 {
+lab=SUB}
+N 490 -100 490 20 {
+lab=SUB}
+N 280 -100 280 20 {
+lab=SUB}
+N 120 -100 120 20 {
+lab=SUB}
+N 220 40 630 40 {
+lab=#net6}
+N 630 -70 630 40 {
+lab=#net6}
+N 470 -70 470 40 {
+lab=#net6}
+N 140 -70 140 40 {
+lab=#net6}
+N 300 -70 300 40 {
+lab=#net6}
+N 470 -150 500 -150 {
+lab=BIASOUT}
+N 170 -290 230 -290 {
+lab=PSUB}
+N 230 -290 280 -290 {
+lab=PSUB}
+N 320 -480 320 -290 {
+lab=BIAS2V}
+N 170 -520 170 -320 {
+lab=VDD}
+N 280 -520 280 -320 {
+lab=VDD}
+N 280 -260 280 -250 {
+lab=#net1}
+N 170 -260 170 -250 {
+lab=#net1}
+N 500 -260 500 -250 {
+lab=#net4}
+N 570 -260 570 -250 {
+lab=#net4}
+N 630 -260 630 -250 {
+lab=#net4}
+N 530 -480 530 -290 {
+lab=BIAS2V}
+N 460 -480 530 -480 {
+lab=BIAS2V}
+N 590 -480 590 -290 {
+lab=BIAS2V}
+N 530 -480 590 -480 {
+lab=BIAS2V}
+N 500 -520 500 -320 {
+lab=VDD}
+N 630 -520 630 -320 {
+lab=VDD}
+N 540 -520 630 -520 {
+lab=VDD}
+N 570 -520 570 -320 {
+lab=VDD}
+N 500 -290 510 -290 {
+lab=PSUB}
+N 510 -210 510 -200 {
+lab=PSUB}
+N 570 -290 580 -290 {
+lab=PSUB}
+N 580 -290 580 -200 {
+lab=PSUB}
+N 630 -290 640 -290 {
+lab=PSUB}
+N 640 -500 640 -290 {
+lab=PSUB}
+N 560 -500 640 -500 {
+lab=PSUB}
+N 580 -500 580 -290 {
+lab=PSUB}
+N 230 -500 230 -290 {
+lab=PSUB}
+N 510 -500 510 -290 {
+lab=PSUB}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 150 -290 0 0 {name=M29
+L=0.35
+W=15
+nf=15
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 320 -200 0 1 {name=M30
+L=0.35
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 120 -200 0 0 {name=M31
+L=0.35
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 480 -290 0 0 {name=M36
+L=0.35
+W=15
+nf=15
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 650 -200 0 1 {name=M37
+L=0.35
+W=30
+nf=30
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 450 -200 0 0 {name=M38
+L=0.35
+W=30
+nf=30
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 610 -100 0 0 {name=M39
+L=0.15
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 450 -100 0 0 {name=M40
+L=0.15
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/res_high_po_2p85.sym} 140 -100 0 0 {name=R19
+W=2.85
+L=7.6
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/res_high_po_2p85.sym} 300 -100 0 0 {name=R20
+W=2.85
+L=11.4
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {devices/ipin.sym} 40 -200 0 0 {name=p1 lab=AMP}
+C {devices/ipin.sym} 360 -240 0 1 {name=p2 lab=VOP}
+C {devices/ipin.sym} 720 -200 2 0 {name=p3 lab=VCTRL}
+C {devices/ipin.sym} 70 -480 0 0 {name=p4 lab=BIAS2V}
+C {devices/ipin.sym} 70 -520 0 0 {name=p5 lab=VDD}
+C {devices/ipin.sym} 70 -500 0 0 {name=p6 lab=PSUB}
+C {devices/ipin.sym} 60 20 0 0 {name=p7 lab=SUB}
+C {devices/ipin.sym} 60 40 0 0 {name=p8 lab=GND}
+C {devices/opin.sym} 500 -150 0 0 {name=p9 lab=BIASOUT}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 300 -290 0 1 {name=M1
+L=0.35
+W=15
+nf=15
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 550 -290 0 0 {name=M2
+L=0.35
+W=15
+nf=15
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/pfet_01v8_lvt.sym} 610 -290 0 0 {name=M3
+L=0.35
+W=15
+nf=15
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
diff --git a/xschem/bias_calc.sym b/xschem/bias_calc.sym
new file mode 100644
index 0000000..2c54352
--- /dev/null
+++ b/xschem/bias_calc.sym
@@ -0,0 +1,81 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 40 -160 40 -20 {}
+L 4 40 -20 220 -20 {}
+L 4 220 -160 220 -20 {}
+L 4 40 -160 220 -160 {}
+L 4 220 -80 260 -80 {}
+L 4 100 -120 140 -120 {}
+L 4 130 -130 140 -120 {}
+L 4 130 -110 140 -120 {}
+L 4 100 -90 140 -90 {}
+L 4 130 -100 140 -90 {}
+L 4 130 -80 140 -90 {}
+L 4 100 -60 140 -60 {}
+L 4 130 -70 140 -60 {}
+L 4 130 -50 140 -60 {}
+L 4 150 -120 160 -120 {}
+L 4 160 -120 160 -60 {}
+L 4 150 -60 160 -60 {}
+L 4 150 -90 160 -90 {}
+L 4 160 -90 200 -90 {}
+L 4 200 -90 200 -80 {}
+L 4 200 -80 220 -80 {}
+L 4 60 -200 60 -160 {}
+L 4 50 -180 70 -180 {}
+L 4 180 -200 180 -160 {}
+L 4 170 -170 190 -170 {}
+L 4 180 -180 190 -170 {}
+L 4 170 -180 180 -170 {}
+L 4 160 -180 170 -170 {}
+L 4 90 -20 90 20 {}
+L 4 80 -0 100 -0 {}
+L 4 90 10 100 0 {}
+L 4 80 0 90 10 {}
+L 4 180 -20 180 20 {}
+L 4 170 0 190 -0 {}
+L 4 190 -0 200 10 {}
+L 4 180 -0 190 10 {}
+L 4 170 0 180 10 {}
+L 4 0 -110 40 -110 {}
+L 4 0 -40 40 -40 {}
+L 4 10 -30 30 -50 {}
+L 4 20 -50 30 -50 {}
+L 4 30 -50 30 -40 {}
+L 4 0 -80 40 -80 {}
+L 4 -10 -40 -0 -40 {}
+L 4 -10 -80 -0 -80 {}
+L 4 -10 -110 0 -110 {}
+L 4 260 -80 330 -80 {}
+L 4 120 -200 120 -160 {}
+L 4 110 -180 130 -180 {}
+B 5 327.5 -82.5 332.5 -77.5 {name=BIASOUT
+dir=out}
+B 5 57.5 -202.5 62.5 -197.5 {name=VDD
+dir=in}
+B 5 177.5 -202.5 182.5 -197.5 {name=PSUB
+dir=in}
+B 5 -12.5 -112.5 -7.5 -107.5 {name=AMP
+dir=in}
+B 5 -12.5 -82.5 -7.5 -77.5 {name=VOP
+dir=in}
+B 5 -12.5 -42.5 -7.5 -37.5 {name=VCTRL
+dir=in}
+B 5 87.5 17.5 92.5 22.5 {name=GND
+dir=in}
+B 5 177.5 17.5 182.5 22.5 {name=SUB
+dir=in}
+B 5 117.5 -202.5 122.5 -197.5 {name=BIAS2V
+dir=in}
+T {VOP} -10 -110 0 0 0.4 0.4 {}
+T {AMP} -10 -140 0 0 0.4 0.4 {}
+T {CTRL} -10 -70 0 0 0.4 0.4 {}
+T {BIASOUT} 230 -110 0 0 0.4 0.4 {}
+T {VDD} 60 -180 0 0 0.3 0.3 {}
+T {2V} 120 -180 0 0 0.3 0.3 {}
diff --git a/xschem/buffer_amp.sch b/xschem/buffer_amp.sch
new file mode 100644
index 0000000..39eb641
--- /dev/null
+++ b/xschem/buffer_amp.sch
@@ -0,0 +1,162 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 30 30 100 30 {
+lab=#net1}
+N 30 -10 30 30 {
+lab=#net1}
+N 100 30 180 30 {
+lab=#net1}
+N 180 -10 180 30 {
+lab=#net1}
+N 180 -150 180 -70 {
+lab=OUTB}
+N 180 -280 180 -210 {
+lab=VDD}
+N 100 -280 180 -280 {
+lab=VDD}
+N 100 -310 100 -280 {
+lab=VDD}
+N 30 -280 100 -280 {
+lab=VDD}
+N 30 -280 30 -210 {
+lab=VDD}
+N 30 -150 30 -70 {
+lab=OUTA}
+N -40 -40 -10 -40 {
+lab=INA}
+N 180 30 210 30 {
+lab=#net1}
+N 30 -110 340 -110 {
+lab=OUTA}
+N 180 -90 340 -90 {
+lab=OUTB}
+N -50 -40 -40 -40 {
+lab=INA}
+N 130 -40 140 -40 {
+lab=INB}
+N 100 -320 100 -310 {
+lab=VDD}
+N -20 150 -10 150 {
+lab=#net2}
+N -40 -130 10 -130 {
+lab=SUB}
+N 10 -180 10 -130 {
+lab=SUB}
+N 10 -130 160 -130 {
+lab=SUB}
+N 160 -180 160 -130 {
+lab=SUB}
+N 30 -40 60 -40 {
+lab=SUB}
+N 60 -130 60 -40 {
+lab=SUB}
+N 160 -40 180 -40 {
+lab=SUB}
+N 160 -130 160 -40 {
+lab=SUB}
+N -50 60 -10 60 {
+lab=BIAS}
+N -10 50 -10 60 {
+lab=BIAS}
+N -10 50 140 50 {
+lab=BIAS}
+N 140 50 140 60 {
+lab=BIAS}
+N 30 60 60 60 {
+lab=SUB}
+N 60 -40 60 60 {
+lab=SUB}
+N 180 60 190 60 {
+lab=SUB}
+N 190 -40 190 60 {
+lab=SUB}
+N 180 -40 190 -40 {
+lab=SUB}
+N 180 90 180 140 {
+lab=#net2}
+N -10 150 180 150 {
+lab=#net2}
+N 180 140 180 150 {
+lab=#net2}
+N 30 90 30 150 {
+lab=#net2}
+C {devices/ipin.sym} -50 -40 0 0 {name=p1 lab=INA}
+C {devices/ipin.sym} 130 -40 0 0 {name=p2 lab=INB}
+C {devices/ipin.sym} -50 60 0 0 {name=p3 lab=BIAS}
+C {devices/ipin.sym} -20 150 0 0 {name=p4 lab=GND}
+C {devices/ipin.sym} 100 -320 0 0 {name=p5 lab=VDD}
+C {devices/ipin.sym} -40 -130 0 0 {name=p6 lab=SUB}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 10 60 0 0 {name=M1
+L=0.15
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 160 -40 0 0 {name=M2
+L=0.15
+W=1
+nf=1
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 10 -40 0 0 {name=M3
+L=0.15
+W=1
+nf=1
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/res_high_po_5p73.sym} 180 -180 0 0 {name=R2
+W=5.73
+L=30.4
+model=res_high_po_5p73
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/res_high_po_5p73.sym} 30 -180 0 0 {name=R1
+W=5.73
+L=30.4
+model=res_high_po_5p73
+spiceprefix=X
+mult=1}
+C {devices/opin.sym} 340 -110 0 0 {name=p7 lab=OUTA}
+C {devices/opin.sym} 340 -90 0 0 {name=p8 lab=OUTB}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 160 60 0 0 {name=M4
+L=0.15
+W=10
+nf=10
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
diff --git a/xschem/buffer_amp.sym b/xschem/buffer_amp.sym
new file mode 100644
index 0000000..311c7ff
--- /dev/null
+++ b/xschem/buffer_amp.sym
@@ -0,0 +1,55 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 40 -100 40 -0 {}
+L 4 40 -100 160 -60 {}
+L 4 40 -0 160 -60 {}
+L 4 0 -80 40 -80 {}
+L 4 0 -30 40 -30 {}
+L 4 100 -80 200 -80 {}
+L 4 100 -30 200 -30 {}
+L 4 60 -130 60 -90 {}
+L 4 60 -10 60 30 {}
+L 4 50 -110 60 -110 {}
+L 4 60 -110 70 -110 {}
+L 4 50 10 70 10 {}
+L 4 60 20 70 10 {}
+L 4 50 10 60 20 {}
+L 4 80 -20 80 30 {}
+L 4 80 0 90 0 {}
+L 4 70 0 80 0 {}
+L 4 70 0 80 10 {}
+L 4 80 0 90 10 {}
+L 4 90 0 100 10 {}
+L 4 40 0 40 20 {}
+L 4 0 20 40 20 {}
+L 4 20 10 30 10 {}
+L 4 30 10 30 20 {}
+L 4 10 30 30 10 {}
+B 5 -2.5 -82.5 2.5 -77.5 {name=INA
+dir=in}
+B 5 -2.5 -32.5 2.5 -27.5 {name=INB
+dir=in}
+B 5 -2.5 17.5 2.5 22.5 {name=BIAS
+dir=in}
+B 5 57.5 -132.5 62.5 -127.5 {name=VDD
+dir=in}
+B 5 57.5 27.5 62.5 32.5 {name=GND
+dir=in}
+B 5 77.5 27.5 82.5 32.5 {name=SUB
+dir=in}
+B 5 197.5 -82.5 202.5 -77.5 {name=OUTA
+dir=out}
+B 5 197.5 -32.5 202.5 -27.5 {name=OUTB
+dir=out}
+T {A} 20 -100 0 0 0.4 0.4 {}
+T {A} 170 -100 0 0 0.4 0.4 {}
+T {B} 170 -50 0 0 0.4 0.4 {}
+T {B} 20 -50 0 0 0.4 0.4 {}
+T {@NAME} 110 -10 0 0 0.4 0.4 {}
+T {Buffer} 50 -70 0 0 0.4 0.4 {}
diff --git a/xschem/buffer_amp_vop.sch b/xschem/buffer_amp_vop.sch
new file mode 100644
index 0000000..e2a10d3
--- /dev/null
+++ b/xschem/buffer_amp_vop.sch
@@ -0,0 +1,234 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 400 -280 400 -220 {
+lab=SUB}
+N -80 -220 400 -220 {
+lab=SUB}
+N 380 -280 380 -240 {
+lab=GND}
+N -80 -240 380 -240 {
+lab=GND}
+N 320 -290 320 -260 {
+lab=BIAS}
+N -70 -260 320 -260 {
+lab=BIAS}
+N -200 -260 -190 -260 {
+lab=BIAS}
+N -0 -290 -0 -260 {
+lab=BIAS}
+N 60 -280 60 -240 {
+lab=GND}
+N 80 -280 80 -220 {
+lab=SUB}
+N 400 10 400 70 {
+lab=SUB}
+N 380 10 380 50 {
+lab=GND}
+N 320 0 320 30 {
+lab=BIAS}
+N 0 0 0 30 {
+lab=BIAS}
+N 60 10 60 50 {
+lab=GND}
+N 80 10 80 70 {
+lab=SUB}
+N -180 -260 -180 20 {
+lab=BIAS}
+N -180 20 -180 30 {
+lab=BIAS}
+N -160 -240 -160 50 {
+lab=GND}
+N -140 -220 -140 70 {
+lab=SUB}
+N -60 30 0 30 {
+lab=BIAS}
+N 0 30 320 30 {
+lab=BIAS}
+N -40 50 380 50 {
+lab=GND}
+N -20 70 400 70 {
+lab=SUB}
+N -20 -340 -0 -340 {
+lab=I1B}
+N -20 -390 0 -390 {
+lab=I1A}
+N 300 -390 320 -390 {
+lab=I3A}
+N 300 -340 320 -340 {
+lab=I3B}
+N -180 30 -60 30 {
+lab=BIAS}
+N -160 50 -40 50 {
+lab=GND}
+N -140 70 -20 70 {
+lab=SUB}
+N -140 -220 -80 -220 {
+lab=SUB}
+N -160 -240 -80 -240 {
+lab=GND}
+N -180 -260 -70 -260 {
+lab=BIAS}
+N -190 -260 -180 -260 {
+lab=BIAS}
+N -200 -240 -160 -240 {
+lab=GND}
+N -200 -220 -140 -220 {
+lab=SUB}
+N -20 -100 0 -100 {
+lab=I2A}
+N -20 -50 -0 -50 {
+lab=I2B}
+N 200 -100 200 -50 {
+lab=#net1}
+N 300 -100 320 -100 {
+lab=I4A}
+N 300 -50 320 -50 {
+lab=I4B}
+N 520 -100 520 -50 {
+lab=#net1}
+N 60 -560 380 -560 {
+lab=VDD}
+N -200 -560 60 -560 {
+lab=VDD}
+N 200 -130 200 -100 {
+lab=#net1}
+N 380 -200 380 -150 {
+lab=VDD}
+N -120 -200 380 -200 {
+lab=VDD}
+N -120 -440 -120 -200 {
+lab=VDD}
+N 60 -200 60 -150 {
+lab=VDD}
+N 200 -180 200 -130 {
+lab=#net1}
+N 200 -180 520 -180 {
+lab=#net1}
+N 520 -180 520 -100 {
+lab=#net1}
+N 520 -180 680 -180 {
+lab=#net1}
+N 520 -340 680 -340 {
+lab=OUT270}
+N 520 -390 680 -390 {
+lab=OUT90}
+N 200 -390 220 -390 {
+lab=OUT0}
+N 220 -600 220 -390 {
+lab=OUT0}
+N 200 -340 240 -340 {
+lab=OUT180}
+N 240 -600 240 -340 {
+lab=OUT180}
+N 560 -600 560 -390 {
+lab=OUT90}
+N 580 -600 580 -340 {
+lab=OUT270}
+N -120 -560 -120 -440 {
+lab=VDD}
+N 220 -500 680 -500 {
+lab=OUT0}
+N 380 -560 380 -440 {
+lab=VDD}
+N 240 -460 670 -460 {
+lab=OUT180}
+N 380 -240 890 -240 {
+lab=GND}
+N 890 -320 890 -240 {
+lab=GND}
+N 400 -220 1010 -220 {
+lab=SUB}
+N 1010 -320 1010 -220 {
+lab=SUB}
+N 680 -500 760 -500 {
+lab=OUT0}
+N 670 -460 720 -460 {
+lab=OUT180}
+N 680 -340 760 -340 {
+lab=OUT270}
+N 760 -400 760 -340 {
+lab=OUT270}
+N 760 -400 810 -400 {
+lab=OUT270}
+N 680 -390 720 -390 {
+lab=OUT90}
+N 720 -420 720 -390 {
+lab=OUT90}
+N 720 -420 810 -420 {
+lab=OUT90}
+N 220 -720 320 -720 {
+lab=OUT0}
+N 220 -720 220 -600 {
+lab=OUT0}
+N 240 -680 320 -680 {
+lab=OUT180}
+N 240 -680 240 -600 {
+lab=OUT180}
+N 560 -720 560 -600 {
+lab=OUT90}
+N 560 -720 600 -720 {
+lab=OUT90}
+N 580 -680 580 -600 {
+lab=OUT270}
+N 580 -680 590 -680 {
+lab=OUT270}
+N 380 -560 940 -560 {
+lab=VDD}
+N 940 -560 940 -540 {
+lab=VDD}
+N 680 -180 680 -100 {
+lab=#net1}
+N 680 -100 840 -100 {
+lab=#net1}
+N 1110 -430 1170 -430 {
+lab=AMP}
+N 1010 -100 1080 -100 {
+lab=VOP}
+N 60 -560 60 -440 {
+lab=VDD}
+N 920 -560 920 -160 {
+lab=VDD}
+N 810 -40 900 -40 {
+lab=GND}
+N 950 -40 950 -10 {
+lab=SUB}
+N 780 -10 950 -10 {
+lab=SUB}
+N 810 -240 810 -40 {
+lab=GND}
+N 780 -220 780 -10 {
+lab=SUB}
+N 760 -440 810 -440 {
+lab=OUT0}
+N 760 -500 760 -440 {
+lab=OUT0}
+N 720 -460 810 -460 {
+lab=OUT180}
+C {buffer_amp.sym} 0 -20 0 0 {name=X2}
+C {buffer_amp.sym} 320 -20 0 0 {name=X4}
+C {buffer_amp.sym} 0 -310 0 0 {name=X1}
+C {buffer_amp.sym} 320 -310 0 0 {name=X3}
+C {devices/ipin.sym} -200 -260 0 0 {name=p2 lab=BIAS}
+C {devices/ipin.sym} -200 -240 0 0 {name=p3 lab=GND}
+C {devices/ipin.sym} -200 -220 0 0 {name=p4 lab=SUB}
+C {devices/ipin.sym} -20 -390 0 0 {name=p5 lab=I1A}
+C {devices/ipin.sym} -20 -340 0 0 {name=p6 lab=I1B}
+C {devices/ipin.sym} -20 -100 0 0 {name=p7 lab=I2A}
+C {devices/ipin.sym} -20 -50 0 0 {name=p8 lab=I2B}
+C {devices/ipin.sym} 300 -390 0 0 {name=p9 lab=I3A}
+C {devices/ipin.sym} 300 -340 0 0 {name=p10 lab=I3B}
+C {devices/ipin.sym} 300 -100 0 0 {name=p11 lab=I4A}
+C {devices/ipin.sym} 300 -50 0 0 {name=p12 lab=I4B}
+C {devices/ipin.sym} -200 -560 0 0 {name=p1 lab=VDD}
+C {amp_dec.sym} 770 -300 0 0 {name=X5}
+C {vop_dec.sym} 840 -50 0 0 {name=X6}
+C {devices/opin.sym} 1170 -430 0 0 {name=p17 lab=AMP}
+C {devices/opin.sym} 1080 -100 0 0 {name=p18 lab=VOP}
+C {devices/opin.sym} 320 -720 0 0 {name=p13 lab=OUT0}
+C {devices/opin.sym} 320 -680 0 0 {name=p14 lab=OUT180}
+C {devices/opin.sym} 600 -720 0 0 {name=p15 lab=OUT90}
+C {devices/opin.sym} 590 -680 0 0 {name=p16 lab=OUT270}
diff --git a/xschem/buffer_amp_vop.sym b/xschem/buffer_amp_vop.sym
new file mode 100644
index 0000000..4ae560b
--- /dev/null
+++ b/xschem/buffer_amp_vop.sym
@@ -0,0 +1,154 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 160 -20 160 30 {}
+L 4 230 -20 230 30 {}
+L 4 150 10 170 10 {}
+L 4 160 20 170 10 {}
+L 4 150 10 160 20 {}
+L 4 220 10 240 10 {}
+L 4 220 10 230 20 {}
+L 4 230 10 240 20 {}
+L 4 240 10 250 20 {}
+L 4 0 -40 40 -40 {}
+L 4 0 -60 40 -60 {}
+L 4 0 -90 40 -90 {}
+L 4 0 -110 40 -110 {}
+L 4 0 -140 40 -140 {}
+L 4 0 -160 40 -160 {}
+L 4 0 -190 40 -190 {}
+L 4 0 -210 40 -210 {}
+L 4 130 -260 130 -240 {}
+L 4 120 -260 140 -260 {}
+L 4 130 -270 130 -260 {}
+L 4 130 -280 130 -270 {}
+L 4 40 -20 230 -20 {}
+L 4 40 -240 40 -20 {}
+L 4 40 -240 240 -240 {}
+L 4 230 -20 240 -20 {}
+L 4 60 -220 60 -180 {}
+L 4 60 -180 100 -200 {}
+L 4 60 -220 100 -200 {}
+L 4 60 -170 60 -130 {}
+L 4 60 -130 100 -150 {}
+L 4 60 -170 100 -150 {}
+L 4 60 -120 60 -80 {}
+L 4 60 -80 100 -100 {}
+L 4 60 -120 100 -100 {}
+L 4 60 -70 60 -30 {}
+L 4 60 -30 100 -50 {}
+L 4 60 -70 100 -50 {}
+L 4 150 -160 150 -140 {}
+L 4 150 -160 170 -160 {}
+L 4 170 -160 170 -140 {}
+L 4 170 -140 190 -140 {}
+L 4 190 -180 190 -140 {}
+L 4 190 -180 210 -180 {}
+L 4 210 -180 210 -120 {}
+L 4 210 -120 230 -120 {}
+L 4 150 -180 220 -180 {}
+L 4 140 -150 220 -150 {}
+L 4 140 -180 150 -180 {}
+L 4 130 -190 140 -180 {}
+L 4 130 -170 140 -180 {}
+L 4 130 -160 140 -150 {}
+L 4 130 -140 140 -150 {}
+L 4 220 -180 240 -180 {}
+L 4 220 -150 240 -150 {}
+L 4 230 -160 230 -120 {}
+L 4 230 -160 240 -160 {}
+L 4 40 -210 60 -210 {}
+L 4 40 -190 60 -190 {}
+L 4 40 -160 60 -160 {}
+L 4 40 -140 60 -140 {}
+L 4 40 -110 60 -110 {}
+L 4 40 -90 60 -90 {}
+L 4 40 -60 60 -60 {}
+L 4 40 -40 60 -40 {}
+L 4 100 -200 110 -200 {}
+L 4 110 -200 110 -50 {}
+L 4 100 -50 110 -50 {}
+L 4 100 -100 110 -100 {}
+L 4 100 -150 110 -150 {}
+L 4 110 -50 240 -50 {}
+L 4 240 -240 280 -240 {}
+L 4 280 -240 280 -20 {}
+L 4 240 -20 280 -20 {}
+L 4 240 -50 280 -50 {}
+L 4 120 -200 120 -100 {}
+L 4 120 -100 260 -100 {}
+L 4 260 -200 260 -100 {}
+L 4 120 -200 260 -200 {}
+L 4 260 -150 280 -150 {}
+L 4 260 -180 280 -180 {}
+L 4 240 -180 260 -180 {}
+L 4 240 -150 260 -150 {}
+L 4 240 -160 250 -160 {}
+L 4 250 -160 250 -140 {}
+L 4 250 -140 260 -140 {}
+L 4 260 -90 280 -90 {}
+L 4 260 -80 260 -40 {}
+L 4 260 -40 260 -30 {}
+L 4 260 -30 280 -30 {}
+L 4 260 -90 260 -80 {}
+L 4 260 -70 280 -70 {}
+L 4 280 -90 320 -90 {}
+L 4 280 -70 320 -70 {}
+L 4 280 -50 320 -50 {}
+L 4 280 -30 320 -30 {}
+L 4 280 -150 320 -150 {}
+L 4 280 -180 320 -180 {}
+L 4 90 -20 90 30 {}
+L 4 40 30 90 30 {}
+L 4 50 50 70 20 {}
+L 4 60 20 70 20 {}
+L 4 70 20 70 30 {}
+B 5 157.5 27.5 162.5 32.5 {name=GND
+dir=in}
+B 5 227.5 27.5 232.5 32.5 {name=SUB
+dir=in}
+B 5 127.5 -282.5 132.5 -277.5 {name=VDD
+dir=in}
+B 5 -2.5 -42.5 2.5 -37.5 {name=I1A
+dir=in}
+B 5 -2.5 -62.5 2.5 -57.5 {name=I1B
+dir=in}
+B 5 -2.5 -92.5 2.5 -87.5 {name=I2A
+dir=in}
+B 5 -2.5 -112.5 2.5 -107.5 {name=I2B
+dir=in}
+B 5 -2.5 -142.5 2.5 -137.5 {name=I3A
+dir=in}
+B 5 -2.5 -162.5 2.5 -157.5 {name=I3B
+dir=in}
+B 5 -2.5 -192.5 2.5 -187.5 {name=I4A
+dir=in}
+B 5 -2.5 -212.5 2.5 -207.5 {name=I4B
+dir=in}
+B 5 317.5 -182.5 322.5 -177.5 {name=AMP
+dir=out}
+B 5 317.5 -152.5 322.5 -147.5 {name=VOP
+dir=out}
+B 5 317.5 -92.5 322.5 -87.5 {name=OUT0
+dir=out}
+B 5 317.5 -72.5 322.5 -67.5 {name=OUT90
+dir=out}
+B 5 317.5 -52.5 322.5 -47.5 {name=OUT180
+dir=out}
+B 5 317.5 -32.5 322.5 -27.5 {name=OUT270
+dir=out}
+B 5 37.5 27.5 42.5 32.5 {name=BIAS
+dir=in}
+T {1A 1B 2A 2B 3A 3B 4A 4B} 20 -40 3 0 0.2 0.2 {}
+T {@NAME} 270 0 0 0 0.4 0.4 {}
+T {AMP} 280 -200 0 0 0.4 0.4 {}
+T {VOP} 280 -170 0 0 0.4 0.4 {}
+T {0} 280 -110 0 0 0.4 0.4 {}
+T {90} 280 -90 0 0 0.4 0.4 {}
+T {180} 280 -70 0 0 0.4 0.4 {}
+T {270} 280 -50 0 0 0.4 0.4 {}
diff --git a/xschem/cap_bank.sch b/xschem/cap_bank.sch
new file mode 100644
index 0000000..8b8ea82
--- /dev/null
+++ b/xschem/cap_bank.sch
@@ -0,0 +1,189 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 330 -200 1130 -200 {
+lab=GND}
+N 600 -440 600 -420 {
+lab=IN}
+N 740 -440 740 -430 {
+lab=IN}
+N 740 -430 740 -420 {
+lab=IN}
+N 880 -440 880 -420 {
+lab=IN}
+N 1010 -440 1010 -420 {
+lab=IN}
+N 1130 -440 1130 -420 {
+lab=IN}
+N 1130 -200 1140 -200 {
+lab=GND}
+N 320 -460 1130 -460 {
+lab=IN}
+N 1130 -460 1130 -440 {
+lab=IN}
+N 1010 -460 1010 -440 {
+lab=IN}
+N 880 -460 880 -440 {
+lab=IN}
+N 740 -460 740 -440 {
+lab=IN}
+N 600 -460 600 -440 {
+lab=IN}
+N 680 -440 700 -440 {
+lab=ctrll2}
+N 700 -440 700 -410 {
+lab=ctrll2}
+N 540 -440 560 -440 {
+lab=ctrll1}
+N 560 -440 560 -410 {
+lab=ctrll1}
+N 820 -440 840 -440 {
+lab=ctrll3}
+N 840 -430 840 -410 {
+lab=ctrll3}
+N 840 -440 840 -430 {
+lab=ctrll3}
+N 950 -440 970 -440 {
+lab=ctrll4}
+N 970 -440 970 -410 {
+lab=ctrll4}
+N 1080 -440 1090 -440 {
+lab=#net1}
+N 1090 -440 1090 -410 {
+lab=#net1}
+N 600 -360 600 -320 {
+lab=#net2}
+N 600 -260 600 -200 {
+lab=GND}
+N 560 -410 560 -290 {
+lab=ctrll1}
+N 600 -290 610 -290 {
+lab=GND}
+N 610 -290 610 -200 {
+lab=GND}
+N 740 -260 740 -200 {
+lab=GND}
+N 740 -290 750 -290 {
+lab=GND}
+N 750 -290 750 -200 {
+lab=GND}
+N 880 -260 880 -200 {
+lab=GND}
+N 880 -290 890 -290 {
+lab=GND}
+N 890 -290 890 -200 {
+lab=GND}
+N 1010 -260 1010 -200 {
+lab=GND}
+N 1010 -290 1020 -290 {
+lab=GND}
+N 1020 -290 1020 -200 {
+lab=GND}
+N 1130 -260 1130 -200 {
+lab=GND}
+N 1130 -290 1140 -290 {
+lab=GND}
+N 1140 -290 1140 -200 {
+lab=GND}
+N 1130 -360 1130 -320 {
+lab=#net3}
+N 1010 -360 1010 -320 {
+lab=#net4}
+N 880 -360 880 -320 {
+lab=#net5}
+N 740 -360 740 -320 {
+lab=#net6}
+N 700 -410 700 -290 {
+lab=ctrll2}
+N 840 -410 840 -290 {
+lab=ctrll3}
+N 970 -410 970 -290 {
+lab=ctrll4}
+N 1090 -410 1090 -290 {
+lab=#net1}
+C {sky130_fd_pr/cap_mim_m3_2.sym} 600 -390 0 0 {name=C6 model=cap_mim_m3_2 W=2 L=2 MF=1 spiceprefix=X}
+C {devices/ipin.sym} 320 -460 0 0 {name=p1 lab=IN}
+C {devices/ipin.sym} 330 -200 0 0 {name=p2 lab=GND
+}
+C {devices/ipin.sym} 540 -440 0 0 {name=p3 lab=ctrll1}
+C {devices/ipin.sym} 690 -440 0 0 {name=p4 lab=ctrll2}
+C {devices/ipin.sym} 820 -440 0 0 {name=p5 lab=ctrll3}
+C {devices/ipin.sym} 960 -440 0 0 {name=p6 lab=ctrll4}
+C {devices/ipin.sym} 1090 -440 0 0 {name=p7 lab=ctrll5}
+C {sky130_fd_pr/cap_mim_m3_2.sym} 740 -390 0 0 {name=C1 model=cap_mim_m3_2 W=2 L=2 MF=1 spiceprefix=X}
+C {sky130_fd_pr/cap_mim_m3_2.sym} 880 -390 0 0 {name=C2 model=cap_mim_m3_2 W=3 L=2 MF=1 spiceprefix=X}
+C {sky130_fd_pr/cap_mim_m3_2.sym} 1010 -390 0 0 {name=C3 model=cap_mim_m3_2 W=3 L=4 MF=1 spiceprefix=X}
+C {sky130_fd_pr/cap_mim_m3_2.sym} 1130 -390 0 0 {name=C4 model=cap_mim_m3_2 W=6 L=4 MF=1 spiceprefix=X}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 580 -290 0 0 {name=M1
+L=0.15
+W=1
+nf=1
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 720 -290 0 0 {name=M2
+L=0.15
+W=1
+nf=1
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 860 -290 0 0 {name=M3
+L=0.15
+W=2
+nf=2
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 990 -290 0 0 {name=M4
+L=0.15
+W=3
+nf=3
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 1110 -290 0 0 {name=M5
+L=0.15
+W=6
+nf=6
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
diff --git a/xschem/cap_bank.sym b/xschem/cap_bank.sym
new file mode 100644
index 0000000..828318a
--- /dev/null
+++ b/xschem/cap_bank.sym
@@ -0,0 +1,40 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 50 -50 90 -50 {}
+L 4 50 -30 90 -30 {}
+L 4 70 -30 70 0 {}
+L 4 70 -70 70 -50 {}
+L 4 30 0 110 -70 {}
+L 4 110 -70 110 -50 {}
+L 4 90 -70 110 -70 {}
+L 4 10 -80 20 -80 {}
+L 4 20 -60 20 -20 {}
+L 4 10 0 20 0 {}
+L 4 10 -20 20 -20 {}
+L 4 10 -40 20 -40 {}
+L 4 10 -60 20 -60 {}
+L 4 20 0 30 0 {}
+L 4 20 -20 20 0 {}
+L 4 20 -80 20 -60 {}
+B 5 67.5 -72.5 72.5 -67.5 {name=IN
+dir=in}
+B 5 67.5 -2.5 72.5 2.5 {name=GND
+dir=in}
+B 5 7.5 -82.5 12.5 -77.5 {name=ctrll1
+dir=in}
+B 5 7.5 -62.5 12.5 -57.5 {name=ctrll2
+dir=in}
+B 5 7.5 -42.5 12.5 -37.5 {name=ctrll3
+dir=in}
+B 5 7.5 -22.5 12.5 -17.5 {name=ctrll4
+dir=in}
+B 5 7.5 -2.5 12.5 2.5 {name=ctrll5
+dir=in}
+T {ctrl1-5} 50 -70 1 0 0.4 0.4 {}
+T {@name} 80 -20 0 0 0.4 0.4 {}
diff --git a/xschem/core_osc.sch b/xschem/core_osc.sch
new file mode 100644
index 0000000..718fbd2
--- /dev/null
+++ b/xschem/core_osc.sch
@@ -0,0 +1,136 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 240 -90 280 -90 {
+lab=S1B}
+N 240 -140 280 -140 {
+lab=S1A}
+N 480 -140 520 -140 {
+lab=S2A}
+N 480 -90 520 -90 {
+lab=S2B}
+N 720 -140 760 -140 {
+lab=S3A}
+N 720 -90 760 -90 {
+lab=S3B}
+N 100 -220 100 -190 {
+lab=VDD}
+N 100 -220 820 -220 {
+lab=VDD}
+N 820 -220 820 -190 {
+lab=VDD}
+N 580 -220 580 -190 {
+lab=VDD}
+N 340 -220 340 -190 {
+lab=VDD}
+N 100 -30 100 0 {
+lab=GND}
+N 100 0 820 -0 {
+lab=GND}
+N 820 -30 820 -0 {
+lab=GND}
+N 840 -30 840 -10 {
+lab=SUB}
+N 120 -10 840 -10 {
+lab=SUB}
+N 120 -30 120 -10 {
+lab=SUB}
+N 340 -30 340 -0 {
+lab=GND}
+N 360 -30 360 -10 {
+lab=SUB}
+N 600 -30 600 -10 {
+lab=SUB}
+N 580 -30 580 0 {
+lab=GND}
+N 40 -40 40 -20 {
+lab=BIAS}
+N 40 -20 760 -20 {
+lab=BIAS}
+N 760 -40 760 -20 {
+lab=BIAS}
+N 520 -40 520 -20 {
+lab=BIAS}
+N 280 -40 280 -20 {
+lab=BIAS}
+N -0 -270 960 -270 {
+lab=S4A}
+N -0 -270 0 -90 {
+lab=S4A}
+N 0 -90 40 -90 {
+lab=S4A}
+N 20 30 960 30 {
+lab=S4B}
+N 20 -140 20 30 {
+lab=S4B}
+N 20 -140 40 -140 {
+lab=S4B}
+N 10 -20 40 -20 {
+lab=BIAS}
+N -20 -10 120 -10 {
+lab=SUB}
+N 10 -30 10 -20 {
+lab=BIAS}
+N -20 -30 0 -30 {
+lab=BIAS}
+N -0 -30 10 -30 {
+lab=BIAS}
+N 10 0 100 -0 {
+lab=GND}
+N 10 0 10 10 {
+lab=GND}
+N -20 10 10 10 {
+lab=GND}
+N 250 -330 250 -140 {
+lab=S1A}
+N 270 -330 270 -90 {
+lab=S1B}
+N 490 -330 490 -140 {
+lab=S2A}
+N 510 -330 510 -90 {
+lab=S2B}
+N 730 -330 730 -140 {
+lab=S3A}
+N 750 -330 750 -90 {
+lab=S3B}
+N 970 -330 970 -140 {
+lab=S4A}
+N 990 -330 990 -90 {
+lab=S4B}
+N 960 -140 970 -140 {
+lab=S4A}
+N 960 -90 990 -90 {
+lab=S4B}
+N 990 -90 990 30 {
+lab=S4B}
+N 960 30 990 30 {
+lab=S4B}
+N 960 -270 970 -270 {
+lab=S4A}
+N 270 -350 270 -330 {
+lab=S1B}
+N 510 -350 510 -330 {
+lab=S2B}
+N 750 -350 750 -330 {
+lab=S3B}
+N 990 -350 990 -330 {
+lab=S4B}
+C {core_osc_amp.sym} 40 -60 0 0 {name=X1}
+C {core_osc_amp.sym} 280 -60 0 0 {name=X2}
+C {core_osc_amp.sym} 520 -60 0 0 {name=X3}
+C {core_osc_amp.sym} 760 -60 0 0 {name=X4}
+C {devices/ipin.sym} 100 -220 0 0 {name=p1 lab=VDD}
+C {devices/ipin.sym} -20 -30 0 0 {name=p2 lab=BIAS}
+C {devices/ipin.sym} -20 -10 0 0 {name=p3 lab=SUB}
+C {devices/ipin.sym} -20 10 0 0 {name=p4 lab=GND}
+C {devices/opin.sym} 250 -330 0 0 {name=p5 lab=S1A}
+C {devices/opin.sym} 270 -350 0 0 {name=p6 lab=S1B}
+C {devices/opin.sym} 490 -330 0 0 {name=p7 lab=S2A}
+C {devices/opin.sym} 510 -350 0 0 {name=p8 lab=S2B}
+C {devices/opin.sym} 730 -330 0 0 {name=p9 lab=S3A}
+C {devices/opin.sym} 750 -350 0 0 {name=p10 lab=S3B}
+C {devices/opin.sym} 970 -330 0 0 {name=p11 lab=S4A}
+C {devices/opin.sym} 990 -350 0 0 {name=p12 lab=S4B}
diff --git a/xschem/core_osc.sym b/xschem/core_osc.sym
new file mode 100644
index 0000000..61a7d3b
--- /dev/null
+++ b/xschem/core_osc.sym
@@ -0,0 +1,74 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 40 -100 40 -20 {}
+L 4 40 -20 200 -20 {}
+L 4 230 -100 230 -20 {}
+L 4 40 -100 200 -100 {}
+L 4 100 -80 100 -40 {}
+L 4 100 -80 120 -80 {}
+L 4 120 -80 120 -40 {}
+L 4 120 -40 140 -40 {}
+L 4 140 -80 140 -40 {}
+L 4 140 -80 160 -80 {}
+L 4 160 -80 160 -40 {}
+L 4 160 -40 180 -40 {}
+L 4 180 -80 180 -40 {}
+L 4 70 -20 70 30 {}
+L 4 140 -20 140 30 {}
+L 4 210 -20 210 30 {}
+L 4 60 20 80 -0 {}
+L 4 70 -0 80 -0 {}
+L 4 80 0 80 10 {}
+L 4 130 10 150 10 {}
+L 4 140 20 150 10 {}
+L 4 130 10 140 20 {}
+L 4 200 10 220 10 {}
+L 4 200 10 210 20 {}
+L 4 210 10 220 20 {}
+L 4 220 10 230 20 {}
+L 4 50 -140 50 -100 {}
+L 4 70 -140 70 -100 {}
+L 4 100 -140 100 -100 {}
+L 4 120 -140 120 -100 {}
+L 4 150 -140 150 -100 {}
+L 4 170 -140 170 -100 {}
+L 4 200 -140 200 -100 {}
+L 4 220 -140 220 -100 {}
+L 4 200 -100 230 -100 {}
+L 4 200 -20 230 -20 {}
+L 4 20 -80 40 -80 {}
+L 4 20 -100 20 -80 {}
+L 4 10 -100 30 -100 {}
+L 4 20 -110 20 -100 {}
+L 4 20 -120 20 -110 {}
+B 5 67.5 27.5 72.5 32.5 {name=BIAS
+dir=in}
+B 5 137.5 27.5 142.5 32.5 {name=GND
+dir=in}
+B 5 207.5 27.5 212.5 32.5 {name=SUB
+dir=in}
+B 5 17.5 -122.5 22.5 -117.5 {name=VDD
+dir=in}
+B 5 47.5 -142.5 52.5 -137.5 {name=S1A
+dir=out}
+B 5 67.5 -142.5 72.5 -137.5 {name=S1B
+dir=out}
+B 5 97.5 -142.5 102.5 -137.5 {name=S2A
+dir=out}
+B 5 117.5 -142.5 122.5 -137.5 {name=S2B
+dir=out}
+B 5 147.5 -142.5 152.5 -137.5 {name=S3A
+dir=out}
+B 5 167.5 -142.5 172.5 -137.5 {name=S3B
+dir=out}
+B 5 197.5 -142.5 202.5 -137.5 {name=S4A
+dir=out}
+B 5 217.5 -142.5 222.5 -137.5 {name=S4B
+dir=out}
+T {1A 1B 2A 2B 3A 3B 4A 4B} 50 -120 0 0 0.2 0.2 {}
diff --git a/xschem/core_osc_amp.sch b/xschem/core_osc_amp.sch
new file mode 100644
index 0000000..68a5091
--- /dev/null
+++ b/xschem/core_osc_amp.sch
@@ -0,0 +1,158 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 30 30 100 30 {
+lab=#net1}
+N 30 -10 30 30 {
+lab=#net1}
+N 100 30 180 30 {
+lab=#net1}
+N 180 -10 180 30 {
+lab=#net1}
+N 180 -150 180 -70 {
+lab=OUTB}
+N 180 -280 180 -210 {
+lab=VDD}
+N 100 -280 180 -280 {
+lab=VDD}
+N 100 -310 100 -280 {
+lab=VDD}
+N 30 -280 100 -280 {
+lab=VDD}
+N 30 -280 30 -210 {
+lab=VDD}
+N 30 -150 30 -70 {
+lab=OUTA}
+N -40 -40 -10 -40 {
+lab=INA}
+N 30 -110 340 -110 {
+lab=OUTA}
+N 180 -90 340 -90 {
+lab=OUTB}
+N -50 -40 -40 -40 {
+lab=INA}
+N 130 -40 140 -40 {
+lab=INB}
+N 100 -320 100 -310 {
+lab=VDD}
+N -40 -130 10 -130 {
+lab=SUB}
+N 10 -180 10 -130 {
+lab=SUB}
+N 10 -130 160 -130 {
+lab=SUB}
+N 160 -180 160 -130 {
+lab=SUB}
+N 30 -40 60 -40 {
+lab=SUB}
+N 60 -130 60 -40 {
+lab=SUB}
+N 160 -40 180 -40 {
+lab=SUB}
+N 160 -130 160 -40 {
+lab=SUB}
+N -60 60 -10 60 {
+lab=BIAS}
+N -10 60 -10 70 {
+lab=BIAS}
+N -10 70 140 70 {
+lab=BIAS}
+N 140 60 140 70 {
+lab=BIAS}
+N 30 60 50 60 {
+lab=SUB}
+N 60 -40 60 60 {
+lab=SUB}
+N 50 60 60 60 {
+lab=SUB}
+N 180 60 200 60 {
+lab=SUB}
+N 200 -40 200 60 {
+lab=SUB}
+N 180 -40 200 -40 {
+lab=SUB}
+N 30 90 30 150 {
+lab=#net2}
+N -20 150 180 150 {
+lab=#net2}
+N 180 90 180 150 {
+lab=#net2}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 10 -40 0 0 {name=M2
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 160 -40 0 0 {name=M3
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 10 60 0 0 {name=M1
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/res_high_po_2p85.sym} 30 -180 0 0 {name=R16
+W=2.85
+L=7.6
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/res_high_po_2p85.sym} 180 -180 0 0 {name=R17
+W=2.85
+L=7.6
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {devices/ipin.sym} -50 -40 0 0 {name=p1 lab=INA}
+C {devices/ipin.sym} 130 -40 0 0 {name=p2 lab=INB}
+C {devices/ipin.sym} -60 60 0 0 {name=p3 lab=BIAS}
+C {devices/ipin.sym} -20 150 0 0 {name=p4 lab=GND}
+C {devices/ipin.sym} 100 -320 0 0 {name=p5 lab=VDD}
+C {devices/ipin.sym} -40 -130 0 0 {name=p6 lab=SUB}
+C {devices/opin.sym} 340 -110 0 0 {name=p9 lab=OUTA}
+C {devices/opin.sym} 340 -90 0 0 {name=p7 lab=OUTB}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 160 60 0 0 {name=M4
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
diff --git a/xschem/core_osc_amp.sym b/xschem/core_osc_amp.sym
new file mode 100644
index 0000000..bfab2da
--- /dev/null
+++ b/xschem/core_osc_amp.sym
@@ -0,0 +1,54 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 40 -100 40 -0 {}
+L 4 40 -100 160 -60 {}
+L 4 40 -0 160 -60 {}
+L 4 0 -80 40 -80 {}
+L 4 0 -30 40 -30 {}
+L 4 100 -80 200 -80 {}
+L 4 100 -30 200 -30 {}
+L 4 60 -130 60 -90 {}
+L 4 60 -10 60 30 {}
+L 4 50 -110 60 -110 {}
+L 4 60 -110 70 -110 {}
+L 4 50 10 70 10 {}
+L 4 60 20 70 10 {}
+L 4 50 10 60 20 {}
+L 4 80 -20 80 30 {}
+L 4 80 0 90 0 {}
+L 4 70 0 80 0 {}
+L 4 70 0 80 10 {}
+L 4 80 0 90 10 {}
+L 4 90 0 100 10 {}
+L 4 40 0 40 20 {}
+L 4 0 20 40 20 {}
+L 4 20 10 30 10 {}
+L 4 30 10 30 20 {}
+L 4 10 30 30 10 {}
+B 5 -2.5 -82.5 2.5 -77.5 {name=INA
+dir=in}
+B 5 -2.5 -32.5 2.5 -27.5 {name=INB
+dir=in}
+B 5 -2.5 17.5 2.5 22.5 {name=BIAS
+dir=in}
+B 5 57.5 -132.5 62.5 -127.5 {name=VDD
+dir=in}
+B 5 57.5 27.5 62.5 32.5 {name=GND
+dir=in}
+B 5 77.5 27.5 82.5 32.5 {name=SUB
+dir=in}
+B 5 197.5 -82.5 202.5 -77.5 {name=OUTA
+dir=out}
+B 5 197.5 -32.5 202.5 -27.5 {name=OUTB
+dir=out}
+T {A} 20 -100 0 0 0.4 0.4 {}
+T {A} 170 -100 0 0 0.4 0.4 {}
+T {B} 170 -50 0 0 0.4 0.4 {}
+T {B} 20 -50 0 0 0.4 0.4 {}
+T {@NAME} 110 -10 0 0 0.4 0.4 {}
diff --git a/xschem/current_test.spice b/xschem/current_test.spice
deleted file mode 100644
index 8e4162d..0000000
--- a/xschem/current_test.spice
+++ /dev/null
@@ -1,86 +0,0 @@
-*---------------------------------------------------------------------------
-* SPDX-FileCopyrightText: 2020 Efabless Corporation
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* https://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* SPDX-License-Identifier: Apache-2.0
-*---------------------------------------------------------------------------
-* Simple POR circuit for Caravel current mirror test
-*-------------------------------------------------------------------
-
-.param mc_mm_switch=0
-.lib /usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
-
-* Note: 20 resistors of length 25um connected in series
-Xres1 vdda vin vss sky130_fd_pr__res_xhigh_po_0p69 l=500
-Xres2 vin vss vss sky130_fd_pr__res_xhigh_po_0p69 l=149
-
-* voltage sources at 0V for measuring current in each branch
-
-Vm1 vssm1 vss DC=0
-Vm2 vdda vddm2 DC=0
-Vm3 vdda vddm3 DC=0
-Vm4 vssm4 vss DC=0
-Vm5 vssm5 vss DC=0
-Vm6 vdda vddm6 DC=0
-Vm7 vdda vddm7 DC=0
-
-* D G S B
-Xm1 casc1 vin vssm1 vss sky130_fd_pr__nfet_g5v0d10v5 w=2 l=0.8 m=1
-Xc1 mir1 casc1 casc1 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-Xm2 mir1 mir1 vddm2 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=8
-Xm3 mir2 mir1 vddm3 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-Xc2 casc2 casc1 mir2 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-Xm4 casc2 casc2 vssm4 vss sky130_fd_pr__nfet_g5v0d10v5 w=2 l=0.8 m=7
-Xm5 casc3 casc2 vssm5 vss sky130_fd_pr__nfet_g5v0d10v5 w=2 l=0.8 m=1
-Xc3 mir3 casc3 casc3 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-Xm6 mir3 mir3 vddm6 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=7
-Xm7 mir4 mir3 vddm7 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-Xc4 vcap casc3 mir4 vdda sky130_fd_pr__pfet_g5v0d10v5 w=2 l=0.8 m=1
-
-* Check branch currents in each mirror branch.
-* 1st branch should be 240nA
-* 2nd branch should be 30nA
-* 3rd branch should be 4.3nA
-* 4th branch should be 612pA
-*
-* Result: vin sits at 0.7590 (close to 0.7575 target)
-* I(Vm1/2) = 202.80 nA
-* I(Vm3/4) = 26.10 nA (should be /8) actually /7.77
-* I(Vm5/6) = 4.58 nA (should be /7) actually /5.70
-* I(Vm7) = 0.67 nA (should be /7) actually /6.80
-
-*----------------------------
-* Testbench circuit
-*----------------------------
-Vpwr vdda vss DC=3.3
-Rgnd vss 0 0.01
-Rload vcap vss 1MEG
-*----------------------------
-
-*----------------------------
-* Testbench control
-*----------------------------
-.control
-op
-print V(vin)
-print I(Vm1)
-print I(Vm2)
-print I(Vm3)
-print I(Vm4)
-print I(Vm5)
-print I(Vm6)
-print I(Vm7)
-.endc
-
-.end
-
diff --git a/xschem/example_por.sch b/xschem/example_por.sch
deleted file mode 100644
index cf6e0c3..0000000
--- a/xschem/example_por.sch
+++ /dev/null
@@ -1,297 +0,0 @@
-v {xschem version=2.9.9 file_version=1.2 }
-G {}
-K {}
-V {}
-S {}
-E {}
-L 4 3370 -60 3390 -60 {}
-L 4 3390 -60 3390 80 {}
-L 4 3370 80 3390 80 {}
-T {Current step-down mirror} 2270 140 0 0 0.4 0.4 {}
-T {Charge accumulator} 2650 140 0 0 0.4 0.4 {}
-T {Voltage divider} 1860 140 0 0 0.4 0.4 {}
-T {Schmitt trigger} 2930 -200 0 0 0.4 0.4 {}
-T {150 / 650 * 3.3V = 0.76V} 1860 180 0 0 0.4 0.4 {}
-T {step down 8x} 2130 -430 0 0 0.4 0.4 {}
-T {step down 7x} 2330 80 0 0 0.4 0.4 {}
-T {step down 7x} 2520 -430 0 0 0.4 0.4 {}
-T {1.8V domain outputs} 3400 0 0 0 0.4 0.4 {}
-T {3.3V domain output} 3410 -140 0 0 0.4 0.4 {}
-T {392 : 1} 2270 180 0 0 0.4 0.4 {}
-T {Simple power-on-reset circuit
-calibrated to 500us nominal delay
-no temperature compensation} 1950 -570 0 0 0.6 0.6 {}
-N 2500 -310 2500 -270 { lab=#net1}
-N 2500 -210 2500 -100 { lab=#net2}
-N 2300 -40 2300 20 { lab=#net3}
-N 2300 80 2300 110 { lab=vss}
-N 2360 110 2500 110 { lab=vss}
-N 2500 80 2500 110 { lab=vss}
-N 2400 50 2460 50 { lab=#net3}
-N 2360 -400 2500 -400 { lab=vdd3v3}
-N 2500 -400 2500 -370 { lab=vdd3v3}
-N 2500 -400 2790 -400 { lab=vdd3v3}
-N 2300 -10 2370 -10 { lab=#net3}
-N 2370 -10 2370 50 { lab=#net3}
-N 2500 -290 2570 -290 { lab=#net1}
-N 2570 -340 2570 -290 { lab=#net1}
-N 2540 -340 2570 -340 { lab=#net1}
-N 2500 -190 2570 -190 { lab=#net2}
-N 2570 -240 2570 -190 { lab=#net2}
-N 2540 -240 2570 -240 { lab=#net2}
-N 2240 110 2360 110 { lab=vss}
-N 2500 110 2630 110 { lab=vss}
-N 2500 50 2630 50 { lab=vss}
-N 2110 110 2240 110 { lab=vss}
-N 1930 60 1930 110 { lab=vss}
-N 1930 -160 1930 0 { lab=#net4}
-N 1930 -400 1930 -220 { lab=vdd3v3}
-N 2110 -400 2360 -400 { lab=vdd3v3}
-N 1880 -190 1910 -190 { lab=vss}
-N 1880 -190 1880 110 { lab=vss}
-N 1880 110 1930 110 { lab=vss}
-N 1880 30 1910 30 { lab=vss}
-N 2300 -310 2300 -270 { lab=#net5}
-N 2300 -400 2300 -370 { lab=vdd3v3}
-N 2300 -140 2300 -100 { lab=#net3}
-N 2340 50 2400 50 { lab=#net3}
-N 2300 -210 2300 -140 { lab=#net3}
-N 2100 80 2100 110 { lab=vss}
-N 2100 110 2110 110 { lab=vss}
-N 2050 50 2060 50 { lab=#net4}
-N 2050 -70 2050 50 { lab=#net4}
-N 1930 -70 2050 -70 { lab=#net4}
-N 1930 -400 2110 -400 { lab=vdd3v3}
-N 2100 -400 2100 -370 { lab=vdd3v3}
-N 2100 -310 2100 -270 { lab=#net6}
-N 2100 -210 2100 20 { lab=#net7}
-N 2100 50 2300 50 { lab=vss}
-N 2200 50 2200 110 { lab=vss}
-N 2140 -240 2260 -240 { lab=#net7}
-N 2140 -340 2260 -340 { lab=#net6}
-N 2100 -290 2180 -290 { lab=#net6}
-N 2180 -340 2180 -290 { lab=#net6}
-N 2100 -180 2180 -180 { lab=#net7}
-N 2180 -240 2180 -180 { lab=#net7}
-N 1930 -240 2100 -240 { lab=vdd3v3}
-N 1930 -340 2100 -340 { lab=vdd3v3}
-N 1930 110 2100 110 { lab=vss}
-N 2300 -240 2500 -240 { lab=vdd3v3}
-N 2300 -340 2500 -340 { lab=vdd3v3}
-N 2400 -340 2400 -240 { lab=vdd3v3}
-N 2400 -400 2400 -340 { lab=vdd3v3}
-N 2570 -240 2650 -240 { lab=#net2}
-N 2570 -340 2650 -340 { lab=#net1}
-N 2690 -400 2690 -370 { lab=vdd3v3}
-N 2790 -400 2790 -340 { lab=vdd3v3}
-N 2690 -340 2790 -340 { lab=vdd3v3}
-N 2690 -240 2790 -240 { lab=vdd3v3}
-N 2790 -340 2790 -240 { lab=vdd3v3}
-N 2690 -310 2690 -270 { lab=#net8}
-N 2690 -210 2690 -150 { lab=#net9}
-N 1830 30 1880 30 { lab=vss}
-N 1810 60 1810 110 { lab=vss}
-N 1810 110 1880 110 { lab=vss}
-N 1810 -70 1810 0 { lab=vss}
-N 1810 -70 1880 -70 { lab=vss}
-N 2690 -150 2690 -70 { lab=#net9}
-N 2820 -130 2820 -70 { lab=#net9}
-N 2690 -130 2820 -130 { lab=#net9}
-N 2630 110 2820 110 { lab=vss}
-N 2820 -10 2820 110 { lab=vss}
-N 2690 -10 2690 110 { lab=vss}
-N 2820 -130 2980 -130 { lab=#net9}
-N 3060 -130 3130 -130 { lab=#net10}
-N 3090 -130 3090 60 { lab=#net10}
-N 3090 60 3130 60 { lab=#net10}
-N 3090 -40 3130 -40 { lab=#net10}
-N 3210 -130 3300 -130 { lab=porb_h}
-N 3210 -40 3300 -40 { lab=porb_l}
-N 3210 60 3300 60 { lab=por_l}
-N 2790 -400 2840 -400 { lab=vdd3v3}
-N 2820 110 2870 110 { lab=vss}
-N 2630 50 2690 50 { lab=vss}
-N 2300 -100 2300 -40 { lab=#net3}
-N 2500 -100 2500 -30 { lab=#net2}
-N 2500 -30 2500 20 { lab=#net2}
-C {sky130_fd_pr/cap_mim_m3_1.sym} 2690 -40 0 0 {name=C1 model=cap_mim_m3_1 W=30 L=30 MF=1 spiceprefix=X}
-C {sky130_fd_pr/cap_mim_m3_2.sym} 2820 -40 2 1 {name=C2 model=cap_mim_m3_2 W=30 L=30 MF=1 spiceprefix=X}
-C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2280 -240 0 0 {name=M1
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2480 50 0 0 {name=M2
-L=0.8
-W=2
-nf=1
-mult=1
-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/res_xhigh_po_0p69.sym} 1930 -190 0 0 {name=R1
-L=500
-model=res_xhigh_po_0p69
-spiceprefix=X
-mult=1}
-C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2280 -340 0 0 {name=M4
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2320 50 0 1 {name=M5
-L=0.8
-W=14
-nf=7
-mult=1
-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/res_xhigh_po_0p69.sym} 1930 30 0 0 {name=R2
-L=150
-model=res_xhigh_po_0p69
-spiceprefix=X
-mult=1}
-C {sky130_fd_pr/pfet_g5v0d10v5.sym} 2520 -240 0 1 {name=M7
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2520 -340 0 1 {name=M8
-L=0.8
-W=14
-nf=7
-mult=1
-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} 2080 50 0 0 {name=M10
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2120 -240 0 1 {name=M9
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2120 -340 0 1 {name=M11
-L=0.8
-W=16
-nf=8
-mult=1
-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} 2670 -340 0 0 {name=M12
-L=0.8
-W=2
-nf=1
-mult=1
-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} 2670 -240 0 0 {name=M13
-L=0.8
-W=2
-nf=1
-mult=1
-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/res_xhigh_po_0p69.sym} 1810 30 0 1 {name=R3
-L=25
-model=res_xhigh_po_0p69
-spiceprefix=X
-mult=2}
-C {sky130_stdcells/buf_8.sym} 3170 -130 0 0 {name=x2 VGND=vss VNB=vss VPB=vdd3v3 VPWR=vdd3v3 prefix=sky130_fd_sc_hvl__ }
-C {sky130_stdcells/buf_8.sym} 3170 -40 0 0 {name=x3 VGND=vss VNB=vss VPB=vdd1v8 VPWR=vdd1v8 prefix=sky130_fd_sc_hvl__ }
-C {sky130_stdcells/inv_8.sym} 3170 60 0 0 {name=x4 VGND=vss VNB=vss VPB=vdd1v8 VPWR=vdd1v8 prefix=sky130_fd_sc_hvl__ }
-C {sky130_stdcells/buf_1.sym} 3020 -130 0 0 {name=x5 VGND=vss VNB=vss VPB=vdd3v3 VPWR=vdd3v3 prefix=sky130_fd_sc_hvl__schmitt }
-C {devices/iopin.sym} 2840 -400 0 0 {name=p1 lab=vdd3v3}
-C {devices/iopin.sym} 2870 110 0 0 {name=p2 lab=vss}
-C {devices/opin.sym} 3300 -130 0 0 {name=p3 lab=porb_h}
-C {devices/opin.sym} 3300 -40 0 0 {name=p4 lab=porb_l}
-C {devices/opin.sym} 3300 60 0 0 {name=p5 lab=por_l}
-C {devices/iopin.sym} 2840 -330 0 0 {name=p6 lab=vdd1v8}
diff --git a/xschem/example_por.sym b/xschem/example_por.sym
deleted file mode 100644
index e3875f5..0000000
--- a/xschem/example_por.sym
+++ /dev/null
@@ -1,33 +0,0 @@
-v {xschem version=2.9.9 file_version=1.2 }
-G {}
-K {type=subcircuit
-format="@name @pinlist @symname"
-template="name=x1"
-}
-V {}
-S {}
-E {}
-L 4 -130 -60 130 -60 {}
-L 4 -130 60 130 60 {}
-L 4 -130 -60 -130 60 {}
-L 4 130 -60 130 60 {}
-L 4 130 -30 150 -30 {}
-L 4 130 0 150 0 {}
-L 4 130 30 150 30 {}
-L 7 -30 -80 -30 -60 {}
-L 7 30 -80 30 -60 {}
-L 7 0 60 0 80 {}
-B 5 -32.5 -82.5 -27.5 -77.5 {name=vdd3v3 dir=inout }
-B 5 27.5 -82.5 32.5 -77.5 {name=vdd1v8 dir=inout }
-B 5 147.5 -32.5 152.5 -27.5 {name=porb_h dir=out }
-B 5 147.5 -2.5 152.5 2.5 {name=porb_l dir=out }
-B 5 147.5 27.5 152.5 32.5 {name=por_l dir=out }
-B 5 -2.5 77.5 2.5 82.5 {name=vss dir=inout }
-T {@symname} -47.5 -6 0 0 0.3 0.3 {}
-T {@name} -25 18 0 0 0.2 0.2 {}
-T {vdd3v3} -15 -54 0 1 0.2 0.2 {}
-T {vdd1v8} 55 -54 0 1 0.2 0.2 {}
-T {porb_h} 125 -34 0 1 0.2 0.2 {}
-T {porb_l} 125 -4 0 1 0.2 0.2 {}
-T {por_l} 125 26 0 1 0.2 0.2 {}
-T {vss} 5 46 0 1 0.2 0.2 {}
diff --git a/xschem/example_por_tb.sch b/xschem/example_por_tb.sch
deleted file mode 100644
index a24d814..0000000
--- a/xschem/example_por_tb.sch
+++ /dev/null
@@ -1,45 +0,0 @@
-v {xschem version=2.9.9 file_version=1.2 }
-G {}
-K {}
-V {}
-S {}
-E {}
-T {Testbench for simple POR} -350 -240 0 0 0.6 0.6 {}
-N -280 60 -10 60 { lab=GND}
-N -540 0 -540 60 { lab=GND}
-N -330 0 -330 60 { lab=GND}
-N -330 -100 -330 -60 { lab=vdd3v3}
-N -330 -110 -330 -100 { lab=vdd3v3}
-N -210 -110 -40 -110 { lab=vdd3v3}
-N -40 -110 -40 -100 { lab=vdd3v3}
-N -540 -130 -540 -60 { lab=vdd1v8}
-N -280 -130 20 -130 { lab=vdd1v8}
-N 20 -130 20 -100 { lab=vdd1v8}
-N 140 -50 180 -50 { lab=porb_h}
-N 140 -20 180 -20 { lab=porb_l}
-N 140 10 180 10 { lab=por_l}
-N -340 -110 -330 -110 { lab=vdd3v3}
-N -500 -130 -490 -130 { lab=vdd1v8}
-N -540 -130 -500 -130 { lab=vdd1v8}
-N -560 -130 -540 -130 { lab=vdd1v8}
-N -540 60 -490 60 { lab=GND}
-N -490 -130 -280 -130 { lab=vdd1v8}
-N -490 60 -330 60 { lab=GND}
-N -330 60 -280 60 { lab=GND}
-N -330 -110 -210 -110 { lab=vdd3v3}
-C {example_por.sym} -10 -20 0 0 {name=x1}
-C {devices/gnd.sym} -100 60 0 0 {name=l1 lab=GND}
-C {devices/vsource.sym} -330 -30 0 0 {name=V1 value="PWL(0.0 0 100u 0 5m 3.3)"}
-C {devices/vsource.sym} -540 -30 0 0 {name=V2 value="PWL(0.0 0 300u 0 5.3m 1.8)"}
-C {devices/opin.sym} -340 -110 0 1 {name=p1 lab=vdd3v3}
-C {devices/opin.sym} -560 -130 0 1 {name=p2 lab=vdd1v8}
-C {devices/opin.sym} 180 -50 0 0 {name=p3 lab=porb_h}
-C {devices/opin.sym} 180 -20 0 0 {name=p4 lab=porb_l}
-C {devices/opin.sym} 180 10 0 0 {name=p5 lab=por_l}
-C {devices/code.sym} -470 140 0 0 {name=TT_MODELS only_toplevel=false
-format="tcleval(@value )" value=".lib \\\\$::SKYWATER_MODELS\\\\/sky130.lib.spice tt
-.include \\\\$::PDKPATH\\\\/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice"}
-C {devices/code_shown.sym} -320 160 0 0 {name=s2 only_toplevel=false value=".control
-tran 1u 20m
-plot V(vdd3v3) V(vdd1v8) V(porb_h) V(porb_l) V(por_l)
-.endc"}
diff --git a/xschem/example_por_tb.spice b/xschem/example_por_tb.spice
deleted file mode 100644
index fa82f74..0000000
--- a/xschem/example_por_tb.spice
+++ /dev/null
@@ -1,78 +0,0 @@
-**.subckt example_por_tb vdd3v3 vdd1v8 porb_h porb_l por_l
-*.opin vdd3v3
-*.opin vdd1v8
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-x1 vdd3v3 vdd1v8 porb_h porb_l por_l GND example_por
-V1 vdd3v3 GND PWL(0.0 0 100u 0 5m 3.3)
-V2 vdd1v8 GND PWL(0.0 0 300u 0 5.3m 1.8)
-**** begin user architecture code
-.lib /usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
-.include /usr/share/pdk/sky130A/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice
-
-.control
-tran 1u 20m
-plot V(vdd3v3) V(vdd1v8) V(porb_h) V(porb_l) V(por_l)
-.endc
-
-**** end user architecture code
-**.ends
-
-* expanding symbol: example_por.sym # of pins=6
-* sym_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sym
-* sch_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sch
-.subckt example_por vdd3v3 vdd1v8 porb_h porb_l por_l vss
-*.iopin vdd3v3
-*.iopin vss
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-*.iopin vdd1v8
-XC1 net9 vss sky130_fd_pr__cap_mim_m3_1 W=30 L=30 MF=1 m=1
-XC2 vss net9 sky130_fd_pr__cap_mim_m3_2 W=30 L=30 MF=1 m=1
-XM1 net3 net7 net5 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM2 net2 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XR1 net4 vdd3v3 vss sky130_fd_pr__res_xhigh_po_0p69 L=500 mult=1 m=1
-XM4 net5 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM5 net3 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XR2 vss net4 vss sky130_fd_pr__res_xhigh_po_0p69 L=150 mult=1 m=1
-XM7 net2 net2 net1 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM8 net1 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XM10 net7 net4 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XM9 net7 net7 net6 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM11 net6 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=16 nf=8 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=1 m=1
-XM12 net8 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM13 net9 net2 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XR3 vss vss vss sky130_fd_pr__res_xhigh_po_0p69 L=25 mult=2 m=2
-x2 net10 vss vss vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8
-x3 net10 vss vss vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8
-x4 net10 vss vss vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8
-x5 net9 vss vss vdd3v3 vdd3v3 net10 sky130_fd_sc_hvl__schmittbuf_1
-.ends
-
-.GLOBAL GND
-** flattened .save nodes
-.end
diff --git a/xschem/example_por_tb.spice.orig b/xschem/example_por_tb.spice.orig
deleted file mode 100644
index 069c74d..0000000
--- a/xschem/example_por_tb.spice.orig
+++ /dev/null
@@ -1,88 +0,0 @@
-**.subckt example_por_tb vdd3v3 vdd1v8 porb_h porb_l por_l
-.param mc_switch=0
-*.opin vdd3v3
-*.opin vdd1v8
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-x1 vdd3v3 vdd1v8 porb_h porb_l por_l GND example_por
-V1 vdd3v3 GND PWL(0.0 0 100u 0 5m 3.3)
-V2 vdd1v8 GND PWL(0.0 0 300u 0 5.3m 1.8)
-**** begin user architecture code
-
-.lib /usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
-
-
-.include /usr/share/pdk/sky130A/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice
-
-.control
-tran 1u 20m
-plot V(vdd3v3) V(vdd1v8) V(porb_h) V(porb_l) V(por_l)
-.endc
-
-**** end user architecture code
-**.ends
-
-* expanding symbol: example_por.sym # of pins=6
-* sym_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sym
-* sch_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sch
-.subckt example_por vdd3v3 vdd1v8 porb_h porb_l por_l vss
-*.iopin vdd3v3
-*.iopin vss
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-*.iopin vdd1v8
-XC1 net11 vss sky130_fd_pr__cap_mim_m3_1 W=30 L=30 MF=1 m=1
-XC2 net11 vss sky130_fd_pr__cap_mim_m3_2 W=30 L=30 MF=1 m=1
-XM1 net5 net9 net7 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM2 net1 net4 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XR1 net6 vdd3v3 vss sky130_fd_pr__res_xhigh_po_0p69 W=0.69 L=500 mult=1 m=1
-XM3 net3 net5 net1 vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XM4 net7 net8 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM5 net4 net4 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XM6 net5 net5 net4 vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XR2 vss net6 vss sky130_fd_pr__res_xhigh_po_0p69 W=0.69 L=150 mult=1 m=1
-XM7 net3 net3 net2 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM8 net2 net2 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XM10 net9 net6 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XM9 net9 net9 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM11 net8 net8 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=16 nf=8 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=1 m=1
-XM12 net10 net2 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM13 net11 net3 net10 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XR3 vss vss vss sky130_fd_pr__res_xhigh_po_0p69 W=0.69 L=25 mult=2 m=2
-x2 net12 vss vss vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8
-x3 net12 vss vss vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8
-x4 net12 vss vss vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8
-x5 net11 vss vss vdd3v3 vdd3v3 net12 sky130_fd_sc_hvl__schmittbuf_1
-.ends
-
-.GLOBAL GND
-** flattened .save nodes
-.end
diff --git a/xschem/output_buffer.sch b/xschem/output_buffer.sch
new file mode 100644
index 0000000..a0a595e
--- /dev/null
+++ b/xschem/output_buffer.sch
@@ -0,0 +1,287 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N -30 520 -10 520 {
+lab=BIAS}
+N 710 350 780 350 {
+lab=OUTA}
+N -70 710 10 710 {
+lab=#net1}
+N -70 740 -10 740 {
+lab=GND}
+N 140 450 140 490 {
+lab=#net2}
+N 290 450 290 490 {
+lab=#net2}
+N 630 320 630 400 {
+lab=OUTB}
+N 480 320 480 400 {
+lab=OUTA}
+N -50 -120 670 -120 {
+lab=VDD}
+N 670 -120 680 -120 {
+lab=VDD}
+N 680 -120 710 -120 {
+lab=VDD}
+N 140 -120 140 260 {
+lab=VDD}
+N 290 -120 290 260 {
+lab=VDD}
+N -10 520 90 520 {
+lab=BIAS}
+N -10 740 600 740 {
+lab=GND}
+N 710 380 780 380 {
+lab=OUTB}
+N 90 520 100 520 {
+lab=BIAS}
+N 290 550 290 570 {
+lab=GND}
+N 140 550 140 570 {
+lab=GND}
+N 140 320 140 390 {
+lab=#net3}
+N 290 320 290 390 {
+lab=#net4}
+N 140 420 290 420 {
+lab=#net1}
+N 160 290 270 290 {
+lab=#net1}
+N 210 290 210 420 {
+lab=#net1}
+N 140 520 290 520 {
+lab=#net1}
+N 210 420 210 520 {
+lab=#net1}
+N 140 470 290 470 {
+lab=#net2}
+N 140 570 140 740 {
+lab=GND}
+N 290 570 290 740 {
+lab=GND}
+N 210 520 210 710 {
+lab=#net1}
+N 630 550 630 570 {
+lab=GND}
+N 480 550 480 570 {
+lab=GND}
+N 480 520 630 520 {
+lab=#net1}
+N 480 460 480 490 {
+lab=#net5}
+N 630 460 630 490 {
+lab=#net5}
+N 630 570 630 740 {
+lab=GND}
+N 480 570 480 740 {
+lab=GND}
+N 600 740 630 740 {
+lab=GND}
+N 500 290 600 290 {
+lab=#net1}
+N 480 430 630 430 {
+lab=#net1}
+N 550 290 550 430 {
+lab=#net1}
+N 550 430 550 520 {
+lab=#net1}
+N 550 520 550 710 {
+lab=#net1}
+N 10 710 550 710 {
+lab=#net1}
+N 480 -120 480 260 {
+lab=VDD}
+N 600 290 610 290 {
+lab=#net1}
+N 630 -120 630 260 {
+lab=VDD}
+N 330 420 360 420 {
+lab=INB}
+N 80 420 100 420 {
+lab=INA}
+N 50 520 50 570 {
+lab=BIAS}
+N 50 570 50 600 {
+lab=BIAS}
+N 50 600 720 600 {
+lab=BIAS}
+N 720 520 720 600 {
+lab=BIAS}
+N 670 520 720 520 {
+lab=BIAS}
+N 330 520 330 600 {
+lab=BIAS}
+N 440 520 440 600 {
+lab=BIAS}
+N 140 350 440 350 {
+lab=#net3}
+N 440 350 440 430 {
+lab=#net3}
+N 290 330 670 330 {
+lab=#net4}
+N 670 330 670 430 {
+lab=#net4}
+N 480 350 710 350 {
+lab=OUTA}
+N 630 380 710 380 {
+lab=OUTB}
+N 480 480 630 480 {
+lab=#net5}
+C {devices/ipin.sym} -70 710 0 0 {name=p7 lab=SUB}
+C {devices/ipin.sym} -70 740 0 0 {name=p1 lab=GND
+}
+C {devices/ipin.sym} 80 420 0 0 {name=p2 lab=INA
+
+}
+C {devices/ipin.sym} -30 520 0 0 {name=p4 lab=BIAS
+
+
+}
+C {devices/ipin.sym} -40 -120 0 0 {name=p5 lab=VDD
+
+
+}
+C {devices/opin.sym} 780 350 0 0 {name=p3 lab=OUTA}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 120 420 0 0 {name=M42
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 310 420 0 1 {name=M43
+L=0.15
+W=4
+nf=4
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/res_high_po_2p85.sym} 140 290 0 1 {name=R1
+W=2.85
+L=7.6
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/res_high_po_2p85.sym} 290 290 0 0 {name=R2
+W=2.85
+L=7.6
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 460 430 0 0 {name=M32
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 650 430 0 1 {name=M33
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {devices/opin.sym} 780 380 0 0 {name=p6 lab=OUTB}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 120 520 0 0 {name=M1
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 310 520 0 1 {name=M2
+L=0.15
+W=20
+nf=20
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 460 520 0 0 {name=M3
+L=0.15
+W=60
+nf=60
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 650 520 0 1 {name=M4
+L=0.15
+W=60
+nf=60
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {devices/ipin.sym} 360 420 0 1 {name=p8 lab=INB
+
+}
+C {sky130_fd_pr/res_high_po_5p73.sym} 480 290 0 1 {name=R29
+W=5.73
+L=16.4
+model=res_high_po_5p73
+spiceprefix=X
+mult=1}
+C {sky130_fd_pr/res_high_po_5p73.sym} 630 290 0 0 {name=R3
+W=5.73
+L=16.4
+model=res_high_po_5p73
+spiceprefix=X
+mult=1}
diff --git a/xschem/output_buffer.sym b/xschem/output_buffer.sym
new file mode 100644
index 0000000..afdd367
--- /dev/null
+++ b/xschem/output_buffer.sym
@@ -0,0 +1,53 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 10 -10 10 20 {}
+L 4 10 -40 10 50 {}
+L 4 10 50 100 0 {}
+L 4 10 -40 100 0 {}
+L 4 -30 -20 10 -20 {}
+L 4 50 -20 110 -20 {}
+L 4 10 50 10 60 {}
+L 4 -30 60 10 60 {}
+L 4 10 -60 10 -40 {}
+L 4 0 -60 20 -60 {}
+L 4 40 30 40 60 {}
+L 4 30 60 50 60 {}
+L 4 40 70 50 60 {}
+L 4 30 60 40 70 {}
+L 4 70 20 70 50 {}
+L 4 60 50 80 50 {}
+L 4 80 50 90 60 {}
+L 4 70 50 80 60 {}
+L 4 60 50 70 60 {}
+L 4 70 40 70 70 {}
+L 4 40 60 40 80 {}
+L 4 10 -70 10 -60 {}
+L 4 40 -10 50 -20 {}
+L 4 40 -10 60 -0 {}
+L 4 40 10 60 -0 {}
+L 4 40 10 40 30 {}
+L 4 -30 20 10 20 {}
+L 4 80 10 110 10 {}
+B 5 107.5 -22.5 112.5 -17.5 {name=OUTA
+dir=out}
+B 5 7.5 -72.5 12.5 -67.5 {name=VDD
+dir=in}
+B 5 -32.5 -22.5 -27.5 -17.5 {name=INA
+dir=in}
+B 5 -32.5 57.5 -27.5 62.5 {name=BIAS
+dir=in}
+B 5 37.5 77.5 42.5 82.5 {name=GND
+dir=in}
+B 5 67.5 67.5 72.5 72.5 {name=SUB
+dir=in}
+B 5 -32.5 17.5 -27.5 22.5 {name=INB
+dir=in}
+B 5 107.5 7.5 112.5 12.5 {name=OUTB
+dir=out}
+T {@NAME} 80 30 0 0 0.4 0.4 {}
diff --git a/xschem/test.data b/xschem/test.data
deleted file mode 100644
index c9cde37..0000000
--- a/xschem/test.data
+++ /dev/null
@@ -1,101 +0,0 @@
- 7.00000000e-01 -8.93059159e-08 7.00000000e-01 7.00000000e-01
- 7.01000000e-01 -9.08452852e-08 7.01000000e-01 7.01000000e-01
- 7.02000000e-01 -9.24385447e-08 7.02000000e-01 7.02000000e-01
- 7.03000000e-01 -9.40459956e-08 7.03000000e-01 7.03000000e-01
- 7.04000000e-01 -9.56814959e-08 7.04000000e-01 7.04000000e-01
- 7.05000000e-01 -9.73455368e-08 7.05000000e-01 7.05000000e-01
- 7.06000000e-01 -9.90386085e-08 7.06000000e-01 7.06000000e-01
- 7.07000000e-01 -1.00761227e-07 7.07000000e-01 7.07000000e-01
- 7.08000000e-01 -1.02513882e-07 7.08000000e-01 7.08000000e-01
- 7.09000000e-01 -1.04297110e-07 7.09000000e-01 7.09000000e-01
- 7.10000000e-01 -1.06111443e-07 7.10000000e-01 7.10000000e-01
- 7.11000000e-01 -1.07957415e-07 7.11000000e-01 7.11000000e-01
- 7.12000000e-01 -1.09835552e-07 7.12000000e-01 7.12000000e-01
- 7.13000000e-01 -1.11746436e-07 7.13000000e-01 7.13000000e-01
- 7.14000000e-01 -1.13690603e-07 7.14000000e-01 7.14000000e-01
- 7.15000000e-01 -1.15668634e-07 7.15000000e-01 7.15000000e-01
- 7.16000000e-01 -1.17681129e-07 7.16000000e-01 7.16000000e-01
- 7.17000000e-01 -1.19728657e-07 7.17000000e-01 7.17000000e-01
- 7.18000000e-01 -1.21811839e-07 7.18000000e-01 7.18000000e-01
- 7.19000000e-01 -1.23931259e-07 7.19000000e-01 7.19000000e-01
- 7.20000000e-01 -1.26087554e-07 7.20000000e-01 7.20000000e-01
- 7.21000000e-01 -1.28281358e-07 7.21000000e-01 7.21000000e-01
- 7.22000000e-01 -1.30513286e-07 7.22000000e-01 7.22000000e-01
- 7.23000000e-01 -1.32784003e-07 7.23000000e-01 7.23000000e-01
- 7.24000000e-01 -1.35094165e-07 7.24000000e-01 7.24000000e-01
- 7.25000000e-01 -1.37444453e-07 7.25000000e-01 7.25000000e-01
- 7.26000000e-01 -1.39835535e-07 7.26000000e-01 7.26000000e-01
- 7.27000000e-01 -1.42268085e-07 7.27000000e-01 7.27000000e-01
- 7.28000000e-01 -1.44742842e-07 7.28000000e-01 7.28000000e-01
- 7.29000000e-01 -1.47260486e-07 7.29000000e-01 7.29000000e-01
- 7.30000000e-01 -1.49821761e-07 7.30000000e-01 7.30000000e-01
- 7.31000000e-01 -1.52427364e-07 7.31000000e-01 7.31000000e-01
- 7.32000000e-01 -1.55078077e-07 7.32000000e-01 7.32000000e-01
- 7.33000000e-01 -1.57774611e-07 7.33000000e-01 7.33000000e-01
- 7.34000000e-01 -1.60517775e-07 7.34000000e-01 7.34000000e-01
- 7.35000000e-01 -1.63308337e-07 7.35000000e-01 7.35000000e-01
- 7.36000000e-01 -1.66147061e-07 7.36000000e-01 7.36000000e-01
- 7.37000000e-01 -1.69034765e-07 7.37000000e-01 7.37000000e-01
- 7.38000000e-01 -1.71972266e-07 7.38000000e-01 7.38000000e-01
- 7.39000000e-01 -1.74960357e-07 7.39000000e-01 7.39000000e-01
- 7.40000000e-01 -1.77999888e-07 7.40000000e-01 7.40000000e-01
- 7.41000000e-01 -1.81091703e-07 7.41000000e-01 7.41000000e-01
- 7.42000000e-01 -1.84236664e-07 7.42000000e-01 7.42000000e-01
- 7.43000000e-01 -1.87435634e-07 7.43000000e-01 7.43000000e-01
- 7.44000000e-01 -1.90689493e-07 7.44000000e-01 7.44000000e-01
- 7.45000000e-01 -1.93999127e-07 7.45000000e-01 7.45000000e-01
- 7.46000000e-01 -1.97365464e-07 7.46000000e-01 7.46000000e-01
- 7.47000000e-01 -2.00789378e-07 7.47000000e-01 7.47000000e-01
- 7.48000000e-01 -2.04271837e-07 7.48000000e-01 7.48000000e-01
- 7.49000000e-01 -2.07813739e-07 7.49000000e-01 7.49000000e-01
- 7.50000000e-01 -2.11416073e-07 7.50000000e-01 7.50000000e-01
- 7.51000000e-01 -2.15079797e-07 7.51000000e-01 7.51000000e-01
- 7.52000000e-01 -2.18805863e-07 7.52000000e-01 7.52000000e-01
- 7.53000000e-01 -2.22595278e-07 7.53000000e-01 7.53000000e-01
- 7.54000000e-01 -2.26449036e-07 7.54000000e-01 7.54000000e-01
- 7.55000000e-01 -2.30368144e-07 7.55000000e-01 7.55000000e-01
- 7.56000000e-01 -2.34353630e-07 7.56000000e-01 7.56000000e-01
- 7.57000000e-01 -2.38406548e-07 7.57000000e-01 7.57000000e-01
- 7.58000000e-01 -2.42527913e-07 7.58000000e-01 7.58000000e-01
- 7.59000000e-01 -2.46718795e-07 7.59000000e-01 7.59000000e-01
- 7.60000000e-01 -2.50980278e-07 7.60000000e-01 7.60000000e-01
- 7.61000000e-01 -2.55313430e-07 7.61000000e-01 7.61000000e-01
- 7.62000000e-01 -2.59719344e-07 7.62000000e-01 7.62000000e-01
- 7.63000000e-01 -2.64199148e-07 7.63000000e-01 7.63000000e-01
- 7.64000000e-01 -2.68753946e-07 7.64000000e-01 7.64000000e-01
- 7.65000000e-01 -2.73384860e-07 7.65000000e-01 7.65000000e-01
- 7.66000000e-01 -2.78093044e-07 7.66000000e-01 7.66000000e-01
- 7.67000000e-01 -2.82879650e-07 7.67000000e-01 7.67000000e-01
- 7.68000000e-01 -2.87745826e-07 7.68000000e-01 7.68000000e-01
- 7.69000000e-01 -2.92692776e-07 7.69000000e-01 7.69000000e-01
- 7.70000000e-01 -2.97721660e-07 7.70000000e-01 7.70000000e-01
- 7.71000000e-01 -3.02833688e-07 7.71000000e-01 7.71000000e-01
- 7.72000000e-01 -3.08030053e-07 7.72000000e-01 7.72000000e-01
- 7.73000000e-01 -3.13311974e-07 7.73000000e-01 7.73000000e-01
- 7.74000000e-01 -3.18680710e-07 7.74000000e-01 7.74000000e-01
- 7.75000000e-01 -3.24137468e-07 7.75000000e-01 7.75000000e-01
- 7.76000000e-01 -3.29683509e-07 7.76000000e-01 7.76000000e-01
- 7.77000000e-01 -3.35320078e-07 7.77000000e-01 7.77000000e-01
- 7.78000000e-01 -3.41048451e-07 7.78000000e-01 7.78000000e-01
- 7.79000000e-01 -3.46869908e-07 7.79000000e-01 7.79000000e-01
- 7.80000000e-01 -3.52785731e-07 7.80000000e-01 7.80000000e-01
- 7.81000000e-01 -3.58797218e-07 7.81000000e-01 7.81000000e-01
- 7.82000000e-01 -3.64905663e-07 7.82000000e-01 7.82000000e-01
- 7.83000000e-01 -3.71112381e-07 7.83000000e-01 7.83000000e-01
- 7.84000000e-01 -3.77418703e-07 7.84000000e-01 7.84000000e-01
- 7.85000000e-01 -3.83825919e-07 7.85000000e-01 7.85000000e-01
- 7.86000000e-01 -3.90335390e-07 7.86000000e-01 7.86000000e-01
- 7.87000000e-01 -3.96948455e-07 7.87000000e-01 7.87000000e-01
- 7.88000000e-01 -4.03666461e-07 7.88000000e-01 7.88000000e-01
- 7.89000000e-01 -4.10490750e-07 7.89000000e-01 7.89000000e-01
- 7.90000000e-01 -4.17422681e-07 7.90000000e-01 7.90000000e-01
- 7.91000000e-01 -4.24463629e-07 7.91000000e-01 7.91000000e-01
- 7.92000000e-01 -4.31614946e-07 7.92000000e-01 7.92000000e-01
- 7.93000000e-01 -4.38878017e-07 7.93000000e-01 7.93000000e-01
- 7.94000000e-01 -4.46254218e-07 7.94000000e-01 7.94000000e-01
- 7.95000000e-01 -4.53744916e-07 7.95000000e-01 7.95000000e-01
- 7.96000000e-01 -4.61351506e-07 7.96000000e-01 7.96000000e-01
- 7.97000000e-01 -4.69075369e-07 7.97000000e-01 7.97000000e-01
- 7.98000000e-01 -4.76917893e-07 7.98000000e-01 7.98000000e-01
- 7.99000000e-01 -4.84880471e-07 7.99000000e-01 7.99000000e-01
- 8.00000000e-01 -4.92964482e-07 8.00000000e-01 8.00000000e-01
diff --git a/xschem/threshold_test_tb.spice b/xschem/threshold_test_tb.spice
deleted file mode 100644
index 3e9804c..0000000
--- a/xschem/threshold_test_tb.spice
+++ /dev/null
@@ -1,46 +0,0 @@
-*---------------------------------------------------------------------------
-* SPDX-FileCopyrightText: 2020 Efabless Corporation
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* https://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* SPDX-License-Identifier: Apache-2.0
-*---------------------------------------------------------------------------
-* Threshold test for POR circuit
-* Determine gate voltage at which the HV NFET draws 240nA nominal
-*
-* Result: 0.7575V
-*-------------------------------------------------------------------
-
-.lib /usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice tt
-
-*----------------------------
-* Testbench circuit
-*----------------------------
-Rtest vdda mir1 1MEG
-Xm1 mir1 vin vss vss sky130_fd_pr__nfet_g5v0d10v5 w=2 l=0.8
-
-Vgate vin vss DC=0
-Vpwr vdda vss DC=3.3
-Rgnd vss 0 0.1
-
-*----------------------------
-* Testbench control
-*----------------------------
-.control
-* DC sweep from 0.7 to 0.8V
-dc Vgate 0.7 0.8 0.001
-wrdata test.data Vpwr#branch vin
-
-.endc
-
-.end
-
diff --git a/xschem/user_analog_project_wrapper.sch b/xschem/user_analog_project_wrapper.sch
index e3cbcec..b13734e 100644
--- a/xschem/user_analog_project_wrapper.sch
+++ b/xschem/user_analog_project_wrapper.sch
@@ -1,69 +1,72 @@
-v {xschem version=2.9.9 file_version=1.2 }
+v {xschem version=3.0.0 file_version=1.2 }
G {}
K {}
V {}
S {}
E {}
-N 3830 -460 3830 -390 { lab=vdda1}
-N 3730 -460 3830 -460 { lab=vdda1}
-N 3860 -230 3860 -180 { lab=vssa1}
-N 3770 -180 3860 -180 { lab=vssa1}
-N 3890 -460 3890 -390 { lab=vccd1}
-N 3890 -460 3960 -460 { lab=vccd1}
-N 3890 -130 3890 -60 { lab=vccd1}
-N 3890 -130 3950 -130 { lab=vccd1}
-N 3830 -130 3830 -60 { lab=io_analog[4]}
-N 3790 -130 3830 -130 { lab=io_analog[4]}
-N 3860 100 3860 150 { lab=vssa1}
-N 3800 150 3860 150 { lab=vssa1}
-N 4010 -10 4110 -10 { lab=gpio_analog[7]}
-N 4010 20 4110 20 { lab=io_out[15]}
-N 4010 50 4110 50 { lab=io_out[16]}
-N 4010 -340 4130 -340 { lab=gpio_analog[3]}
-N 4010 -310 4130 -310 { lab=io_out[11]}
-N 4010 -280 4130 -280 { lab=io_out[12]}
-N 3670 300 3670 340 { lab=io_clamp_low[2]}
-N 3670 400 3670 420 { lab=vssa1}
-N 3670 440 3670 460 { lab=io_clamp_high[2]}
-N 3670 520 3670 530 { lab=vssa1}
-N 3670 570 3670 590 { lab=io_clamp_low[1]}
-N 3670 650 3670 670 { lab=vssa1}
-N 4160 300 4160 330 { lab=io_clamp_high[1]}
-N 4160 390 4160 410 { lab=vssa1}
-N 4160 440 4160 460 { lab=io_clamp_low[0]}
-N 4160 520 4160 530 { lab=vssa1}
-N 4160 550 4160 560 { lab=io_clamp_high[0]}
-N 4160 620 4160 640 { lab=io_analog[4]}
-N 3630 300 3670 300 { lab=io_clamp_low[2]}
-N 3630 420 3670 420 { lab=vssa1}
-N 3630 440 3670 440 { lab=io_clamp_high[2]}
-N 3630 530 3670 530 { lab=vssa1}
-N 3630 570 3670 570 { lab=io_clamp_low[1]}
-N 3630 670 3670 670 { lab=vssa1}
-N 4130 300 4160 300 { lab=io_clamp_high[1]}
-N 4130 410 4160 410 { lab=vssa1}
-N 4130 440 4160 440 { lab=io_clamp_low[0]}
-N 4130 530 4160 530 { lab=vssa1}
-N 4130 550 4160 550 { lab=io_clamp_high[0]}
-N 4130 640 4160 640 { lab=io_analog[4]}
-N 3670 710 3670 750 { lab=io_oeb[12]}
-N 3670 810 3670 830 { lab=vssd1}
-N 3670 850 3670 870 { lab=io_oeb[16]}
-N 3670 930 3670 940 { lab=vssd1}
-N 4160 710 4160 740 { lab=io_oeb[11]}
-N 4160 800 4160 820 { lab=vssd1}
-N 4160 850 4160 870 { lab=#net1}
-N 4160 930 4160 940 { lab=vssd1}
-N 3630 710 3670 710 { lab=io_oeb[12]}
-N 3630 830 3670 830 { lab=vssd1}
-N 3630 850 3670 850 { lab=io_oeb[16]}
-N 3630 940 3670 940 { lab=vssd1}
-N 4130 710 4160 710 { lab=io_oeb[11]}
-N 4130 820 4160 820 { lab=vssd1}
-N 4130 850 4160 850 { lab=#net1}
-N 4130 940 4160 940 { lab=vssd1}
-C {example_por.sym} 3860 -310 0 0 {name=x1}
-C {example_por.sym} 3860 20 0 0 {name=x2}
+N 3410 -580 3970 -580 {
+lab=VCCD}
+N 3410 -580 3410 -440 {
+lab=VCCD}
+N 3250 -320 3410 -320 {
+lab=VCCD}
+N 3410 -440 3410 -320 {
+lab=VCCD}
+N 3480 -100 3990 -100 {
+lab=#net1}
+N 3480 -380 3480 -100 {
+lab=#net1}
+N 3250 -380 3480 -380 {
+lab=#net1}
+N 3290 260 3520 260 {
+lab=io_in[26:0]}
+N 3260 470 3530 470 {
+lab=io_analog[10:0]}
+N 4270 -320 4340 -320 {
+lab=io_analog[8]}
+N 4270 -380 4340 -380 {
+lab=io_analog[9]}
+N 3630 -460 3730 -460 {
+lab=REF}
+N 3690 -380 3730 -380 {
+lab=io_in[14]}
+N 3690 -360 3730 -360 {
+lab=io_in[15]}
+N 3690 -340 3730 -340 {
+lab=io_in[16]}
+N 3690 -320 3730 -320 {
+lab=io_in[17]}
+N 3690 -300 3730 -300 {
+lab=io_in[18]}
+N 3670 -240 3730 -240 {
+lab=io_analog[10]}
+N 3280 -190 3350 -190 {}
+N 3280 -160 3350 -160 {}
+N 3280 -130 3350 -130 {}
+N 3290 -100 3350 -100 {}
+N 3280 -70 3350 -70 {}
+N 3280 -40 3350 -40 {}
+N 3290 -10 3350 -10 {}
+N 3280 20 3350 20 {}
+N 3230 80 3290 80 {}
+N 3230 110 3290 110 {}
+N 3230 180 3280 180 {}
+N 3290 210 3370 210 {}
+N 3290 290 3370 290 {}
+N 3180 410 3260 410 {}
+N 3170 440 3260 440 {}
+N 3200 320 3280 320 {}
+N 3200 350 3290 350 {}
+N 3190 500 3260 500 {}
+N 3170 530 3250 530 {}
+N 3180 600 3270 600 {}
+N 3270 570 3390 570 {}
+N 3250 -470 3350 -470 {}
+N 3250 -440 3350 -440 {}
+N 3250 -410 3350 -410 {}
+N 3250 -350 3350 -350 {}
+N 3250 -290 3340 -290 {}
+N 3250 -260 3340 -260 {}
C {devices/iopin.sym} 3240 -470 0 0 {name=p1 lab=vdda1}
C {devices/iopin.sym} 3240 -440 0 0 {name=p2 lab=vdda2}
C {devices/iopin.sym} 3240 -410 0 0 {name=p3 lab=vssa1}
@@ -96,85 +99,16 @@
C {devices/iopin.sym} 3250 530 0 0 {name=p31 lab=io_clamp_low[2:0]}
C {devices/opin.sym} 3270 600 0 0 {name=p32 lab=user_irq[2:0]}
C {devices/ipin.sym} 3290 210 0 0 {name=p28 lab=la_oenb[127:0]}
-C {devices/lab_pin.sym} 3730 -460 0 0 {name=l1 sig_type=std_logic lab=vdda1}
-C {devices/lab_pin.sym} 3770 -180 0 0 {name=l2 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 3960 -460 0 1 {name=l3 sig_type=std_logic lab=vccd1}
-C {devices/lab_pin.sym} 3950 -130 0 1 {name=l4 sig_type=std_logic lab=vccd1}
-C {devices/lab_pin.sym} 3790 -130 0 0 {name=l5 sig_type=std_logic lab=io_analog[4]}
-C {devices/lab_pin.sym} 3800 150 0 0 {name=l6 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 4130 -340 0 1 {name=l7 sig_type=std_logic lab=gpio_analog[3]}
-C {devices/lab_pin.sym} 4130 -310 0 1 {name=l8 sig_type=std_logic lab=io_out[11]}
-C {devices/lab_pin.sym} 4130 -280 0 1 {name=l9 sig_type=std_logic lab=io_out[12]}
-C {devices/lab_pin.sym} 4110 -10 0 1 {name=l10 sig_type=std_logic lab=gpio_analog[7]}
-C {devices/lab_pin.sym} 4110 20 0 1 {name=l11 sig_type=std_logic lab=io_out[15]}
-C {devices/lab_pin.sym} 4110 50 0 1 {name=l12 sig_type=std_logic lab=io_out[16]}
-C {sky130_fd_pr/res_generic_m1.sym} 3670 370 0 0 {name=R1
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 3670 490 0 0 {name=R2
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 3670 620 0 0 {name=R4
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 4160 360 0 0 {name=R5
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 4160 490 0 0 {name=R6
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 4160 590 0 0 {name=R7
-W=11
-L=0.25
-model=res_generic_m3
-mult=1}
-C {devices/lab_pin.sym} 3630 300 0 0 {name=l13 sig_type=std_logic lab=io_clamp_low[2]}
-C {devices/lab_pin.sym} 3630 440 0 0 {name=l14 sig_type=std_logic lab=io_clamp_high[2]}
-C {devices/lab_pin.sym} 3630 570 0 0 {name=l15 sig_type=std_logic lab=io_clamp_low[1]}
-C {devices/lab_pin.sym} 4130 300 0 0 {name=l16 sig_type=std_logic lab=io_clamp_high[1]}
-C {devices/lab_pin.sym} 4130 440 0 0 {name=l17 sig_type=std_logic lab=io_clamp_low[0]}
-C {devices/lab_pin.sym} 3630 420 0 0 {name=l18 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 3630 530 0 0 {name=l19 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 4130 410 0 0 {name=l20 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 4130 530 0 0 {name=l21 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 3630 670 0 0 {name=l22 sig_type=std_logic lab=vssa1}
-C {devices/lab_pin.sym} 4130 550 0 0 {name=l23 sig_type=std_logic lab=io_clamp_high[0]}
-C {devices/lab_pin.sym} 4130 640 0 0 {name=l24 sig_type=std_logic lab=io_analog[4]}
-C {sky130_fd_pr/res_generic_m1.sym} 3670 780 0 0 {name=R8
-W=0.56
-L=0.49
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 3670 900 0 0 {name=R9
-W=0.56
-L=0.31
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 4160 770 0 0 {name=R11
-W=0.56
-L=0.58
-model=res_generic_m3
-mult=1}
-C {sky130_fd_pr/res_generic_m1.sym} 4160 900 0 0 {name=R12
-W=0.56
-L=0.6
-model=res_generic_m3
-mult=1}
-C {devices/lab_pin.sym} 4130 850 0 0 {name=l25 sig_type=std_logic lab=io_oeb[15]}
-C {devices/lab_pin.sym} 3630 850 0 0 {name=l26 sig_type=std_logic lab=io_oeb[16]}
-C {devices/lab_pin.sym} 4130 710 0 0 {name=l27 sig_type=std_logic lab=io_oeb[11]}
-C {devices/lab_pin.sym} 3630 710 0 0 {name=l28 sig_type=std_logic lab=io_oeb[12]}
-C {devices/lab_pin.sym} 3630 830 0 0 {name=l29 sig_type=std_logic lab=vssd1}
-C {devices/lab_pin.sym} 3630 940 0 0 {name=l30 sig_type=std_logic lab=vssd1}
-C {devices/lab_pin.sym} 4130 820 0 0 {name=l31 sig_type=std_logic lab=vssd1}
-C {devices/lab_pin.sym} 4130 940 0 0 {name=l32 sig_type=std_logic lab=vssd1}
+C {VCO.sym} 2150 140 0 0 {name=X1}
+C {devices/lab_pin.sym} 3510 260 2 0 {name=l1 sig_type=std_logic lab=io_in[26:0]}
+C {devices/lab_pin.sym} 3530 470 2 0 {name=l2 sig_type=std_logic lab=io_analog[10:0]}
+C {devices/lab_pin.sym} 4340 -380 2 0 {name=l3 sig_type=std_logic lab=io_analog[9]}
+C {devices/lab_pin.sym} 4340 -320 2 0 {name=l4 sig_type=std_logic lab=io_analog[8]}
+C {devices/lab_pin.sym} 3660 -460 0 0 {name=l5 sig_type=std_logic lab=REF}
+C {devices/lab_pin.sym} 3690 -380 0 0 {name=l6 sig_type=std_logic lab=io_in[14]}
+C {devices/lab_pin.sym} 3690 -360 0 0 {name=l7 sig_type=std_logic lab=io_in[15]}
+C {devices/lab_pin.sym} 3690 -340 0 0 {name=l8 sig_type=std_logic lab=io_in[16]}
+C {devices/lab_pin.sym} 3690 -320 0 0 {name=l9 sig_type=std_logic lab=io_in[17]}
+C {devices/lab_pin.sym} 3690 -300 0 0 {name=l10 sig_type=std_logic lab=io_in[18]}
+C {devices/lab_pin.sym} 3670 -240 0 0 {name=l11 sig_type=std_logic lab=io_analog[10]}
+C {devices/lab_pin.sym} 3670 -580 0 0 {name=l12 sig_type=std_logic lab=VCCD}
diff --git a/xschem/user_analog_project_wrapper.spice b/xschem/user_analog_project_wrapper.spice
index 0dc2d20..a8f11f0 100644
--- a/xschem/user_analog_project_wrapper.spice
+++ b/xschem/user_analog_project_wrapper.spice
@@ -1,3 +1,4 @@
+** sch_path: /foss/designs/sloci_caravel/xschem/user_analog_project_wrapper.sch
.subckt user_analog_project_wrapper vdda1 vdda2 vssa1 vssa2 vccd1 vccd2 vssd1 vssd2 wb_clk_i
+ wb_rst_i wbs_stb_i wbs_cyc_i wbs_we_i wbs_sel_i[3] wbs_sel_i[2] wbs_sel_i[1] wbs_sel_i[0] wbs_dat_i[31]
+ wbs_dat_i[30] wbs_dat_i[29] wbs_dat_i[28] wbs_dat_i[27] wbs_dat_i[26] wbs_dat_i[25] wbs_dat_i[24] wbs_dat_i[23]
@@ -83,120 +84,250 @@
+ la_oenb[21] la_oenb[20] la_oenb[19] la_oenb[18] la_oenb[17] la_oenb[16] la_oenb[15] la_oenb[14] la_oenb[13]
+ la_oenb[12] la_oenb[11] la_oenb[10] la_oenb[9] la_oenb[8] la_oenb[7] la_oenb[6] la_oenb[5] la_oenb[4]
+ la_oenb[3] la_oenb[2] la_oenb[1] la_oenb[0]
-*.iopin vdda1
-*.iopin vdda2
-*.iopin vssa1
-*.iopin vssa2
-*.iopin vccd1
-*.iopin vccd2
-*.iopin vssd1
-*.iopin vssd2
-*.ipin wb_clk_i
-*.ipin wb_rst_i
-*.ipin wbs_stb_i
-*.ipin wbs_cyc_i
-*.ipin wbs_we_i
-*.ipin wbs_sel_i[3],wbs_sel_i[2],wbs_sel_i[1],wbs_sel_i[0]
-*.ipin
-*+ wbs_dat_i[31],wbs_dat_i[30],wbs_dat_i[29],wbs_dat_i[28],wbs_dat_i[27],wbs_dat_i[26],wbs_dat_i[25],wbs_dat_i[24],wbs_dat_i[23],wbs_dat_i[22],wbs_dat_i[21],wbs_dat_i[20],wbs_dat_i[19],wbs_dat_i[18],wbs_dat_i[17],wbs_dat_i[16],wbs_dat_i[15],wbs_dat_i[14],wbs_dat_i[13],wbs_dat_i[12],wbs_dat_i[11],wbs_dat_i[10],wbs_dat_i[9],wbs_dat_i[8],wbs_dat_i[7],wbs_dat_i[6],wbs_dat_i[5],wbs_dat_i[4],wbs_dat_i[3],wbs_dat_i[2],wbs_dat_i[1],wbs_dat_i[0]
-*.ipin
-*+ wbs_adr_i[31],wbs_adr_i[30],wbs_adr_i[29],wbs_adr_i[28],wbs_adr_i[27],wbs_adr_i[26],wbs_adr_i[25],wbs_adr_i[24],wbs_adr_i[23],wbs_adr_i[22],wbs_adr_i[21],wbs_adr_i[20],wbs_adr_i[19],wbs_adr_i[18],wbs_adr_i[17],wbs_adr_i[16],wbs_adr_i[15],wbs_adr_i[14],wbs_adr_i[13],wbs_adr_i[12],wbs_adr_i[11],wbs_adr_i[10],wbs_adr_i[9],wbs_adr_i[8],wbs_adr_i[7],wbs_adr_i[6],wbs_adr_i[5],wbs_adr_i[4],wbs_adr_i[3],wbs_adr_i[2],wbs_adr_i[1],wbs_adr_i[0]
-*.opin wbs_ack_o
-*.opin
-*+ wbs_dat_o[31],wbs_dat_o[30],wbs_dat_o[29],wbs_dat_o[28],wbs_dat_o[27],wbs_dat_o[26],wbs_dat_o[25],wbs_dat_o[24],wbs_dat_o[23],wbs_dat_o[22],wbs_dat_o[21],wbs_dat_o[20],wbs_dat_o[19],wbs_dat_o[18],wbs_dat_o[17],wbs_dat_o[16],wbs_dat_o[15],wbs_dat_o[14],wbs_dat_o[13],wbs_dat_o[12],wbs_dat_o[11],wbs_dat_o[10],wbs_dat_o[9],wbs_dat_o[8],wbs_dat_o[7],wbs_dat_o[6],wbs_dat_o[5],wbs_dat_o[4],wbs_dat_o[3],wbs_dat_o[2],wbs_dat_o[1],wbs_dat_o[0]
-*.ipin
-*+ la_data_in[127],la_data_in[126],la_data_in[125],la_data_in[124],la_data_in[123],la_data_in[122],la_data_in[121],la_data_in[120],la_data_in[119],la_data_in[118],la_data_in[117],la_data_in[116],la_data_in[115],la_data_in[114],la_data_in[113],la_data_in[112],la_data_in[111],la_data_in[110],la_data_in[109],la_data_in[108],la_data_in[107],la_data_in[106],la_data_in[105],la_data_in[104],la_data_in[103],la_data_in[102],la_data_in[101],la_data_in[100],la_data_in[99],la_data_in[98],la_data_in[97],la_data_in[96],la_data_in[95],la_data_in[94],la_data_in[93],la_data_in[92],la_data_in[91],la_data_in[90],la_data_in[89],la_data_in[88],la_data_in[87],la_data_in[86],la_data_in[85],la_data_in[84],la_data_in[83],la_data_in[82],la_data_in[81],la_data_in[80],la_data_in[79],la_data_in[78],la_data_in[77],la_data_in[76],la_data_in[75],la_data_in[74],la_data_in[73],la_data_in[72],la_data_in[71],la_data_in[70],la_data_in[69],la_data_in[68],la_data_in[67],la_data_in[66],la_data_in[65],la_data_in[64],la_data_in[63],la_data_in[62],la_data_in[61],la_data_in[60],la_data_in[59],la_data_in[58],la_data_in[57],la_data_in[56],la_data_in[55],la_data_in[54],la_data_in[53],la_data_in[52],la_data_in[51],la_data_in[50],la_data_in[49],la_data_in[48],la_data_in[47],la_data_in[46],la_data_in[45],la_data_in[44],la_data_in[43],la_data_in[42],la_data_in[41],la_data_in[40],la_data_in[39],la_data_in[38],la_data_in[37],la_data_in[36],la_data_in[35],la_data_in[34],la_data_in[33],la_data_in[32],la_data_in[31],la_data_in[30],la_data_in[29],la_data_in[28],la_data_in[27],la_data_in[26],la_data_in[25],la_data_in[24],la_data_in[23],la_data_in[22],la_data_in[21],la_data_in[20],la_data_in[19],la_data_in[18],la_data_in[17],la_data_in[16],la_data_in[15],la_data_in[14],la_data_in[13],la_data_in[12],la_data_in[11],la_data_in[10],la_data_in[9],la_data_in[8],la_data_in[7],la_data_in[6],la_data_in[5],la_data_in[4],la_data_in[3],la_data_in[2],la_data_in[1],la_data_in[0]
-*.opin
-*+ la_data_out[127],la_data_out[126],la_data_out[125],la_data_out[124],la_data_out[123],la_data_out[122],la_data_out[121],la_data_out[120],la_data_out[119],la_data_out[118],la_data_out[117],la_data_out[116],la_data_out[115],la_data_out[114],la_data_out[113],la_data_out[112],la_data_out[111],la_data_out[110],la_data_out[109],la_data_out[108],la_data_out[107],la_data_out[106],la_data_out[105],la_data_out[104],la_data_out[103],la_data_out[102],la_data_out[101],la_data_out[100],la_data_out[99],la_data_out[98],la_data_out[97],la_data_out[96],la_data_out[95],la_data_out[94],la_data_out[93],la_data_out[92],la_data_out[91],la_data_out[90],la_data_out[89],la_data_out[88],la_data_out[87],la_data_out[86],la_data_out[85],la_data_out[84],la_data_out[83],la_data_out[82],la_data_out[81],la_data_out[80],la_data_out[79],la_data_out[78],la_data_out[77],la_data_out[76],la_data_out[75],la_data_out[74],la_data_out[73],la_data_out[72],la_data_out[71],la_data_out[70],la_data_out[69],la_data_out[68],la_data_out[67],la_data_out[66],la_data_out[65],la_data_out[64],la_data_out[63],la_data_out[62],la_data_out[61],la_data_out[60],la_data_out[59],la_data_out[58],la_data_out[57],la_data_out[56],la_data_out[55],la_data_out[54],la_data_out[53],la_data_out[52],la_data_out[51],la_data_out[50],la_data_out[49],la_data_out[48],la_data_out[47],la_data_out[46],la_data_out[45],la_data_out[44],la_data_out[43],la_data_out[42],la_data_out[41],la_data_out[40],la_data_out[39],la_data_out[38],la_data_out[37],la_data_out[36],la_data_out[35],la_data_out[34],la_data_out[33],la_data_out[32],la_data_out[31],la_data_out[30],la_data_out[29],la_data_out[28],la_data_out[27],la_data_out[26],la_data_out[25],la_data_out[24],la_data_out[23],la_data_out[22],la_data_out[21],la_data_out[20],la_data_out[19],la_data_out[18],la_data_out[17],la_data_out[16],la_data_out[15],la_data_out[14],la_data_out[13],la_data_out[12],la_data_out[11],la_data_out[10],la_data_out[9],la_data_out[8],la_data_out[7],la_data_out[6],la_data_out[5],la_data_out[4],la_data_out[3],la_data_out[2],la_data_out[1],la_data_out[0]
-*.ipin
-*+ io_in[26],io_in[25],io_in[24],io_in[23],io_in[22],io_in[21],io_in[20],io_in[19],io_in[18],io_in[17],io_in[16],io_in[15],io_in[14],io_in[13],io_in[12],io_in[11],io_in[10],io_in[9],io_in[8],io_in[7],io_in[6],io_in[5],io_in[4],io_in[3],io_in[2],io_in[1],io_in[0]
-*.ipin
-*+ io_in_3v3[26],io_in_3v3[25],io_in_3v3[24],io_in_3v3[23],io_in_3v3[22],io_in_3v3[21],io_in_3v3[20],io_in_3v3[19],io_in_3v3[18],io_in_3v3[17],io_in_3v3[16],io_in_3v3[15],io_in_3v3[14],io_in_3v3[13],io_in_3v3[12],io_in_3v3[11],io_in_3v3[10],io_in_3v3[9],io_in_3v3[8],io_in_3v3[7],io_in_3v3[6],io_in_3v3[5],io_in_3v3[4],io_in_3v3[3],io_in_3v3[2],io_in_3v3[1],io_in_3v3[0]
-*.ipin user_clock2
-*.opin
-*+ io_out[26],io_out[25],io_out[24],io_out[23],io_out[22],io_out[21],io_out[20],io_out[19],io_out[18],io_out[17],io_out[16],io_out[15],io_out[14],io_out[13],io_out[12],io_out[11],io_out[10],io_out[9],io_out[8],io_out[7],io_out[6],io_out[5],io_out[4],io_out[3],io_out[2],io_out[1],io_out[0]
-*.opin
-*+ io_oeb[26],io_oeb[25],io_oeb[24],io_oeb[23],io_oeb[22],io_oeb[21],io_oeb[20],io_oeb[19],io_oeb[18],io_oeb[17],io_oeb[16],io_oeb[15],io_oeb[14],io_oeb[13],io_oeb[12],io_oeb[11],io_oeb[10],io_oeb[9],io_oeb[8],io_oeb[7],io_oeb[6],io_oeb[5],io_oeb[4],io_oeb[3],io_oeb[2],io_oeb[1],io_oeb[0]
-*.iopin
-*+ gpio_analog[17],gpio_analog[16],gpio_analog[15],gpio_analog[14],gpio_analog[13],gpio_analog[12],gpio_analog[11],gpio_analog[10],gpio_analog[9],gpio_analog[8],gpio_analog[7],gpio_analog[6],gpio_analog[5],gpio_analog[4],gpio_analog[3],gpio_analog[2],gpio_analog[1],gpio_analog[0]
-*.iopin
-*+ gpio_noesd[17],gpio_noesd[16],gpio_noesd[15],gpio_noesd[14],gpio_noesd[13],gpio_noesd[12],gpio_noesd[11],gpio_noesd[10],gpio_noesd[9],gpio_noesd[8],gpio_noesd[7],gpio_noesd[6],gpio_noesd[5],gpio_noesd[4],gpio_noesd[3],gpio_noesd[2],gpio_noesd[1],gpio_noesd[0]
-*.iopin
-*+ io_analog[10],io_analog[9],io_analog[8],io_analog[7],io_analog[6],io_analog[5],io_analog[4],io_analog[3],io_analog[2],io_analog[1],io_analog[0]
-*.iopin io_clamp_high[2],io_clamp_high[1],io_clamp_high[0]
-*.iopin io_clamp_low[2],io_clamp_low[1],io_clamp_low[0]
-*.opin user_irq[2],user_irq[1],user_irq[0]
-*.ipin
-*+ la_oenb[127],la_oenb[126],la_oenb[125],la_oenb[124],la_oenb[123],la_oenb[122],la_oenb[121],la_oenb[120],la_oenb[119],la_oenb[118],la_oenb[117],la_oenb[116],la_oenb[115],la_oenb[114],la_oenb[113],la_oenb[112],la_oenb[111],la_oenb[110],la_oenb[109],la_oenb[108],la_oenb[107],la_oenb[106],la_oenb[105],la_oenb[104],la_oenb[103],la_oenb[102],la_oenb[101],la_oenb[100],la_oenb[99],la_oenb[98],la_oenb[97],la_oenb[96],la_oenb[95],la_oenb[94],la_oenb[93],la_oenb[92],la_oenb[91],la_oenb[90],la_oenb[89],la_oenb[88],la_oenb[87],la_oenb[86],la_oenb[85],la_oenb[84],la_oenb[83],la_oenb[82],la_oenb[81],la_oenb[80],la_oenb[79],la_oenb[78],la_oenb[77],la_oenb[76],la_oenb[75],la_oenb[74],la_oenb[73],la_oenb[72],la_oenb[71],la_oenb[70],la_oenb[69],la_oenb[68],la_oenb[67],la_oenb[66],la_oenb[65],la_oenb[64],la_oenb[63],la_oenb[62],la_oenb[61],la_oenb[60],la_oenb[59],la_oenb[58],la_oenb[57],la_oenb[56],la_oenb[55],la_oenb[54],la_oenb[53],la_oenb[52],la_oenb[51],la_oenb[50],la_oenb[49],la_oenb[48],la_oenb[47],la_oenb[46],la_oenb[45],la_oenb[44],la_oenb[43],la_oenb[42],la_oenb[41],la_oenb[40],la_oenb[39],la_oenb[38],la_oenb[37],la_oenb[36],la_oenb[35],la_oenb[34],la_oenb[33],la_oenb[32],la_oenb[31],la_oenb[30],la_oenb[29],la_oenb[28],la_oenb[27],la_oenb[26],la_oenb[25],la_oenb[24],la_oenb[23],la_oenb[22],la_oenb[21],la_oenb[20],la_oenb[19],la_oenb[18],la_oenb[17],la_oenb[16],la_oenb[15],la_oenb[14],la_oenb[13],la_oenb[12],la_oenb[11],la_oenb[10],la_oenb[9],la_oenb[8],la_oenb[7],la_oenb[6],la_oenb[5],la_oenb[4],la_oenb[3],la_oenb[2],la_oenb[1],la_oenb[0]
-x1 vdda1 vccd1 gpio_analog[3] io_out[11] io_out[12] vssa1 example_por
-x2 io_analog[4] vccd1 gpio_analog[7] io_out[15] io_out[16] vssa1 example_por
-R1 vssa1 io_clamp_low[2] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R2 vssa1 io_clamp_high[2] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R3 vssa1 io_clamp_high[2] sky130_fd_pr__res_generic_m1 W=1 L=1 m=1
-R4 vssa1 io_clamp_low[1] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R5 vssa1 io_clamp_high[1] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R6 vssa1 io_clamp_low[0] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R7 io_analog[4] io_clamp_high[0] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R8 vssd1 io_oeb[15] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R9 vssd1 io_oeb[16] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R10 vssd1 io_oeb[16] sky130_fd_pr__res_generic_m1 W=1 L=1 m=1
-R11 vssd1 io_oeb[11] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
-R12 vssd1 io_oeb[12] sky130_fd_pr__res_generic_m3 W=1 L=1 m=1
+*.PININFO vdda1:B vdda2:B vssa1:B vssa2:B vccd1:B vccd2:B vssd1:B vssd2:B wb_clk_i:I wb_rst_i:I
+*+ wbs_stb_i:I wbs_cyc_i:I wbs_we_i:I wbs_sel_i[3:0]:I wbs_dat_i[31:0]:I wbs_adr_i[31:0]:I wbs_ack_o:O
+*+ wbs_dat_o[31:0]:O la_data_in[127:0]:I la_data_out[127:0]:O io_in[26:0]:I io_in_3v3[26:0]:I user_clock2:I
+*+ io_out[26:0]:O io_oeb[26:0]:O gpio_analog[17:0]:B gpio_noesd[17:0]:B io_analog[10:0]:B io_clamp_high[2:0]:B
+*+ io_clamp_low[2:0]:B user_irq[2:0]:O la_oenb[127:0]:I
+X1 REF io_in[14] io_in[15] io_in[16] io_in[17] io_in[18] io_analog[10] VCCD net1 io_analog[9]
++ io_analog[8] VCO
.ends
-* expanding symbol: example_por.sym # of pins=6
-* sym_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sym
-* sch_path: /home/tim/gits/caravel_user_project_analog/xschem/example_por.sch
-.subckt example_por vdd3v3 vdd1v8 porb_h porb_l por_l vss
-*.iopin vdd3v3
-*.iopin vss
-*.opin porb_h
-*.opin porb_l
-*.opin por_l
-*.iopin vdd1v8
-XC1 net9 vss sky130_fd_pr__cap_mim_m3_1 W=30 L=30 MF=1 m=1
-XC2 vss net9 sky130_fd_pr__cap_mim_m3_2 W=30 L=30 MF=1 m=1
-XM1 net3 net7 net5 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM2 net2 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' as='int((nf+2)/2) * W/nf * 0.29'
+* expanding symbol: VCO.sym # of pins=11
+** sym_path: /foss/designs/sloci_caravel/xschem/VCO.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/VCO.sch
+.subckt VCO REF CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 VCTRL VDD GND OUT0 OUT180
+*.PININFO GND:I CTRL1:I CTRL2:I CTRL3:I CTRL4:I CTRL5:I VCTRL:I REF:I VDD:I OUT0:O OUT180:O
+X1 VBIASN1 GND GND VDD net1 net2 net3 net4 net5 net6 net7 net8 core_osc
+X3 GND GND VDD net1 net2 net3 net4 net5 net6 net7 net8 net13 net12 net9 net10 net11 net14 VBIASN1
++ buffer_amp_vop
+X1 VBIASN1 VDD VDD net13 net12 VCTRL GND GND REF bias_calc
+X4 net2 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X5 net1 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X6 net4 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X7 net3 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X8 net6 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X9 net5 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X10 net8 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X11 net7 GND CTRL1 CTRL2 CTRL3 CTRL4 CTRL5 cap_bank
+X2 OUT0 VDD net9 VBIASN1 GND GND net11 OUT180 output_buffer
+XM35 REF REF VDD VDD sky130_fd_pr__pfet_01v8_lvt L=0.35 W=3 nf=3 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=1 m=1
-XR1 net4 vdd3v3 vss sky130_fd_pr__res_xhigh_po_0p69 L=500 mult=1 m=1
-XM4 net5 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM5 net3 net3 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XR2 vss net4 vss sky130_fd_pr__res_xhigh_po_0p69 L=150 mult=1 m=1
-XM7 net2 net2 net1 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM8 net1 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=14 nf=7 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=1 m=1
-XM10 net7 net4 vss vss sky130_fd_pr__nfet_g5v0d10v5 L=0.8 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=1 m=1
-XM9 net7 net7 net6 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM11 net6 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=16 nf=8 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=1 m=1
-XM12 net8 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XM13 net9 net2 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 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=1 m=1
-XR3 vss vss vss sky130_fd_pr__res_xhigh_po_0p69 L=25 mult=2 m=2
-x2 net10 vss vss vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8
-x3 net10 vss vss vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8
-x4 net10 vss vss vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8
-x5 net9 vss vss vdd3v3 vdd3v3 net10 sky130_fd_sc_hvl__schmittbuf_1
++ sa=0 sb=0 sd=0 mult=1 m=1
.ends
-** flattened .save nodes
+
+* expanding symbol: core_osc.sym # of pins=12
+** sym_path: /foss/designs/sloci_caravel/xschem/core_osc.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/core_osc.sch
+.subckt core_osc BIAS GND SUB VDD S1A S1B S2A S2B S3A S3B S4A S4B
+*.PININFO VDD:I BIAS:I SUB:I GND:I S1A:O S1B:O S2A:O S2B:O S3A:O S3B:O S4A:O S4B:O
+X1 S4B S4A BIAS VDD GND SUB S1A S1B core_osc_amp
+X2 S1A S1B BIAS VDD GND SUB S2A S2B core_osc_amp
+X3 S2A S2B BIAS VDD GND SUB S3A S3B core_osc_amp
+X4 S3A S3B BIAS VDD GND SUB S4A S4B core_osc_amp
+.ends
+
+
+* expanding symbol: buffer_amp_vop.sym # of pins=18
+** sym_path: /foss/designs/sloci_caravel/xschem/buffer_amp_vop.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/buffer_amp_vop.sch
+.subckt buffer_amp_vop GND SUB VDD I1A I1B I2A I2B I3A I3B I4A I4B AMP VOP OUT0 OUT90 OUT180 OUT270
++ BIAS
+*.PININFO BIAS:I GND:I SUB:I I1A:I I1B:I I2A:I I2B:I I3A:I I3B:I I4A:I I4B:I VDD:I AMP:O VOP:O
+*+ OUT0:O OUT180:O OUT90:O OUT270:O
+X2 I2A I2B BIAS VDD GND SUB net1 net1 buffer_amp
+X4 I4A I4B BIAS VDD GND SUB net1 net1 buffer_amp
+X1 I1A I1B BIAS VDD GND SUB OUT0 OUT180 buffer_amp
+X3 I3A I3B BIAS VDD GND SUB OUT90 OUT270 buffer_amp
+X5 OUT180 OUT0 OUT90 OUT270 AMP VDD GND SUB amp_dec
+X6 net1 VDD GND SUB VOP vop_dec
+.ends
+
+
+* expanding symbol: bias_calc.sym # of pins=9
+** sym_path: /foss/designs/sloci_caravel/xschem/bias_calc.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/bias_calc.sch
+.subckt bias_calc BIASOUT VDD PSUB AMP VOP VCTRL GND SUB BIAS2V
+*.PININFO AMP:I VOP:I VCTRL:I BIAS2V:I VDD:I PSUB:I SUB:I GND:I BIASOUT:O
+XM29 net1 BIAS2V VDD PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=15 nf=15 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=1 m=1
+XM30 net3 VOP net1 PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=10 nf=10 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=1 m=1
+XM31 net2 AMP net1 PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=10 nf=10 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=1 m=1
+XM36 net4 BIAS2V VDD PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=15 nf=15 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=1 m=1
+XM37 net5 VCTRL net4 PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=30 nf=30 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=1 m=1
+XM38 BIASOUT net3 net4 PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=30 nf=30 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=1 m=1
+XM39 net5 net5 GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=10 nf=10 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=1 m=1
+XM40 BIASOUT net5 GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=10 nf=10 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=1 m=1
+XR19 GND net2 SUB sky130_fd_pr__res_high_po_2p85 L=7.6 mult=1 m=1
+XR20 GND net3 SUB sky130_fd_pr__res_high_po_2p85 L=11.4 mult=1 m=1
+XM1 net1 BIAS2V VDD PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=15 nf=15 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=1 m=1
+XM2 net4 BIAS2V VDD PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=15 nf=15 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=1 m=1
+XM3 net4 BIAS2V VDD PSUB sky130_fd_pr__pfet_01v8_lvt L=0.35 W=15 nf=15 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=1 m=1
+.ends
+
+
+* expanding symbol: cap_bank.sym # of pins=7
+** sym_path: /foss/designs/sloci_caravel/xschem/cap_bank.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/cap_bank.sch
+.subckt cap_bank IN GND ctrll1 ctrll2 ctrll3 ctrll4 ctrll5
+*.PININFO IN:I GND:I ctrll1:I ctrll2:I ctrll3:I ctrll4:I ctrll5:I
+XC6 IN net1 sky130_fd_pr__cap_mim_m3_2 W=2 L=2 m=1
+XC1 IN net5 sky130_fd_pr__cap_mim_m3_2 W=2 L=2 m=1
+XC2 IN net4 sky130_fd_pr__cap_mim_m3_2 W=3 L=2 m=1
+XC3 IN net3 sky130_fd_pr__cap_mim_m3_2 W=3 L=4 m=1
+XC4 IN net2 sky130_fd_pr__cap_mim_m3_2 W=6 L=4 m=1
+XM1 net1 ctrll1 GND GND sky130_fd_pr__nfet_01v8_lvt L=0.15 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=1 m=1
+XM2 net5 ctrll2 GND GND sky130_fd_pr__nfet_01v8_lvt L=0.15 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=1 m=1
+XM3 net4 ctrll3 GND GND sky130_fd_pr__nfet_01v8_lvt L=0.15 W=2 nf=2 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=1 m=1
+XM4 net3 ctrll4 GND GND sky130_fd_pr__nfet_01v8_lvt L=0.15 W=3 nf=3 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=1 m=1
+XM5 net2 ctrll5 GND GND sky130_fd_pr__nfet_01v8_lvt L=0.15 W=6 nf=6 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=1 m=1
+.ends
+
+
+* expanding symbol: output_buffer.sym # of pins=8
+** sym_path: /foss/designs/sloci_caravel/xschem/output_buffer.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/output_buffer.sch
+.subckt output_buffer OUTA VDD INA BIAS GND SUB INB OUTB
+*.PININFO SUB:I GND:I INA:I BIAS:I VDD:I OUTA:O OUTB:O INB:I
+XM42 net2 INA net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XM43 net3 INB net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XR1 net2 VDD SUB sky130_fd_pr__res_high_po_2p85 L=7.6 mult=1 m=1
+XR2 net3 VDD SUB sky130_fd_pr__res_high_po_2p85 L=7.6 mult=1 m=1
+XM32 OUTA net2 net4 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+XM33 OUTB net3 net4 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+XM1 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+XM2 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+XM3 net4 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=60 nf=60 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=1 m=1
+XM4 net4 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=60 nf=60 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=1 m=1
+XR29 OUTA VDD SUB sky130_fd_pr__res_high_po_5p73 L=16.4 mult=1 m=1
+XR3 OUTB VDD SUB sky130_fd_pr__res_high_po_5p73 L=16.4 mult=1 m=1
+.ends
+
+
+* expanding symbol: core_osc_amp.sym # of pins=8
+** sym_path: /foss/designs/sloci_caravel/xschem/core_osc_amp.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/core_osc_amp.sch
+.subckt core_osc_amp INA INB BIAS VDD GND SUB OUTA OUTB
+*.PININFO INA:I INB:I BIAS:I GND:I VDD:I SUB:I OUTA:O OUTB:O
+XM2 OUTA INA net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XM3 OUTB INB net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XM1 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+XR16 OUTA VDD SUB sky130_fd_pr__res_high_po_2p85 L=7.6 mult=1 m=1
+XR17 OUTB VDD SUB sky130_fd_pr__res_high_po_2p85 L=7.6 mult=1 m=1
+XM4 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=20 nf=20 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=1 m=1
+.ends
+
+
+* expanding symbol: buffer_amp.sym # of pins=8
+** sym_path: /foss/designs/sloci_caravel/xschem/buffer_amp.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/buffer_amp.sch
+.subckt buffer_amp INA INB BIAS VDD GND SUB OUTA OUTB
+*.PININFO INA:I INB:I BIAS:I GND:I VDD:I SUB:I OUTA:O OUTB:O
+XM1 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=10 nf=10 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=1 m=1
+XM2 OUTB INB net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 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=1 m=1
+XM3 OUTA INA net1 SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 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=1 m=1
+XR2 OUTB VDD SUB sky130_fd_pr__res_high_po_5p73 L=30.4 mult=1 m=1
+XR1 OUTA VDD SUB sky130_fd_pr__res_high_po_5p73 L=30.4 mult=1 m=1
+XM4 net1 BIAS GND SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=10 nf=10 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=1 m=1
+.ends
+
+
+* expanding symbol: amp_dec.sym # of pins=8
+** sym_path: /foss/designs/sloci_caravel/xschem/amp_dec.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/amp_dec.sch
+.subckt amp_dec IN1 IN2 IN3 IN4 AMP VDD GND SUB
+*.PININFO VDD:I SUB:I GND:I IN1:I IN2:I IN3:I IN4:I AMP:O
+XM25 VDD IN1 AMP SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XC1 AMP GND sky130_fd_pr__cap_mim_m3_1 W=20 L=30 MF=1 m=1
+XM26 VDD IN2 AMP SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XM27 VDD IN3 AMP SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XM28 VDD IN4 AMP SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=4 nf=4 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=1 m=1
+XR18 GND AMP SUB sky130_fd_pr__res_high_po_2p85 L=42 mult=1 m=1
+.ends
+
+
+* expanding symbol: vop_dec.sym # of pins=5
+** sym_path: /foss/designs/sloci_caravel/xschem/vop_dec.sym
+** sch_path: /foss/designs/sloci_caravel/xschem/vop_dec.sch
+.subckt vop_dec IN VDD GND SUB VOP
+*.PININFO IN:I VDD:I GND:I SUB:I VOP:O
+XM41 VDD IN VOP SUB sky130_fd_pr__nfet_01v8_lvt L=0.15 W=12 nf=12 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=1 m=1
+XC2 IN GND sky130_fd_pr__cap_mim_m3_1 W=20 L=30 MF=1 m=1
+XR21 GND VOP SUB sky130_fd_pr__res_high_po_2p85 L=42 mult=1 m=1
+.ends
+
.end
diff --git a/xschem/vop_dec.sch b/xschem/vop_dec.sch
new file mode 100644
index 0000000..a0215fa
--- /dev/null
+++ b/xschem/vop_dec.sch
@@ -0,0 +1,60 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {}
+V {}
+S {}
+E {}
+N 270 -90 270 -50 {
+lab=#net1}
+N 270 -280 270 -240 {
+lab=VDD}
+N 270 -240 270 -230 {
+lab=VDD}
+N 270 -200 300 -200 {
+lab=SUB}
+N 140 -140 140 -100 {
+lab=#net1}
+N 120 -200 140 -200 {
+lab=IN}
+N 70 -200 120 -200 {
+lab=IN}
+N 270 -170 270 -150 {
+lab=VOP}
+N 140 -200 230 -200 {
+lab=IN}
+N 140 -100 140 -50 {
+lab=#net1}
+N 140 -50 270 -50 {
+lab=#net1}
+N 290 -120 300 -120 {
+lab=SUB}
+N 300 -200 300 -30 {
+lab=SUB}
+N 270 -160 380 -160 {
+lab=VOP}
+C {sky130_fd_pr/nfet_01v8_lvt.sym} 250 -200 0 0 {name=M41
+L=0.15
+W=12
+nf=12
+mult=1
+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_01v8_lvt
+spiceprefix=X
+}
+C {sky130_fd_pr/cap_mim_m3_1.sym} 140 -170 0 0 {name=C2 model=cap_mim_m3_1 W=20 L=30 MF=1 spiceprefix=X}
+C {sky130_fd_pr/res_high_po_2p85.sym} 270 -120 0 1 {name=R21
+W=2.85
+L=42
+model=res_high_po_2p85
+spiceprefix=X
+mult=1}
+C {devices/ipin.sym} 70 -200 0 0 {name=p11 lab=IN}
+C {devices/ipin.sym} 270 -280 0 0 {name=p1 lab=VDD}
+C {devices/ipin.sym} 140 -50 0 0 {name=p2 lab=GND}
+C {devices/ipin.sym} 300 -30 0 0 {name=p3 lab=SUB}
+C {devices/opin.sym} 380 -160 0 0 {name=p4 lab=VOP}
diff --git a/xschem/vop_dec.sym b/xschem/vop_dec.sym
new file mode 100644
index 0000000..ec7dd81
--- /dev/null
+++ b/xschem/vop_dec.sym
@@ -0,0 +1,61 @@
+v {xschem version=3.0.0 file_version=1.2 }
+G {}
+K {type=subcircuit
+format="@name @pinlist @symname"
+template="name=X1"}
+V {}
+S {}
+E {}
+L 4 50 -20 110 -20 {}
+L 4 50 -80 110 -80 {}
+L 4 60 -60 60 -40 {}
+L 4 60 -60 70 -60 {}
+L 4 70 -60 70 -40 {}
+L 4 70 -40 80 -40 {}
+L 4 80 -70 80 -40 {}
+L 4 80 -70 90 -70 {}
+L 4 90 -70 90 -30 {}
+L 4 90 -30 100 -30 {}
+L 4 100 -60 100 -30 {}
+L 4 100 -60 110 -60 {}
+L 4 110 -60 110 -40 {}
+L 4 60 -50 120 -50 {}
+L 4 50 -50 60 -50 {}
+L 4 40 -60 50 -50 {}
+L 4 40 -40 50 -50 {}
+L 4 120 -50 130 -60 {}
+L 4 120 -50 130 -40 {}
+L 4 110 -80 140 -80 {}
+L 4 140 -80 140 -20 {}
+L 4 110 -20 140 -20 {}
+L 4 30 -20 50 -20 {}
+L 4 30 -80 30 -20 {}
+L 4 30 -80 50 -80 {}
+L 4 60 -20 60 0 {}
+L 4 110 -20 110 0 {}
+L 4 80 -100 80 -80 {}
+L 4 140 -50 170 -50 {}
+L 4 0 -50 30 -50 {}
+L 4 50 -10 70 -10 {}
+L 4 60 0 70 -10 {}
+L 4 50 -10 60 0 {}
+L 4 100 -10 120 -10 {}
+L 4 100 -10 110 0 {}
+L 4 110 -10 120 0 {}
+L 4 120 -10 130 -0 {}
+L 4 70 -90 90 -90 {}
+L 4 80 -110 80 -100 {}
+L 4 60 0 60 10 {}
+L 4 110 -0 110 10 {}
+B 5 -2.5 -52.5 2.5 -47.5 {name=IN
+dir=in}
+B 5 77.5 -112.5 82.5 -107.5 {name=VDD
+dir=in}
+B 5 57.5 7.5 62.5 12.5 {name=GND
+dir=in}
+B 5 107.5 7.5 112.5 12.5 {name=SUB
+dir=in}
+B 5 167.5 -52.5 172.5 -47.5 {name=VOP
+dir=out}
+T {@NAME} 140 -10 0 0 0.4 0.4 {}
+T {VOP} 150 -80 0 0 0.4 0.4 {}