diff --git a/figures/adc.svg b/figures/adc.svg new file mode 100644 index 0000000..87904aa --- /dev/null +++ b/figures/adc.svg @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +V ++ + + + +V + + + + + +S&H + + + + + + + + + + +S&H + + + + + + + + + + +DAC + + + + + + + + + + + + +D +1 + + + + + + + + + + +D +2 + + + + + + + + + + +D +3 +... + + + + + + + + + + +D +12 + + + + + + + + + +V +ref + + +DAC + + + + + + + + + + + + +D +1 + + + + + + + + + + +D +2 + + + + + + + + + + +D +3 +... + + + + + + + + + + +D +12 + + +V +ref + + + + + + + + + + ++ + + + + +SAR + +CLK +RST + + + + + + + + + + +12 +V +out + + \ No newline at end of file diff --git a/figures/adc.tex b/figures/adc.tex new file mode 100644 index 0000000..404abfe --- /dev/null +++ b/figures/adc.tex @@ -0,0 +1,164 @@ +\documentclass[border=5pt]{standalone} +\usepackage{circuitikz} + +\begin{document} + +\newcommand{\wedgedown}{+(-0.15,0) -- +(0,-0.15) -- +(0.15,0)} + +\begin{circuitikz} + \draw (0, 0) node[above]{$V_{+}$} to[short, *-]++ (1, 0) coordinate (sh1_left); + \draw (0, -4) node[above]{$V_{-}$} to[short, *-]++ (1, 0) coordinate (sh2_left); + + % Sample & Hold + \node [muxdemux, + muxdemux def={Lh=4, NL=2, Rh=4, NR=2, NT=1, NB=0, w=6}, + draw only top pins={}, + draw only left pins={1}, + draw only right pins={1}, + anchor=lpin 1 + ](sh1) at (sh1_left) {}; + \node [above] at ($(sh1.btpin 1) + (-1, 0)$) {S\&H}; + + \draw (sh1.blpin 1) to[switch]++ (2, 0) coordinate (sh1_c) + to (sh1.brpin 1); + \draw (sh1_c) to[C]++ (0, -1) node[ground]{}; + + \node [muxdemux, + muxdemux def={Lh=4, NL=2, Rh=4, NR=2, NT=1, NB=0, w=6}, + draw only top pins={}, + draw only left pins={1}, + draw only right pins={1}, + anchor=lpin 1 + ](sh2) at (sh2_left) {}; + \node [above] at ($(sh2.btpin 1) + (-1, 0)$) {S\&H}; + + \draw (sh2.blpin 1) to[switch]++ (2, 0) coordinate (sh2_c) + to (sh2.brpin 1); + \draw (sh2_c) to[C]++ (0, -1) node[ground]{}; + + % DAC - + \node [muxdemux, + muxdemux def={Lh=8, NL=2, Rh=8, NR=2, NT=1, NB=1, w=10, inset w=0.5, inset Lh=3.0, inset Rh=2.0}, + draw only top pins={}, + anchor=lpin 1 + ] (dac2) at ($(sh2.rpin 1) + (1, 0)$) {}; + + \node [above] at ($(dac2.btpin 1) + (-2, 0)$) {DAC}; + + \coordinate (dac2_cap_j) at ($(dac2.btpin 1) + (0, -0.5)$); + \coordinate (dac2_tj) at ($(dac2_cap_j)!0.5!(dac2.btpin 1)$); + \coordinate (dac2_outset_left) at ($(dac2.brpin 1) + (-0.5, 0)$); + + \draw (dac2.blpin 1) to (dac2.blpin 1 -| dac2.inset right) + |- (dac2_tj) + -| (dac2.brpin 1 -| dac2_outset_left) + to (dac2.brpin 1); + \draw (dac2_tj) to (dac2_cap_j); + + \draw (dac2_cap_j) to++ (-2, 0) + to[C]++ (0, -2) node[spdt, rotate=-90, anchor=in](d1){} node[right]{$D_1$}; + \coordinate (dac2_left_cap) at (d1.out 1); + \draw (dac2_cap_j) ++ (-1, 0) + to[C]++ (0, -2) node[spdt, rotate=-90, anchor=in](d2){} node[right]{$D_2$}; + \draw (dac2_cap_j) ++ (0, 0) + to[C]++ (0, -2) node[spdt, rotate=-90, anchor=in](d3){} node[right]{$D_3$}; + \draw (dac2_cap_j) ++ (1, 0) + ++ (0, -1) node{\ldots}; + \draw (dac2_cap_j) to++ (2, 0) + to[C]++ (0, -2) node[spdt, rotate=-90, anchor=in](d12){} node[right]{$D_{12}$}; + \coordinate (dac2_right_cap) at (d12.out 1); + + \coordinate (dac2_bj) at ($(d1.out 1 -| dac2.bbpin 1)!0.5!(dac2.bbpin 1)$); + \draw (d1.out 1 |- dac2_bj) to (dac2_bj) to (d12.out 1 |- dac2_bj); + + \draw (d1.out 1) to (d1.out 1 |- dac2_bj); + \draw (d2.out 1) to (d2.out 1 |- dac2_bj); + \draw (d3.out 1) to (d3.out 1 |- dac2_bj); + \draw (d12.out 1) to (d12.out 1 |- dac2_bj); + + \draw (d1.out 2) to (d12.out 2) |- (dac2.brpin 2); + \node [ground] at (dac2.rpin 2){}; + + \coordinate (dac2_sw_j) at ($(dac2_left_cap)!0.5!(dac2_right_cap)$); + + \draw (dac2_bj) to (dac2.bbpin 1); + \node [below] at (dac2.bpin 1){$V_{ref}$}; + + % DAC + + \node [muxdemux, + muxdemux def={Lh=8, NL=2, Rh=8, NR=2, NT=1, NB=1, w=10, inset w=0.5, inset Lh=3.0, inset Rh=2.0}, + draw only bottom pins={}, + anchor=lpin 2 + ] (dac1) at ($(sh1.rpin 1) + (1, 0)$) {}; + + \node [above] at ($(dac1.btpin 1) + (-2, 0)$) {DAC}; + + \coordinate (dac1_cap_j) at ($(dac1.bbpin 1) + (0, 0.5)$); + \coordinate (dac1_bj) at ($(dac1_cap_j)!0.5!(dac1.bbpin 1)$); + \coordinate (dac1_outset_left) at ($(dac1.brpin 2) + (-0.5, 0)$); + + \draw (dac1.blpin 2) to (dac1.blpin 2 -| dac1.inset right) + |- (dac1_bj) + -| (dac1.brpin 2 -| dac1_outset_left) + to (dac1.brpin 2); + \draw (dac1_bj) to (dac1_cap_j); + + \draw (dac1_cap_j) to++ (-2, 0) + to[C]++ (0, 2) node[spdt, rotate=90, anchor=in](d1){} node[right]{$D_1$}; + \coordinate (dac_left_cap) at (d1.out 1); + \draw (dac1_cap_j) ++ (-1, 0) + to[C]++ (0, 2) node[spdt, rotate=90, anchor=in](d2){} node[right]{$D_2$}; + \draw (dac1_cap_j) ++ (0, 0) + to[C]++ (0, 2) node[spdt, rotate=90, anchor=in](d3){} node[right]{$D_3$}; + \draw (dac1_cap_j) ++ (1, 0) + ++ (0, 1) node{\ldots}; + \draw (dac1_cap_j) to++ (2, 0) + to[C]++ (0, 2) node[spdt, rotate=90, anchor=in](d12){} node[right]{$D_{12}$}; + \coordinate (dac1_right_cap) at (d12.out 1); + + \coordinate (dac1_tj) at ($(d1.out 1 -| dac1.btpin 1)!0.5!(dac1.btpin 1)$); + \draw (d1.out 1 |- dac1_tj) to (dac1_tj) to (d12.out 1 |- dac1_tj); + \draw (dac1_tj) to (dac1.btpin 1); + \node [above] at (dac1.tpin 1) {$V_{ref}$}; + + \draw (d1.out 1) to (d1.out 1 |- dac1_tj); + \draw (d2.out 1) to (d2.out 1 |- dac1_tj); + \draw (d3.out 1) to (d3.out 1 |- dac1_tj); + \draw (d12.out 1) to (d12.out 1 |- dac1_tj); + + \draw (d1.out 2) to (d12.out 2) |- (dac1.brpin 1); + \node [ground] at (dac1.rpin 1){}; + + % Comparator + \node [op amp, yscale=-1, scale=1.5](comp) at ($(dac1.rpin 2)!0.5!(dac2.rpin 1) + (2, 0)$) {}; + \draw (dac1.rpin 2) |- (comp.+); + \draw (dac2.rpin 1) |- (comp.-); + + % SAR + \node [muxdemux, + muxdemux def={Lh=8, NL=1, Rh=8, NR=1, NT=2, NB=0}, + anchor=lpin 1 + ] (sar) at ($(comp.out) + (0.5, 0)$) {SAR}; + \draw (sar.btpin 1) \wedgedown; + \node [above] at (sar.tpin 1) {CLK}; + \node [above] at (sar.tpin 2) {RST}; + + \coordinate (sar_j) at ($(sar.rpin 1) + (0.5, 0)$); + \draw (sar.rpin 1) to (sar_j); + + \draw (sh1.rpin 1) to (dac1.lpin 2); + \draw (sh2.rpin 1) to (dac2.lpin 1); + + \draw (dac2.lpin 2) to++ (0, -2) coordinate (temp) + to (temp -| sar_j) + |- (sar_j); + \draw (dac1.lpin 1) to++ (0, 2) coordinate (temp) + to (temp -| sar_j) + |- (sar_j); + \draw (comp.out) to (sar.lpin 1); + \draw (sar_j) to[multiwire=12, -*]++ (2, 0) node[above]{$V_{out}$}; + +\end{circuitikz} + +\end{document} + diff --git a/figures/bootstrap_sw.svg b/figures/bootstrap_sw.svg new file mode 100644 index 0000000..e12891d --- /dev/null +++ b/figures/bootstrap_sw.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +¯Φ + + + + + + + + + + + + + + + + + + + + + + +Φ + + + + + + + + + + + + + + + + + + + + + +V +in + + + +V +out + + + + + + + + + + +¯Φ + + + +V +DD + + + + + + \ No newline at end of file diff --git a/figures/bootstrap_sw.tex b/figures/bootstrap_sw.tex new file mode 100644 index 0000000..3ed1ef4 --- /dev/null +++ b/figures/bootstrap_sw.tex @@ -0,0 +1,68 @@ +\documentclass[border=5pt]{standalone} +\usepackage{circuitikz} + +\begin{document} + +\begin{circuitikz} +\coordinate (origin) at (0, 0); + +\node [nmos, xscale=-1] (m1) at (0.5, -1.5){}; +\node [nmos] (m2) at ($(m1) + (2.5, 0)$){}; + +\draw (m1.drain) to (m1.drain |- origin); +\draw (m2.drain) to (m2.drain |- origin); + +\draw (m1.gate) to (m2.source); +\draw (m2.gate) to (m1.source); + +\node [nmos] (m3) at ($(m2) + (1.5, 0)$){}; +\draw (m3.drain) to (m3.drain |- origin); +\draw (m2.gate) to++ (0, 1) coordinate (temp) + to (temp -| m3.gate) + to (m3.gate); + +\draw (m1.source) to[C]++ (0, -2) coordinate (c1); +\draw (m2.source) to[C]++ (0, -2) node[not port, anchor=out, rotate=-90, scale=-1] (not) {}; +\draw (not.in) to++ (0, -1) coordinate (not_in) + to (not_in -| c1) coordinate(phi_j) + to[short, -*] (phi_j -| origin) node[above]{$\bar{\Phi}$}; +\draw (c1) to (phi_j); + +\draw (m3.source) to[C]++ (0, -2) + to++ (0, -1) node[nmos, anchor=drain](m4){}; +\draw (not_in) -| (m4.gate); +\node [ground] at (m4.source){}; + +\draw (m4.drain) ++ (2.5, 0) node[nmos, anchor=source](m6){}; +\node [pmos, anchor=drain](m5) at (m6.drain){}; + +\draw (m5.gate) to (m6.gate); + +\draw ($(m5.gate)!0.5!(m6.gate)$) to[short, -*]++ (-0.5, 0) node[left]{$\Phi$}; +\draw (m5.source) to (m5.source |- origin); + +\draw (m6.drain) to++ (1, 0) node[nmos, anchor=drain, xscale=-1](m8){} + to++ (0, 1) node[nmos, anchor=gate, rotate=90](m7){}; +\draw (m7.drain) |- (m3.source); + +\draw (m8.gate) to++ (0.5, 0) node[nmos, anchor=gate, rotate=-90](m9){} + to++ (2, 0) node[nmos, anchor=gate, rotate=-90](m10){}; + +\draw (m4.drain) to (m8.source) |- (m9.source); + +\draw (m9.drain) to (m10.source); +\draw ($(m9.drain)!0.5!(m10.source)$) to[short, -*]++ (0, -1) node[below] {$V_{in}$}; +\draw (m10.drain) to[short, -*]++ (0, -1) node[below] {$V_{out}$}; + +\node [nmos, anchor=source, rotate=-90](m11) at (m7.source){}; +\draw (m11.gate) to (m11.gate |- origin); + +\node [nmos, anchor=source, rotate=-90](m12) at (m11.drain){}; +\draw (m12.gate) to[short, -*]++ (1.5, 0) coordinate (phi_right) node[above]{$\bar{\Phi}$}; +\node [ground] at (m12.drain){}; + +\draw (origin) node[above]{$V_{DD}$} to[short, *-*] (origin -| phi_right); + +\end{circuitikz} + +\end{document} diff --git a/figures/cdac.svg b/figures/cdac.svg new file mode 100644 index 0000000..7ff1a50 --- /dev/null +++ b/figures/cdac.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +C +u + + + + +C +u + + + +D +1 + + +2 +C +u + + + +D +2 + + +4 +C +u + + + +D +3 + + +8 +C +u + + + +D +4 + + +16 +C +u + + + +D +5 + + +32 +C +u + + + +D +6 + + +C +u + + + +D +7 + + +2 +C +u + + + +D +8 + + +4 +C +u + + + +D +9 + + +8 +C +u + + + +D +10 + + +16 +C +u + + + +D +11 + + +32 +C +u + + + +D +12 + + +64 + +63 +C +u + + +V +o + + + +V +ref + + \ No newline at end of file diff --git a/figures/cdac.tex b/figures/cdac.tex new file mode 100644 index 0000000..e7dbdf9 --- /dev/null +++ b/figures/cdac.tex @@ -0,0 +1,26 @@ +\documentclass[border=5pt]{standalone} +\usepackage{circuitikz} + +\begin{document} + +\begin{circuitikz} + \draw (-2, 0) to[C=$C_u$]++ (0, -2) node[ground]{}; + \draw (0, 0) to[C=$C_u$]++ (0, -2) to[switch, l=$D_1$]++ (0, -2) coordinate(end_1); + \draw (2, 0) to[C=$2C_u$]++ (0, -2) to[switch, l=$D_2$]++ (0, -2); + \draw (4, 0) to[C=$4C_u$]++ (0, -2) to[switch, l=$D_3$]++ (0, -2); + \draw (6, 0) to[C=$8C_u$]++ (0, -2) to[switch, l=$D_4$]++ (0, -2); + \draw (8, 0) to[C=$16C_u$]++ (0, -2) to[switch, l=$D_5$]++ (0, -2); + \draw (10, 0) to[C=$32C_u$]++ (0, -2) to[switch, l=$D_6$]++ (0, -2); + + \draw (12, 0) to[C=$C_u$]++ (0, -2) to[switch, l=$D_7$]++ (0, -2); + \draw (14, 0) to[C=$2C_u$]++ (0, -2) to[switch, l=$D_8$]++ (0, -2); + \draw (16, 0) to[C=$4C_u$]++ (0, -2) to[switch, l=$D_9$]++ (0, -2); + \draw (18, 0) to[C=$8C_u$]++ (0, -2) to[switch, l=$D_{10}$]++ (0, -2); + \draw (20, 0) to[C=$16C_u$]++ (0, -2) to[switch, l=$D_{11}$]++ (0, -2); + \draw (22, 0) to[C=$32C_u$]++ (0, -2) to[switch, l=$D_{12}$]++ (0, -2) coordinate(end_2); + + \draw (-2, 0) to (10, 0) to[C=$\frac{64}{63}C_u$]++ (2, 0) to (22, 0) to[short,-*]++ (1, 0) node[right]{$V_o$}; + \draw (end_1) to (end_2) to[short, -*]++ (1, 0) node[right]{$V_{ref}$}; +\end{circuitikz} + +\end{document} diff --git a/spice/cdac.spice b/spice/cdac.spice index 9d60a13..a299020 100644 --- a/spice/cdac.spice +++ b/spice/cdac.spice @@ -1,7 +1,8 @@ * CDAC Simulation .include "sscs-chipathon-sar-adc/gf180mcu-pdk/libraries/gf180mcu_fd_pr/latest/models/ngspice/design.ngspice" -.lib "sscs-chipathon-sar-adc/gf180mcu-pdk/libraries/gf180mcu_fd_pr/latest/models/ngspice/sm141064.ngspice" typical mimcap_typical +.lib "sscs-chipathon-sar-adc/gf180mcu-pdk/libraries/gf180mcu_fd_pr/latest/models/ngspice/sm141064.ngspice" typical +.lib "sscs-chipathon-sar-adc/gf180mcu-pdk/libraries/gf180mcu_fd_pr/latest/models/ngspice/sm141064.ngspice" mimcap_typical .param width=10u