diff options
| author | Warrick Lo <wlo@warricklo.net> | 2026-01-25 20:42:49 -0800 |
|---|---|---|
| committer | Warrick Lo <wlo@warricklo.net> | 2026-01-25 20:42:49 -0800 |
| commit | 9ed00249ea1ab18a96992ce12cc183ede32e9931 (patch) | |
| tree | 857011dc7b5fef37f2c11e299b6e4bcc44b80ebe | |
Add circuit schematic
Signed-off-by: Warrick Lo <wlo@warricklo.net>
| -rw-r--r-- | schematic/opamp.sch | 384 | ||||
| -rw-r--r-- | schematic/xschemrc | 8 |
2 files changed, 392 insertions, 0 deletions
diff --git a/schematic/opamp.sch b/schematic/opamp.sch new file mode 100644 index 0000000..7103dc8 --- /dev/null +++ b/schematic/opamp.sch @@ -0,0 +1,384 @@ +v {xschem version=3.4.8RC file_version=1.3} +G {} +K {} +V {} +S {} +F {} +E {} +N 0 0 1640 0 {lab=VDD} +N 0 800 1780 800 {lab=VSS} +N 0 340 1440 340 {lab=PLUS} +N 1440 340 1440 430 {lab=PLUS} +N 1400 430 1440 430 {lab=PLUS} +N 0 430 1120 430 {lab=MINUS} +N 140 0 140 40 {lab=VDD} +N 140 100 140 220 {lab=#N01} +N 140 280 140 640 {lab=#N02} +N 140 700 140 800 {lab=VSS} +N 100 70 100 800 {lab=VSS} +N 100 70 120 70 {lab=VSS} +N 100 250 120 250 {lab=VSS} +N 100 670 120 670 {lab=VSS} +N 1260 0 1260 120 {lab=VDD} +N 1260 100 1300 100 {lab=VDD} +N 1300 100 1300 150 {lab=VDD} +N 1260 150 1300 150 {lab=VDD} +N 140 150 1220 150 {lab=#N01} +N 1260 180 1260 380 {lab=#N03} +N 1160 380 1360 380 {lab=#N03} +N 1160 380 1160 400 {lab=#N03} +N 1360 380 1360 400 {lab=#N03} +N 1200 380 1200 430 {lab=#N03} +N 1160 430 1200 430 {lab=#N03} +N 1320 380 1320 430 {lab=#N03} +N 1320 430 1360 430 {lab=#N03} +N 1160 460 1160 640 {lab=#N04} +N 1360 460 1360 640 {lab=#N05} +N 1200 670 1320 670 {lab=#N06} +N 1160 700 1160 800 {lab=VSS} +N 1360 700 1360 800 {lab=VSS} +N 1120 670 1160 670 {lab=VSS} +N 1120 670 1120 720 {lab=VSS} +N 1120 720 1160 720 {lab=VSS} +N 1360 670 1400 670 {lab=VSS} +N 1400 670 1400 720 {lab=VSS} +N 1360 720 1400 720 {lab=VSS} +N 1040 600 1160 600 {lab=#N04} +N 1360 600 1480 600 {lab=#N05} +N 880 0 880 220 {lab=VDD} +N 1640 0 1640 220 {lab=VDD} +N 840 200 880 200 {lab=VDD} +N 840 200 840 250 {lab=VDD} +N 840 250 880 250 {lab=VDD} +N 1640 200 1680 200 {lab=VDD} +N 1680 200 1680 250 {lab=VDD} +N 1640 250 1680 250 {lab=VDD} +N 880 280 880 640 {lab=#N07} +N 1640 280 1640 640 {lab=OUT} +N 880 700 880 800 {lab=VSS} +N 1640 700 1640 800 {lab=VSS} +N 1080 600 1080 670 {lab=#N04} +N 920 670 1080 670 {lab=#N04} +N 1440 600 1440 670 {lab=#N05} +N 1440 670 1600 670 {lab=#N05} +N 880 600 920 600 {lab=#N07} +N 1600 600 1640 600 {lab=OUT} +N 840 670 880 670 {lab=VSS} +N 840 670 840 720 {lab=VSS} +N 840 720 880 720 {lab=VSS} +N 1640 670 1680 670 {lab=VSS} +N 1680 670 1680 720 {lab=VSS} +N 1640 720 1680 720 {lab=VSS} +N 1010 620 1010 800 {lab=VSS} +N 1510 620 1510 800 {lab=VSS} +N 920 250 1600 250 {lab=#N07} +N 880 300 940 300 {lab=#N07} +N 940 250 940 300 {lab=#N07} +N 1640 600 1780 600 {lab=OUT} +N 1780 600 1780 640 {lab=OUT} +N 1780 700 1780 800 {lab=VSS} +N 1780 600 1880 600 {lab=OUT} +N 700 500 1360 500 {lab=#N05} +N 700 560 1160 560 {lab=#N04} +N 600 500 600 560 {lab=#N08} +N 600 500 640 500 {lab=#N08} +N 600 560 640 560 {lab=#N08} +N 560 530 600 530 {lab=#N08} +N 670 520 670 540 {lab=VSS} +N 670 530 740 530 {lab=VSS} +N 740 530 740 800 {lab=VSS} +N 420 0 420 220 {lab=VDD} +N 420 200 460 200 {lab=VDD} +N 460 200 460 250 {lab=VDD} +N 420 250 460 250 {lab=VDD} +N 340 150 340 250 {lab=#N01} +N 340 250 380 250 {lab=#N01} +N 420 280 420 480 {lab=#N09} +N 320 480 520 480 {lab=#N09} +N 320 480 320 500 {lab=#N09} +N 520 480 520 500 {lab=#N09} +N 360 480 360 530 {lab=#N09} +N 320 530 360 530 {lab=#N09} +N 480 480 480 530 {lab=#N09} +N 480 530 520 530 {lab=#N09} +N 140 530 280 530 {lab=#N02} +N 320 560 320 640 {lab=#N06} +N 520 560 520 640 {lab=#N10} +N 320 620 380 620 {lab=#N06} +N 380 620 380 670 {lab=#N06} +N 360 670 380 670 {lab=#N06} +N 460 620 520 620 {lab=#N10} +N 460 620 460 670 {lab=#N10} +N 460 670 480 670 {lab=#N10} +N 320 700 320 800 {lab=VSS} +N 520 700 520 800 {lab=VSS} +N 280 670 320 670 {lab=VSS} +N 280 670 280 720 {lab=VSS} +N 280 720 320 720 {lab=VSS} +N 520 670 560 670 {lab=VSS} +N 560 670 560 720 {lab=VSS} +N 520 720 560 720 {lab=VSS} +N 380 670 380 760 {lab=#N06} +N 380 760 1260 760 {lab=#N06} +N 1260 670 1260 760 {lab=#N06} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 1240 150 0 0 {name=M1 +W=2.85 +L=0.35 +nf=1 +mult=2 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 1140 430 0 0 {name=M2 +W=2.8 +L=0.65 +nf=1 +mult=12 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 1380 430 0 1 {name=M3 +W=2.8 +L=0.65 +nf=1 +mult=12 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 1180 670 0 1 {name=M4 +W=1 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 1340 670 0 0 {name=M5 +W=1 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 900 670 0 1 {name=M6 +W=1.4 +L=0.65 +nf=1 +mult=4 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 1620 670 0 0 {name=M7 +W=1.4 +L=0.65 +nf=1 +mult=4 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 900 250 0 1 {name=M8 +W=2.2 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 1620 250 0 0 {name=M9 +W=2.2 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 400 250 0 0 {name=M10 +W=2.6 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 300 530 0 0 {name=M11 +W=2.4 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 540 530 0 1 {name=M12 +W=2.4 +L=0.35 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 340 670 0 1 {name=M13 +W=1 +L=0.25 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 500 670 0 0 {name=M14 +W=1 +L=0.25 +nf=1 +mult=1 +ad="expr('int((@nf + 1)/2) * @W / @nf * 0.29')" +pd="expr('2*int((@nf + 1)/2) * (@W / @nf + 0.29)')" +as="expr('int((@nf + 2)/2) * @W / @nf * 0.29')" +ps="expr('2*int((@nf + 2)/2) * (@W / @nf + 0.29)')" +nrd="expr('0.29 / @W ')" nrs="expr('0.29 / @W ')" +sa=0 sb=0 sd=0 +model=nfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/res_iso_pw.sym} 1010 600 3 0 {name=R1 +W=0.5 +L=2.65 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 1510 600 1 1 {name=R2 +W=0.5 +L=2.65 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 670 500 3 0 {name=R3 +W=0.05 +L=6.6 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 670 560 3 1 {name=R4 +W=0.05 +L=6.6 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 140 70 0 0 {name=R5 +W=0.05 +L=4.5 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 140 250 0 0 {name=R6 +W=0.05 +L=6.4 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_iso_pw.sym} 140 670 0 0 {name=R7 +W=0.05 +L=4.2 +model=res_iso_pw +spiceprefix=X +mult=1} +C {sky130_fd_pr/cap_mim_m3_1.sym} 950 600 3 0 {name=C1 +model=cap_mim_m3_1 +W=6 +L=4 +MF=4 +spiceprefix=X} +C {sky130_fd_pr/cap_mim_m3_1.sym} 1570 600 1 1 {name=C2 +model=cap_mim_m3_1 +W=6 +L=4 +MF=4 +spiceprefix=X} +C {sky130_fd_pr/cap_mim_m3_1.sym} 1780 670 0 0 {name=C3 +model=cap_mim_m3_1 +W=12 +L=10 +MF=8 +spiceprefix=X} +C {ipin.sym} 0 0 0 0 {name=p1 lab=VDD} +C {ipin.sym} 0 800 0 0 {name=p2 lab=VSS} +C {ipin.sym} 0 340 0 0 {name=p3 lab=PLUS} +C {ipin.sym} 0 430 0 0 {name=p4 lab=MINUS} +C {opin.sym} 1880 600 0 0 {name=p5 lab=OUT} diff --git a/schematic/xschemrc b/schematic/xschemrc new file mode 100644 index 0000000..bac6d77 --- /dev/null +++ b/schematic/xschemrc @@ -0,0 +1,8 @@ +source /usr/local/share/pdk/sky130A/libs.tech/xschem/xschemrc + +set tk_scaling 1.5 +set draw_grid_axes 0 +set persistent_command 1 +set no_ask_save 1 +set ps_page_title 0 +set terminal {xterm -T xterm -geometry 100x40 -fn 9x15 -bg black -fg white -cr white -ms white -fs 32} |