diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2008-02-26 02:20:08 -0500 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2008-02-26 02:20:08 -0500 |
commit | ec1a4cbbc73ecc1d7456d11c571c425e226a7d3b (patch) | |
tree | f6d238a8385a5bdcfedb39239ccd14a69ea83976 /src/mem/bus.hh | |
parent | 2e079ce038dcce2c5328d840f8b57290bef8c794 (diff) | |
download | gem5-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.hh | 22 |
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(); } |