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.py | |
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.py')
-rw-r--r-- | src/mem/XBar.py | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/src/mem/XBar.py b/src/mem/XBar.py index 2aeefe132..64910ed72 100644 --- a/src/mem/XBar.py +++ b/src/mem/XBar.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012 ARM Limited +# Copyright (c) 2012, 2015 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -49,10 +49,29 @@ class BaseXBar(MemObject): type = 'BaseXBar' abstract = True cxx_header = "mem/xbar.hh" - slave = VectorSlavePort("vector port for connecting masters") - master = VectorMasterPort("vector port for connecting slaves") - header_cycles = Param.Cycles(1, "cycles of overhead per transaction") - width = Param.Unsigned(8, "xbar width (bytes)") + + slave = VectorSlavePort("Vector port for connecting masters") + master = VectorMasterPort("Vector port for connecting slaves") + + # Latencies governing the time taken for the variuos paths a + # packet has through the crossbar. Note that the crossbar itself + # does not add the latency due to assumptions in the coherency + # mechanism. Instead the latency is annotated on the packet and + # left to the neighbouring modules. + # + # A request incurs the frontend latency, possibly snoop filter + # lookup latency, and forward latency. A response incurs the + # response latency. Frontend latency encompasses arbitration and + # deciding what to do when a request arrives. the forward latency + # is the latency involved once a decision is made to forward the + # request. The response latency, is similar to the forward + # latency, but for responses rather than requests. + frontend_latency = Param.Cycles(3, "Frontend latency") + forward_latency = Param.Cycles(4, "Forward latency") + response_latency = Param.Cycles(2, "Response latency") + + # Width governing the throughput of the crossbar + width = Param.Unsigned(8, "Datapath width per port (bytes)") # The default port can be left unconnected, or be used to connect # a default slave port @@ -74,12 +93,21 @@ class CoherentXBar(BaseXBar): type = 'CoherentXBar' cxx_header = "mem/coherent_xbar.hh" + # The coherent crossbar additionally has snoop responses that are + # forwarded after a specific latency. + snoop_response_latency = Param.Cycles(4, "Snoop response latency") + + # An optional snoop filter + snoop_filter = Param.SnoopFilter(NULL, "Selected snoop filter") + system = Param.System(Parent.any, "System that the crossbar belongs to.") - snoop_filter = Param.SnoopFilter(NULL, "Selected snoop filter.") class SnoopFilter(SimObject): type = 'SnoopFilter' cxx_header = "mem/snoop_filter.hh" - lookup_latency = Param.Cycles(3, "lookup latency (cycles)") + + # Lookup latency of the snoop filter, added to requests that pass + # through a coherent crossbar. + lookup_latency = Param.Cycles(1, "Lookup latency") system = Param.System(Parent.any, "System that the crossbar belongs to.") |