added refresh checker
This commit is contained in:
@@ -29,20 +29,21 @@ bool RefreshManager::hasCollision(const CommandSchedule& schedule)
|
||||
return !(schedule.getEnd() < nextPlannedRefresh);
|
||||
}
|
||||
|
||||
bool RefreshManager::hasCollision(const ScheduledCommand& command)
|
||||
{
|
||||
return !(command.getEnd() < nextPlannedRefresh);
|
||||
}
|
||||
|
||||
void RefreshManager::scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time time)
|
||||
{
|
||||
sc_assert(!isInvalidated(payload, time));
|
||||
|
||||
ScheduledCommand nextRefresh(Command::AutoRefresh, time, timing.tRFC,
|
||||
DramExtension::getExtension(refreshPayloads[Bank(0)]));
|
||||
|
||||
if (!controller.state.bankStates.allRowBuffersAreClosed())
|
||||
{
|
||||
ScheduledCommand precharge(Command::PrechargeAll, time, controller.config.Timings.tRP,
|
||||
DramExtension::getExtension(refreshPayloads[Bank(0)]));
|
||||
|
||||
controller.getCommandChecker(Command::PrechargeAll).delayToSatisfyConstraints(precharge);
|
||||
nextRefresh.setStart(precharge.getEnd());
|
||||
|
||||
for (Bank bank : controller.getBanks())
|
||||
{
|
||||
@@ -53,11 +54,13 @@ void RefreshManager::scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time
|
||||
controller.wrapper.send(prechargeToSend, payload);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//no precharge all
|
||||
controller.state.bus.moveCommandToNextFreeSlot(nextRefresh);
|
||||
}
|
||||
|
||||
|
||||
ScheduledCommand nextRefresh(Command::AutoRefresh, time, timing.tRFC,
|
||||
DramExtension::getExtension(refreshPayloads[Bank(0)]));
|
||||
|
||||
controller.getCommandChecker(Command::AutoRefresh).delayToSatisfyConstraints(nextRefresh);
|
||||
|
||||
for (Bank bank : controller.getBanks())
|
||||
{
|
||||
tlm_generic_payload& payload = refreshPayloads[bank];
|
||||
@@ -67,11 +70,9 @@ void RefreshManager::scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time
|
||||
DramExtension::getExtension(payload));
|
||||
controller.state.change(refreshToSend);
|
||||
controller.wrapper.send(refreshToSend, payload);
|
||||
|
||||
}
|
||||
|
||||
planNextRefresh();
|
||||
|
||||
}
|
||||
|
||||
void RefreshManager::planNextRefresh()
|
||||
@@ -80,7 +81,7 @@ void RefreshManager::planNextRefresh()
|
||||
controller.wrapper.send(RefreshTrigger, nextPlannedRefresh, refreshPayloads[Bank(0)]);
|
||||
}
|
||||
|
||||
void RefreshManager::reInitialize(tlm::tlm_generic_payload& payload, sc_time time)
|
||||
void RefreshManager::reInitialize(Bank bank, sc_time time)
|
||||
{
|
||||
nextPlannedRefresh = clkAlign(time, Alignment::DOWN);
|
||||
planNextRefresh();
|
||||
|
||||
Reference in New Issue
Block a user