changeset abfa00a2a23a in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=abfa00a2a23a
description:
        Automated merge with ssh://[email protected]/m5

diffstat:

48 files changed, 4071 insertions(+), 2182 deletions(-)
.hgtags                                                        |    1 
src/mem/protocol/MESI_CMP_directory-L1cache.sm                 |   20 
src/mem/protocol/MESI_CMP_directory-L2cache.sm                 |   10 
src/mem/protocol/MESI_CMP_directory-dma.sm                     |   36 
src/mem/protocol/MESI_CMP_directory-mem.sm                     |   83 
src/mem/protocol/MESI_CMP_directory-msg.sm                     |   68 
src/mem/protocol/MI_example-cache.sm                           |   17 
src/mem/protocol/MI_example-dir.sm                             |    4 
src/mem/protocol/MOESI_CMP_directory-L1cache.sm                |    6 
src/mem/protocol/MOESI_CMP_directory-dir.sm                    |    4 
src/mem/protocol/RubySlicc_ComponentMapping.sm                 |    1 
src/mem/protocol/SConsopts                                     |    2 
src/mem/ruby/buffers/MessageBuffer.hh                          |    5 
src/mem/ruby/config/MESI_CMP_directory.rb                      |    4 
src/mem/ruby/config/MI_example-homogeneous.rb                  |    9 
src/mem/ruby/config/TwoLevel_SplitL1UnifiedL2.rb               |   90 
src/mem/ruby/config/assert.rb                                  |   18 
src/mem/ruby/config/cfg.rb                                     |  352 
src/mem/ruby/config/config.hh                                  |  236 
src/mem/ruby/config/defaults.rb                                |  128 
src/mem/ruby/config/rubyconfig.defaults                        |  405 -
src/mem/ruby/config/tester.defaults                            |   50 
src/mem/ruby/libruby.cc                                        |    3 
src/mem/ruby/libruby.hh                                        |    8 
src/mem/ruby/network/simple/PerfectSwitch.cc                   |    2 
src/mem/ruby/network/simple/Topology.cc                        |    1 
src/mem/ruby/slicc_interface/AbstractController.hh             |    5 
src/mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh     |   11 
src/mem/ruby/system/CacheMemory.cc                             |   28 
src/mem/ruby/system/CacheMemory.hh                             |   10 
src/mem/ruby/system/DMASequencer.hh                            |    1 
src/mem/ruby/system/DirectoryMemory.cc                         |    2 
src/mem/ruby/system/DirectoryMemory.hh                         |    2 
src/mem/ruby/system/MemoryVector.hh                            |   72 
src/mem/ruby/system/Sequencer.cc                               |  121 
src/mem/ruby/system/Sequencer.hh                               |   10 
src/mem/ruby/system/System.cc                                  |    4 
src/mem/slicc/ast/PeekStatementAST.py                          |   15 
src/mem/slicc/parser.py                                        |    4 
src/mem/slicc/symbols/StateMachine.py                          |  217 
src/mem/slicc/symbols/Type.py                                  |    6 
tests/configs/memtest-ruby.py                                  |    5 
tests/configs/ruby_config.py                                   |    3 
tests/quick/50.memtest/ref/alpha/linux/memtest-ruby/ruby.stats | 3964 ++++++++--
tests/quick/50.memtest/ref/alpha/linux/memtest-ruby/simerr     |  148 
tests/quick/50.memtest/ref/alpha/linux/memtest-ruby/simout     |   12 
tests/quick/50.memtest/ref/alpha/linux/memtest-ruby/stats.txt  |   42 
util/style.py                                                  |    8 

diffs (truncated from 8076 to 300 lines):

diff -r d6284ec9bdf9 -r abfa00a2a23a .hgtags
--- a/.hgtags   Wed Jan 20 16:47:40 2010 -0800
+++ b/.hgtags   Fri Jan 22 17:23:21 2010 -0600
@@ -18,3 +18,4 @@
 1ac44b6c87ec71a8410c9a9c219269eca71f8077 m5_2.0_beta4
 60a931b03fb165807f02bcccc4f7d0fd705a67a9 copyright_update
 d8b246a665c160a31751b4091f097022cde16dd7 m5_2.0_beta6
+5de565c4b7bdf46670611858b709c1eb50ad7c5c Calvin_Submission
diff -r d6284ec9bdf9 -r abfa00a2a23a 
src/mem/protocol/MESI_CMP_directory-L1cache.sm
--- a/src/mem/protocol/MESI_CMP_directory-L1cache.sm    Wed Jan 20 16:47:40 
2010 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-L1cache.sm    Fri Jan 22 17:23:21 
2010 -0600
@@ -27,12 +27,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- * $Id: MSI_MOSI_CMP_directory-L1cache.sm 1.10 05/01/19 15:55:40-06:00 
[email protected] $
- *
- */
-
-
 machine(L1Cache, "MSI Directory L1 Cache CMP")
  : int l1_request_latency,
    int l1_response_latency,
@@ -47,15 +41,15 @@
   // a local L1 -> this L2 bank, currently ordered with directory forwarded 
requests
   MessageBuffer requestFromL1Cache, network="To", virtual_network="0", 
ordered="false";
   // a local L1 -> this L2 bank
-  MessageBuffer responseFromL1Cache, network="To", virtual_network="3", 
ordered="false";
-  MessageBuffer unblockFromL1Cache, network="To", virtual_network="4", 
ordered="false";
+  MessageBuffer responseFromL1Cache, network="To", virtual_network="1", 
ordered="false";
+  MessageBuffer unblockFromL1Cache, network="To", virtual_network="2", 
ordered="false";
 
 
   // To this node's L1 cache FROM the network
   // a L2 bank -> this L1
-  MessageBuffer requestToL1Cache, network="From", virtual_network="1", 
ordered="false";
+  MessageBuffer requestToL1Cache, network="From", virtual_network="0", 
ordered="false";
   // a L2 bank -> this L1
-  MessageBuffer responseToL1Cache, network="From", virtual_network="3", 
ordered="false";
+  MessageBuffer responseToL1Cache, network="From", virtual_network="1", 
ordered="false";
 
   // STATES
   enumeration(State, desc="Cache states", default="L1Cache_State_I") {
@@ -244,7 +238,7 @@
   // Response IntraChip L1 Network - response msg to this L1 cache
   in_port(responseIntraChipL1Network_in, ResponseMsg, responseToL1Cache) {
     if (responseIntraChipL1Network_in.isReady()) {
-      peek(responseIntraChipL1Network_in, ResponseMsg) {
+      peek(responseIntraChipL1Network_in, ResponseMsg, block_on="Address") {
         assert(in_msg.Destination.isElement(machineID));
         if(in_msg.Type == CoherenceResponseType:DATA_EXCLUSIVE) {
           trigger(Event:Data_Exclusive, in_msg.Address);
@@ -277,7 +271,7 @@
   // Request InterChip network - request from this L1 cache to the shared L2
   in_port(requestIntraChipL1Network_in, RequestMsg, requestToL1Cache) {
     if(requestIntraChipL1Network_in.isReady()) {
-      peek(requestIntraChipL1Network_in, RequestMsg) {
+      peek(requestIntraChipL1Network_in, RequestMsg, block_on="Address") {
         assert(in_msg.Destination.isElement(machineID));
         if (in_msg.Type == CoherenceRequestType:INV) {
           trigger(Event:Inv, in_msg.Address);
@@ -298,7 +292,7 @@
   // Mandatory Queue betweens Node's CPU and it's L1 caches
   in_port(mandatoryQueue_in, CacheMsg, mandatoryQueue, desc="...") {
     if (mandatoryQueue_in.isReady()) {
-      peek(mandatoryQueue_in, CacheMsg) {
+      peek(mandatoryQueue_in, CacheMsg, block_on="LineAddress") {
 
         // Check for data access to blocks in I-cache and ifetchs to blocks in 
D-cache
 
diff -r d6284ec9bdf9 -r abfa00a2a23a 
src/mem/protocol/MESI_CMP_directory-L2cache.sm
--- a/src/mem/protocol/MESI_CMP_directory-L2cache.sm    Wed Jan 20 16:47:40 
2010 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-L2cache.sm    Fri Jan 22 17:23:21 
2010 -0600
@@ -40,14 +40,14 @@
 
   // L2 BANK QUEUES
   // From local bank of L2 cache TO the network
-  MessageBuffer DirRequestFromL2Cache, network="To", virtual_network="2", 
ordered="false";  // this L2 bank -> Memory
-  MessageBuffer L1RequestFromL2Cache, network="To", virtual_network="1", 
ordered="false";  // this L2 bank -> a local L1
-  MessageBuffer responseFromL2Cache, network="To", virtual_network="3", 
ordered="false";  // this L2 bank -> a local L1 || Memory
+  MessageBuffer DirRequestFromL2Cache, network="To", virtual_network="0", 
ordered="false";  // this L2 bank -> Memory
+  MessageBuffer L1RequestFromL2Cache, network="To", virtual_network="0", 
ordered="false";  // this L2 bank -> a local L1
+  MessageBuffer responseFromL2Cache, network="To", virtual_network="1", 
ordered="false";  // this L2 bank -> a local L1 || Memory
 
   // FROM the network to this local bank of L2 cache
-  MessageBuffer unblockToL2Cache, network="From", virtual_network="4", 
ordered="false";  // a local L1 || Memory -> this L2 bank
+  MessageBuffer unblockToL2Cache, network="From", virtual_network="2", 
ordered="false";  // a local L1 || Memory -> this L2 bank
   MessageBuffer L1RequestToL2Cache, network="From", virtual_network="0", 
ordered="false";  // a local L1 -> this L2 bank
-  MessageBuffer responseToL2Cache, network="From", virtual_network="3", 
ordered="false";  // a local L1 || Memory -> this L2 bank
+  MessageBuffer responseToL2Cache, network="From", virtual_network="1", 
ordered="false";  // a local L1 || Memory -> this L2 bank
 //  MessageBuffer unblockToL2Cache, network="From", virtual_network="4", 
ordered="false";  // a local L1 || Memory -> this L2 bank
 
   // STATES
diff -r d6284ec9bdf9 -r abfa00a2a23a src/mem/protocol/MESI_CMP_directory-dma.sm
--- a/src/mem/protocol/MESI_CMP_directory-dma.sm        Wed Jan 20 16:47:40 
2010 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-dma.sm        Fri Jan 22 17:23:21 
2010 -0600
@@ -3,8 +3,8 @@
 : int request_latency
 {
 
-  MessageBuffer responseFromDir, network="From", virtual_network="6", 
ordered="true", no_vector="true";
-  MessageBuffer reqToDirectory, network="To", virtual_network="7", 
ordered="false", no_vector="true";
+  MessageBuffer responseFromDir, network="From", virtual_network="1", 
ordered="true", no_vector="true";
+  MessageBuffer reqToDirectory, network="To", virtual_network="0", 
ordered="false", no_vector="true";
 
   enumeration(State, desc="DMA states", default="DMA_State_READY") {
     READY, desc="Ready to accept a new request";
@@ -51,13 +51,13 @@
     }
   }
 
-  in_port(dmaResponseQueue_in, DMAResponseMsg, responseFromDir, desc="...") {
+  in_port(dmaResponseQueue_in, ResponseMsg, responseFromDir, desc="...") {
     if (dmaResponseQueue_in.isReady()) {
-      peek( dmaResponseQueue_in, DMAResponseMsg) {
-        if (in_msg.Type == DMAResponseType:ACK) {
-          trigger(Event:Ack, in_msg.LineAddress);
-        } else if (in_msg.Type == DMAResponseType:DATA) {
-          trigger(Event:Data, in_msg.LineAddress);
+      peek( dmaResponseQueue_in, ResponseMsg) {
+        if (in_msg.Type == CoherenceResponseType:ACK) {
+          trigger(Event:Ack, makeLineAddress(in_msg.Address));
+        } else if (in_msg.Type == CoherenceResponseType:DATA) {
+          trigger(Event:Data, makeLineAddress(in_msg.Address));
         } else {
           error("Invalid response type");
         }
@@ -67,10 +67,9 @@
 
   action(s_sendReadRequest, "s", desc="Send a DMA read request to memory") {
     peek(dmaRequestQueue_in, SequencerMsg) {
-      enqueue(reqToDirectory_out, DMARequestMsg, latency=request_latency) {
-        out_msg.PhysicalAddress := in_msg.PhysicalAddress;
-        out_msg.LineAddress := in_msg.LineAddress; 
-        out_msg.Type := DMARequestType:READ;
+      enqueue(reqToDirectory_out, RequestMsg, latency=request_latency) {
+        out_msg.Address := in_msg.PhysicalAddress;
+        out_msg.Type := CoherenceRequestType:DMA_READ;
         out_msg.DataBlk := in_msg.DataBlk;
         out_msg.Len := in_msg.Len;
         out_msg.Destination.add(map_Address_to_Directory(address));
@@ -81,10 +80,9 @@
 
   action(s_sendWriteRequest, "\s", desc="Send a DMA write request to memory") {
     peek(dmaRequestQueue_in, SequencerMsg) {
-      enqueue(reqToDirectory_out, DMARequestMsg, latency=request_latency) {
-          out_msg.PhysicalAddress := in_msg.PhysicalAddress;
-          out_msg.LineAddress := in_msg.LineAddress; 
-          out_msg.Type := DMARequestType:WRITE;
+      enqueue(reqToDirectory_out, RequestMsg, latency=request_latency) {
+          out_msg.Address := in_msg.PhysicalAddress;
+          out_msg.Type := CoherenceRequestType:DMA_WRITE;
           out_msg.DataBlk := in_msg.DataBlk;
           out_msg.Len := in_msg.Len;
           out_msg.Destination.add(map_Address_to_Directory(address));
@@ -94,13 +92,11 @@
   }
 
   action(a_ackCallback, "a", desc="Notify dma controller that write request 
completed") {
-    peek (dmaResponseQueue_in, DMAResponseMsg) {
-      dma_sequencer.ackCallback();
-    }
+    dma_sequencer.ackCallback();
   }
 
   action(d_dataCallback, "d", desc="Write data to dma sequencer") {
-    peek (dmaResponseQueue_in, DMAResponseMsg) {
+    peek (dmaResponseQueue_in, ResponseMsg) {
       dma_sequencer.dataCallback(in_msg.DataBlk);
     }
   }
diff -r d6284ec9bdf9 -r abfa00a2a23a src/mem/protocol/MESI_CMP_directory-mem.sm
--- a/src/mem/protocol/MESI_CMP_directory-mem.sm        Wed Jan 20 16:47:40 
2010 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-mem.sm        Fri Jan 22 17:23:21 
2010 -0600
@@ -40,13 +40,11 @@
    int directory_latency
 {
 
-  MessageBuffer requestToDir, network="From", virtual_network="2", 
ordered="false";
-  MessageBuffer responseToDir, network="From", virtual_network="3", 
ordered="false";
-  MessageBuffer responseFromDir, network="To", virtual_network="3", 
ordered="false";
+  MessageBuffer requestToDir, network="From", virtual_network="0", 
ordered="false";
+  MessageBuffer responseToDir, network="From", virtual_network="1", 
ordered="false";
 
-  MessageBuffer dmaRequestFromDir, network="To", virtual_network="6", 
ordered="true";
-  MessageBuffer dmaRequestToDir, network="From", virtual_network="7", 
ordered="true";
-
+  MessageBuffer requestFromDir, network="To", virtual_network="0", 
ordered="false";
+  MessageBuffer responseFromDir, network="To", virtual_network="1", 
ordered="false";
 
   // STATES
   enumeration(State, desc="Directory states", default="Directory_State_I") {
@@ -118,9 +116,9 @@
 //  DirectoryMemory directory, constructor_hack="i";
 //  MemoryControl memBuffer, constructor_hack="i";
 
-  DirectoryMemory directory, 
factory='RubySystem::getDirectory(m_cfg["directory_name"])';
+  DirectoryMemory directory, 
factory='RubySystem::getDirectory(m_cfg["directory"])';
 
-  MemoryControl memBuffer, 
factory='RubySystem::getMemoryControl(m_cfg["memory_controller_name"])';
+  MemoryControl memBuffer, 
factory='RubySystem::getMemoryControl(m_cfg["memory_control"])';
 
 
   TBETable TBEs, template_hack="<Directory_TBE>";
@@ -167,32 +165,19 @@
   // ** OUT_PORTS **
   out_port(responseNetwork_out, ResponseMsg, responseFromDir);
   out_port(memQueue_out, MemoryMsg, memBuffer);
-  out_port(dmaResponseNetwork_out, DMAResponseMsg, dmaRequestFromDir);
 
   // ** IN_PORTS **
 
-//added by SS for dma
-  in_port(dmaRequestQueue_in, DMARequestMsg, dmaRequestToDir) {
-    if (dmaRequestQueue_in.isReady()) {
-      peek(dmaRequestQueue_in, DMARequestMsg) {
-        if (in_msg.Type == DMARequestType:READ) {
-          trigger(Event:DMA_READ, in_msg.LineAddress);
-        } else if (in_msg.Type == DMARequestType:WRITE) {
-          trigger(Event:DMA_WRITE, in_msg.LineAddress);
-        } else {
-          error("Invalid message");
-        }
-      }
-    }
-  }
-
-
   in_port(requestNetwork_in, RequestMsg, requestToDir) {
     if (requestNetwork_in.isReady()) {
       peek(requestNetwork_in, RequestMsg) {
         assert(in_msg.Destination.isElement(machineID));
         if (isGETRequest(in_msg.Type)) {
           trigger(Event:Fetch, in_msg.Address);
+        } else if (in_msg.Type == CoherenceRequestType:DMA_READ) {
+          trigger(Event:DMA_READ, makeLineAddress(in_msg.Address));
+        } else if (in_msg.Type == CoherenceRequestType:DMA_WRITE) {
+          trigger(Event:DMA_WRITE, makeLineAddress(in_msg.Address));          
         } else {
           DEBUG_EXPR(in_msg);
           error("Invalid message");
@@ -328,7 +313,7 @@
   }
 //added by SS for dma
   action(qf_queueMemoryFetchRequestDMA, "qfd", desc="Queue off-chip fetch 
request") {
-    peek(dmaRequestQueue_in, DMARequestMsg) {
+    peek(requestNetwork_in, RequestMsg) {
       enqueue(memQueue_out, MemoryMsg, latency=to_mem_ctrl_latency) {
         out_msg.Address := address;
         out_msg.Type := MemoryRequestType:MEMORY_READ;
@@ -342,14 +327,14 @@
   }
 
   action(p_popIncomingDMARequestQueue, "p", desc="Pop incoming DMA queue") {
-    dmaRequestQueue_in.dequeue();
+    requestNetwork_in.dequeue();
   }
 
   action(dr_sendDMAData, "dr", desc="Send Data to DMA controller from 
directory") {
     peek(memQueue_in, MemoryMsg) {
-      enqueue(dmaResponseNetwork_out, DMAResponseMsg, 
latency=to_mem_ctrl_latency) {
-        out_msg.PhysicalAddress := address;
-        out_msg.Type := DMAResponseType:DATA;
+      enqueue(responseNetwork_out, ResponseMsg, latency=to_mem_ctrl_latency) {
+        out_msg.Address := address;
+        out_msg.Type := CoherenceResponseType:DATA;
         out_msg.DataBlk := in_msg.DataBlk;   // we send the entire data block 
and rely on the dma controller to split it up if need be
         out_msg.Destination.add(map_Address_to_DMA(address));
         out_msg.MessageSize := MessageSizeType:Response_Data;
@@ -358,15 +343,13 @@
   }
 
   action(dw_writeDMAData, "dw", desc="DMA Write data to memory") {
-    peek(dmaRequestQueue_in, DMARequestMsg) {
-      //directory[in_msg.PhysicalAddress].DataBlk.copyPartial(in_msg.DataBlk, 
in_msg.Offset, in_msg.Len);
-
-      directory[in_msg.PhysicalAddress].DataBlk.copyPartial(in_msg.DataBlk, 
addressOffset(in_msg.PhysicalAddress), in_msg.Len);
+    peek(requestNetwork_in, RequestMsg) {
+      directory[address].DataBlk.copyPartial(in_msg.DataBlk, 
addressOffset(in_msg.Address), in_msg.Len);
     }
   }
 
   action(qw_queueMemoryWBRequest_partial, "qwp", desc="Queue off-chip 
writeback request") {
-     peek(dmaRequestQueue_in, DMARequestMsg) {
+     peek(requestNetwork_in, RequestMsg) {
       enqueue(memQueue_out, MemoryMsg, latency=to_mem_ctrl_latency) {
         out_msg.Address := address;
         out_msg.Type := MemoryRequestType:MEMORY_WB;
@@ -384,9 +367,9 @@
   }
 
   action(da_sendDMAAck, "da", desc="Send Ack to DMA controller") {
-      enqueue(dmaResponseNetwork_out, DMAResponseMsg, 
latency=to_mem_ctrl_latency) {
-        out_msg.PhysicalAddress := address;
-        out_msg.Type := DMAResponseType:ACK;
+      enqueue(responseNetwork_out, ResponseMsg, latency=to_mem_ctrl_latency) {
+        out_msg.Address := address;
+        out_msg.Type := CoherenceResponseType:ACK;
         out_msg.Destination.add(map_Address_to_DMA(address));
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to