Removed RefreshCheckerIF, RefreshCheckerDummy is now used as base class.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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<MemSpecDDR3 *>(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<Bank, sc_time> timesForNextREFB;
|
||||
|
||||
Reference in New Issue
Block a user