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}