summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarrick Lo <wlo@warricklo.net>2026-01-25 20:42:49 -0800
committerWarrick Lo <wlo@warricklo.net>2026-01-25 20:42:49 -0800
commit9ed00249ea1ab18a96992ce12cc183ede32e9931 (patch)
tree857011dc7b5fef37f2c11e299b6e4bcc44b80ebe
Add circuit schematic
Signed-off-by: Warrick Lo <wlo@warricklo.net>
-rw-r--r--schematic/opamp.sch384
-rw-r--r--schematic/xschemrc8
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}