From a82f017591ecb78cb098e38314d87d64fcaaa37f Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sun, 8 Oct 2006 18:44:49 -0400 Subject: [PATCH] bus changes 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 | 18 +++++++++++++----- src/mem/bus.hh | 6 +++--- src/python/m5/objects/Bus.py | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/mem/bus.cc b/src/mem/bus.cc index 2a38cb635..4cd4dd71a 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -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; } } } diff --git a/src/mem/bus.hh b/src/mem/bus.hh index 96f1152a6..f238f134d 100644 --- a/src/mem/bus.hh +++ b/src/mem/bus.hh @@ -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); diff --git a/src/python/m5/objects/Bus.py b/src/python/m5/objects/Bus.py index b7c55990c..6710111e5 100644 --- a/src/python/m5/objects/Bus.py +++ b/src/python/m5/objects/Bus.py @@ -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)")