From 0d09222ab52ea241f56fef202d6b94545a97d0e6 Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Thu, 13 Apr 2023 11:07:55 +0200 Subject: [PATCH] Implement cache into checker. --- .../DRAMSys/controller/checker/CheckerDDR4.cpp | 10 ++++++++++ .../DRAMSys/controller/checker/CheckerDDR4.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp index ff2a56c9..3ce6dc91 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp @@ -71,6 +71,12 @@ CheckerDDR4::CheckerDDR4(const Configuration& config) sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const { + if (auto hit = cache.find(&payload); hit != cache.end()) + { + if (hit->second.first == command) + return hit->second.second; + } + Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); @@ -454,6 +460,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandOnBus != sc_max_time()) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandOnBus + memSpec->tCK); + cache.insert_or_assign(&payload, std::pair{command, earliestTimeToStart}); + return earliestTimeToStart; } @@ -478,4 +486,6 @@ void CheckerDDR4::insert(Command command, const tlm_generic_payload& payload) last4Activates[rank.ID()].pop(); last4Activates[rank.ID()].push(sc_time_stamp()); } + + cache.clear(); } diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h index 2c603d7c..364e9427 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h @@ -41,6 +41,8 @@ #include #include +#include +#include class CheckerDDR4 final : public CheckerIF { @@ -73,6 +75,8 @@ private: sc_core::sc_time tRDPDEN; sc_core::sc_time tWRPDEN; sc_core::sc_time tWRAPDEN; + + mutable std::unordered_map> cache; }; #endif // CHECKERDDR4_H