Optimized all-bank refresh management.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user