/* * BankwiseRefreshManager.h * * Created on: Mar 9, 2014 * Author: jonny */ #ifndef BANKWISEREFRESHMANAGER_H_ #define BANKWISEREFRESHMANAGER_H_ #include "../scheduling/CommandSchedule.h" #include "../../common/dramExtension.h" #include "../TimingConfiguration.h" #include "IRefreshManager.h" namespace core { class Controller; class RefreshManagerBankwise : public IRefreshManager { public: RefreshManagerBankwise(Controller& controller); virtual ~RefreshManagerBankwise(); virtual bool hasCollision(const CommandSchedule& schedule) override; virtual void scheduleRefresh(tlm::tlm_generic_payload& payload, sc_time time) override; void reInitialize(tlm::tlm_generic_payload& payload, sc_time time) override; bool isInvalidated(tlm::tlm_generic_payload& payload,sc_time time) override; private: class RefreshManagerForBank { public: RefreshManagerForBank(Controller& controller, Bank bank); ~RefreshManagerForBank(); bool hasCollision(const CommandSchedule& schedule); void scheduleRefresh(sc_time time); void reInitialize(tlm::tlm_generic_payload& payload, sc_time time); bool isInvalidated(sc_time); private: Controller& controller; RefreshTiming& timing; Bank bank; tlm::tlm_generic_payload refreshPayload; sc_time nextPlannedRefresh; void planNextRefresh(); void setupTransaction(); }; Controller& controller; std::vector refreshManagerForBanks; }; } /* namespace controller */ #endif /* BANKWISEREFRESHMANAGER_H_ */