added assertions in checkers
This commit is contained in:
@@ -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())
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user