\documentclass[border=10pt]{standalone}
\usepackage[european]{circuitikz}
\usepackage{../../register-transfer-level}
\usetikzlibrary{shapes.geometric, arrows.meta, positioning, calc, shadows, decorations.markings}

\begin{document}

\begin{circuitikz}[>=Stealth, thick, line width=1.25]

	\node[rtl_module, rtl_width=30cm, rtl_height=1.5cm] at (0,0) (macroController) {\sffamily\LARGE Macro Pipeline Controller};

	\draw[->] (-16, -10) -- (-13.75, -10);
	\draw[->] (-16, -10.2)node[left]{\sffamily\LARGE PWM} -- (-13.95, -10.2);
	\draw[->] (-16, -10.4) -- (-14.15, -10.4);

	\node[rtl_module, rtl_width=3cm, rtl_height=8cm] at (-12, -10) () {};
	\node[rtl_reg] at (-11.0, -10.0) () {\sffamily\LARGE Reg};

	\node[rtl_module, rtl_width=3cm, rtl_height=8cm] at (-12.2, -10.2) () {};
	\node[rtl_reg] at (-11.2, -10.2) () {\sffamily\LARGE Reg};


	\node[rtl_module={\sffamily\LARGE Phase \\\sffamily\LARGE Sampler}, rtl_width=3cm, rtl_height=8cm] at (-12.4, -10.4) () {};
	\node[rtl_reg] at (-13.4, -10.4) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (-11.4, -10.4) () {\sffamily\LARGE Reg};


	\node[rtl_module={\sffamily\LARGE Magnitude \\\sffamily\LARGE Calculation}, rtl_width=3cm, rtl_height=6cm] at (-4, -6) () {};
	\node[rtl_reg] at (-3, -6) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (-5, -6) () {\sffamily\LARGE Reg};

	\node[rtl_module={\sffamily\LARGE Phase \\\sffamily\LARGE Calculation}, rtl_width=3cm, rtl_height=6cm] at (-4, -14) () {};
	\node[rtl_reg] at (-3, -14) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (-5, -14) () {\sffamily\LARGE Reg};

	\node[rtl_module={\sffamily\LARGE Magnitude \\\sffamily\LARGE Equalizer}, rtl_width=3cm, rtl_height=8cm] at (4, -8) () {};
	\node[rtl_reg] at (5, -8) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (3, -8) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (3, -10.5) () {\sffamily\LARGE Reg};

	\node[rtl_module={\sffamily\LARGE Output \\\sffamily\LARGE Module}, rtl_width=3cm, rtl_height=12cm] at (12, -10) () {};
	\node[rtl_reg] at (11, -8) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (13, -8) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (11, -14) () {\sffamily\LARGE Reg};
	\node[rtl_reg] at (13, -14) () {\sffamily\LARGE Reg};

	\draw[->] (-12.6, -0.75) -- (-12.6, -6) ;
	\draw[->] (-12.8, -0.75) -- (-12.8, -6.2);
	\draw[->] (-13, -0.75) node[left, above, rotate=90, xshift=-1.15cm] {\sffamily\LARGE START} -- (-13, -6.4); %edge-0.4cm -> center +0.6cm

	\draw[->] (-11.4, -6) -- (-11.4, -0.75) node[left, below, rotate=90, xshift=-1.15cm] {\sffamily\LARGE BUSY};
	\draw[->] (-11.6, -6.2) -- (-11.6, -0.75);
	\draw[->] (-11.8, -6.4) -- (-11.8, -0.75);

	\draw[->] (-4.6, -0.75) node[left, above, rotate=90, xshift=-1.15cm] {\sffamily\LARGE START} -- (-4.6, -3);
	\draw[->] (-3.4, -3) -- (-3.4, -0.75)node[left, below, rotate=90, xshift=-1.15cm] {\sffamily\LARGE BUSY};

	\draw[->] (-0.6, -0.75) node[left, above, rotate=90, xshift=-1.15cm] {\sffamily\LARGE START} -- (-0.6, -9.7) -- (-4.6, -9.7) -- (-4.6, -11);
	\draw[->] (-3.4, -11) -- (-3.4,-10.3) -- (0.6, -10.3) -- (0.6, -0.75)node[left, below, rotate=90, xshift=-1.15cm] {\sffamily\LARGE BUSY};

	\draw[->] (3.4, -0.75) node[left, above, rotate=90, xshift=-1.15cm] {\sffamily\LARGE START} -- (3.4, -4);
	\draw[->] (4.6, -4) -- (4.6, -0.75) node[left, below, rotate=90, xshift=-1.15cm] {\sffamily\LARGE BUSY};

	\draw[->] (11.4, -0.75) node[left, above, rotate=90, xshift=-1.15cm] {\sffamily\LARGE START} -- (11.4, -4);
	\draw[->] (12.6, -4) -- (12.6, -0.75) node[left, below, rotate=90, xshift=-1.15cm] {\sffamily\LARGE BUSY};

	\draw[-, rtl_bus, line width=3] (-10.25, -10.0) -- (-8.9, -10.0);
	\node[circ] at (-8.9, -10) (pwmWNode) {};
	\draw[->, line width=3] (pwmWNode) -- (-8.9, -6.4) -- (-5.75, -6.4);
	\draw[->, line width=3] (pwmWNode) -- (-8.9, -13.6) -- (-5.75, -13.6);

	\draw[-,rtl_bus, line width=3] (-10.45, -10.2) -- (-9.3, -10.2) node[midway, xshift=2cm]{\sffamily\LARGE $\mathsf{D_{u,v,w}}$};
	\node[circ] at (-9.3, -10.2) (pwmVNode) {};
	\draw[->, line width=3] (pwmVNode) -- (-9.3, -6) -- (-5.75, -6);
	\draw[->, line width=3] (pwmVNode) -- (-9.3, -14) -- (-5.75, -14);

	\draw[-, rtl_bus, line width=3] (-10.65, -10.4) -- (-9.7, -10.4);
	\node[circ] at (-9.7, -10.4) (pwmUNode) {};
	\draw[->, line width=3] (pwmUNode) -- (-9.7, -5.6) -- (-5.75, -5.6);
	\draw[->, line width=3] (pwmUNode) -- (-9.7, -14.4) -- (-5.75, -14.4) ;

	\draw[->, rtl_bus, line width=3] (-2.25, -6) -- (0, -6) node[above, midway, yshift=0.15cm, xshift=-0.15cm]{\sffamily\LARGE $\mathsf{||\vec{v}||_{2}}$} -- (0, -8)  -- (2.25, -8) ;

	\draw[->, rtl_bus, line width=3] (5.75, -8) -- (10.25, -8) node[above, midway, yshift=0.15cm]{\sffamily\LARGE $\mathsf{\hat{v}}$};
	\draw[->, rtl_bus, line width=3] (-2.25, -14) -- (10.25, -14)node[above, midway, yshift=0.15cm]{\sffamily\LARGE $\mathsf{\phi}$};
	\node[circ, fill=black, scale=2] at (1, -14) (phaseNode) {};
	\draw[->, line width=3] (phaseNode) -- +(0, 3.5) -- +(1.25, 3.5);


	\draw[->, rtl_bus, line width=3] (13.75, -8) -- (16, -8) node[right] {\Huge $\mathsf{\hat{v}}$};
	\draw[->, rtl_bus, line width=3] (13.75, -14) -- (16, -14) node[right] {\Huge $\mathsf{\phi}$};

	\node[]at (3, -26.5) (core2) {
		\includegraphics[width=18cm, height=16cm]{Distributed_Pipeline.pdf}
	};

	\draw[dashed, line width=2.5] (-4, -14) circle (4) ;
	\draw[->, dashed, line width = 2.5] (-4,-18) -- (-3, -20);

	\node[]at (40, -20) (core2) {
		\includegraphics[width=45cm, height=28cm]{CORDIC_Pipeline.pdf}
	};

	\draw[dashed, line width=2.5] (7.4, -29.45) circle (6) ;
	\draw[->, dashed, line width = 2.5] (13.4,-29.45) -- (19, -22);
\end{circuitikz}
\end{document}
