added assertions in checkers

This commit is contained in:
robert
2014-03-20 19:37:27 +01:00
parent bc9e35bd61
commit 27e209f549
3 changed files with 15 additions and 34 deletions

View File

@@ -16,14 +16,17 @@ namespace core {
void ActivateChecker::delayToSatisfyConstraints(ScheduledCommand& command) const void ActivateChecker::delayToSatisfyConstraints(ScheduledCommand& command) const
{ {
if (command.getCommand() != Activate) sc_assert(command.getCommand() == Activate);
return; ScheduledCommand lastCommandOnBank = state.getLastCommand(command.getBank());
satisfy_activateToActivate_sameBank(command);
//satisfy_activateToActivate_differentBank(command); if(lastCommandOnBank.isValidCommand())
//satisfy_nActivateWindow(command); //implies precharge to activate (tRP) and refresh to activate (tFRC)
//satisfy_prechargeToActivate(command); 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, sc_time ActivateChecker::getExecutionTime(const tlm::tlm_generic_payload& transaction,
@@ -42,15 +45,6 @@ void ActivateChecker::satisfy_activateToActivate_differentBank(ScheduledCommand&
config.Timings.tRRD)); 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 void ActivateChecker::satisfy_activateToActivate_sameBank(ScheduledCommand& command) const
{ {
ScheduledCommand lastActivateOnBank = state.getLastCommand(Activate, command.getBank()); ScheduledCommand lastActivateOnBank = state.getLastCommand(Activate, command.getBank());
@@ -60,15 +54,6 @@ void ActivateChecker::satisfy_activateToActivate_sameBank(ScheduledCommand& comm
config.Timings.tRC)); 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 void ActivateChecker::satisfy_nActivateWindow(ScheduledCommand& command) const
{ {
if (!state.nActivateWindow.isFull()) if (!state.nActivateWindow.isFull())

View File

@@ -31,10 +31,7 @@ private:
void satisfy_activateToActivate_sameBank(ScheduledCommand& command) const; void satisfy_activateToActivate_sameBank(ScheduledCommand& command) const;
void satisfy_activateToActivate_differentBank(ScheduledCommand& command) const; void satisfy_activateToActivate_differentBank(ScheduledCommand& command) const;
void satisfy_prechargeToActivate(ScheduledCommand& command) const;
void satisfy_nActivateWindow(ScheduledCommand& command) const; void satisfy_nActivateWindow(ScheduledCommand& command) const;
void satisfy_refreshToActivate(ScheduledCommand& command) const;
}; };
} /* namespace controller */ } /* namespace controller */

View File

@@ -11,17 +11,16 @@ namespace core {
void PrechargeChecker::delayToSatisfyConstraints(ScheduledCommand& command) const void PrechargeChecker::delayToSatisfyConstraints(ScheduledCommand& command) const
{ {
ScheduledCommand lastCommand = state.getLastCommand(command.getBank()); sc_assert(command.getCommand() == Precharge || command == PrechargeAll);
if(lastCommand.isValidCommand() && lastCommand.getEnd() > command.getStart()) ScheduledCommand lastCommandOnBank = state.getLastCommand(command.getBank());
{ if(lastCommandOnBank.isValidCommand())
command.delayStart(lastCommand.getEnd()-command.getStart()); sc_assert(command.getStart() >= state.getLastCommand(command.getBank()));
}
} }
sc_time PrechargeChecker::getExecutionTime(const tlm::tlm_generic_payload& payload, sc_time PrechargeChecker::getExecutionTime(const tlm::tlm_generic_payload& payload,
Command command) const Command command) const
{ {
assert(command == Precharge || command == PrechargeAll); sc_assert(command == Precharge || command == PrechargeAll);
return config.Timings.tRP; return config.Timings.tRP;
} }