Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r d30cffa47f75 src/mem/protocol/MESI_CMP_directory-L1cache.sm
- --- a/src/mem/protocol/MESI_CMP_directory-L1cache.sm Tue Apr 15 14:37:21 2014 -0400
- +++ b/src/mem/protocol/MESI_CMP_directory-L1cache.sm Wed Apr 16 11:04:00 2014 -0400
- @@ -496,61 +496,67 @@
- action(a_issueGETS, "a", desc="Issue GETS") {
- peek(mandatoryQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg, latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GETS;
- out_msg.Requestor := machineID;
- out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
- l2_select_low_bit, l2_select_num_bits));
- DPRINTF(RubySlicc, "address: %s, destination: %s\n",
- address, out_msg.Destination);
- out_msg.MessageSize := MessageSizeType:Control;
- out_msg.Prefetch := in_msg.Prefetch;
- out_msg.AccessMode := in_msg.AccessMode;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.contextId;
- }
- }
- }
- action(pa_issuePfGETS, "pa", desc="Issue prefetch GETS") {
- peek(optionalQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg,
- latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GETS;
- out_msg.Requestor := machineID;
- out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
- l2_select_low_bit, l2_select_num_bits));
- DPRINTF(RubySlicc, "address: %s, destination: %s\n",
- address, out_msg.Destination);
- out_msg.MessageSize := MessageSizeType:Control;
- out_msg.Prefetch := in_msg.Prefetch;
- out_msg.AccessMode := in_msg.AccessMode;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.contextId;
- }
- }
- }
- action(ai_issueGETINSTR, "ai", desc="Issue GETINSTR") {
- peek(mandatoryQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg, latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GET_INSTR;
- out_msg.Requestor := machineID;
- out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
- l2_select_low_bit, l2_select_num_bits));
- DPRINTF(RubySlicc, "address: %s, destination: %s\n",
- address, out_msg.Destination);
- out_msg.MessageSize := MessageSizeType:Control;
- out_msg.Prefetch := in_msg.Prefetch;
- out_msg.AccessMode := in_msg.AccessMode;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.contextId;
- }
- }
- }
- action(pai_issuePfGETINSTR, "pai",
- desc="Issue GETINSTR for prefetch request") {
- peek(optionalQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg,
- latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GET_INSTR;
- out_msg.Requestor := machineID;
- out_msg.Destination.add(
- @@ -570,26 +576,28 @@
- peek(mandatoryQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg, latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GETX;
- out_msg.Requestor := machineID;
- DPRINTF(RubySlicc, "%s\n", machineID);
- out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
- l2_select_low_bit, l2_select_num_bits));
- DPRINTF(RubySlicc, "address: %s, destination: %s\n",
- address, out_msg.Destination);
- out_msg.MessageSize := MessageSizeType:Control;
- out_msg.Prefetch := in_msg.Prefetch;
- out_msg.AccessMode := in_msg.AccessMode;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.contextId;
- }
- }
- }
- action(pb_issuePfGETX, "pb", desc="Issue prefetch GETX") {
- peek(optionalQueue_in, RubyRequest) {
- enqueue(requestIntraChipL1Network_out, RequestMsg,
- latency=l1_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GETX;
- out_msg.Requestor := machineID;
- DPRINTF(RubySlicc, "%s\n", machineID);
- diff -r d30cffa47f75 src/mem/protocol/MESI_CMP_directory-L2cache.sm
- --- a/src/mem/protocol/MESI_CMP_directory-L2cache.sm Tue Apr 15 14:37:21 2014 -0400
- +++ b/src/mem/protocol/MESI_CMP_directory-L2cache.sm Wed Apr 16 11:04:00 2014 -0400
- @@ -394,39 +394,43 @@
- }
- // ACTIONS
- action(a_issueFetchToMemory, "a", desc="fetch data from memory") {
- peek(L1RequestIntraChipL2Network_in, RequestMsg) {
- enqueue(DirRequestIntraChipL2Network_out, RequestMsg, latency=l2_request_latency) {
- out_msg.Addr := address;
- out_msg.Type := CoherenceRequestType:GETS;
- out_msg.Requestor := machineID;
- out_msg.Destination.add(map_Address_to_Directory(address));
- out_msg.MessageSize := MessageSizeType:Control;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.ThreadId;
- }
- }
- }
- action(b_forwardRequestToExclusive, "b", desc="Forward request to the exclusive L1") {
- peek(L1RequestIntraChipL2Network_in, RequestMsg) {
- enqueue(L1RequestIntraChipL2Network_out, RequestMsg, latency=to_l1_latency) {
- assert(is_valid(cache_entry));
- out_msg.Addr := address;
- out_msg.Type := in_msg.Type;
- out_msg.Requestor := in_msg.Requestor;
- out_msg.Destination.add(cache_entry.Exclusive);
- out_msg.MessageSize := MessageSizeType:Request_Control;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.ThreadId;
- }
- }
- }
- action(c_exclusiveReplacement, "c", desc="Send data to memory") {
- enqueue(responseIntraChipL2Network_out, ResponseMsg, latency=l2_response_latency) {
- assert(is_valid(cache_entry));
- out_msg.Addr := address;
- out_msg.Type := CoherenceResponseType:MEMORY_DATA;
- out_msg.Sender := machineID;
- out_msg.Destination.add(map_Address_to_Directory(address));
- out_msg.DataBlk := cache_entry.DataBlk;
- out_msg.Dirty := cache_entry.Dirty;
- diff -r d30cffa47f75 src/mem/protocol/MESI_CMP_directory-dir.sm
- --- a/src/mem/protocol/MESI_CMP_directory-dir.sm Tue Apr 15 14:37:21 2014 -0400
- +++ b/src/mem/protocol/MESI_CMP_directory-dir.sm Wed Apr 16 11:04:00 2014 -0400
- @@ -305,26 +305,28 @@
- wakeUpBuffers(address);
- }
- action(qf_queueMemoryFetchRequest, "qf", desc="Queue off-chip fetch request") {
- peek(requestNetwork_in, RequestMsg) {
- enqueue(memQueue_out, MemoryMsg, latency=to_mem_ctrl_latency) {
- out_msg.Addr := address;
- out_msg.Type := MemoryRequestType:MEMORY_READ;
- out_msg.Sender := machineID;
- out_msg.OriginalRequestorMachId := in_msg.Requestor;
- out_msg.MessageSize := in_msg.MessageSize;
- out_msg.Prefetch := in_msg.Prefetch;
- out_msg.DataBlk := getDirectoryEntry(in_msg.Addr).DataBlk;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.ThreadId;
- DPRINTF(RubySlicc, "%s\n", out_msg);
- }
- }
- }
- action(qw_queueMemoryWBRequest, "qw", desc="Queue off-chip writeback request") {
- peek(responseNetwork_in, ResponseMsg) {
- enqueue(memQueue_out, MemoryMsg, latency=to_mem_ctrl_latency) {
- out_msg.Addr := address;
- out_msg.Type := MemoryRequestType:MEMORY_WB;
- out_msg.Sender := machineID;
- out_msg.OriginalRequestorMachId := in_msg.Sender;
- @@ -344,26 +346,28 @@
- in_msg.Addr, in_msg.DataBlk);
- }
- }
- //added by SS for dma
- action(qf_queueMemoryFetchRequestDMA, "qfd", desc="Queue off-chip fetch request") {
- peek(requestNetwork_in, RequestMsg) {
- enqueue(memQueue_out, MemoryMsg, latency=to_mem_ctrl_latency) {
- out_msg.Addr := address;
- out_msg.Type := MemoryRequestType:MEMORY_READ;
- out_msg.Sender := machineID;
- out_msg.OriginalRequestorMachId := machineID;
- out_msg.MessageSize := in_msg.MessageSize;
- out_msg.DataBlk := getDirectoryEntry(address).DataBlk;
- + out_msg.ProgramCounter := in_msg.ProgramCounter;
- + out_msg.ThreadId := in_msg.ThreadId;
- DPRINTF(RubySlicc, "%s\n", out_msg);
- }
- }
- }
- action(p_popIncomingDMARequestQueue, "p", desc="Pop incoming DMA queue") {
- requestNetwork_in.dequeue();
- }
- action(dr_sendDMAData, "dr", desc="Send Data to DMA controller from directory") {
- peek(memQueue_in, MemoryMsg) {
- enqueue(responseNetwork_out, ResponseMsg, latency=to_mem_ctrl_latency) {
- out_msg.Addr := address;
- diff -r d30cffa47f75 src/mem/protocol/MESI_CMP_directory-msg.sm
- --- a/src/mem/protocol/MESI_CMP_directory-msg.sm Tue Apr 15 14:37:21 2014 -0400
- +++ b/src/mem/protocol/MESI_CMP_directory-msg.sm Wed Apr 16 11:04:00 2014 -0400
- @@ -58,26 +58,28 @@
- // RequestMsg
- structure(RequestMsg, desc="...", interface="NetworkMessage") {
- Address Addr, desc="Physical address for this request";
- CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
- RubyAccessMode AccessMode, desc="user/supervisor access type";
- MachineID Requestor , desc="What component request";
- NetDest Destination, desc="What components receive the request, includes MachineType and num";
- MessageSizeType MessageSize, desc="size category of the message";
- DataBlock DataBlk, desc="Data for the cache line (if PUTX)";
- int Len;
- bool Dirty, default="false", desc="Dirty bit";
- PrefetchBit Prefetch, desc="Is this a prefetch request";
- + Address ProgramCounter, desc="PC that caused this request";
- + int ThreadId, desc="Context ID of issuing request";
- bool functionalRead(Packet *pkt) {
- // Only PUTX messages contains the data block
- if (Type == CoherenceRequestType:PUTX) {
- return testAndRead(Addr, DataBlk, pkt);
- }
- return false;
- }
- bool functionalWrite(Packet *pkt) {
- // No check on message type required since the protocol should
- // read data from those messages that contain the block
- diff -r d30cffa47f75 src/mem/protocol/RubySlicc_MemControl.sm
- --- a/src/mem/protocol/RubySlicc_MemControl.sm Tue Apr 15 14:37:21 2014 -0400
- +++ b/src/mem/protocol/RubySlicc_MemControl.sm Wed Apr 16 11:04:00 2014 -0400
- @@ -51,22 +51,24 @@
- // Message to and from Memory Control
- structure(MemoryMsg, desc="...", interface="Message") {
- Address Addr, desc="Physical address for this request";
- MemoryRequestType Type, desc="Type of memory request (MEMORY_READ or MEMORY_WB)";
- MachineID Sender, desc="What component sent the data";
- MachineID OriginalRequestorMachId, desc="What component originally requested";
- DataBlock DataBlk, desc="Data to writeback";
- MessageSizeType MessageSize, desc="size category of the message";
- // Not all fields used by all protocols:
- PrefetchBit Prefetch, desc="Is this a prefetch request";
- bool ReadX, desc="Exclusive";
- int Acks, desc="How many acks to expect";
- + Address ProgramCounter, desc="Program Counter causing miss";
- + int ThreadId, desc="Context ID of issuing request";
- bool functionalRead(Packet *pkt) {
- return testAndRead(Addr, DataBlk, pkt);
- }
- bool functionalWrite(Packet *pkt) {
- return testAndWrite(Addr, DataBlk, pkt);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement