Fix issuance of commands in half-cylces in HBM3
This commit is contained in:
@@ -760,6 +760,10 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic
|
||||
SC_REPORT_FATAL("CheckerHBM3", "Unknown command!");
|
||||
}
|
||||
|
||||
// Don't issue commands at half cycles.
|
||||
if (command != Command::PREAB && command != Command::PREPB && !isFullCycle(earliestTimeToStart))
|
||||
earliestTimeToStart += memSpec->tCK / 2;
|
||||
|
||||
return earliestTimeToStart;
|
||||
}
|
||||
|
||||
@@ -794,3 +798,9 @@ void CheckerHBM3::insert(Command command, const tlm_generic_payload &payload)
|
||||
if (command == Command::REFPB)
|
||||
bankwiseRefreshCounter[rank.ID()] = (bankwiseRefreshCounter[rank.ID()] + 1) % memSpec->banksPerRank;
|
||||
}
|
||||
|
||||
bool CheckerHBM3::isFullCycle(const sc_core::sc_time& time) const
|
||||
{
|
||||
sc_time aligedAtHalfCycle = std::floor((time * 2 / memSpec->tCK + 0.5)) / 2 * memSpec->tCK;
|
||||
return aligedAtHalfCycle % memSpec->tCK == SC_ZERO_TIME;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,8 @@ public:
|
||||
void insert(Command command, const tlm::tlm_generic_payload& payload) override;
|
||||
|
||||
private:
|
||||
bool isFullCycle(const sc_core::sc_time& time) const;
|
||||
|
||||
const MemSpecHBM3 *memSpec;
|
||||
|
||||
std::vector<std::vector<sc_core::sc_time>> lastScheduledByCommandAndBank;
|
||||
|
||||
Reference in New Issue
Block a user