summaryrefslogtreecommitdiff
path: root/src/mem/bus.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2008-02-26 02:20:08 -0500
committerGabe Black <gblack@eecs.umich.edu>2008-02-26 02:20:08 -0500
commitec1a4cbbc73ecc1d7456d11c571c425e226a7d3b (patch)
treef6d238a8385a5bdcfedb39239ccd14a69ea83976 /src/mem/bus.hh
parent2e079ce038dcce2c5328d840f8b57290bef8c794 (diff)
downloadgem5-ec1a4cbbc73ecc1d7456d11c571c425e226a7d3b.tar.xz
Bus: Fix the bus timing to be more realistic.
--HG-- extra : convert_revision : acd70dc98ab840e55b114706fbb6afb2a95e54bc
Diffstat (limited to 'src/mem/bus.hh')
-rw-r--r--src/mem/bus.hh22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/mem/bus.hh b/src/mem/bus.hh
index 0c23175f1..274c02de4 100644
--- a/src/mem/bus.hh
+++ b/src/mem/bus.hh
@@ -138,6 +138,8 @@ class Bus : public MemObject
int busId;
/** the clock speed for the bus */
int clock;
+ /** cycles of overhead per transaction */
+ int headerCycles;
/** the width of the bus in bytes */
int width;
/** the next tick at which the bus will be idle */
@@ -243,8 +245,13 @@ class Bus : public MemObject
*/
void addressRanges(AddrRangeList &resp, bool &snoop, int id);
- /** Occupy the bus with transmitting the packet pkt */
- void occupyBus(PacketPtr pkt);
+ /** Prepare a packet to be sent on the bus. The header finishes at tick
+ * headerTime
+ */
+ void preparePacket(PacketPtr pkt, Tick & headerTime);
+
+ /** Occupy the bus until until */
+ void occupyBus(Tick until);
/** Ask everyone on the bus what their size is
* @param id id of the busport that made the request
@@ -363,17 +370,20 @@ class Bus : public MemObject
unsigned int drain(Event *de);
Bus(const BusParams *p)
- : MemObject(p), busId(p->bus_id), clock(p->clock), width(p->width),
- tickNextIdle(0), drainEvent(NULL), busIdle(this), inRetry(false),
- maxId(0), defaultPort(NULL), funcPort(NULL), funcPortId(-4),
+ : MemObject(p), busId(p->bus_id), clock(p->clock),
+ headerCycles(p->header_cycles), width(p->width), tickNextIdle(0),
+ drainEvent(NULL), busIdle(this), inRetry(false), maxId(0),
+ defaultPort(NULL), funcPort(NULL), funcPortId(-4),
responderSet(p->responder_set), defaultBlockSize(p->block_size),
cachedBlockSize(0), cachedBlockSizeValid(false)
{
- //Both the width and clock period must be positive
+ //width, clock period, and header cycles must be positive
if (width <= 0)
fatal("Bus width must be positive\n");
if (clock <= 0)
fatal("Bus clock period must be positive\n");
+ if (headerCycles <= 0)
+ fatal("Number of header cycles must be positive\n");
clearBusCache();
clearPortCache();
}