\begin{tikzpicture} \begin{pgfonlayer}{nodelayer} \node [style=thread player] (0) at (-16, 0) {DbiThreadPlayer}; \node [style=initiator socket] (1) at (-12.75, 0) {}; \node [style=thread player] (2) at (-16, -2) {DbiThreadPlayer}; \node [style=initiator socket] (3) at (-12.75, -2) {}; \node [style=thread player] (4) at (-16, -5) {DbiThreadPlayer}; \node [style=initiator socket] (5) at (-12.75, -5) {}; \node [style=interconnect thin] (10) at (18, -2.5) {MultiCoupler\\(Interconnect)}; \node [style=none] (12) at (-16, -3.25) {\vdots}; \node [style=target socket] (13) at (15.25, -2.5) {}; \node [style=none] (14) at (15, -2.5) {}; \node [style=initiator socket] (15) at (20.75, -2.5) {}; \node [style=initiator socket] (16) at (22, -2.5) {}; \node [style=initiator socket] (17) at (22.5, -2.5) {}; \node [style=none] (18) at (-19.5, 2.5) {}; \node [style=none] (19) at (22.25, 2.5) {}; \node [style=none] (20) at (-19.5, -7) {}; \node [style=none] (21) at (22.25, -7) {}; \node [style=none] (22) at (1.5, 1.75) {DbiPlayer}; \node [style=none] (24) at (21, -2.5) {}; \node [style=none] (25) at (21, -2.5) {}; \node [style=none] (28) at (21.75, -2.5) {}; \node [style=none] (30) at (25, 2.5) {}; \node [style=none] (31) at (25, -7) {}; \node [style=target socket] (32) at (24.75, -2.5) {}; \node [style=none] (35) at (24.5, -2.5) {}; \node [style=none] (38) at (22.75, -2.5) {}; \node [style=none] (40) at (30.25, 2.5) {}; \node [style=none] (41) at (30.25, -7) {}; \node [style=none] (43) at (27.75, -2.5) {DRAMSys}; \node [style=cache] (44) at (-9.5, 0) {L1 Cache}; \node [style=initiator socket] (45) at (-7.5, 0) {}; \node [style=target socket] (46) at (-11.5, 0) {}; \node [style=cache] (47) at (-9.5, -2) {L1 Cache}; \node [style=initiator socket] (48) at (-7.5, -2) {}; \node [style=target socket] (49) at (-11.5, -2) {}; \node [style=cache] (50) at (-9.5, -5) {L1 Cache}; \node [style=initiator socket] (51) at (-7.5, -5) {}; \node [style=target socket] (52) at (-11.5, -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 (-2, 0) {}; \node [style=target socket] (56) at (-6, 0) {}; \node [style=cache] (57) at (-4, -2) {L2 Cache}; \node [style=initiator socket] (58) at (-2, -2) {}; \node [style=target socket] (59) at (-6, -2) {}; \node [style=cache] (60) at (-4, -5) {L2 Cache}; \node [style=initiator socket] (61) at (-2, -5) {}; \node [style=target socket] (62) at (-6, -5) {}; \node [style=none] (63) at (-4, -3.25) {\vdots}; \node [style=interconnect thick] (64) at (4, -2.5) {MultiSimpleCoupler\\(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 (7.75, -2.5) {}; \node [style=none] (69) at (8, -2.5) {}; \node [style=none] (70) at (-1.75, 0) {}; \node [style=none] (71) at (-1.75, -2) {}; \node [style=none] (72) at (-1.75, -5) {}; \node [style=l3cache] (74) at (11.5, -2.5) {L3 Cache}; \node [style=initiator socket] (75) at (13.5, -2.5) {}; \node [style=target socket] (76) at (9.5, -2.5) {}; \node [style=none] (77) at (13.75, -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}