From f6106aeeed327d569fbf344fe4440e25bd433d9c Mon Sep 17 00:00:00 2001 From: Janik Schlemminger Date: Wed, 2 Apr 2014 17:40:11 +0200 Subject: [PATCH] minor changes in wrapper --- dram/src/core/Configuration.h | 2 +- dram/src/core/powerdown/PowerDownManager.cpp | 2 +- dram/src/simulation/controllerwrapper.h | 72 ++++++++++---------- 3 files changed, 37 insertions(+), 39 deletions(-) diff --git a/dram/src/core/Configuration.h b/dram/src/core/Configuration.h index 44f0fc60..acb2f783 100644 --- a/dram/src/core/Configuration.h +++ b/dram/src/core/Configuration.h @@ -15,7 +15,7 @@ namespace core{ struct Configuration { - Configuration(): numberOfBanks(8), burstlength(2), Timings(numberOfBanks), RefreshBankwise(true),PowerDownBankwise(false), + Configuration(): numberOfBanks(8), burstlength(2), Timings(numberOfBanks), RefreshBankwise(false),PowerDownBankwise(false), nActivate(2) {} unsigned int numberOfBanks; diff --git a/dram/src/core/powerdown/PowerDownManager.cpp b/dram/src/core/powerdown/PowerDownManager.cpp index 9c7a9ef4..f0905367 100644 --- a/dram/src/core/powerdown/PowerDownManager.cpp +++ b/dram/src/core/powerdown/PowerDownManager.cpp @@ -102,7 +102,7 @@ void PowerDownManager::wakeUp(Bank bank, sc_time time) void PowerDownManager::wakeUpForRefresh(Bank bank, sc_time time) { - //canSleep.at(bank.ID()) = false; + canSleep.at(bank.ID()) = false; if (powerDownState != PowerDownState::NoPowerDown) { sendEnd(time); diff --git a/dram/src/simulation/controllerwrapper.h b/dram/src/simulation/controllerwrapper.h index 3cb0a425..9403a7fd 100644 --- a/dram/src/simulation/controllerwrapper.h +++ b/dram/src/simulation/controllerwrapper.h @@ -149,13 +149,11 @@ private: { Bank bank = DramExtension::getExtension(payload).getBank(); payloadsInSystem.at(bank.ID()) = payloadsInSystem.at(bank.ID()) - 1; - int numberOfPayloadsOnBank = payloadsInSystem.at(bank.ID()); - sc_assert(numberOfPayloadsOnBank >= 0); - if (numberOfPayloadsOnBank == 0) - { + sc_assert(payloadsInSystem.at(bank.ID()) >= 0); + + if (payloadsInSystem.at(bank.ID()) == 0) controller->powerDownManager->sleep(bank, sc_time_stamp()); - } } void scheduleNextPayload(Bank bank) @@ -223,46 +221,36 @@ private: { recorder.recordPhase(payload, phase, sc_time_stamp()); + Bank bank = DramExtension::getExtension(payload).getBank(); if (phase == BEGIN_RD || phase == BEGIN_WR) { - scheduleNextPayload(DramExtension::getExtension(payload).getBank()); + scheduleNextPayload(bank); sendToDram(payload, phase, SC_ZERO_TIME); } - else if (phase == BEGIN_AUTO_REFRESH || phase == BEGIN_ACT || phase == BEGIN_PRE - || phase == BEGIN_PRE_ALL || phase == BEGIN_PDNA || phase == BEGIN_PDNP || phase == BEGIN_SREF) - { - sendToDram(payload, phase, SC_ZERO_TIME); - } - else if (phase == END_PDNA || phase == END_PDNP) - { - sendToDram(payload, phase, SC_ZERO_TIME); - - scheduleNextPayload(DramExtension::getExtension(payload).getBank()); - - } - else if( phase == END_SREF) - { - sendToDram(payload, phase, SC_ZERO_TIME); - controller->refreshManager->reInitialize(payload, sc_time_stamp()); - scheduleNextPayload(DramExtension::getExtension(payload).getBank()); - } - else if (phase == END_AUTO_REFRESH) - { - if (controller->powerDownManager->isActive( - DramExtension::getExtension(payload).getBank())) - { - controller->powerDownManager->sleep(DramExtension::getExtension(payload).getBank(), - sc_time_stamp()); - - } - scheduleNextPayload(DramExtension::getExtension(payload).getBank()); - } else if (phase == END_RD || phase == END_WR) { recorder.recordPhase(payload, BEGIN_RESP, sc_time_stamp()); sendToFrontend(payload, BEGIN_RESP, SC_ZERO_TIME); } - else if (phase == END_PRE || phase == END_PRE_ALL || phase == END_ACT) + else if (isIn(phase, { BEGIN_AUTO_REFRESH, BEGIN_ACT, BEGIN_PRE, BEGIN_PRE_ALL, BEGIN_PDNA, + BEGIN_PDNP, BEGIN_SREF })) + { + sendToDram(payload, phase, SC_ZERO_TIME); + } + else if (isIn(phase, {END_PDNA, END_PDNP, END_SREF})) + { + sendToDram(payload, phase, SC_ZERO_TIME); + if(phase == END_SREF) + controller->refreshManager->reInitialize(payload, sc_time_stamp()); + scheduleNextPayload(bank); + } + else if (phase == END_AUTO_REFRESH) + { + if (payloadsInSystem.at(bank.ID()) == 0) + controller->powerDownManager->sleep(bank, sc_time_stamp()); + scheduleNextPayload(DramExtension::getExtension(payload).getBank()); + } + else if (isIn(phase, { END_PRE, END_PRE_ALL, END_ACT })) { } @@ -310,9 +298,19 @@ private: debugManager.printDebugMessage(message, Sender::DramWrapper, importance); } + bool isIn(tlm_phase phase, std::vector phases) + { + for (tlm_phase p : phases) + { + if (p == phase) + return true; + } + return false; + } + void stop() { - for(Bank bank : controller->state.bankStates.getBanks()) + for (Bank bank : controller->state.bankStates.getBanks()) { controller->powerDownManager->wakeUp(bank, sc_time_stamp()); }