gem5 v24.0.0.0
Loading...
Searching...
No Matches
mem_ctrl.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012-2020 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Copyright (c) 2013 Amin Farmahini-Farahani
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions are
19 * met: redistributions of source code must retain the above copyright
20 * notice, this list of conditions and the following disclaimer;
21 * redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the distribution;
24 * neither the name of the copyright holders nor the names of its
25 * contributors may be used to endorse or promote products derived from
26 * this software without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 */
40
46#ifndef __MEM_CTRL_HH__
47#define __MEM_CTRL_HH__
48
49#include <deque>
50#include <string>
51#include <unordered_set>
52#include <utility>
53#include <vector>
54
55#include "base/callback.hh"
56#include "base/statistics.hh"
57#include "enums/MemSched.hh"
58#include "mem/qos/mem_ctrl.hh"
59#include "mem/qport.hh"
60#include "params/MemCtrl.hh"
61#include "sim/eventq.hh"
62
63namespace gem5
64{
65
66namespace memory
67{
68
69class MemInterface;
70class DRAMInterface;
71class NVMInterface;
72
80{
81 public:
82
84 const unsigned int burstCount;
85
87 unsigned int burstsServiced;
88
89 BurstHelper(unsigned int _burstCount)
90 : burstCount(_burstCount), burstsServiced(0)
91 { }
92};
93
99{
100 public:
101
104
107
110
113
114 const bool read;
115
117 const bool dram;
118
120 const uint8_t pseudoChannel;
121
123 const uint8_t rank;
124 const uint8_t bank;
125 const uint32_t row;
126
132 const uint16_t bankId;
133
141
146 unsigned int size;
147
153
157 uint8_t _qosValue;
158
163 inline void qosValue(const uint8_t qv) { _qosValue = qv; }
164
169 inline uint8_t qosValue() const { return _qosValue; }
170
175 inline RequestorID requestorId() const { return _requestorId; }
176
181 inline unsigned int getSize() const { return size; }
182
187 inline Addr getAddr() const { return addr; }
188
193 inline bool isRead() const { return read; }
194
199 inline bool isWrite() const { return !read; }
200
204 inline bool isDram() const { return dram; }
205
206 MemPacket(PacketPtr _pkt, bool is_read, bool is_dram, uint8_t _channel,
207 uint8_t _rank, uint8_t _bank, uint32_t _row, uint16_t bank_id,
208 Addr _addr, unsigned int _size)
209 : entryTime(curTick()), readyTime(curTick()), pkt(_pkt),
211 read(is_read), dram(is_dram), pseudoChannel(_channel), rank(_rank),
212 bank(_bank), row(_row), bankId(bank_id), addr(_addr), size(_size),
213 burstHelper(NULL), _qosValue(_pkt->qosValue())
214 { }
215
216};
217
218// The memory packets are store in a multiple dequeue structure,
219// based on their QoS priority
221
222
246class MemCtrl : public qos::MemCtrl
247{
248 protected:
249
250 // For now, make use of a queued response port to avoid dealing with
251 // flow control for the responses being sent back
253 {
254
257
258 public:
259
260 MemoryPort(const std::string& name, MemCtrl& _ctrl);
261 void disableSanityCheck();
262
263 protected:
264
265 Tick recvAtomic(PacketPtr pkt) override;
267 PacketPtr pkt, MemBackdoorPtr &backdoor) override;
268
269 void recvFunctional(PacketPtr pkt) override;
270 void recvMemBackdoorReq(const MemBackdoorReq &req,
271 MemBackdoorPtr &backdoor) override;
272
273 bool recvTimingReq(PacketPtr) override;
274
275 AddrRangeList getAddrRanges() const override;
276
277 };
278
284
289
295
302 virtual void processNextReqEvent(MemInterface* mem_intr,
303 MemPacketQueue& resp_queue,
304 EventFunctionWrapper& resp_event,
305 EventFunctionWrapper& next_req_event,
306 bool& retry_wr_req);
308
309 virtual void processRespondEvent(MemInterface* mem_intr,
310 MemPacketQueue& queue,
311 EventFunctionWrapper& resp_event,
312 bool& retry_rd_req);
314
321 bool readQueueFull(unsigned int pkt_count) const;
322
329 bool writeQueueFull(unsigned int pkt_count) const;
330
346 bool addToReadQueue(PacketPtr pkt, unsigned int pkt_count,
347 MemInterface* mem_intr);
348
360 void addToWriteQueue(PacketPtr pkt, unsigned int pkt_count,
361 MemInterface* mem_intr);
362
372 virtual Tick doBurstAccess(MemPacket* mem_pkt, MemInterface* mem_intr);
373
384 virtual void accessAndRespond(PacketPtr pkt, Tick static_latency,
385 MemInterface* mem_intr);
386
392 virtual bool packetReady(MemPacket* pkt, MemInterface* mem_intr);
393
399 virtual Tick minReadToWriteDataGap();
400
406 virtual Tick minWriteToReadDataGap();
407
420 virtual MemPacketQueue::iterator chooseNext(MemPacketQueue& queue,
421 Tick extra_col_delay, MemInterface* mem_intr);
422
432 chooseNextFRFCFS(MemPacketQueue& queue, Tick extra_col_delay,
433 MemInterface* mem_intr);
434
441 Tick getBurstWindow(Tick cmd_tick);
442
446 void printQs() const;
447
456 virtual Addr burstAlign(Addr addr, MemInterface* mem_intr) const;
457
465 virtual bool pktSizeCheck(MemPacket* mem_pkt,
466 MemInterface* mem_intr) const;
467
474
482 std::unordered_set<Addr> isInWriteQueue;
483
493
499 std::unordered_multiset<Tick> burstTicks;
500
505
507
518 const uint32_t minWritesPerSwitch;
519 const uint32_t minReadsPerSwitch;
520
525 enums::MemSched memSchedPolicy;
526
533
540
546
551
553
561
563 {
565
566 void regStats() override;
567
569
570 // All statistics that the model needs to capture
578 // Average queue lengths
581
590
594 // Average bandwidth
597
600
601 // per-requestor bytes read and written to memory
604
605 // per-requestor bytes read and written to memory rate
608
609 // per-requestor read and write serviced memory accesses
612
613 // per-requestor read and write total memory access latency
616
617 // per-requestor raed and write average memory access latency
620 };
621
623
628 std::unique_ptr<Packet> pendingDelete;
629
637 {
638 return (is_read ? readQueue : writeQueue);
639 };
640
641 virtual bool respQEmpty()
642 {
643 return respQueue.empty();
644 }
645
652 virtual bool memBusy(MemInterface* mem_intr);
653
659 virtual void nonDetermReads(MemInterface* mem_intr);
660
669 virtual bool nvmWriteBlock(MemInterface* mem_intr);
670
674 virtual void pruneBurstTick();
675
676 public:
677
678 MemCtrl(const MemCtrlParams &p);
679
685 virtual bool allIntfDrained() const;
686
687 DrainState drain() override;
688
702 virtual Tick verifySingleCmd(Tick cmd_tick, Tick max_cmds_per_burst,
703 bool row_cmd);
704
719 virtual Tick verifyMultiCmd(Tick cmd_tick, Tick max_cmds_per_burst,
720 Tick max_multi_cmd_split = 0);
721
727 virtual bool respondEventScheduled(uint8_t pseudo_channel = 0) const
728 {
729 assert(pseudo_channel == 0);
730 return respondEvent.scheduled();
731 }
732
738 virtual bool requestEventScheduled(uint8_t pseudo_channel = 0) const
739 {
740 assert(pseudo_channel == 0);
741 return nextReqEvent.scheduled();
742 }
743
753 virtual void restartScheduler(Tick tick, uint8_t pseudo_channel = 0)
754 {
755 assert(pseudo_channel == 0);
757 }
758
765 bool inReadBusState(bool next_state, const MemInterface* mem_intr) const;
766
773 bool inWriteBusState(bool next_state, const MemInterface* mem_intr) const;
774
775 Port &getPort(const std::string &if_name,
776 PortID idx=InvalidPortID) override;
777
778 virtual void init() override;
779 virtual void startup() override;
780 virtual void drainResume() override;
781
782 protected:
783
784 virtual Tick recvAtomic(PacketPtr pkt);
785 virtual Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor);
786 virtual void recvFunctional(PacketPtr pkt);
787 virtual void recvMemBackdoorReq(const MemBackdoorReq &req,
788 MemBackdoorPtr &backdoor);
789 virtual bool recvTimingReq(PacketPtr pkt);
790
791 bool recvFunctionalLogic(PacketPtr pkt, MemInterface* mem_intr);
793
794};
795
796} // namespace memory
797} // namespace gem5
798
799#endif //__MEM_CTRL_HH__
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition packet.hh:295
Ports are used to interface objects to each other.
Definition port.hh:62
const std::string name() const
Return port name (for DPRINTF).
Definition port.hh:111
A queued port is a port that has an infinite queue for outgoing packets and thus decouples the module...
Definition qport.hh:62
A burst helper helps organize and manage a packet that is larger than the memory burst size.
Definition mem_ctrl.hh:80
unsigned int burstsServiced
Number of bursts serviced so far for a system packet.
Definition mem_ctrl.hh:87
BurstHelper(unsigned int _burstCount)
Definition mem_ctrl.hh:89
const unsigned int burstCount
Number of bursts requred for a system packet.
Definition mem_ctrl.hh:84
void recvFunctional(PacketPtr pkt) override
Receive a functional request packet from the peer.
Definition mem_ctrl.cc:1490
MemoryPort(const std::string &name, MemCtrl &_ctrl)
Definition mem_ctrl.cc:1478
bool recvTimingReq(PacketPtr) override
Receive a timing request from the peer.
Definition mem_ctrl.cc:1530
AddrRangeList getAddrRanges() const override
Get a list of the non-overlapping address ranges the owner is responsible for.
Definition mem_ctrl.cc:1484
Tick recvAtomic(PacketPtr pkt) override
Receive an atomic request packet from the peer.
Definition mem_ctrl.cc:1517
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) override
Receive an atomic request packet from the peer, and optionally provide a backdoor to the data being a...
Definition mem_ctrl.cc:1523
void recvMemBackdoorReq(const MemBackdoorReq &req, MemBackdoorPtr &backdoor) override
Receive a request for a back door to a range of memory.
Definition mem_ctrl.cc:1510
The memory controller is a single-channel memory controller capturing the most important timing const...
Definition mem_ctrl.hh:247
virtual void recvFunctional(PacketPtr pkt)
Definition mem_ctrl.cc:1375
virtual void pruneBurstTick()
Remove commands that have already issued from burstTicks.
Definition mem_ctrl.cc:662
uint32_t writeLowThreshold
Definition mem_ctrl.hh:517
enums::MemSched memSchedPolicy
Memory controller configuration initialized based on parameter values.
Definition mem_ctrl.hh:525
bool recvFunctionalLogic(PacketPtr pkt, MemInterface *mem_intr)
Definition mem_ctrl.cc:1395
bool inReadBusState(bool next_state, const MemInterface *mem_intr) const
Check the current direction of the memory channel.
Definition mem_ctrl.cc:770
bool retryRdReq
Remember if we have to retry a request when available.
Definition mem_ctrl.hh:293
void printQs() const
Used for debugging to observe the contents of the queues.
Definition mem_ctrl.cc:382
const uint32_t minReadsPerSwitch
Definition mem_ctrl.hh:519
virtual void startup() override
startup() is the final initialization call before simulation.
Definition mem_ctrl.cc:110
void addToWriteQueue(PacketPtr pkt, unsigned int pkt_count, MemInterface *mem_intr)
Decode the incoming pkt, create a mem_pkt and push to the back of the write queue.
Definition mem_ctrl.cc:304
Tick recvAtomicLogic(PacketPtr pkt, MemInterface *mem_intr)
Definition mem_ctrl.cc:136
std::deque< MemPacket * > respQueue
Response queue where read packets wait after we're done working with them, but it's not time to send ...
Definition mem_ctrl.hh:492
MemoryPort port
Our incoming port, for a multi-ported controller add a crossbar in front of it.
Definition mem_ctrl.hh:283
uint32_t writeHighThreshold
Definition mem_ctrl.hh:516
std::unique_ptr< Packet > pendingDelete
Upstream caches need this packet until true is returned, so hold it for deletion until a subsequent c...
Definition mem_ctrl.hh:628
std::vector< MemPacketQueue > writeQueue
Definition mem_ctrl.hh:473
virtual Tick verifyMultiCmd(Tick cmd_tick, Tick max_cmds_per_burst, Tick max_multi_cmd_split=0)
Check for command bus contention for multi-cycle (2 currently) command.
Definition mem_ctrl.cc:706
EventFunctionWrapper respondEvent
Definition mem_ctrl.hh:313
virtual MemPacketQueue::iterator chooseNext(MemPacketQueue &queue, Tick extra_col_delay, MemInterface *mem_intr)
The memory schduler/arbiter - picks which request needs to go next, based on the specified policy suc...
Definition mem_ctrl.cc:557
virtual std::pair< MemPacketQueue::iterator, Tick > chooseNextFRFCFS(MemPacketQueue &queue, Tick extra_col_delay, MemInterface *mem_intr)
For FR-FCFS policy reorder the read/write queue depending on row buffer hits and earliest bursts avai...
Definition mem_ctrl.cc:601
std::vector< MemPacketQueue > & selQueue(bool is_read)
Select either the read or write queue.
Definition mem_ctrl.hh:636
bool readQueueFull(unsigned int pkt_count) const
Check if the read queue has room for more entries.
Definition mem_ctrl.cc:166
virtual Tick doBurstAccess(MemPacket *mem_pkt, MemInterface *mem_intr)
Actually do the burst based on media specific access function.
Definition mem_ctrl.cc:796
MemInterface * dram
Definition mem_ctrl.hh:504
virtual void processNextReqEvent(MemInterface *mem_intr, MemPacketQueue &resp_queue, EventFunctionWrapper &resp_event, EventFunctionWrapper &next_req_event, bool &retry_wr_req)
Bunch of things requires to setup "events" in gem5 When event "respondEvent" occurs for example,...
Definition mem_ctrl.cc:881
bool addToReadQueue(PacketPtr pkt, unsigned int pkt_count, MemInterface *mem_intr)
When a new read comes in, first check if the write q has a pending request to the same address....
Definition mem_ctrl.cc:189
std::unordered_multiset< Tick > burstTicks
Holds count of commands issued in burst window starting at defined Tick.
Definition mem_ctrl.hh:499
virtual bool requestEventScheduled(uint8_t pseudo_channel=0) const
Is there a read/write burst Event scheduled?
Definition mem_ctrl.hh:738
virtual Addr burstAlign(Addr addr, MemInterface *mem_intr) const
Burst-align an address.
Definition mem_ctrl.cc:1170
bool inWriteBusState(bool next_state, const MemInterface *mem_intr) const
Check the current direction of the memory channel.
Definition mem_ctrl.cc:783
const uint32_t minWritesPerSwitch
Definition mem_ctrl.hh:518
bool writeQueueFull(unsigned int pkt_count) const
Check if the write queue has room for more entries.
Definition mem_ctrl.cc:178
virtual void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition mem_ctrl.cc:100
const Tick backendLatency
Pipeline latency of the backend and PHY.
Definition mem_ctrl.hh:539
uint32_t readBufferSize
The following are basic design parameters of the memory controller, and are initialized based on para...
Definition mem_ctrl.hh:514
virtual void recvMemBackdoorReq(const MemBackdoorReq &req, MemBackdoorPtr &backdoor)
Definition mem_ctrl.cc:1384
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...
Definition mem_ctrl.hh:753
const Tick frontendLatency
Pipeline latency of the controller frontend.
Definition mem_ctrl.hh:532
virtual bool respondEventScheduled(uint8_t pseudo_channel=0) const
Is there a respondEvent scheduled?
Definition mem_ctrl.hh:727
virtual bool respQEmpty()
Definition mem_ctrl.hh:641
Tick nextReqTime
The soonest you have to start thinking about the next request is the longest access time that can occ...
Definition mem_ctrl.hh:560
virtual bool allIntfDrained() const
Ensure that all interfaced have drained commands.
Definition mem_ctrl.cc:1417
EventFunctionWrapper nextReqEvent
Definition mem_ctrl.hh:307
virtual bool packetReady(MemPacket *pkt, MemInterface *mem_intr)
Determine if there is a packet that can issue.
Definition mem_ctrl.cc:1152
virtual Tick verifySingleCmd(Tick cmd_tick, Tick max_cmds_per_burst, bool row_cmd)
Check for command bus contention for single cycle command.
Definition mem_ctrl.cc:683
virtual bool nvmWriteBlock(MemInterface *mem_intr)
Will check if all writes are for nvm interface and nvm's write resp queue is full.
Definition mem_ctrl.cc:859
virtual void processRespondEvent(MemInterface *mem_intr, MemPacketQueue &queue, EventFunctionWrapper &resp_event, bool &retry_rd_req)
Definition mem_ctrl.cc:488
virtual void accessAndRespond(PacketPtr pkt, Tick static_latency, MemInterface *mem_intr)
When a packet reaches its "readyTime" in the response Q, use the "access()" method in AbstractMemory ...
Definition mem_ctrl.cc:622
virtual Tick minWriteToReadDataGap()
Calculate the minimum delay used when scheduling a write-to-read transision.
Definition mem_ctrl.cc:1164
virtual bool recvTimingReq(PacketPtr pkt)
Definition mem_ctrl.cc:407
virtual Tick minReadToWriteDataGap()
Calculate the minimum delay used when scheduling a read-to-write transision.
Definition mem_ctrl.cc:1158
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Definition mem_ctrl.cc:1426
std::vector< MemPacketQueue > readQueue
The controller's main read and write queues, with support for QoS reordering.
Definition mem_ctrl.hh:472
bool isTimingMode
Remember if the memory system is in timing mode.
Definition mem_ctrl.hh:288
virtual Tick recvAtomic(PacketPtr pkt)
Definition mem_ctrl.cc:125
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition mem_ctrl.cc:1407
virtual bool memBusy(MemInterface *mem_intr)
Checks if the memory interface is already busy.
Definition mem_ctrl.cc:838
virtual AddrRangeList getAddrRanges()
Definition mem_ctrl.cc:1470
Tick nextBurstAt
Till when must we wait before issuing next RD/WR burst?
Definition mem_ctrl.hh:550
MemCtrl(const MemCtrlParams &p)
Definition mem_ctrl.cc:60
virtual Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor)
Definition mem_ctrl.cc:158
Tick getBurstWindow(Tick cmd_tick)
Calculate burst window aligned tick.
Definition mem_ctrl.cc:675
std::unordered_set< Addr > isInWriteQueue
To avoid iterating over the write queue to check for overlapping transactions, maintain a set of burs...
Definition mem_ctrl.hh:482
virtual bool pktSizeCheck(MemPacket *mem_pkt, MemInterface *mem_intr) const
Check if mem pkt's size is sane.
Definition mem_ctrl.cc:1176
virtual void drainResume() override
Resume execution after a successful drain.
Definition mem_ctrl.cc:1452
const Tick commandWindow
Length of a command window, used to check command bandwidth.
Definition mem_ctrl.hh:545
virtual void nonDetermReads(MemInterface *mem_intr)
Will access memory interface and select non-deterministic reads to issue.
Definition mem_ctrl.cc:866
General interface to memory device Includes functions and parameters shared across media types.
A memory packet stores packets along with the timestamp of when the packet entered the queue,...
Definition mem_ctrl.hh:99
Tick readyTime
When will request leave the controller.
Definition mem_ctrl.hh:106
const bool dram
Does this packet access DRAM?
Definition mem_ctrl.hh:117
Addr getAddr() const
Get the packet address (interface compatibility with Packet)
Definition mem_ctrl.hh:187
void qosValue(const uint8_t qv)
Set the packet QoS value (interface compatibility with Packet)
Definition mem_ctrl.hh:163
const uint8_t pseudoChannel
pseudo channel num
Definition mem_ctrl.hh:120
const uint16_t bankId
Bank id is calculated considering banks in all the ranks eg: 2 ranks each with 8 banks,...
Definition mem_ctrl.hh:132
uint8_t _qosValue
QoS value of the encapsulated packet read at queuing time.
Definition mem_ctrl.hh:157
const uint32_t row
Definition mem_ctrl.hh:125
BurstHelper * burstHelper
A pointer to the BurstHelper if this MemPacket is a split packet If not a split packet (common case),...
Definition mem_ctrl.hh:152
unsigned int size
The size of this dram packet in bytes It is always equal or smaller than the burst size.
Definition mem_ctrl.hh:146
MemPacket(PacketPtr _pkt, bool is_read, bool is_dram, uint8_t _channel, uint8_t _rank, uint8_t _bank, uint32_t _row, uint16_t bank_id, Addr _addr, unsigned int _size)
Definition mem_ctrl.hh:206
Addr addr
The starting address of the packet.
Definition mem_ctrl.hh:140
bool isDram() const
Return true if its a DRAM access.
Definition mem_ctrl.hh:204
const RequestorID _requestorId
RequestorID associated with the packet.
Definition mem_ctrl.hh:112
bool isRead() const
Return true if its a read packet (interface compatibility with Packet)
Definition mem_ctrl.hh:193
const Tick entryTime
When did request enter the controller.
Definition mem_ctrl.hh:103
const PacketPtr pkt
This comes from the outside world.
Definition mem_ctrl.hh:109
RequestorID requestorId() const
Get the packet RequestorID (interface compatibility with Packet)
Definition mem_ctrl.hh:175
unsigned int getSize() const
Get the packet size (interface compatibility with Packet)
Definition mem_ctrl.hh:181
bool isWrite() const
Return true if its a write packet (interface compatibility with Packet)
Definition mem_ctrl.hh:199
uint8_t qosValue() const
Get the packet QoS value (interface compatibility with Packet)
Definition mem_ctrl.hh:169
const uint8_t rank
Will be populated by address decoder.
Definition mem_ctrl.hh:123
The qos::MemCtrl is a base class for Memory objects which support QoS - it provides access to a set o...
Definition mem_ctrl.hh:80
uint8_t schedule(RequestorID id, uint64_t data)
Definition mem_ctrl.cc:217
A stat that calculates the per tick average of a value.
A formula for statistics that is calculated when printed.
Statistics container.
Definition group.hh:93
A simple histogram stat.
This is a simple scalar statistic, like a counter.
A vector of scalar stats.
STL deque class.
Definition stl.hh:44
STL pair class.
Definition stl.hh:58
STL vector class.
Definition stl.hh:37
DrainState
Object drain/handover states.
Definition drain.hh:75
bool scheduled() const
Determine if the current event is scheduled.
Definition eventq.hh:458
Bitfield< 0 > p
Bitfield< 3 > addr
Definition types.hh:84
std::deque< MemPacket * > MemPacketQueue
Definition mem_ctrl.hh:220
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
const PortID InvalidPortID
Definition types.hh:246
Tick curTick()
The universal simulation clock.
Definition cur_tick.hh:46
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition types.hh:245
uint64_t Tick
Tick count type.
Definition types.hh:58
uint16_t RequestorID
Definition request.hh:95
Declaration of the queued port.
Declaration of Statistics objects.
statistics::Scalar writeReqs
Definition mem_ctrl.hh:572
statistics::Scalar mergedWrBursts
Definition mem_ctrl.hh:576
statistics::Scalar readReqs
Definition mem_ctrl.hh:571
statistics::Scalar servicedByWrQ
Definition mem_ctrl.hh:575
statistics::Histogram rdPerTurnAround
Definition mem_ctrl.hh:588
statistics::Vector readPktSize
Definition mem_ctrl.hh:584
statistics::Scalar numWrRetry
Definition mem_ctrl.hh:583
statistics::Scalar numRdRetry
Definition mem_ctrl.hh:582
statistics::Formula requestorReadAvgLat
Definition mem_ctrl.hh:618
statistics::Scalar readBursts
Definition mem_ctrl.hh:573
void regStats() override
Callback to set stat parameters.
Definition mem_ctrl.cc:1279
statistics::Formula requestorWriteAvgLat
Definition mem_ctrl.hh:619
statistics::Vector requestorReadTotalLat
Definition mem_ctrl.hh:614
statistics::Vector requestorWriteTotalLat
Definition mem_ctrl.hh:615
statistics::Vector requestorWriteBytes
Definition mem_ctrl.hh:603
statistics::Formula avgGap
Definition mem_ctrl.hh:599
statistics::Scalar writeBursts
Definition mem_ctrl.hh:574
statistics::Vector writePktSize
Definition mem_ctrl.hh:585
statistics::Histogram wrPerTurnAround
Definition mem_ctrl.hh:589
statistics::Vector requestorWriteAccesses
Definition mem_ctrl.hh:611
statistics::Formula avgRdBWSys
Definition mem_ctrl.hh:595
statistics::Scalar bytesReadSys
Definition mem_ctrl.hh:592
statistics::Average avgRdQLen
Definition mem_ctrl.hh:579
statistics::Scalar neitherReadNorWriteReqs
Definition mem_ctrl.hh:577
statistics::Formula requestorReadRate
Definition mem_ctrl.hh:606
statistics::Vector requestorReadAccesses
Definition mem_ctrl.hh:610
statistics::Scalar bytesWrittenSys
Definition mem_ctrl.hh:593
statistics::Average avgWrQLen
Definition mem_ctrl.hh:580
statistics::Vector wrQLenPdf
Definition mem_ctrl.hh:587
statistics::Formula requestorWriteRate
Definition mem_ctrl.hh:607
statistics::Formula avgWrBWSys
Definition mem_ctrl.hh:596
statistics::Scalar bytesReadWrQ
Definition mem_ctrl.hh:591
statistics::Vector requestorReadBytes
Definition mem_ctrl.hh:602
statistics::Vector rdQLenPdf
Definition mem_ctrl.hh:586
Definition mem.h:38

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0