Go to the documentation of this file.
34 #ifndef __HBM_CTRL_HH__
35 #define __HBM_CTRL_HH__
39 #include <unordered_set>
44 #include "params/HBMCtrl.hh"
110 bool row_cmd)
override;
128 Tick max_multi_cmd_split = 0)
override;
212 if (pseudo_channel == 0) {
215 assert(pseudo_channel == 1);
227 if (pseudo_channel == 0) {
230 assert(pseudo_channel == 1);
244 if (pseudo_channel == 0) {
252 virtual void init()
override;
253 virtual void startup()
override;
270 #endif //__HBM_CTRL_HH__
bool recvTimingReq(PacketPtr pkt) override
void recvMemBackdoorReq(const MemBackdoorReq &req, MemBackdoorPtr &_backdoor) override
AddrRangeList getAddrRanges() override
HBMCtrl(const HBMCtrlParams &p)
virtual bool respondEventScheduled(uint8_t pseudo_channel=0) const
Is there a respondEvent scheduled?
virtual void restartScheduler(Tick tick, uint8_t pseudo_channel=0)
restart the controller This can be used by interfaces to restart the scheduler after maintainence com...
The memory controller is a single-channel memory controller capturing the most important timing const...
Tick verifySingleCmd(Tick cmd_tick, Tick max_cmds_per_burst, bool row_cmd) override
Check for command bus contention for single cycle command.
virtual bool requestEventScheduled(uint8_t pseudo_channel=0) const
Is there a read/write burst Event scheduled?
std::unordered_multiset< Tick > colBurstTicks
This is used to ensure that the column command bandwidth does not exceed the allowable media constrai...
void recvFunctional(PacketPtr pkt) override
EventFunctionWrapper nextReqEventPC1
NextReq and Respond events for second pseudo channel.
uint64_t readQueueSizePC1
Interface to DRAM devices with media specific parameters, statistics, and functions.
uint8_t schedule(RequestorID id, uint64_t data)
Tick recvAtomic(PacketPtr pkt) override
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
uint64_t Tick
Tick count type.
DRAMInterface * pc0Int
Pointers to interfaces of the two pseudo channels pc0Int is same as MemCtrl::dram (it will be pointin...
EventFunctionWrapper respondEventPC1
HBM2 is divided into two pseudo channels which have independent data buses but share a command bus (s...
Tick verifyMultiCmd(Tick cmd_tick, Tick max_cmds_per_burst, Tick max_multi_cmd_split=0) override
Check for command bus contention for multi-cycle (2 currently) command.
bool writeQueueFullPC1(unsigned int pkt_count) const
virtual void startup() override
startup() is the final initialization call before simulation.
bool respondEventScheduled(uint8_t pseudo_channel) const override
Is there a respondEvent scheduled?
std::deque< MemPacket * > respQueue
Response queue where read packets wait after we're done working with them, but it's not time to send ...
std::deque< MemPacket * > respQueuePC1
Response queue for pkts sent to second pseudo channel The first pseudo channel uses MemCtrl::respQueu...
virtual void drainResume() override
Resume execution after a successful drain.
bool partitionedQ
This indicates if the R/W queues will be partitioned among pseudo channels.
void pruneBurstTick() override
Remove commands that have already issued from rowBurstTicks and colBurstTicks.
bool readQueueFullPC0(unsigned int pkt_count) const
Check if the read queue partition of both pseudo channels has room for more entries.
bool readQueueFullPC1(unsigned int pkt_count) const
bool respQEmpty() override
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) override
uint64_t readQueueSizePC0
Following counters are used to keep track of the entries in read/write queue for each pseudo channel ...
uint64_t writeQueueSizePC0
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::unordered_multiset< Tick > rowBurstTicks
Holds count of row commands issued in burst window starting at defined Tick.
bool requestEventScheduled(uint8_t pseudo_channel) const override
Is there a read/write burst Event scheduled?
virtual void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
void restartScheduler(Tick tick, uint8_t pseudo_channel) override
restart the controller scheduler
uint64_t writeQueueSizePC1
bool writeQueueFullPC0(unsigned int pkt_count) const
Check if the write queue partition of both pseudo channels has room for more entries.
bool scheduled() const
Determine if the current event is scheduled.
bool retryRdReqPC1
Remember if we have to retry a request for second pseudo channel.
Generated on Sun Jul 30 2023 01:56:58 for gem5 by doxygen 1.8.17