diff --git a/dram/src/core/scheduling/checker/ActivateChecker.cpp b/dram/src/core/scheduling/checker/ActivateChecker.cpp index 70130f18..05c1f89a 100644 --- a/dram/src/core/scheduling/checker/ActivateChecker.cpp +++ b/dram/src/core/scheduling/checker/ActivateChecker.cpp @@ -16,14 +16,17 @@ namespace core { void ActivateChecker::delayToSatisfyConstraints(ScheduledCommand& command) const { - if (command.getCommand() != Activate) - return; - satisfy_activateToActivate_sameBank(command); - //satisfy_activateToActivate_differentBank(command); - //satisfy_nActivateWindow(command); - //satisfy_prechargeToActivate(command); + sc_assert(command.getCommand() == Activate); + ScheduledCommand lastCommandOnBank = state.getLastCommand(command.getBank()); + + if(lastCommandOnBank.isValidCommand()) + //implies precharge to activate (tRP) and refresh to activate (tFRC) + sc_assert(command.getStart() >= state.getLastCommand(command.getBank())); + + satisfy_activateToActivate_sameBank(command); + satisfy_activateToActivate_differentBank(command); + satisfy_nActivateWindow(command); - //satisfy_refreshToActivate(command); } sc_time ActivateChecker::getExecutionTime(const tlm::tlm_generic_payload& transaction, @@ -42,15 +45,6 @@ void ActivateChecker::satisfy_activateToActivate_differentBank(ScheduledCommand& config.Timings.tRRD)); } -void ActivateChecker::satisfy_refreshToActivate(ScheduledCommand& command) const -{ - ScheduledCommand lastRefresh = state.getLastCommand(Refresh); - if (lastRefresh.isValidCommand()) - command.delayStart( - delayByConstraint(lastRefresh.getEnd(), command.getStart(), - SC_ZERO_TIME)); -} - void ActivateChecker::satisfy_activateToActivate_sameBank(ScheduledCommand& command) const { ScheduledCommand lastActivateOnBank = state.getLastCommand(Activate, command.getBank()); @@ -60,15 +54,6 @@ void ActivateChecker::satisfy_activateToActivate_sameBank(ScheduledCommand& comm config.Timings.tRC)); } -void ActivateChecker::satisfy_prechargeToActivate(ScheduledCommand& command) const -{ - sc_time lastPrechargeOnBank = std::max( - state.getLastCommand(Precharge, command.getBank()).getStart(), - state.getLastCommand(PrechargeAll, command.getBank()).getStart()); - command.delayStart( - delayByConstraint(lastPrechargeOnBank, command.getStart(), config.Timings.tRC)); -} - void ActivateChecker::satisfy_nActivateWindow(ScheduledCommand& command) const { if (!state.nActivateWindow.isFull()) diff --git a/dram/src/core/scheduling/checker/ActivateChecker.h b/dram/src/core/scheduling/checker/ActivateChecker.h index 3c2dc4d4..8dabacb8 100644 --- a/dram/src/core/scheduling/checker/ActivateChecker.h +++ b/dram/src/core/scheduling/checker/ActivateChecker.h @@ -31,10 +31,7 @@ private: void satisfy_activateToActivate_sameBank(ScheduledCommand& command) const; void satisfy_activateToActivate_differentBank(ScheduledCommand& command) const; - void satisfy_prechargeToActivate(ScheduledCommand& command) const; void satisfy_nActivateWindow(ScheduledCommand& command) const; - - void satisfy_refreshToActivate(ScheduledCommand& command) const; }; } /* namespace controller */ diff --git a/dram/src/core/scheduling/checker/PrechargeChecker.cpp b/dram/src/core/scheduling/checker/PrechargeChecker.cpp index 310fd89c..8442eafc 100644 --- a/dram/src/core/scheduling/checker/PrechargeChecker.cpp +++ b/dram/src/core/scheduling/checker/PrechargeChecker.cpp @@ -11,17 +11,16 @@ namespace core { void PrechargeChecker::delayToSatisfyConstraints(ScheduledCommand& command) const { - ScheduledCommand lastCommand = state.getLastCommand(command.getBank()); - if(lastCommand.isValidCommand() && lastCommand.getEnd() > command.getStart()) - { - command.delayStart(lastCommand.getEnd()-command.getStart()); - } + sc_assert(command.getCommand() == Precharge || command == PrechargeAll); + ScheduledCommand lastCommandOnBank = state.getLastCommand(command.getBank()); + if(lastCommandOnBank.isValidCommand()) + sc_assert(command.getStart() >= state.getLastCommand(command.getBank())); } sc_time PrechargeChecker::getExecutionTime(const tlm::tlm_generic_payload& payload, Command command) const { - assert(command == Precharge || command == PrechargeAll); + sc_assert(command == Precharge || command == PrechargeAll); return config.Timings.tRP; }