\begin{tikzpicture} \begin{pgfonlayer}{nodelayer} \node [style=none] (0) at (0, 0) {}; \node [style=none] (1) at (0, 12) {}; \node [style=none] (2) at (20.5, 12) {}; \node [style=none] (3) at (20.5, 0) {}; \node [style=initiator socket] (4) at (20.75, 6) {}; \node [style=target socket] (5) at (-0.25, 6) {}; \node [style=none] (6) at (3.5, 8.75) {}; \node [style=none] (7) at (3.5, 2.25) {}; \node [style=none] (8) at (9.75, 8.75) {}; \node [style=none] (9) at (9.75, 2.25) {}; \node [style=none] (10) at (3.5, 7.75) {}; \node [style=none] (11) at (9.75, 7.75) {}; \node [style=none] (12) at (3.875, 8.25) {V}; \node [style=none] (13) at (4.625, 8.25) {D}; \node [style=none] (14) at (5.375, 8.25) {A}; \node [style=none] (15) at (9.05, 8.25) {AT}; \node [style=none] (16) at (6.125, 8.25) {T}; \node [style=none] (17) at (7.45, 8.25) {Data}; \node [style=none] (18) at (4.25, 8.75) {}; \node [style=none] (19) at (4.25, 7.75) {}; \node [style=none] (20) at (5, 8.75) {}; \node [style=none] (21) at (5, 7.75) {}; \node [style=none] (22) at (5.75, 8.75) {}; \node [style=none] (23) at (5.75, 7.75) {}; \node [style=none] (24) at (6.5, 8.75) {}; \node [style=none] (25) at (6.5, 7.75) {}; \node [style=none] (26) at (8.375, 8.75) {}; \node [style=none] (27) at (8.375, 7.75) {}; \node [style=none] (28) at (3.5, 6.75) {}; \node [style=none] (29) at (9.75, 6.75) {}; \node [style=none] (30) at (4.25, 6.75) {}; \node [style=none] (31) at (5, 6.75) {}; \node [style=none] (32) at (5.75, 6.75) {}; \node [style=none] (33) at (6.5, 6.75) {}; \node [style=none] (34) at (8.375, 6.75) {}; \node [style=none] (35) at (3.5, 5.75) {}; \node [style=none] (36) at (9.75, 5.75) {}; \node [style=none] (37) at (4.25, 5.75) {}; \node [style=none] (38) at (5, 5.75) {}; \node [style=none] (39) at (5.75, 5.75) {}; \node [style=none] (40) at (6.5, 5.75) {}; \node [style=none] (41) at (8.375, 5.75) {}; \node [style=none] (42) at (3.5, 4.75) {}; \node [style=none] (43) at (9.75, 4.75) {}; \node [style=none] (44) at (4.25, 4.75) {}; \node [style=none] (45) at (5, 4.75) {}; \node [style=none] (46) at (5.75, 4.75) {}; \node [style=none] (47) at (6.5, 4.75) {}; \node [style=none] (48) at (8.375, 4.75) {}; \node [style=none] (49) at (3.5, 3.75) {}; \node [style=none] (50) at (9.75, 3.75) {}; \node [style=none] (51) at (4.25, 3.75) {}; \node [style=none] (52) at (5, 3.75) {}; \node [style=none] (53) at (5.75, 3.75) {}; \node [style=none] (54) at (6.5, 3.75) {}; \node [style=none] (55) at (8.375, 3.75) {}; \node [style=none] (56) at (6.625, 3.2) {\vdots}; \node [style=none] (57) at (3, 5.75) {\Bigg\{}; \node [style=none] (58) at (1.75, 5.875) {Assoc.}; \node [style=none] (59) at (5.5, 9.25) {Cache Lines}; \node [style=none] (60) at (11.95, 10) {}; \node [style=none] (61) at (19.25, 10) {}; \node [style=none] (62) at (11.95, 9) {}; \node [style=none] (63) at (19.25, 9) {}; \node [style=none] (64) at (12.625, 9.5) {Idx}; \node [style=none] (65) at (13.625, 9.5) {T}; \node [style=none] (66) at (14.375, 9.5) {I}; \node [style=none] (68) at (16.2, 9.45) {Target}; \node [style=none] (70) at (13.25, 10) {}; \node [style=none] (71) at (13.25, 9) {}; \node [style=none] (72) at (14, 10) {}; \node [style=none] (73) at (14, 9) {}; \node [style=none] (74) at (14.75, 10) {}; \node [style=none] (75) at (14.75, 9) {}; \node [style=none] (80) at (11.95, 8) {}; \node [style=none] (81) at (19.25, 8) {}; \node [style=none] (82) at (13.25, 8) {}; \node [style=none] (83) at (14, 8) {}; \node [style=none] (84) at (14.75, 8) {}; \node [style=none] (89) at (17.65, 10) {}; \node [style=none] (90) at (17.65, 9) {}; \node [style=none] (91) at (18.5, 9.5) {\dots}; \node [style=none] (92) at (15.875, 7.55) {\vdots}; \node [style=none] (93) at (17.65, 8) {}; \node [style=none] (94) at (11.95, 6.75) {}; \node [style=none] (95) at (19.25, 6.75) {}; \node [style=none] (96) at (13.35, 10.5) {MSHRs}; \node [style=none] (97) at (12.25, 4.5) {}; \node [style=none] (98) at (18.75, 4.5) {}; \node [style=none] (99) at (12.25, 3.5) {}; \node [style=none] (100) at (18.75, 3.5) {}; \node [style=none] (101) at (12.925, 4) {Idx}; \node [style=none] (102) at (13.925, 4) {T}; \node [style=none] (104) at (16.5, 4) {Transaction}; \node [style=none] (105) at (13.55, 4.5) {}; \node [style=none] (106) at (13.55, 3.5) {}; \node [style=none] (107) at (14.3, 4.5) {}; \node [style=none] (108) at (14.3, 3.5) {}; \node [style=none] (111) at (12.25, 2.5) {}; \node [style=none] (112) at (18.75, 2.5) {}; \node [style=none] (113) at (13.55, 2.5) {}; \node [style=none] (114) at (14.3, 2.5) {}; \node [style=none] (119) at (15.55, 2.05) {\vdots}; \node [style=none] (121) at (12.25, 1.25) {}; \node [style=none] (122) at (18.75, 1.25) {}; \node [style=none] (123) at (14.4, 5) {Write Buffers}; \node [style=none] (124) at (2.5, 12.5) {Cache Model}; \node [style=wrap text] (125) at (-2, 6) {Simple\\Target\\Socket}; \node [style=wrap text] (126) at (22.75, 6) {Simple\\Initiator\\Socket}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw (3.center) to (0.center); \draw (0.center) to (1.center); \draw (1.center) to (2.center); \draw (2.center) to (3.center); \draw (9.center) to (7.center) to (6.center) to (8.center) to cycle; \draw (10.center) to (11.center); \draw (18.center) to (19.center); \draw (20.center) to (21.center); \draw (22.center) to (23.center); \draw (24.center) to (25.center); \draw (26.center) to (27.center); \draw [style=cache assoc] (43.center) to (42.center) to (28.center) to (29.center) to cycle; \draw (35.center) to (36.center); \draw (49.center) to (50.center); \draw (19.center) to (51.center); \draw (21.center) to (52.center); \draw (23.center) to (53.center); \draw (25.center) to (54.center); \draw (27.center) to (55.center); \draw (60.center) to (61.center); \draw (62.center) to (63.center); \draw (70.center) to (71.center); \draw (72.center) to (73.center); \draw (74.center) to (75.center); \draw [style=cache assoc] (80.center) to (81.center); \draw [style=dashed line] (89.center) to (90.center); \draw [style=dashed line] (90.center) to (93.center); \draw (75.center) to (84.center); \draw (73.center) to (83.center); \draw (71.center) to (82.center); \draw (60.center) to (94.center); \draw (94.center) to (95.center); \draw (95.center) to (61.center); \draw (97.center) to (98.center); \draw (99.center) to (100.center); \draw (105.center) to (106.center); \draw (107.center) to (108.center); \draw [style=cache assoc] (111.center) to (112.center); \draw (108.center) to (114.center); \draw (106.center) to (113.center); \draw (97.center) to (121.center); \draw (121.center) to (122.center); \draw (122.center) to (98.center); \end{pgfonlayer} \end{tikzpicture}