bus changes
authorGabe Black <gblack@eecs.umich.edu>
Sun, 8 Oct 2006 22:44:49 +0000 (18:44 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 8 Oct 2006 22:44:49 +0000 (18:44 -0400)
src/mem/bus.cc:
src/mem/bus.hh:
    minor fix and some formatting changes
src/python/m5/objects/Bus.py:
    changed bits to bytes

--HG--
extra : convert_revision : dcd22205604b7a2727eaf2094084c4858f3589c5

src/mem/bus.cc
src/mem/bus.hh
src/python/m5/objects/Bus.py

index 2a38cb63539ddc413868f1c4a8d3c541b668accf..4cd4dd71a2db03f7106337f1d8cbb69f0149a061 100644 (file)
@@ -68,7 +68,9 @@ Bus::init()
 }
 
 Bus::BusFreeEvent::BusFreeEvent(Bus *_bus) : Event(&mainEventQueue), bus(_bus)
-{}
+{
+    assert(!scheduled());
+}
 
 void Bus::BusFreeEvent::process()
 {
@@ -104,6 +106,7 @@ Bus::occupyBus(int numCycles)
     } else {
         busIdle.reschedule(tickNextIdle);
     }
+    DPRINTF(Bus, "The bus is now occupied from tick %d to %d\n", curTick, tickNextIdle);
 }
 
 /** Function called by the port when the bus is receiving a Timing
@@ -155,6 +158,11 @@ Bus::recvTiming(Packet *pkt)
 
     if (port->sendTiming(pkt))  {
         // Packet was successfully sent. Return true.
+        // Also take care of retries
+        if (retryingPort) {
+            retryList.pop_front();
+            retryingPort = NULL;
+        }
         return true;
     }
 
@@ -166,15 +174,15 @@ Bus::recvTiming(Packet *pkt)
 void
 Bus::recvRetry(int id)
 {
-    //If there's anything waiting...
+    // If there's anything waiting...
     if (retryList.size()) {
         retryingPort = retryList.front();
         retryingPort->sendRetry();
-        //If the retryingPort pointer isn't null, either sendTiming wasn't
-        //called, or it was and the packet was successfully sent.
+        // If the retryingPort pointer isn't null, sendTiming wasn't called
         if (retryingPort) {
+            warn("sendRetry didn't call sendTiming\n");
             retryList.pop_front();
-            retryingPort = 0;
+            retryingPort = NULL;
         }
     }
 }
index 96f1152a6f100342224f0dd2075cd115d8f219cd..f238f134d6a2b66b80d7703d2225a1187111fbc0 100644 (file)
@@ -54,7 +54,7 @@ class Bus : public MemObject
     int busId;
     /** the clock speed for the bus */
     int clock;
-    /** the width of the bus in bits */
+    /** the width of the bus in bytes */
     int width;
     /** the next tick at which the bus will be idle */
     Tick tickNextIdle;
@@ -230,7 +230,7 @@ class Bus : public MemObject
         } else {
             // The device was retrying a packet. It didn't work, so we'll leave
             // it at the head of the retry list.
-            retryingPort = 0;
+            retryingPort = NULL;
 
             // We shouldn't be receiving a packet from one port when a different
             // one is retrying.
@@ -250,7 +250,7 @@ class Bus : public MemObject
 
     Bus(const std::string &n, int bus_id, int _clock, int _width)
         : MemObject(n), busId(bus_id), clock(_clock), width(_width),
-        tickNextIdle(0), busIdle(this), retryingPort(0), defaultPort(NULL)
+        tickNextIdle(0), busIdle(this), retryingPort(NULL), defaultPort(NULL)
     {
         //Both the width and clock period must be positive
         assert(width);
index b7c55990c500d30397ccf8e2abdbdeb6398a535a..6710111e51f5d32f1215e28113ce48fe3c40a257 100644 (file)
@@ -7,4 +7,4 @@ class Bus(MemObject):
     default = Port("Default port for requests that aren't handeled by a device.")
     bus_id = Param.Int(0, "blah")
     clock = Param.Clock("1GHz", "bus clock speed")
-    width = Param.Int(64, "bus width (bits)")
+    width = Param.Int(64, "bus width (bytes)")