powerdown manager. simulation manager introduced
This commit is contained in:
@@ -6,14 +6,14 @@
|
||||
*/
|
||||
|
||||
#include "RefreshManager.h"
|
||||
#include "../Controller.h"
|
||||
#include "../ControllerCore.h"
|
||||
|
||||
using namespace tlm;
|
||||
namespace core {
|
||||
|
||||
RefreshManager::RefreshManager(Controller& controller) :
|
||||
controller(controller), timing(controller.config.Timings.refreshTimings.at(0)), nextPlannedRefresh(SC_ZERO_TIME),
|
||||
refreshPayloads(controller.config.NumberOfBanks)
|
||||
RefreshManager::RefreshManager(ControllerCore& controller) :
|
||||
controller(controller), timing(controller.config.Timings.refreshTimings.at(0)), nextPlannedRefresh(
|
||||
SC_ZERO_TIME), refreshPayloads(controller.config.NumberOfBanks)
|
||||
{
|
||||
setupTransactions();
|
||||
planNextRefresh();
|
||||
@@ -32,18 +32,17 @@ void RefreshManager::scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time
|
||||
{
|
||||
sc_assert(!isInvalidated(payload, time));
|
||||
|
||||
ScheduledCommand nextRefresh(Command::AutoRefresh, time, timing.tRFC, DramExtension::getExtension(refreshPayloads.at(0)));
|
||||
ScheduledCommand nextRefresh(Command::AutoRefresh, time, timing.tRFC,
|
||||
DramExtension::getExtension(refreshPayloads.at(0)));
|
||||
|
||||
if (!controller.state.bankStates.allRowBuffersAreClosed())
|
||||
{
|
||||
ScheduledCommand precharge(Command::PrechargeAll, time,
|
||||
controller.config.Timings.tRP, DramExtension::getExtension(refreshPayloads.at(0)));
|
||||
|
||||
ScheduledCommand precharge(Command::PrechargeAll, time, controller.config.Timings.tRP,
|
||||
DramExtension::getExtension(refreshPayloads.at(0)));
|
||||
|
||||
controller.getCommandChecker(Command::PrechargeAll).delayToSatisfyConstraints(precharge);
|
||||
nextRefresh.setStart(precharge.getEnd());
|
||||
|
||||
|
||||
for (tlm::tlm_generic_payload& payload : refreshPayloads)
|
||||
{
|
||||
ScheduledCommand prechargeToSend(Command::PrechargeAll, precharge.getStart(),
|
||||
@@ -52,11 +51,15 @@ void RefreshManager::scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time
|
||||
controller.wrapper.send(prechargeToSend, payload);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
//no precharge all
|
||||
controller.state.bus.moveCommandToNextFreeSlot(nextRefresh);
|
||||
}
|
||||
for (tlm::tlm_generic_payload& payload : refreshPayloads)
|
||||
{
|
||||
ScheduledCommand refreshToSend(Command::AutoRefresh, nextRefresh.getStart(),
|
||||
timing.tRFC, DramExtension::getExtension(payload));
|
||||
ScheduledCommand refreshToSend(Command::AutoRefresh, nextRefresh.getStart(), timing.tRFC,
|
||||
DramExtension::getExtension(payload));
|
||||
controller.state.change(refreshToSend);
|
||||
controller.wrapper.send(refreshToSend, payload);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user