Removed RefreshCheckerIF, RefreshCheckerDummy is now used as base class.

This commit is contained in:
Lukas Steiner (2)
2019-08-20 10:11:56 +02:00
parent baa976dac4
commit 2ef1c2b189
2 changed files with 22 additions and 40 deletions

View File

@@ -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);

View File

@@ -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;