diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2011-01-13 22:17:11 -0600 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2011-01-13 22:17:11 -0600 |
commit | 47ba26f6b31497ed79703c5cad3270d7ee72512b (patch) | |
tree | e7f9f2449101685509173e15f7f4e15a5902c473 /src/mem/protocol/MESI_CMP_directory-L1cache.sm | |
parent | 43b58ce3adbd827d9dabfcb117e4ad74ddd911d8 (diff) | |
download | gem5-47ba26f6b31497ed79703c5cad3270d7ee72512b.tar.xz |
Ruby: Fixes MESI CMP directory protocol
The current implementation of MESI CMP directory protocol is broken.
This patch, from Arkaprava Basu, fixes the protocol.
Diffstat (limited to 'src/mem/protocol/MESI_CMP_directory-L1cache.sm')
-rw-r--r-- | src/mem/protocol/MESI_CMP_directory-L1cache.sm | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mem/protocol/MESI_CMP_directory-L1cache.sm b/src/mem/protocol/MESI_CMP_directory-L1cache.sm index fb78623cd..50e0c3662 100644 --- a/src/mem/protocol/MESI_CMP_directory-L1cache.sm +++ b/src/mem/protocol/MESI_CMP_directory-L1cache.sm @@ -70,6 +70,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP") M_I, desc="L1 replacing, waiting for ACK"; E_I, desc="L1 replacing, waiting for ACK"; + SINK_WB_ACK, desc="This is to sink WB_Acks from L2"; } @@ -749,9 +750,8 @@ machine(L1Cache, "MSI Directory L1 Cache CMP") l_popRequestQueue; } - transition(M_I, Inv, I) { + transition(M_I, Inv, SINK_WB_ACK) { ft_sendDataToL2_fromTBE; - s_deallocateTBE; l_popRequestQueue; } @@ -766,16 +766,14 @@ machine(L1Cache, "MSI Directory L1 Cache CMP") l_popRequestQueue; } - transition(M_I, Fwd_GETX, I) { + transition(M_I, Fwd_GETX, SINK_WB_ACK) { dt_sendDataToRequestor_fromTBE; - s_deallocateTBE; l_popRequestQueue; } - transition(M_I, {Fwd_GETS, Fwd_GET_INSTR}, I) { + transition(M_I, {Fwd_GETS, Fwd_GET_INSTR}, SINK_WB_ACK) { dt_sendDataToRequestor_fromTBE; d2t_sendDataToL2_fromTBE; - s_deallocateTBE; l_popRequestQueue; } @@ -865,6 +863,21 @@ machine(L1Cache, "MSI Directory L1 Cache CMP") s_deallocateTBE; o_popIncomingResponseQueue; } + + transition(SINK_WB_ACK, {Load, Store, Ifetch, L1_Replacement}){ + z_recycleMandatoryQueue; + + } + + transition(SINK_WB_ACK, Inv){ + fi_sendInvAck; + l_popRequestQueue; + } + + transition(SINK_WB_ACK, WB_Ack){ + s_deallocateTBE; + o_popIncomingResponseQueue; + } } |