minor changes in wrapper

This commit is contained in:
Janik Schlemminger
2014-04-02 17:40:11 +02:00
parent 9b49ca2d64
commit f6106aeeed
3 changed files with 37 additions and 39 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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());
}