slicc: Fixed MI_example bug. The directory was not writing data to DRAM after a...
authorDerek Hower <drh5@cs.wisc.edu>
Wed, 8 Jul 2009 05:31:33 +0000 (00:31 -0500)
committerDerek Hower <drh5@cs.wisc.edu>
Wed, 8 Jul 2009 05:31:33 +0000 (00:31 -0500)
src/mem/protocol/MI_example-dir.sm

index f597ab73cb717f202d052f622b35d348537e12fa..29678ffc4f2b1dff46f279aaec9b2298b7fcdca9 100644 (file)
@@ -374,6 +374,13 @@ machine(Directory, "Directory protocol") : LATENCY_TO_MEM_CTRL_LATENCY LATENCY_D
     }
   }
 
+  action(v_allocateTBEFromRequestNet, "\v", desc="Allocate TBE") {
+    peek(requestQueue_in, RequestMsg) {
+      TBEs.allocate(address);
+      TBEs[address].DataBlk := in_msg.DataBlk;
+    }
+  }
+
   action(w_deallocateTBE, "w", desc="Deallocate TBE") {
     TBEs.deallocate(address);
   }
@@ -478,6 +485,10 @@ machine(Directory, "Directory protocol") : LATENCY_TO_MEM_CTRL_LATENCY LATENCY_D
     memQueue_in.dequeue();
   }
 
+  action(w_writeDataToMemoryFromTBE, "\w", desc="Write date to directory memory from TBE") {
+    directory[address].DataBlk := TBEs[address].DataBlk;
+  }
+
   // TRANSITIONS
 
   transition({M_DRD, M_DWR}, GETX) {
@@ -548,27 +559,20 @@ machine(Directory, "Directory protocol") : LATENCY_TO_MEM_CTRL_LATENCY LATENCY_D
   }
 
   transition(M_DWR, PUTX, M_DWRI) {
-    dwt_writeDMADataFromTBE;
     qw_queueMemoryWBRequest_partialTBE;
-    //a_sendWriteBackAck;
     c_clearOwner;
-    //da_sendDMAAck;
     w_deallocateTBE;
     i_popIncomingRequestQueue;
   }
 
   transition(M_DWRI, Memory_Ack, I) {
-    //dwt_writeDMADataFromTBE;
+    w_writeDataToMemoryFromTBE;
     l_sendWriteBackAck;
-    //c_clearOwner;
     da_sendDMAAck;
-    //w_deallocateTBE;
+    w_deallocateTBE;
     l_popMemQueue;
   }
 
-
-
-
   transition(M, GETX, M) {
     f_forwardRequest;
     e_ownerIsRequestor;
@@ -577,15 +581,16 @@ machine(Directory, "Directory protocol") : LATENCY_TO_MEM_CTRL_LATENCY LATENCY_D
 
   transition(M, PUTX, MI) {
     c_clearOwner;
-//    l_writeDataToMemory;
+    v_allocateTBEFromRequestNet;
     l_queueMemoryWBRequest;
-//    a_sendWriteBackAck;
     d_deallocateDirectory;
     i_popIncomingRequestQueue;
   }
 
   transition(MI, Memory_Ack, I) {
+    w_writeDataToMemoryFromTBE;
     l_sendWriteBackAck;
+    w_deallocateTBE;
     l_popMemQueue;
   }