diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp b/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp index fb8bee41..60d5cf53 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp +++ b/DRAMSys/library/src/controller/checker/CheckerDDR3.cpp @@ -42,11 +42,11 @@ CheckerDDR3::CheckerDDR3() SC_REPORT_FATAL("CheckerDDR3", "Wrong MemSpec chosen"); if (config.ControllerCoreRefDisable) - refreshChecker = new RefreshCheckerDDR3Dummy(); + refreshChecker = new RefreshCheckerDDR3Dummy(memSpec); else if (config.BankwiseLogic) - refreshChecker = new RefreshCheckerDDR3Bankwise(); + refreshChecker = new RefreshCheckerDDR3Bankwise(memSpec); else - refreshChecker = new RefreshCheckerDDR3(); + refreshChecker = new RefreshCheckerDDR3(memSpec); } CheckerDDR3::~CheckerDDR3() @@ -182,7 +182,7 @@ void CheckerDDR3::insert(const ScheduledCommand &scheduledCommand) else if (command == Command::REFA || command == Command::REFB) refreshChecker->insert(bank); } -//------------------------------------------------------------------------- + // TODO: max(earliestTimeToStart, ...) needed? void RefreshCheckerDDR3::delayToSatisfyACT(Bank, sc_time &earliestTimeToStart) { @@ -213,8 +213,9 @@ void RefreshCheckerDDR3::insert(Bank) timeForNextREFA += memSpec->tREFI; timeForNextPREA += memSpec->tREFI; } -//------------------------------------------------------------------------ -RefreshCheckerDDR3Bankwise::RefreshCheckerDDR3Bankwise() + +RefreshCheckerDDR3Bankwise::RefreshCheckerDDR3Bankwise(const MemSpecDDR3 *memSpec) + : RefreshCheckerDDR3Dummy(memSpec) { sc_time currentREFB = memSpec->tREFI - memSpec->clk * (memSpec->NumberOfBanks - 1); sc_time currentPRE = currentREFB - std::max(memSpec->clk * memSpec->NumberOfBanks, memSpec->tRP); diff --git a/DRAMSys/library/src/controller/checker/CheckerDDR3.h b/DRAMSys/library/src/controller/checker/CheckerDDR3.h index f4361425..b3416ea4 100644 --- a/DRAMSys/library/src/controller/checker/CheckerDDR3.h +++ b/DRAMSys/library/src/controller/checker/CheckerDDR3.h @@ -41,7 +41,7 @@ #include "../core/configuration/MemSpec.h" #include "../core/configuration/Configuration.h" -class RefreshCheckerDDR3IF; +class RefreshCheckerDDR3Dummy; class CheckerDDR3 final : public CheckerIF { @@ -61,52 +61,34 @@ private: sc_time timeForNextREFA; sc_time timeForNextPREA; - RefreshCheckerDDR3IF *refreshChecker; + RefreshCheckerDDR3Dummy *refreshChecker; // PowerDown TODO: Implement this method? //sc_time getTimeConstraintToEnterPowerDown(Command lastCmd, Command pdnCmd) const; }; -class RefreshCheckerDDR3IF +class RefreshCheckerDDR3Dummy { protected: friend class CheckerDDR3; - RefreshCheckerDDR3IF() - { - Configuration config = Configuration::getInstance(); - memSpec = dynamic_cast(config.memSpec); - if (memSpec == nullptr) - SC_REPORT_FATAL("CheckerDDR3", "Wrong MemSpec chosen"); - } - virtual ~RefreshCheckerDDR3IF() {} + RefreshCheckerDDR3Dummy(const MemSpecDDR3 *memSpec) : memSpec(memSpec) {} + virtual ~RefreshCheckerDDR3Dummy() {} - virtual void delayToSatisfyACT(Bank, sc_time &) = 0; - virtual void delayToSatisfyRD(Bank, sc_time &) = 0; - virtual void delayToSatisfyWR(Bank, sc_time &) = 0; - virtual void delayToSatisfyPRE(Bank, sc_time &) = 0; - virtual void insert(Bank) = 0; + virtual void delayToSatisfyACT(Bank, sc_time &) {} + virtual void delayToSatisfyRD(Bank, sc_time &) {} + virtual void delayToSatisfyWR(Bank, sc_time &) {} + virtual void delayToSatisfyPRE(Bank, sc_time &) {} + virtual void insert(Bank) {} const MemSpecDDR3 *memSpec; }; -class RefreshCheckerDDR3Dummy final : public RefreshCheckerDDR3IF +class RefreshCheckerDDR3 final : public RefreshCheckerDDR3Dummy { private: friend class CheckerDDR3; - RefreshCheckerDDR3Dummy() {} - - void delayToSatisfyACT(Bank, sc_time &) {} - void delayToSatisfyRD(Bank, sc_time &) {} - void delayToSatisfyWR(Bank, sc_time &) {} - void delayToSatisfyPRE(Bank, sc_time &) {} - void insert(Bank) {} -}; - -class RefreshCheckerDDR3 final : public RefreshCheckerDDR3IF -{ -private: - friend class CheckerDDR3; - RefreshCheckerDDR3() {} + RefreshCheckerDDR3(const MemSpecDDR3 *memSpec) + : RefreshCheckerDDR3Dummy(memSpec) {} void delayToSatisfyACT(Bank, sc_time &); void delayToSatisfyRD(Bank, sc_time &); @@ -118,16 +100,15 @@ private: sc_time timeForNextPREA = timeForNextREFA - memSpec->tRP; }; -class RefreshCheckerDDR3Bankwise final : public RefreshCheckerDDR3IF +class RefreshCheckerDDR3Bankwise final : public RefreshCheckerDDR3Dummy { private: friend class CheckerDDR3; - RefreshCheckerDDR3Bankwise(); + RefreshCheckerDDR3Bankwise(const MemSpecDDR3 *); void delayToSatisfyACT(Bank, sc_time &); void delayToSatisfyRD(Bank, sc_time &); void delayToSatisfyWR(Bank, sc_time &); - void delayToSatisfyPRE(Bank, sc_time &) {} void insert(Bank); std::map timesForNextREFB;