\begin{tikzpicture} \begin{pgfonlayer}{nodelayer} \node [style=thread player] (0) at (-16.25, 0) {DbiThreadPlayer}; \node [style=initiator socket] (1) at (-12.75, 0) {}; \node [style=thread player] (2) at (-16.25, -2) {DbiThreadPlayer}; \node [style=initiator socket] (3) at (-12.75, -2) {}; \node [style=thread player] (4) at (-16.25, -5) {DbiThreadPlayer}; \node [style=initiator socket] (5) at (-12.75, -5) {}; \node [style=interconnect thin] (10) at (16, -2.5) {MultiCoupler\\(Interconnect)}; \node [style=none] (12) at (-16.25, -3.25) {\vdots}; \node [style=target socket] (13) at (13, -2.5) {}; \node [style=none] (14) at (12.75, -2.5) {}; \node [style=initiator socket] (15) at (19, -2.5) {}; \node [style=initiator socket] (16) at (20, -2.5) {}; \node [style=initiator socket] (17) at (20.5, -2.5) {}; \node [style=none] (18) at (-20, 2.5) {}; \node [style=none] (19) at (20.25, 2.5) {}; \node [style=none] (20) at (-20, -7) {}; \node [style=none] (21) at (20.25, -7) {}; \node [style=none] (22) at (0.25, 1.75) {DbiPlayer}; \node [style=none] (24) at (18.75, -2.5) {}; \node [style=none] (25) at (19.25, -2.5) {}; \node [style=none] (28) at (19.75, -2.5) {}; \node [style=none] (30) at (22, 2.5) {}; \node [style=none] (31) at (22, -7) {}; \node [style=target socket] (32) at (21.75, -2.5) {}; \node [style=none] (35) at (21.5, -2.5) {}; \node [style=none] (38) at (20.75, -2.5) {}; \node [style=none] (40) at (26.75, 2.5) {}; \node [style=none] (41) at (26.75, -7) {}; \node [style=none] (43) at (24.5, -2.5) {DRAMSys}; \node [style=cache] (44) at (-9.5, 0) {L1 Cache}; \node [style=initiator socket] (45) at (-7.25, 0) {}; \node [style=target socket] (46) at (-11.75, 0) {}; \node [style=cache] (47) at (-9.5, -2) {L1 Cache}; \node [style=initiator socket] (48) at (-7.25, -2) {}; \node [style=target socket] (49) at (-11.75, -2) {}; \node [style=cache] (50) at (-9.5, -5) {L1 Cache}; \node [style=initiator socket] (51) at (-7.25, -5) {}; \node [style=target socket] (52) at (-11.75, -5) {}; \node [style=none] (53) at (-9.5, -3.25) {\vdots}; \node [style=cache] (54) at (-4, 0) {L2 Cache}; \node [style=initiator socket] (55) at (-1.75, 0) {}; \node [style=target socket] (56) at (-6.25, 0) {}; \node [style=cache] (57) at (-4, -2) {L2 Cache}; \node [style=initiator socket] (58) at (-1.75, -2) {}; \node [style=target socket] (59) at (-6.25, -2) {}; \node [style=cache] (60) at (-4, -5) {L2 Cache}; \node [style=initiator socket] (61) at (-1.75, -5) {}; \node [style=target socket] (62) at (-6.25, -5) {}; \node [style=none] (63) at (-4, -3.25) {\vdots}; \node [style=interconnect thin] (64) at (3.25, -2.5) {MultiSimple-\\Coupler\\(Interconnect)}; \node [style=target socket] (65) at (0.25, -2.5) {}; \node [style=none] (66) at (0, -2.5) {}; \node [style=initiator socket] (67) at (6.25, -2.5) {}; \node [style=none] (69) at (6.5, -2.5) {}; \node [style=none] (70) at (-1.5, 0) {}; \node [style=none] (71) at (-1.5, -2) {}; \node [style=none] (72) at (-1.5, -5) {}; \node [style=l3cache] (74) at (9.5, -2.5) {L3 Cache}; \node [style=initiator socket] (75) at (11.75, -2.5) {}; \node [style=target socket] (76) at (7.25, -2.5) {}; \node [style=none] (77) at (12, -2.5) {}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw [style=block] (18.center) to (19.center) to (21.center) to (20.center) to cycle; \draw (25.center) to (28.center); \draw [style=block] (41.center) to (31.center) to (30.center) to (40.center) to cycle; \draw (38.center) to (35.center); \draw (1) to (46); \draw (3) to (49); \draw (5) to (52); \draw (45) to (56); \draw (48) to (59); \draw (51) to (62); \draw (72.center) to (66.center); \draw (71.center) to (66.center); \draw (70.center) to (66.center); \draw (77.center) to (14.center); \draw (69.center) to (76); \end{pgfonlayer} \end{tikzpicture}