diff options
author | Marco Balboni <Marco.Balboni@ARM.com> | 2015-03-02 04:00:46 -0500 |
---|---|---|
committer | Marco Balboni <Marco.Balboni@ARM.com> | 2015-03-02 04:00:46 -0500 |
commit | d35dd71ab4ac44a79ac22dca82277a43cd59f3c6 (patch) | |
tree | eb42b8079289e3cef8f265556944941dc012e66c /src/mem/xbar.hh | |
parent | 7be9d4eb673b9d9b45eabfd40a56718569a2a1be (diff) | |
download | gem5-d35dd71ab4ac44a79ac22dca82277a43cd59f3c6.tar.xz |
mem: Add crossbar latencies
This patch introduces latencies in crossbar that were neglected
before. In particular, it adds three parameters in crossbar model:
front_end_latency, forward_latency, and response_latency. Along with
these parameters, three corresponding members are added:
frontEndLatency, forwardLatency, and responseLatency. The coherent
crossbar has an additional snoop_response_latency.
The latency of the request path through the xbar is set as
--> frontEndLatency + forwardLatency
In case the snoop filter is enabled, the request path latency is charged
also by look-up latency of the snoop filter.
--> frontEndLatency + SF(lookupLatency) + forwardLatency.
The latency of the response path through the xbar is set instead as
--> responseLatency.
In case of snoop response, if the response is treated as a normal response
the latency associated is again
--> responseLatency;
If instead it is forwarded as snoop response we add an additional variable
+ snoopResponseLatency
and the latency associated is
--> snoopResponseLatency;
Furthermore, this patch lets the crossbar progress on the next clock
edge after an unused retry, changing the time the crossbar considers
itself busy after sending a retry that was not acted upon.
Diffstat (limited to 'src/mem/xbar.hh')
-rw-r--r-- | src/mem/xbar.hh | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mem/xbar.hh b/src/mem/xbar.hh index f51b08da2..ed678d9d0 100644 --- a/src/mem/xbar.hh +++ b/src/mem/xbar.hh @@ -309,8 +309,15 @@ class BaseXBar : public MemObject { retry_port->sendRetrySnoopResp(); } }; - /** cycles of overhead per transaction */ - const Cycles headerCycles; + /** + * Cycles of front-end pipeline including the delay to accept the request + * and to decode the address. + */ + const Cycles frontendLatency; + /** Cycles of forward latency */ + const Cycles forwardLatency; + /** Cycles of response latency */ + const Cycles responseLatency; /** the width of the xbar in bytes */ const uint32_t width; @@ -404,8 +411,11 @@ class BaseXBar : public MemObject * headerDelay and payloadDelay fields of the packet * object with the relative number of ticks required to transmit * the header and the payload, respectively. + * + * @param pkt Packet to populate with timings + * @param header_delay Header delay to be added */ - void calcPacketTiming(PacketPtr pkt); + void calcPacketTiming(PacketPtr pkt, Tick header_delay); /** * Remember for each of the master ports of the crossbar if we got |