General Information

When have one radix-2 FFT processor and two memory banks of dual-port memory. The first figure outlines the most straightforward way of implementing FFT, whereas the second figure suggests an addressing technique that achieves greater utilization of the processor and speed of the calculation.

Addressing Problem

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{calc, shapes.multipart}

\def\nodeminheight{20pt}

\newcommand{\butterflyop}[8]{
% Circle
\coordinate (stage#1#2_points#3#4_tmp_west) at ($(stage_#1.#3 east)!0.5!(stage_#1.#4 east)$); 
\coordinate (stage#1#2_points#3#4_tmp_east) at ($(stage_#2.#3 west)!0.5!(stage_#2.#4 west)$); 
\node[draw, circle, fill=#8, inner sep = 2pt] (stage#1#2_points#3#4) at 
									 ($(stage#1#2_points#3#4_tmp_west)!#6!(stage#1#2_points#3#4_tmp_east)$) {}; 
% Breakpoints
\coordinate (stage#1#2_points_#3#4_up_0) at ($(stage_#1.#3 east)!#5!(stage_#2.#3 west)$);
\coordinate (stage#1#2_points_#3#4_up_1) at ($(stage_#1.#3 east)!#7!(stage_#2.#3 west)$);

\coordinate (stage#1#2_points_#3#4_down_0) at ($(stage_#1.#4 east)!#5!(stage_#2.#4 west)$);
\coordinate (stage#1#2_points_#3#4_down_1) at ($(stage_#1.#4 east)!#7!(stage_#2.#4 west)$);

% Connections
\draw (stage_#1.#3 east) -- 
	  (stage#1#2_points_#3#4_up_0) -- (stage#1#2_points#3#4) -- (stage#1#2_points_#3#4_up_1) -- 
	  (stage_#2.#3 west);
\draw (stage_#1.#4 east) -- 
	  (stage#1#2_points_#3#4_down_0) -- (stage#1#2_points#3#4) -- (stage#1#2_points_#3#4_down_1) -- 
	  (stage_#2.#4 west);
}

\begin{document}
	\begin{tikzpicture}[line cap = round]
		% Stage 0
		\node
			[
				draw, 
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				minimum height = \nodeminheight,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_0) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1111}$}
			};

		% Stage 1
		\node
			[
				draw, 
				xshift = 8em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				minimum height = \nodeminheight,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_1) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1111}$}			};
			
		% Stage 2
		\node
			[
				draw, 
				xshift = 16em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				minimum height = \nodeminheight,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_2) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1111}$}		
	};

		% Stage 3
		\node
			[
				draw, 
				xshift = 26em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				minimum height = \nodeminheight,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_3) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1111}$}
			};
			
		% Stage 4
		\node
			[
				draw, 
				xshift = 40em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				minimum height = \nodeminheight,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_4) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1111}$}
			};
			
			% Network
			%% Stage_0 - Stage_1 Connections
			\butterflyop{0}{1}{one}{two}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{three}{four}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{five}{six}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{seven}{eight}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{nine}{ten}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{eleven}{twelve}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{thirteen}{fourteen}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{fifteen}{sixteen}{0.4}{0.5}{0.6}{white}
			%% Stage_1 - Stage_2 Connections
			\butterflyop{1}{2}{one}{three}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{two}{four}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{five}{seven}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{six}{eight}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{nine}{eleven}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{ten}{twelve}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{thirteen}{fifteen}{0.3}{0.5}{0.7}{white}
			\butterflyop{1}{2}{fourteen}{sixteen}{0.3}{0.5}{0.7}{white}
			%% Stage_2 - Stage_3 Connections
			\butterflyop{2}{3}{one}{five}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{two}{six}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{three}{seven}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{four}{eight}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{nine}{thirteen}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{ten}{fourteen}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{eleven}{fifteen}{0.2}{0.5}{0.8}{white}
			\butterflyop{2}{3}{twelve}{sixteen}{0.2}{0.5}{0.8}{white}
			%% Stage_3 - Stage_4 Connections
			\butterflyop{3}{4}{one}{nine}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{two}{ten}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{three}{eleven}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{four}{twelve}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{five}{thirteen}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{six}{fourteen}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{seven}{fifteen}{0.1}{0.5}{0.9}{white}
			\butterflyop{3}{4}{eight}{sixteen}{0.1}{0.5}{0.9}{white}
			
			% Stages
			\node[yshift=-15pt] at ($(stage_0.south east)!0.5!(stage_1.south west)$) {stage 0};
			\node[yshift=-15pt] at ($(stage_1.south east)!0.5!(stage_2.south west)$) {stage 1};
			\node[yshift=-15pt] at ($(stage_2.south east)!0.5!(stage_3.south west)$) {stage 2};
			\node[yshift=-15pt] at ($(stage_3.south east)!0.5!(stage_4.south west)$) {stage 3};
	\end{tikzpicture}
\end{document}

Addressing Technique

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{calc, shapes.multipart}

\newcommand{\butterflyop}[8]{
% Circle
\coordinate (stage#1#2_points#3#4_tmp_west) at ($(stage_#1.#3 east)!0.5!(stage_#1.#4 east)$); 
\coordinate (stage#1#2_points#3#4_tmp_east) at ($(stage_#2.#3 west)!0.5!(stage_#2.#4 west)$); 
\node[draw, circle, fill=#8, inner sep = 2pt] (stage#1#2_points#3#4) at 
									 ($(stage#1#2_points#3#4_tmp_west)!#6!(stage#1#2_points#3#4_tmp_east)$) {}; 
% Breakpoints
\coordinate (stage#1#2_points_#3#4_up_0) at ($(stage_#1.#3 east)!#5!(stage_#2.#3 west)$);
\coordinate (stage#1#2_points_#3#4_up_1) at ($(stage_#1.#3 east)!#7!(stage_#2.#3 west)$);

\coordinate (stage#1#2_points_#3#4_down_0) at ($(stage_#1.#4 east)!#5!(stage_#2.#4 west)$);
\coordinate (stage#1#2_points_#3#4_down_1) at ($(stage_#1.#4 east)!#7!(stage_#2.#4 west)$);

% Connections
\draw (stage_#1.#3 east) -- 
	  (stage#1#2_points_#3#4_up_0) -- (stage#1#2_points#3#4) -- (stage#1#2_points_#3#4_up_1) -- 
	  (stage_#2.#3 west);
\draw (stage_#1.#4 east) -- 
	  (stage#1#2_points_#3#4_down_0) -- (stage#1#2_points#3#4) -- (stage#1#2_points_#3#4_down_1) -- 
	  (stage_#2.#4 west);
}

\begin{document}
	\begin{tikzpicture}[line cap = round]
		% Stage 0
		\node
			[
				draw, 
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_0) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0010}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0011}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0110}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a_{0111}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1010}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1011}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1110}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a_{1111}$}
			};

		% Stage 1
		\node
			[
				draw, 
				xshift = 8em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_1) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0011}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0010}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0100}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0101}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0111}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{0110}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1011}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1010}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1100}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1101}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1111}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'_{1110}$}
			};
			
		% Stage 2
		\node
			[
				draw, 
				xshift = 16em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_2) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0011}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0010}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0110}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0111}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0101}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{0100}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1000}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1001}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1011}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1010}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1110}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1111}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1101}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''_{1100}$}
			};

		% Stage 3
		\node
			[
				draw, 
				xshift = 26em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_3) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0011}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0010}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0110}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0111}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0101}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{0100}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1100}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1101}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1111}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1110}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1010}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1011}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1001}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a'''_{1000}$}
			};
			
		% Stage 4
		\node
			[
				draw, 
				xshift = 40em,
				rectangle split, 
				rectangle split parts = 16, 
				anchor = center,
				rectangle split part fill = 
					{
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
						white, 
						gray!60,
					}
			] (stage_4) 
			{
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0000}$} \nodepart{two}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0001}$} \nodepart{three}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0011}$} \nodepart{four}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0010}$} \nodepart{five}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0110}$} \nodepart{six}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0111}$} \nodepart{seven}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0101}$} \nodepart{eight}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{0100}$} \nodepart{nine}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1100}$} \nodepart{ten}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1101}$} \nodepart{eleven}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1111}$} \nodepart{twelve}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1110}$} \nodepart{thirteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1010}$} \nodepart{fourteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1011}$} \nodepart{fifteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1001}$} \nodepart{sixteen}
				\parbox[c][8pt][c]{28pt}{\centering $a''''_{1000}$}
			};
			
			% Network
			%% Stage_0 - Stage_1 Connections
			\butterflyop{0}{1}{one}{two}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{three}{four}{0.4}{0.5}{0.6}{black}
			\butterflyop{0}{1}{five}{six}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{seven}{eight}{0.4}{0.5}{0.6}{black}
			\butterflyop{0}{1}{nine}{ten}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{eleven}{twelve}{0.4}{0.5}{0.6}{black}
			\butterflyop{0}{1}{thirteen}{fourteen}{0.4}{0.5}{0.6}{white}
			\butterflyop{0}{1}{fifteen}{sixteen}{0.4}{0.5}{0.6}{black}
			%% Stage_1 - Stage_2 Connections
			\butterflyop{1}{2}{one}{four}{0.233}{0.333}{0.433}{white}
			\butterflyop{1}{2}{two}{three}{0.533}{0.633}{0.733}{white}
			\butterflyop{1}{2}{five}{eight}{0.233}{0.333}{0.433}{black}
			\butterflyop{1}{2}{six}{seven}{0.533}{0.633}{0.733}{black}
			\butterflyop{1}{2}{nine}{twelve}{0.233}{0.333}{0.433}{white}
			\butterflyop{1}{2}{ten}{eleven}{0.533}{0.633}{0.733}{white}
			\butterflyop{1}{2}{thirteen}{sixteen}{0.233}{0.333}{0.433}{black}
			\butterflyop{1}{2}{fourteen}{fifteen}{0.533}{0.633}{0.733}{black}
			%% Stage_2 - Stage_3 Connections
			\butterflyop{2}{3}{one}{eight}{0.1}{0.2}{0.3}{white}
			\butterflyop{2}{3}{two}{seven}{0.3}{0.4}{0.5}{white}
			\butterflyop{2}{3}{three}{six}{0.5}{0.6}{0.7}{white}
			\butterflyop{2}{3}{four}{five}{0.7}{0.8}{0.9}{white}
			\butterflyop{2}{3}{nine}{sixteen}{0.1}{0.2}{0.3}{black}
			\butterflyop{2}{3}{ten}{fifteen}{0.3}{0.4}{0.5}{black}
			\butterflyop{2}{3}{eleven}{fourteen}{0.5}{0.6}{0.7}{black}
			\butterflyop{2}{3}{twelve}{thirteen}{0.7}{0.8}{0.9}{black}
			%% Stage_3 - Stage_4 Connections
			\butterflyop{3}{4}{one}{sixteen}{0.05}{0.15}{0.25}{white}
			\butterflyop{3}{4}{two}{fifteen}{0.15}{0.25}{0.35}{white}
			\butterflyop{3}{4}{three}{fourteen}{0.25}{0.35}{0.45}{white}
			\butterflyop{3}{4}{four}{thirteen}{0.35}{0.45}{0.55}{white}
			\butterflyop{3}{4}{five}{twelve}{0.45}{0.55}{0.65}{white}
			\butterflyop{3}{4}{six}{eleven}{0.55}{0.65}{0.76}{white}
			\butterflyop{3}{4}{seven}{ten}{0.65}{0.75}{0.85}{white}
			\butterflyop{3}{4}{eight}{nine}{0.75}{0.85}{0.95}{white}
			
			% Stages
			\node[yshift=-15pt] at ($(stage_0.south east)!0.5!(stage_1.south west)$) {stage 0};
			\node[yshift=-15pt] at ($(stage_1.south east)!0.5!(stage_2.south west)$) {stage 1};
			\node[yshift=-15pt] at ($(stage_2.south east)!0.5!(stage_3.south west)$) {stage 2};
			\node[yshift=-15pt] at ($(stage_3.south east)!0.5!(stage_4.south west)$) {stage 3};
	\end{tikzpicture}
\end{document}

Leave a Reply

Your email address will not be published.