minor changes in wrapper
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<tlm_phase> 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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user