Optimized all-bank refresh management.

This commit is contained in:
Lukas Steiner
2021-09-07 13:58:23 +02:00
parent 56fe13dbce
commit 098b33cb8f

View File

@@ -170,7 +170,12 @@ sc_time RefreshManagerAllBank::start()
if (activatedBanks > 0)
nextCommand = Command::PREA;
else
nextCommand = Command::RFMAB;
{
if (flexibilityCounter > maxPulledin)
nextCommand = Command::REFA;
else
nextCommand = Command::RFMAB;
}
timeToSchedule = checker->timeToSatisfyConstraints(nextCommand, &refreshPayload);
return timeToSchedule;
@@ -203,15 +208,20 @@ void RefreshManagerAllBank::updateState(Command command)
}
else
{
if (state == State::Pulledin)
if (sc_time_stamp() < timeForNextTrigger) // RFM through REFA
flexibilityCounter--;
else
state = State::Pulledin;
if (flexibilityCounter == maxPulledin)
{
state = State::Regular;
timeForNextTrigger += memSpec->getRefreshIntervalAB();
if (state == State::Pulledin)
flexibilityCounter--;
else
state = State::Pulledin;
if (flexibilityCounter == maxPulledin)
{
state = State::Regular;
timeForNextTrigger += memSpec->getRefreshIntervalAB();
}
}
}
break;