\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}

