\begin{tikzpicture}[scale=0.70,auto]

% Box for lower OEM(4)
\draw[red box] (1,-.333) rectangle (5.35,3.333);

% Box for upper OEM(4)
\draw[red box] (1,3.667) rectangle (5.35,7.333);

% Box for even merge block
\draw[blue box] (5.85,-.333) rectangle (7.60,7.333);

% Box for odd merge block
\draw[blue box] (8.10,-.333) rectangle (9.85,7.333);

% Box for trailing recursive comparators
\draw[green box] (10.35,-.333) rectangle (11.35,7.333);

\path[edge] (0,0) -- (12.35,0);
\path[edge] (0,1) -- (12.35,1);
\path[edge] (0,2) -- (12.35,2);
\path[edge] (0,3) -- (12.35,3);
\path[edge] (0,4) -- (12.35,4);
\path[edge] (0,5) -- (12.35,5);
\path[edge] (0,6) -- (12.35,6);
\path[edge] (0,7) -- (12.35,7);

% lower OEM(4)
\node[vertex] (v0) at (1.50,0) {};
\node[vertex] (v1) at (1.50,1) {};
\path[comp] (v0) -- (v1);

\node[vertex] (v2) at (1.50,2) {};
\node[vertex] (v3) at (1.50,3) {};
\path[comp] (v2) -- (v3);

\node[vertex] (v8) at (3.00,0) {};
\node[vertex] (v9) at (3.00,2) {};
\path[comp] (v8) -- (v9);

\node[vertex] (v10) at (3.35,1) {};
\node[vertex] (v11) at (3.35,3) {};
\path[comp] (v10) -- (v11);

\node[vertex] (v16) at (4.85,1) {};
\node[vertex] (v17) at (4.85,2) {};
\path[comp] (v16) -- (v17);

% upper OEM(4)
\node[vertex] (v4) at (1.50,4) {};
\node[vertex] (v5) at (1.50,5) {};
\path[comp] (v4) -- (v5);

\node[vertex] (v6) at (1.50,6) {};
\node[vertex] (v7) at (1.50,7) {};
\path[comp] (v6) -- (v7);

\node[vertex] (v12) at (3.00,4) {};
\node[vertex] (v13) at (3.00,6) {};
\path[comp] (v12) -- (v13);

\node[vertex] (v14) at (3.35,5) {};
\node[vertex] (v15) at (3.35,7) {};
\path[comp] (v14) -- (v15);

\node[vertex] (v18) at (4.85,5) {};
\node[vertex] (v19) at (4.85,6) {};
\path[comp] (v18) -- (v19);

% Begin of even OE merge (8)
\node[vertex] (v20) at (6.35,0) {};
\node[vertex] (v21) at (6.35,4) {};
\path[comp] (v20) -- (v21);

\node[vertex] (v24) at (6.70,2) {};
\node[vertex] (v25) at (6.70,6) {};
\path[comp] (v24) -- (v25);

\node[vertex] (v28) at (7.10,2) {};
\node[vertex] (v29) at (7.10,4) {};
\path[comp] (v28) -- (v29);

% Begin of odd OE merge (8)
\node[vertex] (v22) at (8.60,1) {};
\node[vertex] (v23) at (8.60,5) {};
\path[comp] (v22) -- (v23);

\node[vertex] (v26) at (8.95,3) {};
\node[vertex] (v27) at (8.95,7) {};
\path[comp] (v26) -- (v27);

\node[vertex] (v30) at (9.35,3) {};
\node[vertex] (v31) at (9.35,5) {};
\path[comp] (v30) -- (v31);

% Trailing recursive comparators
\node[vertex] (v32) at (10.85,1) {};
\node[vertex] (v33) at (10.85,2) {};
\path[comp] (v32) -- (v33);

\node[vertex] (v34) at (10.85,3) {};
\node[vertex] (v35) at (10.85,4) {};
\path[comp] (v34) -- (v35);

\node[vertex] (v36) at (10.85,5) {};
\node[vertex] (v37) at (10.85,6) {};
\path[comp] (v36) -- (v37);

\end{tikzpicture}
