diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2014-04-08 13:26:30 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2014-04-08 13:26:30 -0500 |
commit | d805e42b81de580342a615ea99491401943a14d4 (patch) | |
tree | 07eb196006be4e010a0b5d9dbe2bd4d8de46b76e /src/mem/protocol/MOESI_CMP_directory-L1cache.sm | |
parent | e689c00b16d40f52210cd185f668a351435c7af9 (diff) | |
download | gem5-d805e42b81de580342a615ea99491401943a14d4.tar.xz |
ruby: slicc: change enqueue statement
As of now, the enqueue statement can take in any number of 'pairs' as
argument. But we only use the pair in which latency is the key. This
latency is allowed to be either a fixed integer or a member variable of
controller in which the expression appears. This patch drops the use of pairs
in an enqueue statement. Instead, an expression is allowed which will be
interpreted to be the latency of the enqueue. This expression can anything
allowed by slicc including a constant integer or a member variable.
Diffstat (limited to 'src/mem/protocol/MOESI_CMP_directory-L1cache.sm')
-rw-r--r-- | src/mem/protocol/MOESI_CMP_directory-L1cache.sm | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/src/mem/protocol/MOESI_CMP_directory-L1cache.sm b/src/mem/protocol/MOESI_CMP_directory-L1cache.sm index 40ac524d6..bf935ab65 100644 --- a/src/mem/protocol/MOESI_CMP_directory-L1cache.sm +++ b/src/mem/protocol/MOESI_CMP_directory-L1cache.sm @@ -414,7 +414,7 @@ machine(L1Cache, "Directory protocol") action(a_issueGETS, "a", desc="Issue GETS") { peek(mandatoryQueue_in, RubyRequest) { - enqueue(requestNetwork_out, RequestMsg, latency= request_latency) { + enqueue(requestNetwork_out, RequestMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceRequestType:GETS; out_msg.Requestor := machineID; @@ -430,7 +430,7 @@ machine(L1Cache, "Directory protocol") action(b_issueGETX, "b", desc="Issue GETX") { peek(mandatoryQueue_in, RubyRequest) { - enqueue(requestNetwork_out, RequestMsg, latency=request_latency) { + enqueue(requestNetwork_out, RequestMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceRequestType:GETX; out_msg.Requestor := machineID; @@ -445,8 +445,7 @@ machine(L1Cache, "Directory protocol") } action(d_issuePUTX, "d", desc="Issue PUTX") { - // enqueue(writebackNetwork_out, RequestMsg, latency=request_latency) { - enqueue(requestNetwork_out, RequestMsg, latency=request_latency) { + enqueue(requestNetwork_out, RequestMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceRequestType:PUTX; out_msg.Requestor := machineID; @@ -458,8 +457,7 @@ machine(L1Cache, "Directory protocol") } action(dd_issuePUTO, "\d", desc="Issue PUTO") { - // enqueue(writebackNetwork_out, RequestMsg, latency=request_latency) { - enqueue(requestNetwork_out, RequestMsg, latency=request_latency) { + enqueue(requestNetwork_out, RequestMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceRequestType:PUTO; out_msg.Requestor := machineID; @@ -471,8 +469,7 @@ machine(L1Cache, "Directory protocol") } action(dd_issuePUTS, "\ds", desc="Issue PUTS") { - // enqueue(writebackNetwork_out, RequestMsg, latency=request_latency) { - enqueue(requestNetwork_out, RequestMsg, latency=request_latency) { + enqueue(requestNetwork_out, RequestMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceRequestType:PUTS; out_msg.Requestor := machineID; @@ -487,7 +484,7 @@ machine(L1Cache, "Directory protocol") peek(requestNetwork_in, RequestMsg) { assert(is_valid(cache_entry)); if (in_msg.RequestorMachine == MachineType:L2Cache) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA; out_msg.Sender := machineID; @@ -503,7 +500,7 @@ machine(L1Cache, "Directory protocol") DPRINTF(RubySlicc, "Sending data to L2: %s\n", in_msg.Addr); } else { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA; out_msg.Sender := machineID; @@ -521,7 +518,7 @@ machine(L1Cache, "Directory protocol") } action(e_sendDataToL2, "ee", desc="Send data from cache to requestor") { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { assert(is_valid(cache_entry)); out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA; @@ -540,7 +537,7 @@ machine(L1Cache, "Directory protocol") peek(requestNetwork_in, RequestMsg) { assert(is_valid(cache_entry)); if (in_msg.RequestorMachine == MachineType:L2Cache) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA_EXCLUSIVE; out_msg.Sender := machineID; @@ -555,7 +552,7 @@ machine(L1Cache, "Directory protocol") DPRINTF(RubySlicc, "Sending exclusive data to L2\n"); } else { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA_EXCLUSIVE; out_msg.Sender := machineID; @@ -574,7 +571,7 @@ machine(L1Cache, "Directory protocol") action(f_sendAck, "f", desc="Send ack from cache to requestor") { peek(requestNetwork_in, RequestMsg) { if (in_msg.RequestorMachine == MachineType:L1Cache) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:ACK; out_msg.Sender := machineID; @@ -585,7 +582,7 @@ machine(L1Cache, "Directory protocol") } } else { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:ACK; out_msg.Sender := machineID; @@ -600,7 +597,7 @@ machine(L1Cache, "Directory protocol") } action(g_sendUnblock, "g", desc="Send unblock to memory") { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:UNBLOCK; out_msg.Sender := machineID; @@ -612,7 +609,7 @@ machine(L1Cache, "Directory protocol") } action(gg_sendUnblockExclusive, "\g", desc="Send unblock exclusive to memory") { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:UNBLOCK_EXCLUSIVE; out_msg.Sender := machineID; @@ -709,7 +706,7 @@ machine(L1Cache, "Directory protocol") action(ub_dmaUnblockL2Cache, "ub", desc="Send dma ack to l2 cache") { peek(requestNetwork_in, RequestMsg) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DMA_ACK; out_msg.Sender := machineID; @@ -728,7 +725,7 @@ machine(L1Cache, "Directory protocol") assert(is_valid(tbe)); if (in_msg.RequestorMachine == MachineType:L1Cache || in_msg.RequestorMachine == MachineType:DMA) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA; out_msg.Sender := machineID; @@ -742,7 +739,7 @@ machine(L1Cache, "Directory protocol") } } else { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA; out_msg.Sender := machineID; @@ -763,7 +760,7 @@ machine(L1Cache, "Directory protocol") peek(requestNetwork_in, RequestMsg) { assert(is_valid(tbe)); if (in_msg.RequestorMachine == MachineType:L1Cache) { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA_EXCLUSIVE; out_msg.Sender := machineID; @@ -776,7 +773,7 @@ machine(L1Cache, "Directory protocol") } } else { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { out_msg.Addr := address; out_msg.Type := CoherenceResponseType:DATA_EXCLUSIVE; out_msg.Sender := machineID; @@ -794,7 +791,7 @@ machine(L1Cache, "Directory protocol") // L2 will usually request data for a writeback action(qq_sendWBDataFromTBEToL2, "\q", desc="Send data from TBE to L2") { - enqueue(responseNetwork_out, ResponseMsg, latency=request_latency) { + enqueue(responseNetwork_out, ResponseMsg, request_latency) { assert(is_valid(tbe)); out_msg.Addr := address; out_msg.Sender := machineID; |