From a06bd9fc5b69d918e7256702c5e4c37ae4ce0f07 Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Wed, 27 Jan 2021 13:57:01 +0100 Subject: [PATCH] Minor changes in arbiter. --- DRAMSys/library/src/simulation/Arbiter.cpp | 51 +++++++++++----------- DRAMSys/library/src/simulation/Arbiter.h | 16 ++++--- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/DRAMSys/library/src/simulation/Arbiter.cpp b/DRAMSys/library/src/simulation/Arbiter.cpp index b833fbfe..382e3960 100644 --- a/DRAMSys/library/src/simulation/Arbiter.cpp +++ b/DRAMSys/library/src/simulation/Arbiter.cpp @@ -44,7 +44,6 @@ using namespace tlm; Arbiter::Arbiter(sc_module_name name, std::string pathToAddressMapping) : sc_module(name), payloadEventQueue(this, &Arbiter::peqCallback), - maxActiveTransactions(Configuration::getInstance().maxActiveTransactions), tCK(Configuration::getInstance().memSpec->tCK), arbitrationDelayFw(Configuration::getInstance().arbitrationDelayFw), arbitrationDelayBw(Configuration::getInstance().arbitrationDelayBw) @@ -61,10 +60,12 @@ ArbiterSimple::ArbiterSimple(sc_module_name name, std::string pathToAddressMappi Arbiter(name, pathToAddressMapping) {} ArbiterFifo::ArbiterFifo(sc_module_name name, std::string pathToAddressMapping) : - Arbiter(name, pathToAddressMapping) {} + Arbiter(name, pathToAddressMapping), + maxActiveTransactions(Configuration::getInstance().maxActiveTransactions) {} ArbiterReorder::ArbiterReorder(sc_module_name name, std::string pathToAddressMapping) : - Arbiter(name, pathToAddressMapping) {} + Arbiter(name, pathToAddressMapping), + maxActiveTransactions(Configuration::getInstance().maxActiveTransactions) {} Arbiter::~Arbiter() { @@ -73,36 +74,35 @@ Arbiter::~Arbiter() void Arbiter::end_of_elaboration() { - for (unsigned i = 0; i < tSocket.size(); i++) // initiator side - { - threadIsBusy.push_back(false); - nextThreadPayloadIDToAppend.push_back(0); - activeTransactions.push_back(0); - outstandingEndReq.push_back(nullptr); - } + // initiator side + threadIsBusy = std::vector(tSocket.size(), false); + nextThreadPayloadIDToAppend = std::vector(tSocket.size(), 0); - for (unsigned i = 0; i < iSocket.size(); i++) // channel side - { - channelIsBusy.push_back(false); - pendingRequests.push_back(std::queue()); - nextChannelPayloadIDToAppend.push_back(0); - } + // channel side + channelIsBusy = std::vector(iSocket.size(), false); + pendingRequests = std::vector>(iSocket.size(), + std::queue()); + nextChannelPayloadIDToAppend = std::vector(iSocket.size(), 0); } void ArbiterSimple::end_of_elaboration() { Arbiter::end_of_elaboration(); - for (unsigned i = 0; i < tSocket.size(); i++) // initiator side - pendingResponses.push_back(std::queue()); + // initiator side + pendingResponses = std::vector>(tSocket.size(), + std::queue()); } void ArbiterFifo::end_of_elaboration() { Arbiter::end_of_elaboration(); - for (unsigned i = 0; i < tSocket.size(); i++) // initiator side - pendingResponses.push_back(std::queue()); + // initiator side + activeTransactions = std::vector(tSocket.size(), 0); + outstandingEndReq = std::vector(tSocket.size(), nullptr); + pendingResponses = std::vector>(tSocket.size(), + std::queue()); lastEndReq = std::vector(iSocket.size(), sc_max_time()); lastEndResp = std::vector(tSocket.size(), sc_max_time()); @@ -112,11 +112,12 @@ void ArbiterReorder::end_of_elaboration() { Arbiter::end_of_elaboration(); - for (unsigned i = 0; i < tSocket.size(); i++) // initiator side - { - pendingResponses.push_back(std::set()); - nextThreadPayloadIDToReturn.push_back(0); - } + // initiator side + activeTransactions = std::vector(tSocket.size(), 0); + outstandingEndReq = std::vector(tSocket.size(), nullptr); + pendingResponses = std::vector> + (tSocket.size(), std::set()); + nextThreadPayloadIDToReturn = std::vector(tSocket.size(), 0); lastEndReq = std::vector(iSocket.size(), sc_max_time()); lastEndResp = std::vector(tSocket.size(), sc_max_time()); diff --git a/DRAMSys/library/src/simulation/Arbiter.h b/DRAMSys/library/src/simulation/Arbiter.h index 4554d49a..d124c466 100644 --- a/DRAMSys/library/src/simulation/Arbiter.h +++ b/DRAMSys/library/src/simulation/Arbiter.h @@ -78,11 +78,6 @@ protected: std::vector nextThreadPayloadIDToAppend; std::vector nextChannelPayloadIDToAppend; - std::vector activeTransactions; - const unsigned maxActiveTransactions; - - std::vector outstandingEndReq; - tlm::tlm_sync_enum nb_transport_fw(int id, tlm::tlm_generic_payload &payload, tlm::tlm_phase &phase, sc_time &fwDelay); tlm::tlm_sync_enum nb_transport_bw(int, tlm::tlm_generic_payload &payload, @@ -103,6 +98,7 @@ public: private: virtual void end_of_elaboration() override; virtual void peqCallback(tlm::tlm_generic_payload &payload, const tlm::tlm_phase &phase) override; + std::vector> pendingResponses; }; @@ -115,6 +111,11 @@ public: private: virtual void end_of_elaboration() override; virtual void peqCallback(tlm::tlm_generic_payload &payload, const tlm::tlm_phase &phase) override; + + std::vector activeTransactions; + const unsigned maxActiveTransactions; + + std::vector outstandingEndReq; std::vector> pendingResponses; std::vector lastEndReq; @@ -131,6 +132,9 @@ private: virtual void end_of_elaboration() override; virtual void peqCallback(tlm::tlm_generic_payload &payload, const tlm::tlm_phase &phase) override; + std::vector activeTransactions; + const unsigned maxActiveTransactions; + struct ThreadPayloadIDCompare { bool operator() (const tlm::tlm_generic_payload *lhs, const tlm::tlm_generic_payload *rhs) const @@ -138,6 +142,8 @@ private: return DramExtension::getThreadPayloadID(lhs) < DramExtension::getThreadPayloadID(rhs); } }; + + std::vector outstandingEndReq; std::vector> pendingResponses; std::vector lastEndReq;