minor changes in wrapper
This commit is contained in:
@@ -15,7 +15,7 @@ namespace core{
|
|||||||
|
|
||||||
struct Configuration
|
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)
|
nActivate(2)
|
||||||
{}
|
{}
|
||||||
unsigned int numberOfBanks;
|
unsigned int numberOfBanks;
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ void PowerDownManager::wakeUp(Bank bank, sc_time time)
|
|||||||
|
|
||||||
void PowerDownManager::wakeUpForRefresh(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)
|
if (powerDownState != PowerDownState::NoPowerDown)
|
||||||
{
|
{
|
||||||
sendEnd(time);
|
sendEnd(time);
|
||||||
|
|||||||
@@ -149,13 +149,11 @@ private:
|
|||||||
{
|
{
|
||||||
Bank bank = DramExtension::getExtension(payload).getBank();
|
Bank bank = DramExtension::getExtension(payload).getBank();
|
||||||
payloadsInSystem.at(bank.ID()) = payloadsInSystem.at(bank.ID()) - 1;
|
payloadsInSystem.at(bank.ID()) = payloadsInSystem.at(bank.ID()) - 1;
|
||||||
int numberOfPayloadsOnBank = payloadsInSystem.at(bank.ID());
|
|
||||||
|
|
||||||
sc_assert(numberOfPayloadsOnBank >= 0);
|
sc_assert(payloadsInSystem.at(bank.ID()) >= 0);
|
||||||
if (numberOfPayloadsOnBank == 0)
|
|
||||||
{
|
if (payloadsInSystem.at(bank.ID()) == 0)
|
||||||
controller->powerDownManager->sleep(bank, sc_time_stamp());
|
controller->powerDownManager->sleep(bank, sc_time_stamp());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheduleNextPayload(Bank bank)
|
void scheduleNextPayload(Bank bank)
|
||||||
@@ -223,46 +221,36 @@ private:
|
|||||||
{
|
{
|
||||||
recorder.recordPhase(payload, phase, sc_time_stamp());
|
recorder.recordPhase(payload, phase, sc_time_stamp());
|
||||||
|
|
||||||
|
Bank bank = DramExtension::getExtension(payload).getBank();
|
||||||
if (phase == BEGIN_RD || phase == BEGIN_WR)
|
if (phase == BEGIN_RD || phase == BEGIN_WR)
|
||||||
{
|
{
|
||||||
scheduleNextPayload(DramExtension::getExtension(payload).getBank());
|
scheduleNextPayload(bank);
|
||||||
sendToDram(payload, phase, SC_ZERO_TIME);
|
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)
|
else if (phase == END_RD || phase == END_WR)
|
||||||
{
|
{
|
||||||
recorder.recordPhase(payload, BEGIN_RESP, sc_time_stamp());
|
recorder.recordPhase(payload, BEGIN_RESP, sc_time_stamp());
|
||||||
sendToFrontend(payload, BEGIN_RESP, SC_ZERO_TIME);
|
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);
|
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()
|
void stop()
|
||||||
{
|
{
|
||||||
for(Bank bank : controller->state.bankStates.getBanks())
|
for (Bank bank : controller->state.bankStates.getBanks())
|
||||||
{
|
{
|
||||||
controller->powerDownManager->wakeUp(bank, sc_time_stamp());
|
controller->powerDownManager->wakeUp(bank, sc_time_stamp());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user