}
Bus::BusFreeEvent::BusFreeEvent(Bus *_bus) : Event(&mainEventQueue), bus(_bus)
-{}
+{
+ assert(!scheduled());
+}
void Bus::BusFreeEvent::process()
{
} 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
if (port->sendTiming(pkt)) {
// Packet was successfully sent. Return true.
+ // Also take care of retries
+ if (retryingPort) {
+ retryList.pop_front();
+ retryingPort = NULL;
+ }
return true;
}
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;
}
}
}
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;
} 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.
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);
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)")