Minor changes in arbiter.
This commit is contained in:
@@ -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<bool>(tSocket.size(), false);
|
||||
nextThreadPayloadIDToAppend = std::vector<uint64_t>(tSocket.size(), 0);
|
||||
|
||||
for (unsigned i = 0; i < iSocket.size(); i++) // channel side
|
||||
{
|
||||
channelIsBusy.push_back(false);
|
||||
pendingRequests.push_back(std::queue<tlm_generic_payload *>());
|
||||
nextChannelPayloadIDToAppend.push_back(0);
|
||||
}
|
||||
// channel side
|
||||
channelIsBusy = std::vector<bool>(iSocket.size(), false);
|
||||
pendingRequests = std::vector<std::queue<tlm_generic_payload *>>(iSocket.size(),
|
||||
std::queue<tlm_generic_payload *>());
|
||||
nextChannelPayloadIDToAppend = std::vector<uint64_t>(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<tlm_generic_payload *>());
|
||||
// initiator side
|
||||
pendingResponses = std::vector<std::queue<tlm_generic_payload *>>(tSocket.size(),
|
||||
std::queue<tlm_generic_payload *>());
|
||||
}
|
||||
|
||||
void ArbiterFifo::end_of_elaboration()
|
||||
{
|
||||
Arbiter::end_of_elaboration();
|
||||
|
||||
for (unsigned i = 0; i < tSocket.size(); i++) // initiator side
|
||||
pendingResponses.push_back(std::queue<tlm_generic_payload *>());
|
||||
// initiator side
|
||||
activeTransactions = std::vector<unsigned int>(tSocket.size(), 0);
|
||||
outstandingEndReq = std::vector<tlm_generic_payload *>(tSocket.size(), nullptr);
|
||||
pendingResponses = std::vector<std::queue<tlm_generic_payload *>>(tSocket.size(),
|
||||
std::queue<tlm_generic_payload *>());
|
||||
|
||||
lastEndReq = std::vector<sc_time>(iSocket.size(), sc_max_time());
|
||||
lastEndResp = std::vector<sc_time>(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<tlm_generic_payload *, ThreadPayloadIDCompare>());
|
||||
nextThreadPayloadIDToReturn.push_back(0);
|
||||
}
|
||||
// initiator side
|
||||
activeTransactions = std::vector<unsigned int>(tSocket.size(), 0);
|
||||
outstandingEndReq = std::vector<tlm_generic_payload *>(tSocket.size(), nullptr);
|
||||
pendingResponses = std::vector<std::set<tlm_generic_payload *, ThreadPayloadIDCompare>>
|
||||
(tSocket.size(), std::set<tlm_generic_payload *, ThreadPayloadIDCompare>());
|
||||
nextThreadPayloadIDToReturn = std::vector<uint64_t>(tSocket.size(), 0);
|
||||
|
||||
lastEndReq = std::vector<sc_time>(iSocket.size(), sc_max_time());
|
||||
lastEndResp = std::vector<sc_time>(tSocket.size(), sc_max_time());
|
||||
|
||||
@@ -78,11 +78,6 @@ protected:
|
||||
std::vector<uint64_t> nextThreadPayloadIDToAppend;
|
||||
std::vector<uint64_t> nextChannelPayloadIDToAppend;
|
||||
|
||||
std::vector<unsigned int> activeTransactions;
|
||||
const unsigned maxActiveTransactions;
|
||||
|
||||
std::vector<tlm::tlm_generic_payload *> 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<std::queue<tlm::tlm_generic_payload *>> 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<unsigned int> activeTransactions;
|
||||
const unsigned maxActiveTransactions;
|
||||
|
||||
std::vector<tlm::tlm_generic_payload *> outstandingEndReq;
|
||||
std::vector<std::queue<tlm::tlm_generic_payload *>> pendingResponses;
|
||||
|
||||
std::vector<sc_time> 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<unsigned int> 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<tlm::tlm_generic_payload *> outstandingEndReq;
|
||||
std::vector<std::set<tlm::tlm_generic_payload*, ThreadPayloadIDCompare>> pendingResponses;
|
||||
|
||||
std::vector<sc_time> lastEndReq;
|
||||
|
||||
Reference in New Issue
Block a user