diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2013-05-30 12:54:01 -0400 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2013-05-30 12:54:01 -0400 |
commit | 2308f812ef848d027b99dd52c0900aed11260d87 (patch) | |
tree | 8f2dfe7b5345e74eb1b0b3ebb7417a5587ba5395 /src/mem/noncoherent_bus.hh | |
parent | e82996d9dad5ac38fe2c8709c05b26cf92d356e8 (diff) | |
download | gem5-2308f812ef848d027b99dd52c0900aed11260d87.tar.xz |
mem: Make the buses multi layered
This patch makes the buses multi layered, and effectively creates a
crossbar structure with distributed contention ports at the
destination ports. Before this patch, a bus could have a single
request, response and snoop response in flight at any time, and with
these changes there can be as many requests as connected slaves (bus
master ports), and as many responses as connected masters (bus slave
ports).
Together with address interleaving, this patch enables us to create
high-throughput memory interconnects, e.g. 50+ GByte/s.
Diffstat (limited to 'src/mem/noncoherent_bus.hh')
-rw-r--r-- | src/mem/noncoherent_bus.hh | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mem/noncoherent_bus.hh b/src/mem/noncoherent_bus.hh index 8fc2c40d5..e2148c60e 100644 --- a/src/mem/noncoherent_bus.hh +++ b/src/mem/noncoherent_bus.hh @@ -73,11 +73,13 @@ class NoncoherentBus : public BaseBus protected: /** - * Declare the two layers of this bus, one for requests and one + * Declare the layers of this bus, one vector for requests and one * for responses. */ - Layer<SlavePort> reqLayer; - Layer<MasterPort> respLayer; + typedef Layer<SlavePort,MasterPort> ReqLayer; + typedef Layer<MasterPort,SlavePort> RespLayer; + std::vector<ReqLayer*> reqLayers; + std::vector<RespLayer*> respLayers; /** * Declaration of the non-coherent bus slave port type, one will @@ -207,6 +209,8 @@ class NoncoherentBus : public BaseBus NoncoherentBus(const NoncoherentBusParams *p); + virtual ~NoncoherentBus(); + unsigned int drain(DrainManager *dm); /** |