|
gem5
v21.2.1.1
|
Rank class includes a vector of banks. More...
Public Member Functions | |
| Rank (const DRAMInterfaceParams &_p, int _rank, DRAMInterface &_dram) | |
| const std::string | name () const |
| void | startup (Tick ref_tick) |
| Kick off accounting for power and refresh states and schedule initial refresh. More... | |
| void | suspend () |
| Stop the refresh events. More... | |
| bool | inRefIdleState () const |
| Check if there is no refresh and no preparation of refresh ongoing i.e. More... | |
| bool | inPwrIdleState () const |
| Check if the current rank has all banks closed and is not in a low power state. More... | |
| bool | forceSelfRefreshExit () const |
| Trigger a self-refresh exit if there are entries enqueued Exit if there are any read entries regardless of the bus state. More... | |
| bool | isQueueEmpty () const |
| Check if the command queue of current rank is idle. More... | |
| void | checkDrainDone () |
| Let the rank check if it was waiting for requests to drain to allow it to transition states. More... | |
| void | flushCmdList () |
| Push command out of cmdList queue that are scheduled at or before curTick() to DRAMPower library All commands before curTick are guaranteed to be complete and can safely be flushed. More... | |
| void | computeStats () |
| Computes stats just prior to dump event. More... | |
| void | resetStats () |
| Reset stats on a stats event. More... | |
| void | powerDownSleep (PowerState pwr_state, Tick tick) |
| Schedule a transition to power-down (sleep) More... | |
| void | scheduleWakeUpEvent (Tick exit_delay) |
| schedule and event to wake-up from power-down or self-refresh and update bank timing parameters More... | |
| void | processWriteDoneEvent () |
| void | processActivateEvent () |
| void | processPrechargeEvent () |
| void | processRefreshEvent () |
| void | processPowerEvent () |
| void | processWakeUpEvent () |
Public Member Functions inherited from gem5::EventManager | |
| EventQueue * | eventQueue () const |
| void | schedule (Event &event, Tick when) |
| void | deschedule (Event &event) |
| void | reschedule (Event &event, Tick when, bool always=false) |
| void | schedule (Event *event, Tick when) |
| void | deschedule (Event *event) |
| void | reschedule (Event *event, Tick when, bool always=false) |
| void | wakeupEventQueue (Tick when=(Tick) -1) |
| This function is not needed by the usual gem5 event loop but may be necessary in derived EventQueues which host gem5 on other schedulers. More... | |
| void | setCurTick (Tick newVal) |
| EventManager (EventManager &em) | |
| Event manger manages events in the event queue. More... | |
| EventManager (EventManager *em) | |
| EventManager (EventQueue *eq) | |
Public Attributes | |
| PowerState | pwrState |
| Current power state. More... | |
| RefreshState | refreshState |
| current refresh state More... | |
| bool | inLowPowerState |
| rank is in or transitioning to power-down or self-refresh More... | |
| uint8_t | rank |
| Current Rank index. More... | |
| uint32_t | readEntries |
| Track number of packets in read queue going to this rank. More... | |
| uint32_t | writeEntries |
| Track number of packets in write queue going to this rank. More... | |
| uint8_t | outstandingEvents |
| Number of ACT, RD, and WR events currently scheduled Incremented when a refresh event is started as well Used to determine when a low-power state can be entered. More... | |
| Tick | wakeUpAllowedAt |
| delay low-power exit until this requirement is met More... | |
| DRAMPower | power |
| One DRAMPower instance per rank. More... | |
| std::vector< Command > | cmdList |
| List of commands issued, to be sent to DRAMPpower at refresh and stats dump. More... | |
| std::vector< Bank > | banks |
| Vector of Banks. More... | |
| unsigned int | numBanksActive |
| To track number of banks which are currently active for this rank. More... | |
| std::deque< Tick > | actTicks |
| List to keep track of activate ticks. More... | |
| Tick | lastBurstTick |
| Track when we issued the last read/write burst. More... | |
| EventFunctionWrapper | writeDoneEvent |
| EventFunctionWrapper | activateEvent |
| EventFunctionWrapper | prechargeEvent |
| EventFunctionWrapper | refreshEvent |
| EventFunctionWrapper | powerEvent |
| EventFunctionWrapper | wakeUpEvent |
Protected Attributes | |
| RankStats | stats |
Protected Attributes inherited from gem5::EventManager | |
| EventQueue * | eventq |
| A pointer to this object's event queue. More... | |
Private Member Functions | |
| void | updatePowerStats () |
| Function to update Power Stats. More... | |
| void | schedulePowerEvent (PowerState pwr_state, Tick tick) |
| Schedule a power state transition in the future, and potentially override an already scheduled transition. More... | |
Private Attributes | |
| DRAMInterface & | dram |
| A reference to the parent DRAMInterface instance. More... | |
| PowerState | pwrStateTrans |
| Since we are taking decisions out of order, we need to keep track of what power transition is happening at what time. More... | |
| PowerState | pwrStatePostRefresh |
| Previous low-power state, which will be re-entered after refresh. More... | |
| Tick | pwrStateTick |
| Track when we transitioned to the current power state. More... | |
| Tick | refreshDueAt |
| Keep track of when a refresh is due. More... | |
Rank class includes a vector of banks.
Refresh and Power state machines are defined per rank. Events required to change the state of the refresh and power state machine are scheduled per rank. This class allows the implementation of rank-wise refresh and rank-wise power-down.
Definition at line 472 of file mem_interface.hh.
| gem5::memory::DRAMInterface::Rank::Rank | ( | const DRAMInterfaceParams & | _p, |
| int | _rank, | ||
| DRAMInterface & | _dram | ||
| ) |
Definition at line 1127 of file mem_interface.cc.
References processWriteDoneEvent().
| void gem5::memory::DRAMInterface::Rank::checkDrainDone | ( | ) |
Let the rank check if it was waiting for requests to drain to allow it to transition states.
Definition at line 1201 of file mem_interface.cc.
References gem5::curTick(), DPRINTF, gem5::memory::DRAMInterface::REF_DRAIN, gem5::memory::DRAMInterface::REF_PD_EXIT, and gem5::EventManager::schedule().
| void gem5::memory::DRAMInterface::Rank::computeStats | ( | ) |
Computes stats just prior to dump event.
Definition at line 1820 of file mem_interface.cc.
References gem5::curTick(), DPRINTF, and gem5::memory::DRAMInterface::stats.
| void gem5::memory::DRAMInterface::Rank::flushCmdList | ( | ) |
Push command out of cmdList queue that are scheduled at or before curTick() to DRAMPower library All commands before curTick are guaranteed to be complete and can safely be flushed.
Definition at line 1216 of file mem_interface.cc.
References gem5::memory::DRAMInterface::Command::bank, gem5::curTick(), gem5::divCeil(), gem5::memory::DRAMInterface::sortTime(), gem5::memory::DRAMInterface::Command::timeStamp, and gem5::memory::DRAMInterface::Command::type.
| bool gem5::memory::DRAMInterface::Rank::forceSelfRefreshExit | ( | ) | const |
Trigger a self-refresh exit if there are entries enqueued Exit if there are any read entries regardless of the bus state.
If we are currently issuing write commands, exit if we have any write commands enqueued as well. Could expand this in the future to analyze state of entire queue if needed.
Definition at line 1843 of file mem_interface.cc.
|
inline |
Check if the current rank has all banks closed and is not in a low power state.
| Return | true if the rank is idle from a bank and power point of view |
Definition at line 626 of file mem_interface.hh.
References gem5::memory::DRAMInterface::PWR_IDLE, and pwrState.
|
inline |
Check if there is no refresh and no preparation of refresh ongoing i.e.
the refresh state machine is in idle
| Return | true if the rank is idle from a refresh point of view |
Definition at line 617 of file mem_interface.hh.
References gem5::memory::DRAMInterface::REF_IDLE, and refreshState.
Referenced by gem5::memory::DRAMInterface::doBurstAccess(), and gem5::memory::DRAMInterface::respondEvent().
| bool gem5::memory::DRAMInterface::Rank::isQueueEmpty | ( | ) | const |
Check if the command queue of current rank is idle.
| Return | true if the there are no commands in Q. Bus direction determines queue checked. |
Definition at line 1190 of file mem_interface.cc.
Referenced by gem5::memory::DRAMInterface::respondEvent().
|
inline |
Definition at line 596 of file mem_interface.hh.
References gem5::csprintf(), and rank.
| void gem5::memory::DRAMInterface::Rank::powerDownSleep | ( | PowerState | pwr_state, |
| Tick | tick | ||
| ) |
Schedule a transition to power-down (sleep)
| pwr_state | Power state to transition to |
| tick | Absolute tick when transition should take place |
Definition at line 1523 of file mem_interface.cc.
References gem5::divCeil(), DPRINTF, gem5::memory::DRAMInterface::PWR_ACT_PDN, gem5::memory::DRAMInterface::PWR_PRE_PDN, gem5::memory::DRAMInterface::PWR_REF, gem5::memory::DRAMInterface::PWR_SREF, and gem5::Clocked::tick.
Referenced by gem5::memory::DRAMInterface::respondEvent().
| void gem5::memory::DRAMInterface::Rank::processActivateEvent | ( | ) |
Definition at line 1244 of file mem_interface.cc.
References gem5::curTick(), and gem5::memory::DRAMInterface::PWR_ACT.
| void gem5::memory::DRAMInterface::Rank::processPowerEvent | ( | ) |
Definition at line 1644 of file mem_interface.cc.
References gem5::curTick(), DPRINTF, gem5::Drained, gem5::Draining, gem5::memory::DRAMInterface::PWR_ACT, gem5::memory::DRAMInterface::PWR_ACT_PDN, gem5::memory::DRAMInterface::PWR_IDLE, gem5::memory::DRAMInterface::PWR_PRE_PDN, gem5::memory::DRAMInterface::PWR_REF, gem5::memory::DRAMInterface::PWR_SREF, gem5::memory::DRAMInterface::REF_IDLE, gem5::memory::DRAMInterface::REF_PD_EXIT, gem5::memory::DRAMInterface::REF_PRE, gem5::memory::DRAMInterface::REF_SREF_EXIT, gem5::memory::DRAMInterface::REF_START, gem5::EventManager::schedule(), and gem5::memory::DRAMInterface::stats.
| void gem5::memory::DRAMInterface::Rank::processPrechargeEvent | ( | ) |
Definition at line 1254 of file mem_interface.cc.
References gem5::curTick(), DPRINTF, gem5::memory::DRAMInterface::PWR_ACT, gem5::memory::DRAMInterface::PWR_IDLE, and gem5::memory::DRAMInterface::PWR_PRE_PDN.
| void gem5::memory::DRAMInterface::Rank::processRefreshEvent | ( | ) |
Definition at line 1296 of file mem_interface.cc.
References gem5::ArmISA::b, gem5::curTick(), gem5::divCeil(), DPRINTF, gem5::Drained, gem5::Draining, fatal, gem5::memory::MemInterface::Bank::NO_ROW, gem5::memory::DRAMInterface::PWR_IDLE, gem5::memory::DRAMInterface::PWR_PRE_PDN, gem5::memory::DRAMInterface::PWR_REF, gem5::memory::DRAMInterface::REF_DRAIN, gem5::memory::DRAMInterface::REF_IDLE, gem5::memory::DRAMInterface::REF_PD_EXIT, gem5::memory::DRAMInterface::REF_PRE, gem5::memory::DRAMInterface::REF_RUN, gem5::memory::DRAMInterface::REF_SREF_EXIT, gem5::memory::DRAMInterface::REF_START, and gem5::EventManager::schedule().
| void gem5::memory::DRAMInterface::Rank::processWakeUpEvent | ( | ) |
| void gem5::memory::DRAMInterface::Rank::processWriteDoneEvent | ( | ) |
Definition at line 1285 of file mem_interface.cc.
Referenced by Rank().
| void gem5::memory::DRAMInterface::Rank::resetStats | ( | ) |
Reset stats on a stats event.
Definition at line 1833 of file mem_interface.cc.
References gem5::curTick(), and gem5::divCeil().
|
private |
Schedule a power state transition in the future, and potentially override an already scheduled transition.
| pwr_state | Power state to transition to |
| tick | Tick when transition should take place |
Definition at line 1502 of file mem_interface.cc.
References gem5::curTick(), DPRINTF, panic, gem5::EventManager::schedule(), and gem5::Clocked::tick.
| void gem5::memory::DRAMInterface::Rank::scheduleWakeUpEvent | ( | Tick | exit_delay | ) |
schedule and event to wake-up from power-down or self-refresh and update bank timing parameters
| exit_delay | Relative tick defining the delay required between low-power exit and the next command |
Definition at line 1574 of file mem_interface.cc.
References gem5::ArmISA::b, gem5::curTick(), gem5::divCeil(), DPRINTF, gem5::memory::DRAMInterface::PWR_ACT_PDN, gem5::memory::DRAMInterface::PWR_IDLE, gem5::memory::DRAMInterface::PWR_PRE_PDN, gem5::memory::DRAMInterface::PWR_SREF, gem5::memory::DRAMInterface::REF_PD_EXIT, and gem5::EventManager::schedule().
Referenced by gem5::memory::DRAMInterface::doBurstAccess().
| void gem5::memory::DRAMInterface::Rank::startup | ( | Tick | ref_tick | ) |
Kick off accounting for power and refresh states and schedule initial refresh.
| ref_tick | Tick for first refresh |
Definition at line 1166 of file mem_interface.cc.
References gem5::curTick(), and gem5::EventManager::schedule().
| void gem5::memory::DRAMInterface::Rank::suspend | ( | ) |
Stop the refresh events.
Definition at line 1178 of file mem_interface.cc.
References gem5::EventManager::deschedule(), and gem5::memory::DRAMInterface::PWR_IDLE.
|
private |
Function to update Power Stats.
Definition at line 1777 of file mem_interface.cc.
References gem5::curTick(), gem5::divCeil(), gem5::sim_clock::Frequency, and gem5::memory::DRAMInterface::stats.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::activateEvent |
Definition at line 693 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank(), and gem5::memory::DRAMInterface::respondEvent().
| std::deque<Tick> gem5::memory::DRAMInterface::Rank::actTicks |
List to keep track of activate ticks.
Definition at line 586 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank().
| std::vector<Bank> gem5::memory::DRAMInterface::Rank::banks |
Vector of Banks.
Each rank is made of several devices which in term are made from several banks.
Definition at line 577 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank(), gem5::memory::DRAMInterface::doBurstAccess(), and gem5::memory::DRAMInterface::prechargeBank().
| std::vector<Command> gem5::memory::DRAMInterface::Rank::cmdList |
List of commands issued, to be sent to DRAMPpower at refresh and stats dump.
Keep commands here since commands to different banks are added out of order. Will only pass commands up to curTick() to DRAMPower after sorting.
Definition at line 571 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank(), gem5::memory::DRAMInterface::doBurstAccess(), and gem5::memory::DRAMInterface::prechargeBank().
|
private |
A reference to the parent DRAMInterface instance.
Definition at line 479 of file mem_interface.hh.
| bool gem5::memory::DRAMInterface::Rank::inLowPowerState |
rank is in or transitioning to power-down or self-refresh
Definition at line 531 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess().
| Tick gem5::memory::DRAMInterface::Rank::lastBurstTick |
Track when we issued the last read/write burst.
Definition at line 591 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess().
| unsigned int gem5::memory::DRAMInterface::Rank::numBanksActive |
To track number of banks which are currently active for this rank.
Definition at line 583 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank(), and gem5::memory::DRAMInterface::prechargeBank().
| uint8_t gem5::memory::DRAMInterface::Rank::outstandingEvents |
Number of ACT, RD, and WR events currently scheduled Incremented when a refresh event is started as well Used to determine when a low-power state can be entered.
Definition at line 553 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess(), gem5::memory::DRAMInterface::prechargeBank(), and gem5::memory::DRAMInterface::respondEvent().
| DRAMPower gem5::memory::DRAMInterface::Rank::power |
One DRAMPower instance per rank.
Definition at line 563 of file mem_interface.hh.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::powerEvent |
Definition at line 702 of file mem_interface.hh.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::prechargeEvent |
Definition at line 696 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::checkRefreshState(), gem5::memory::DRAMInterface::prechargeBank(), and gem5::memory::DRAMInterface::respondEvent().
| PowerState gem5::memory::DRAMInterface::Rank::pwrState |
Current power state.
Definition at line 521 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess(), inPwrIdleState(), and gem5::memory::DRAMInterface::respondEvent().
|
private |
Previous low-power state, which will be re-entered after refresh.
Definition at line 490 of file mem_interface.hh.
|
private |
Track when we transitioned to the current power state.
Definition at line 495 of file mem_interface.hh.
|
private |
Since we are taking decisions out of order, we need to keep track of what power transition is happening at what time.
Definition at line 485 of file mem_interface.hh.
| uint8_t gem5::memory::DRAMInterface::Rank::rank |
Current Rank index.
Definition at line 536 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::activateBank(), name(), and gem5::memory::DRAMInterface::prechargeBank().
| uint32_t gem5::memory::DRAMInterface::Rank::readEntries |
Track number of packets in read queue going to this rank.
Definition at line 541 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::respondEvent().
|
private |
Keep track of when a refresh is due.
Definition at line 500 of file mem_interface.hh.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::refreshEvent |
Definition at line 699 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::checkRefreshState().
| RefreshState gem5::memory::DRAMInterface::Rank::refreshState |
current refresh state
Definition at line 526 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::checkRefreshState(), and inRefIdleState().
|
protected |
Definition at line 708 of file mem_interface.hh.
| Tick gem5::memory::DRAMInterface::Rank::wakeUpAllowedAt |
delay low-power exit until this requirement is met
Definition at line 558 of file mem_interface.hh.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::wakeUpEvent |
Definition at line 705 of file mem_interface.hh.
| EventFunctionWrapper gem5::memory::DRAMInterface::Rank::writeDoneEvent |
Definition at line 690 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess().
| uint32_t gem5::memory::DRAMInterface::Rank::writeEntries |
Track number of packets in write queue going to this rank.
Definition at line 546 of file mem_interface.hh.
Referenced by gem5::memory::DRAMInterface::doBurstAccess().