gem5  v22.1.0.0
base.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2013, 2015-2016, 2018-2019 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) 2003-2005 The Regents of The University of Michigan
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_CACHE_BASE_HH__
47 #define __MEM_CACHE_BASE_HH__
48 
49 #include <cassert>
50 #include <cstdint>
51 #include <string>
52 
53 #include "base/addr_range.hh"
54 #include "base/compiler.hh"
55 #include "base/statistics.hh"
56 #include "base/trace.hh"
57 #include "base/types.hh"
58 #include "debug/Cache.hh"
59 #include "debug/CachePort.hh"
60 #include "enums/Clusivity.hh"
61 #include "mem/cache/cache_blk.hh"
63 #include "mem/cache/mshr_queue.hh"
64 #include "mem/cache/tags/base.hh"
65 #include "mem/cache/write_queue.hh"
67 #include "mem/packet.hh"
68 #include "mem/packet_queue.hh"
69 #include "mem/qport.hh"
70 #include "mem/request.hh"
71 #include "params/WriteAllocator.hh"
72 #include "sim/clocked_object.hh"
73 #include "sim/eventq.hh"
74 #include "sim/probe/probe.hh"
75 #include "sim/serialize.hh"
76 #include "sim/sim_exit.hh"
77 #include "sim/system.hh"
78 
79 namespace gem5
80 {
81 
83 namespace prefetch
84 {
85  class Base;
86 }
87 class MSHR;
88 class RequestPort;
89 class QueueEntry;
90 struct BaseCacheParams;
91 
95 class BaseCache : public ClockedObject
96 {
97  protected:
102  {
105  };
106 
107  public:
112  {
117  };
118 
124  struct DataUpdate
125  {
129  bool isSecure;
134 
135  DataUpdate(Addr _addr, bool is_secure)
136  : addr(_addr), isSecure(is_secure), oldData(), newData()
137  {
138  }
139  };
140 
141  protected:
142 
153  {
154 
155  public:
156 
161  void schedSendEvent(Tick time)
162  {
163  DPRINTF(CachePort, "Scheduling send event at %llu\n", time);
164  reqQueue.schedSendEvent(time);
165  }
166 
167  protected:
168 
169  CacheRequestPort(const std::string &_name, BaseCache *_cache,
170  ReqPacketQueue &_reqQueue,
171  SnoopRespPacketQueue &_snoopRespQueue) :
172  QueuedRequestPort(_name, _cache, _reqQueue, _snoopRespQueue)
173  { }
174 
180  virtual bool isSnooping() const { return true; }
181  };
182 
190  {
191 
192  protected:
193 
196 
197  public:
198 
200  SnoopRespPacketQueue &snoop_resp_queue,
201  const std::string &label) :
203  snoopRespQueue(snoop_resp_queue) { }
204 
210  virtual void sendDeferredPacket();
211 
221  {
223  DPRINTF(CachePort, "Waiting for snoop response to be "
224  "sent\n");
226  schedSendEvent(when);
227  return true;
228  }
229  return false;
230  }
231  };
232 
233 
239  {
240  private:
241 
244 
246 
247  // a pointer to our specific cache implementation
249 
250  protected:
251 
252  virtual void recvTimingSnoopReq(PacketPtr pkt);
253 
254  virtual bool recvTimingResp(PacketPtr pkt);
255 
256  virtual Tick recvAtomicSnoop(PacketPtr pkt);
257 
258  virtual void recvFunctionalSnoop(PacketPtr pkt);
259 
260  public:
261 
262  MemSidePort(const std::string &_name, BaseCache *_cache,
263  const std::string &_label);
264  };
265 
275  {
276 
277  public:
278 
280  void setBlocked();
281 
283  void clearBlocked();
284 
285  bool isBlocked() const { return blocked; }
286 
287  protected:
288 
289  CacheResponsePort(const std::string &_name, BaseCache *_cache,
290  const std::string &_label);
291 
294 
295  bool blocked;
296 
298 
299  private:
300 
301  void processSendRetry();
302 
304 
305  };
306 
312  {
313  private:
314 
315  // a pointer to our specific cache implementation
317 
318  protected:
319  virtual bool recvTimingSnoopResp(PacketPtr pkt) override;
320 
321  virtual bool tryTiming(PacketPtr pkt) override;
322 
323  virtual bool recvTimingReq(PacketPtr pkt) override;
324 
325  virtual Tick recvAtomic(PacketPtr pkt) override;
326 
327  virtual void recvFunctional(PacketPtr pkt) override;
328 
329  virtual AddrRangeList getAddrRanges() const override;
330 
331  public:
332 
333  CpuSidePort(const std::string &_name, BaseCache *_cache,
334  const std::string &_label);
335 
336  };
337 
340 
341  protected:
342 
345 
348 
351 
354 
357 
360 
363 
366 
373 
389 
397 
402  std::unique_ptr<Packet> pendingDelete;
403 
408  void markInService(MSHR *mshr, bool pending_modified_resp)
409  {
410  bool wasFull = mshrQueue.isFull();
411  mshrQueue.markInService(mshr, pending_modified_resp);
412 
413  if (wasFull && !mshrQueue.isFull()) {
415  }
416  }
417 
419  {
420  bool wasFull = writeBuffer.isFull();
421  writeBuffer.markInService(entry);
422 
423  if (wasFull && !writeBuffer.isFull()) {
425  }
426  }
427 
441  inline bool allocOnFill(MemCmd cmd) const
442  {
443  return clusivity == enums::mostly_incl ||
444  cmd == MemCmd::WriteLineReq ||
445  cmd == MemCmd::ReadReq ||
446  cmd == MemCmd::WriteReq ||
447  cmd.isPrefetch() ||
448  cmd.isLLSC();
449  }
450 
460 
469  Cycles calculateTagOnlyLatency(const uint32_t delay,
470  const Cycles lookup_lat) const;
480  Cycles calculateAccessLatency(const CacheBlk* blk, const uint32_t delay,
481  const Cycles lookup_lat) const;
482 
491  virtual bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat,
492  PacketList &writebacks);
493 
494  /*
495  * Handle a timing request that hit in the cache
496  *
497  * @param ptk The request packet
498  * @param blk The referenced block
499  * @param request_time The tick at which the block lookup is compete
500  */
501  virtual void handleTimingReqHit(PacketPtr pkt, CacheBlk *blk,
502  Tick request_time);
503 
504  /*
505  * Handle a timing request that missed in the cache
506  *
507  * Implementation specific handling for different cache
508  * implementations
509  *
510  * @param ptk The request packet
511  * @param blk The referenced block
512  * @param forward_time The tick at which we can process dependent requests
513  * @param request_time The tick at which the block lookup is compete
514  */
515  virtual void handleTimingReqMiss(PacketPtr pkt, CacheBlk *blk,
516  Tick forward_time,
517  Tick request_time) = 0;
518 
519  /*
520  * Handle a timing request that missed in the cache
521  *
522  * Common functionality across different cache implementations
523  *
524  * @param ptk The request packet
525  * @param blk The referenced block
526  * @param mshr Any existing mshr for the referenced cache block
527  * @param forward_time The tick at which we can process dependent requests
528  * @param request_time The tick at which the block lookup is compete
529  */
530  void handleTimingReqMiss(PacketPtr pkt, MSHR *mshr, CacheBlk *blk,
531  Tick forward_time, Tick request_time);
532 
537  virtual void recvTimingReq(PacketPtr pkt);
538 
544 
555  virtual void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt,
556  CacheBlk *blk) = 0;
557 
562  virtual void recvTimingResp(PacketPtr pkt);
563 
568  virtual void recvTimingSnoopReq(PacketPtr pkt) = 0;
569 
574  virtual void recvTimingSnoopResp(PacketPtr pkt) = 0;
575 
589  PacketList &writebacks) = 0;
590 
596  virtual Tick recvAtomic(PacketPtr pkt);
597 
604  virtual Tick recvAtomicSnoop(PacketPtr pkt) = 0;
605 
612  virtual void functionalAccess(PacketPtr pkt, bool from_cpu_side);
613 
623  void updateBlockData(CacheBlk *blk, const PacketPtr cpkt,
624  bool has_old_data);
625 
629  void cmpAndSwap(CacheBlk *blk, PacketPtr pkt);
630 
638 
642  virtual void doWritebacks(PacketList& writebacks, Tick forward_time) = 0;
643 
647  virtual void doWritebacksAtomic(PacketList& writebacks) = 0;
648 
665  bool needs_writable,
666  bool is_whole_line_write) const = 0;
667 
675  const bool writebackClean;
676 
685 
692  assert(tempBlockWriteback != nullptr);
693  PacketList writebacks{tempBlockWriteback};
694  doWritebacksAtomic(writebacks);
695  tempBlockWriteback = nullptr;
696  }
697 
704 
729  bool updateCompressionData(CacheBlk *&blk, const uint64_t* data,
730  PacketList &writebacks);
731 
742  virtual void satisfyRequest(PacketPtr pkt, CacheBlk *blk,
743  bool deferred_response = false,
744  bool pending_downgrade = false);
745 
755  void maintainClusivity(bool from_cache, CacheBlk *blk);
756 
766  bool handleEvictions(std::vector<CacheBlk*> &evict_blks,
767  PacketList &writebacks);
768 
788  PacketList &writebacks, bool allocate);
789 
802  CacheBlk *allocateBlock(const PacketPtr pkt, PacketList &writebacks);
811  [[nodiscard]] virtual PacketPtr evictBlock(CacheBlk *blk) = 0;
812 
821  void evictBlock(CacheBlk *blk, PacketList &writebacks);
822 
828  void invalidateBlock(CacheBlk *blk);
829 
837 
850 
854  virtual void memWriteback() override;
855 
863  virtual void memInvalidate() override;
864 
870  bool isDirty() const;
871 
880  bool inRange(Addr addr) const;
881 
885  Tick nextQueueReadyTime() const;
886 
888  const unsigned blkSize;
889 
895 
901 
908 
911 
918 
922  const bool sequentialAccess;
923 
925  const int numTarget;
926 
929 
935  const enums::Clusivity clusivity;
936 
943  const bool isReadOnly;
944 
951  const bool replaceExpansions;
952 
959  const bool moveContractions;
960 
965  uint8_t blocked;
966 
968  uint64_t order;
969 
972 
975 
978 
983 
984  public:
987 
989  {
990  CacheCmdStats(BaseCache &c, const std::string &name);
991 
998  void regStatsFromParent();
999 
1001 
1040  };
1041 
1043  {
1045 
1046  void regStats() override;
1047 
1049  return *cmd[p->cmdToIndex()];
1050  }
1051 
1053 
1062 
1067 
1072 
1077 
1082 
1087 
1092 
1095 
1098 
1103 
1108 
1111 
1116 
1119 
1124 
1129 
1132 
1135 
1138 
1144 
1148 
1150  void regProbePoints() override;
1151 
1152  public:
1153  BaseCache(const BaseCacheParams &p, unsigned blk_size);
1154  ~BaseCache();
1155 
1156  void init() override;
1157 
1158  Port &getPort(const std::string &if_name,
1159  PortID idx=InvalidPortID) override;
1160 
1165  unsigned
1167  {
1168  return blkSize;
1169  }
1170 
1171  const AddrRangeList &getAddrRanges() const { return addrRanges; }
1172 
1173  MSHR *allocateMissBuffer(PacketPtr pkt, Tick time, bool sched_send = true)
1174  {
1176  pkt, time, order++,
1177  allocOnFill(pkt->cmd));
1178 
1179  if (mshrQueue.isFull()) {
1181  }
1182 
1183  if (sched_send) {
1184  // schedule the send
1185  schedMemSideSendEvent(time);
1186  }
1187 
1188  return mshr;
1189  }
1190 
1192  {
1193  // should only see writes or clean evicts here
1194  assert(pkt->isWrite() || pkt->cmd == MemCmd::CleanEvict);
1195 
1196  Addr blk_addr = pkt->getBlockAddr(blkSize);
1197 
1198  // If using compression, on evictions the block is decompressed and
1199  // the operation's latency is added to the payload delay. Consume
1200  // that payload delay here, meaning that the data is always stored
1201  // uncompressed in the writebuffer
1202  if (compressor) {
1203  time += pkt->payloadDelay;
1204  pkt->payloadDelay = 0;
1205  }
1206 
1207  WriteQueueEntry *wq_entry =
1208  writeBuffer.findMatch(blk_addr, pkt->isSecure());
1209  if (wq_entry && !wq_entry->inService) {
1210  DPRINTF(Cache, "Potential to merge writeback %s", pkt->print());
1211  }
1212 
1213  writeBuffer.allocate(blk_addr, blkSize, pkt, time, order++);
1214 
1215  if (writeBuffer.isFull()) {
1217  }
1218 
1219  // schedule the send
1220  schedMemSideSendEvent(time);
1221  }
1222 
1226  bool isBlocked() const
1227  {
1228  return blocked != 0;
1229  }
1230 
1237  {
1238  uint8_t flag = 1 << cause;
1239  if (blocked == 0) {
1240  stats.blockedCauses[cause]++;
1241  blockedCycle = curCycle();
1243  }
1244  blocked |= flag;
1245  DPRINTF(Cache,"Blocking for cause %d, mask=%d\n", cause, blocked);
1246  }
1247 
1256  {
1257  uint8_t flag = 1 << cause;
1258  blocked &= ~flag;
1259  DPRINTF(Cache,"Unblocking for cause %d, mask=%d\n", cause, blocked);
1260  if (blocked == 0) {
1261  stats.blockedCycles[cause] += curCycle() - blockedCycle;
1263  }
1264  }
1265 
1275  {
1277  }
1278 
1279  bool inCache(Addr addr, bool is_secure) const {
1280  return tags->findBlock(addr, is_secure);
1281  }
1282 
1283  bool hasBeenPrefetched(Addr addr, bool is_secure) const {
1284  CacheBlk *block = tags->findBlock(addr, is_secure);
1285  if (block) {
1286  return block->wasPrefetched();
1287  } else {
1288  return false;
1289  }
1290  }
1291 
1292  bool inMissQueue(Addr addr, bool is_secure) const {
1293  return mshrQueue.findMatch(addr, is_secure);
1294  }
1295 
1297  {
1298  assert(pkt->req->requestorId() < system->maxRequestors());
1299  stats.cmdStats(pkt).misses[pkt->req->requestorId()]++;
1300  pkt->req->incAccessDepth();
1301  if (missCount) {
1302  --missCount;
1303  if (missCount == 0)
1304  exitSimLoop("A cache reached the maximum miss count");
1305  }
1306  }
1308  {
1309  assert(pkt->req->requestorId() < system->maxRequestors());
1310  stats.cmdStats(pkt).hits[pkt->req->requestorId()]++;
1311  }
1312 
1318  bool coalesce() const;
1319 
1320 
1325  void writebackVisitor(CacheBlk &blk);
1326 
1332  void invalidateVisitor(CacheBlk &blk);
1333 
1342  virtual bool sendMSHRQueuePacket(MSHR* mshr);
1343 
1352  bool sendWriteQueuePacket(WriteQueueEntry* wq_entry);
1353 
1359  void serialize(CheckpointOut &cp) const override;
1360  void unserialize(CheckpointIn &cp) override;
1361 };
1362 
1379 {
1380  public:
1381  WriteAllocator(const WriteAllocatorParams &p) :
1382  SimObject(p),
1383  coalesceLimit(p.coalesce_limit * p.block_size),
1384  noAllocateLimit(p.no_allocate_limit * p.block_size),
1385  delayThreshold(p.delay_threshold)
1386  {
1387  reset();
1388  }
1389 
1396  bool coalesce() const {
1397  return mode != WriteMode::ALLOCATE;
1398  }
1399 
1405  bool allocate() const {
1406  return mode != WriteMode::NO_ALLOCATE;
1407  }
1408 
1415  void reset() {
1417  byteCount = 0;
1418  nextAddr = 0;
1419  }
1420 
1427  bool delay(Addr blk_addr) {
1428  if (delayCtr[blk_addr] > 0) {
1429  --delayCtr[blk_addr];
1430  return true;
1431  } else {
1432  return false;
1433  }
1434  }
1435 
1441  void resetDelay(Addr blk_addr) {
1442  delayCtr.erase(blk_addr);
1443  }
1444 
1455  void updateMode(Addr write_addr, unsigned write_size, Addr blk_addr);
1456 
1457  private:
1463  enum class WriteMode : char
1464  {
1465  ALLOCATE,
1466  COALESCE,
1467  NO_ALLOCATE,
1468  };
1470 
1473 
1478  uint32_t byteCount;
1479 
1483  const uint32_t coalesceLimit;
1484  const uint32_t noAllocateLimit;
1488  const uint32_t delayThreshold;
1489 
1494  std::unordered_map<Addr, Counter> delayCtr;
1495 };
1496 
1497 } // namespace gem5
1498 
1499 #endif //__MEM_CACHE_BASE_HH__
#define DPRINTF(x,...)
Definition: trace.hh:186
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
Definitions of a simple cache block class.
const char data[]
Override the default behaviour of sendDeferredPacket to enable the memory-side cache port to also sen...
Definition: base.hh:190
bool checkConflictingSnoop(const PacketPtr pkt)
Check if there is a conflicting snoop response about to be send out, and if so simply stall any reque...
Definition: base.hh:220
CacheReqPacketQueue(BaseCache &cache, RequestPort &port, SnoopRespPacketQueue &snoop_resp_queue, const std::string &label)
Definition: base.hh:199
virtual void sendDeferredPacket()
Override the normal sendDeferredPacket and do not only consider the transmit list (used for responses...
Definition: base.cc:2651
SnoopRespPacketQueue & snoopRespQueue
Definition: base.hh:195
A cache request port is used for the memory-side port of the cache, and in addition to the basic timi...
Definition: base.hh:153
CacheRequestPort(const std::string &_name, BaseCache *_cache, ReqPacketQueue &_reqQueue, SnoopRespPacketQueue &_snoopRespQueue)
Definition: base.hh:169
void schedSendEvent(Tick time)
Schedule a send of a request packet (from the MSHR).
Definition: base.hh:161
virtual bool isSnooping() const
Memory-side port always snoops.
Definition: base.hh:180
A cache response port is used for the CPU-side port of the cache, and it is basically a simple timing...
Definition: base.hh:275
void clearBlocked()
Return to normal operation and accept new requests.
Definition: base.cc:160
EventFunctionWrapper sendRetryEvent
Definition: base.hh:303
CacheResponsePort(const std::string &_name, BaseCache *_cache, const std::string &_label)
Definition: base.cc:69
void setBlocked()
Do not accept any new requests.
Definition: base.cc:145
RespPacketQueue queue
A normal packet queue used to store responses.
Definition: base.hh:293
The CPU-side port extends the base cache response port with access functions for functional,...
Definition: base.hh:312
CpuSidePort(const std::string &_name, BaseCache *_cache, const std::string &_label)
Definition: base.cc:2600
virtual bool recvTimingSnoopResp(PacketPtr pkt) override
Receive a timing snoop response from the peer.
Definition: base.cc:2521
virtual Tick recvAtomic(PacketPtr pkt) override
Receive an atomic request packet from the peer.
Definition: base.cc:2568
virtual bool recvTimingReq(PacketPtr pkt) override
Receive a timing request from the peer.
Definition: base.cc:2550
virtual bool tryTiming(PacketPtr pkt) override
Availability request from the peer.
Definition: base.cc:2535
virtual void recvFunctional(PacketPtr pkt) override
Receive a functional request packet from the peer.
Definition: base.cc:2579
virtual AddrRangeList getAddrRanges() const override
Get a list of the non-overlapping address ranges the owner is responsible for.
Definition: base.cc:2593
The memory-side port extends the base cache request port with access functions for functional,...
Definition: base.hh:239
virtual Tick recvAtomicSnoop(PacketPtr pkt)
Receive an atomic snoop request packet from our peer.
Definition: base.cc:2630
virtual void recvFunctionalSnoop(PacketPtr pkt)
Receive a functional snoop request packet from the peer.
Definition: base.cc:2639
virtual bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
Definition: base.cc:2612
virtual void recvTimingSnoopReq(PacketPtr pkt)
Receive a timing snoop request from the peer.
Definition: base.cc:2620
CacheReqPacketQueue _reqQueue
The cache-specific queue.
Definition: base.hh:243
SnoopRespPacketQueue _snoopRespQueue
Definition: base.hh:245
MemSidePort(const std::string &_name, BaseCache *_cache, const std::string &_label)
Definition: base.cc:2686
A basic cache interface.
Definition: base.hh:96
virtual void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt, CacheBlk *blk)=0
Service non-deferred MSHR targets using the received response.
virtual void functionalAccess(PacketPtr pkt, bool from_cpu_side)
Performs the access specified by the request.
Definition: base.cc:713
const bool isReadOnly
Is this cache read only, for example the instruction cache, or table-walker cache.
Definition: base.hh:943
virtual void recvTimingReq(PacketPtr pkt)
Performs the access specified by the request.
Definition: base.cc:403
virtual void recvTimingSnoopReq(PacketPtr pkt)=0
Snoops bus transactions to maintain coherence.
virtual void doWritebacks(PacketList &writebacks, Tick forward_time)=0
Insert writebacks into the write buffer.
const Cycles fillLatency
The latency to fill a cache block.
Definition: base.hh:910
const Cycles dataLatency
The latency of data access of a cache.
Definition: base.hh:900
void invalidateVisitor(CacheBlk &blk)
Cache block visitor that invalidates all blocks in the cache.
Definition: base.cc:1835
virtual Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk, PacketList &writebacks)=0
Handle a request in atomic mode that missed in this cache.
ProbePointArg< DataUpdate > * ppDataUpdate
To probe when the contents of a block are updated.
Definition: base.hh:372
virtual void doWritebacksAtomic(PacketList &writebacks)=0
Send writebacks down the memory hierarchy in atomic mode.
void updateBlockData(CacheBlk *blk, const PacketPtr cpkt, bool has_old_data)
Update the data contents of a block.
Definition: base.cc:769
MSHR * allocateMissBuffer(PacketPtr pkt, Tick time, bool sched_send=true)
Definition: base.hh:1173
PacketPtr tempBlockWriteback
Writebacks from the tempBlock, resulting on the response path in atomic mode, must happen after the c...
Definition: base.hh:684
CpuSidePort cpuSidePort
Definition: base.hh:338
bool isDirty() const
Determine if there are any dirty blocks in the cache.
Definition: base.cc:1799
void invalidateBlock(CacheBlk *blk)
Invalidate a cache block.
Definition: base.cc:1662
MSHR * noTargetMSHR
Pointer to the MSHR that has no targets.
Definition: base.hh:974
const bool writebackClean
Determine if clean lines should be written back or not.
Definition: base.hh:675
bool sendWriteQueuePacket(WriteQueueEntry *wq_entry)
Similar to sendMSHR, but for a write-queue entry instead.
Definition: base.cc:1968
bool inRange(Addr addr) const
Determine if an address is in the ranges covered by this cache.
Definition: base.cc:213
virtual void handleTimingReqMiss(PacketPtr pkt, CacheBlk *blk, Tick forward_time, Tick request_time)=0
bool allocOnFill(MemCmd cmd) const
Determine whether we should allocate on a fill or not.
Definition: base.hh:441
bool forwardSnoops
Do we forward snoops from mem side port through to cpu side port?
Definition: base.hh:928
uint64_t order
Increasing order number assigned to each incoming request.
Definition: base.hh:968
void incHitCount(PacketPtr pkt)
Definition: base.hh:1307
MSHRQueueIndex
Indexes to enumerate the MSHR queues.
Definition: base.hh:102
@ MSHRQueue_MSHRs
Definition: base.hh:103
@ MSHRQueue_WriteBuffer
Definition: base.hh:104
virtual void satisfyRequest(PacketPtr pkt, CacheBlk *blk, bool deferred_response=false, bool pending_downgrade=false)
Perform any necessary updates to the block and perform any data exchange between the packet and the b...
Definition: base.cc:1087
virtual void memWriteback() override
Write back dirty blocks in the cache using functional accesses.
Definition: base.cc:1787
bool updateCompressionData(CacheBlk *&blk, const uint64_t *data, PacketList &writebacks)
When a block is overwriten, its compression information must be updated, and it may need to be recomp...
Definition: base.cc:976
bool isBlocked() const
Returns true if the cache is blocked for accesses.
Definition: base.hh:1226
gem5::BaseCache::CacheStats stats
bool inMissQueue(Addr addr, bool is_secure) const
Definition: base.hh:1292
ProbePointArg< PacketPtr > * ppFill
To probe when a cache fill occurs.
Definition: base.hh:365
const Cycles lookupLatency
The latency of tag lookup of a cache.
Definition: base.hh:894
Cycles calculateAccessLatency(const CacheBlk *blk, const uint32_t delay, const Cycles lookup_lat) const
Calculate access latency in ticks given a tag lookup latency, and whether access was a hit or miss.
Definition: base.cc:1194
Tick nextQueueReadyTime() const
Find next request ready time from among possible sources.
Definition: base.cc:1848
ProbePointArg< PacketPtr > * ppHit
To probe when a cache hit occurs.
Definition: base.hh:359
void regProbePoints() override
Registers probes.
Definition: base.cc:2506
virtual void memInvalidate() override
Invalidates all blocks in the cache.
Definition: base.cc:1793
MSHRQueue mshrQueue
Miss status registers.
Definition: base.hh:344
virtual PacketPtr createMissPacket(PacketPtr cpu_pkt, CacheBlk *blk, bool needs_writable, bool is_whole_line_write) const =0
Create an appropriate downstream bus request packet.
bool hasBeenPrefetched(Addr addr, bool is_secure) const
Definition: base.hh:1283
void markInService(WriteQueueEntry *entry)
Definition: base.hh:418
const AddrRangeList & getAddrRanges() const
Definition: base.hh:1171
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: base.cc:201
QueueEntry * getNextQueueEntry()
Return the next queue entry to service, either a pending miss from the MSHR queue,...
Definition: base.cc:848
unsigned getBlockSize() const
Query block size of a cache.
Definition: base.hh:1166
bool inCache(Addr addr, bool is_secure) const
Definition: base.hh:1279
void handleUncacheableWriteResp(PacketPtr pkt)
Handling the special case of uncacheable write responses to make recvTimingResp less cluttered.
Definition: base.cc:475
const unsigned blkSize
Block size of this cache.
Definition: base.hh:888
void writebackTempBlockAtomic()
Send the outstanding tempBlock writeback.
Definition: base.hh:691
BlockedCause
Reasons for caches to be blocked.
Definition: base.hh:112
@ NUM_BLOCKED_CAUSES
Definition: base.hh:116
@ Blocked_NoTargets
Definition: base.hh:115
@ Blocked_NoWBBuffers
Definition: base.hh:114
@ Blocked_NoMSHRs
Definition: base.hh:113
const Cycles forwardLatency
This is the forward latency of the cache.
Definition: base.hh:907
compression::Base * compressor
Compression method being used.
Definition: base.hh:353
const Cycles responseLatency
The latency of sending reponse to its upper level cache/core on a linefill.
Definition: base.hh:917
PacketPtr writecleanBlk(CacheBlk *blk, Request::Flags dest, PacketId id)
Create a writeclean request for the given block.
Definition: base.cc:1741
void schedMemSideSendEvent(Tick time)
Schedule a send event for the memory-side port.
Definition: base.hh:1274
ProbePointArg< PacketPtr > * ppMiss
To probe when a cache miss occurs.
Definition: base.hh:362
MemSidePort memSidePort
Definition: base.hh:339
virtual void handleTimingReqHit(PacketPtr pkt, CacheBlk *blk, Tick request_time)
Definition: base.cc:224
virtual Tick recvAtomic(PacketPtr pkt)
Performs the access specified by the request.
Definition: base.cc:633
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: base.cc:2012
Counter missCount
The number of misses to trigger an exit event.
Definition: base.hh:977
void cmpAndSwap(CacheBlk *blk, PacketPtr pkt)
Handle doing the Compare and Swap function for SPARC.
Definition: base.cc:795
virtual void recvTimingResp(PacketPtr pkt)
Handles a response (cache line fill/write ack) from the bus.
Definition: base.cc:487
virtual void recvTimingSnoopResp(PacketPtr pkt)=0
Handle a snoop response.
virtual bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat, PacketList &writebacks)
Does all the processing necessary to perform the provided request.
Definition: base.cc:1228
void setBlocked(BlockedCause cause)
Marks the access path of the cache as blocked for the given cause.
Definition: base.hh:1236
BaseCache(const BaseCacheParams &p, unsigned blk_size)
Definition: base.cc:79
Addr regenerateBlkAddr(CacheBlk *blk)
Regenerate block address using tags.
Definition: base.cc:182
std::unique_ptr< Packet > pendingDelete
Upstream caches need this packet until true is returned, so hold it for deletion until a subsequent c...
Definition: base.hh:402
CacheBlk * allocateBlock(const PacketPtr pkt, PacketList &writebacks)
Allocate a new block and perform any necessary writebacks.
Definition: base.cc:1605
prefetch::Base * prefetcher
Prefetcher.
Definition: base.hh:356
uint8_t blocked
Bit vector of the blocking reasons for the access path.
Definition: base.hh:965
virtual Tick recvAtomicSnoop(PacketPtr pkt)=0
Snoop for the provided request in the cache and return the estimated time taken.
TempCacheBlk * tempBlock
Temporary cache block for occasional transitory use.
Definition: base.hh:396
const AddrRangeList addrRanges
The address range to which the cache responds on the CPU side.
Definition: base.hh:982
const int numTarget
The number of targets for each MSHR.
Definition: base.hh:925
const bool moveContractions
Similar to data expansions, after a block improves its compression, it may need to be moved elsewhere...
Definition: base.hh:959
WriteAllocator *const writeAllocator
The writeAllocator drive optimizations for streaming writes.
Definition: base.hh:388
void markInService(MSHR *mshr, bool pending_modified_resp)
Mark a request as in service (sent downstream in the memory system), effectively making this MSHR the...
Definition: base.hh:408
void allocateWriteBuffer(PacketPtr pkt, Tick time)
Definition: base.hh:1191
Cycles calculateTagOnlyLatency(const uint32_t delay, const Cycles lookup_lat) const
Calculate latency of accesses that only touch the tag array.
Definition: base.cc:1185
CacheBlk * handleFill(PacketPtr pkt, CacheBlk *blk, PacketList &writebacks, bool allocate)
Handle a fill operation caused by a received packet.
Definition: base.cc:1509
void incMissCount(PacketPtr pkt)
Definition: base.hh:1296
WriteQueue writeBuffer
Write/writeback buffer.
Definition: base.hh:347
const bool replaceExpansions
when a data expansion of a compressed block happens it will not be able to co-allocate where it is at...
Definition: base.hh:951
void serialize(CheckpointOut &cp) const override
Serialize the state of the caches.
Definition: base.cc:1992
bool coalesce() const
Checks if the cache is coalescing writes.
Definition: base.cc:1806
Cycles blockedCycle
Stores time the cache blocked for statistics.
Definition: base.hh:971
const bool sequentialAccess
Whether tags and data are accessed sequentially.
Definition: base.hh:922
bool handleEvictions(std::vector< CacheBlk * > &evict_blks, PacketList &writebacks)
Try to evict the given blocks.
Definition: base.cc:939
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: base.cc:192
PacketPtr writebackBlk(CacheBlk *blk)
Create a writeback request for the given block.
Definition: base.cc:1691
void clearBlocked(BlockedCause cause)
Marks the cache as unblocked for the given cause.
Definition: base.hh:1255
virtual PacketPtr evictBlock(CacheBlk *blk)=0
Evict a cache block.
void writebackVisitor(CacheBlk &blk)
Cache block visitor that writes back dirty cache blocks using functional writes.
Definition: base.cc:1812
EventFunctionWrapper writebackTempBlockAtomicEvent
An event to writeback the tempBlock after recvAtomic finishes.
Definition: base.hh:703
BaseTags * tags
Tag and data Storage.
Definition: base.hh:350
const enums::Clusivity clusivity
Clusivity with respect to the upstream cache, determining if we fill into both this cache and the cac...
Definition: base.hh:935
virtual bool sendMSHRQueuePacket(MSHR *mshr)
Take an MSHR, turn it into a suitable downstream packet, and send it out.
Definition: base.cc:1865
void maintainClusivity(bool from_cache, CacheBlk *blk)
Maintain the clusivity of this cache by potentially invalidating a block.
Definition: base.cc:1497
System * system
System we are currently operating in.
Definition: base.hh:986
A common base class of Cache tagstore objects.
Definition: base.hh:74
virtual CacheBlk * findBlock(Addr addr, bool is_secure) const
Finds the block in the cache without touching it.
Definition: base.cc:80
A Basic Cache block.
Definition: cache_blk.hh:71
bool wasPrefetched() const
Check if this block was the result of a hardware prefetch, yet to be touched.
Definition: cache_blk.hh:249
A coherent cache that can be arranged in flexible topologies.
Definition: cache.hh:68
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:79
A Class for maintaining a list of pending and allocated memory requests.
Definition: mshr_queue.hh:62
void markInService(MSHR *mshr, bool pending_modified_resp)
Mark the given MSHR as in service.
Definition: mshr_queue.cc:115
MSHR * allocate(Addr blk_addr, unsigned blk_size, PacketPtr pkt, Tick when_ready, Counter order, bool alloc_on_fill)
Allocates a new MSHR for the request and size.
Definition: mshr_queue.cc:63
Miss Status and handling Register.
Definition: mshr.hh:75
@ WriteLineReq
Definition: packet.hh:101
@ CleanEvict
Definition: packet.hh:95
bool isLLSC() const
Definition: packet.hh:250
bool isPrefetch() const
Definition: packet.hh:254
const std::string _name
Definition: named.hh:41
virtual std::string name() const
Definition: named.hh:47
const std::string label
Label to use for print request packets label stack.
bool checkConflict(const PacketPtr pkt, const int blk_size) const
Check if a packet corresponding to the same address exists in the queue.
Definition: packet_queue.cc:75
void schedSendEvent(Tick when)
Schedule a send event if we are not already waiting for a retry.
Tick deferredPacketReadyTime() const
Get the next packet ready time.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
bool isSecure() const
Definition: packet.hh:834
void print(std::ostream &o, int verbosity=0, const std::string &prefix="") const
Definition: packet.cc:368
uint32_t payloadDelay
The extra pipelining delay from seeing the packet until the end of payload is transmitted by the comp...
Definition: packet.hh:448
bool isWrite() const
Definition: packet.hh:593
Addr getBlockAddr(unsigned int blk_size) const
Definition: packet.hh:829
RequestPtr req
A pointer to the original request.
Definition: packet.hh:376
MemCmd cmd
The command field of the packet.
Definition: packet.hh:371
Ports are used to interface objects to each other.
Definition: port.hh:62
ProbePointArg generates a point for the class of Arg.
Definition: probe.hh:264
A queue entry base class, to be used by both the MSHRs and write-queue entries.
Definition: queue_entry.hh:63
bool inService
True if the entry has been sent downstream.
Definition: queue_entry.hh:110
bool isFull() const
Definition: queue.hh:150
Entry * findMatch(Addr blk_addr, bool is_secure, bool ignore_uncacheable=true) const
Find the first entry that matches the provided address.
Definition: queue.hh:168
The QueuedRequestPort combines two queues, a request queue and a snoop response queue,...
Definition: qport.hh:110
ReqPacketQueue & reqQueue
Packet queue used to store outgoing requests.
Definition: qport.hh:115
A queued port is a port that has an infinite queue for outgoing packets and thus decouples the module...
Definition: qport.hh:62
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition: port.hh:79
Abstract superclass for simulation objects.
Definition: sim_object.hh:148
RequestorID maxRequestors()
Get the number of requestors registered in the system.
Definition: system.hh:498
Special instance of CacheBlk for use with tempBlk that deals with its block address regeneration.
Definition: cache_blk.hh:501
The write allocator inspects write packets and detects streaming patterns.
Definition: base.hh:1379
const uint32_t noAllocateLimit
Definition: base.hh:1484
bool coalesce() const
Should writes be coalesced? This is true if the mode is set to NO_ALLOCATE.
Definition: base.hh:1396
WriteMode mode
Definition: base.hh:1469
bool delay(Addr blk_addr)
Access whether we need to delay the current write.
Definition: base.hh:1427
WriteAllocator(const WriteAllocatorParams &p)
Definition: base.hh:1381
const uint32_t delayThreshold
The number of times the allocator will delay an WriteReq MSHR.
Definition: base.hh:1488
std::unordered_map< Addr, Counter > delayCtr
Keep track of the number of times the allocator has delayed an WriteReq MSHR.
Definition: base.hh:1494
WriteMode
The current mode for write coalescing and allocation, either normal operation (ALLOCATE),...
Definition: base.hh:1464
void reset()
Reset the write allocator state, meaning that it allocates for writes and has not recorded any inform...
Definition: base.hh:1415
bool allocate() const
Should writes allocate?
Definition: base.hh:1405
void updateMode(Addr write_addr, unsigned write_size, Addr blk_addr)
Update the write mode based on the current write packet.
Definition: base.cc:2696
const uint32_t coalesceLimit
Limits for when to switch between the different write modes.
Definition: base.hh:1483
uint32_t byteCount
Bytes written contiguously.
Definition: base.hh:1478
void resetDelay(Addr blk_addr)
Clear delay counter for the input block.
Definition: base.hh:1441
Addr nextAddr
Address to match writes against to detect streams.
Definition: base.hh:1472
Write queue entry.
A write queue for all eviction packets, i.e.
Definition: write_queue.hh:61
void markInService(WriteQueueEntry *entry)
Mark the given entry as in service.
Definition: write_queue.cc:78
WriteQueueEntry * allocate(Addr blk_addr, unsigned blk_size, PacketPtr pkt, Tick when_ready, Counter order)
Allocates a new WriteQueueEntry for the request and size.
Definition: write_queue.cc:61
Base cache compressor interface.
Definition: base.hh:66
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2540
Statistics container.
Definition: group.hh:94
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1931
A vector of scalar stats.
Definition: statistics.hh:2007
ClockedObject declaration and implementation.
Definition of a basic cache compressor.
Declaration of a common base class for cache tagstore objects.
Declaration of a structure to manage MSHRs.
Bitfield< 2 > c
Definition: pagetable.hh:63
Bitfield< 54 > p
Definition: pagetable.hh:70
Bitfield< 3 > addr
Definition: types.hh:84
double Counter
All counters are of 64-bit values.
Definition: types.hh:47
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const PortID InvalidPortID
Definition: types.hh:246
std::ostream CheckpointOut
Definition: serialize.hh:66
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
uint64_t PacketId
Definition: packet.hh:73
void exitSimLoop(const std::string &message, int exit_code, Tick when, Tick repeat, bool serialize)
Schedule an event to exit the simulation loop (returning to Python) at the end of the current cycle (...
Definition: sim_events.cc:88
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
Declaration of the Packet class.
Declaration of a simple PacketQueue that is associated with a port on which it attempts to send packe...
Declaration of the queued port.
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
Declaration of Statistics objects.
statistics::Formula accesses
The number of accesses per command and thread.
Definition: base.hh:1019
statistics::Formula avgMshrMissLatency
The average latency of an MSHR miss, per command and thread.
Definition: base.hh:1037
void regStatsFromParent()
Callback to register stats from parent CacheStats::regStats().
Definition: base.cc:2064
statistics::Formula avgMshrUncacheableLatency
The average latency of an MSHR miss, per command and thread.
Definition: base.hh:1039
statistics::Vector misses
Number of misses per thread for each type of command.
Definition: base.hh:1007
statistics::Formula missRate
The miss rate per command and thread.
Definition: base.hh:1021
statistics::Vector missLatency
Total number of ticks per thread/command spent waiting for a miss.
Definition: base.hh:1017
statistics::Formula mshrMissRate
The miss rate in the MSHRs pre command and thread.
Definition: base.hh:1035
const BaseCache & cache
Definition: base.hh:1000
statistics::Vector mshrUncacheableLatency
Total tick latency of each MSHR miss, per command and thread.
Definition: base.hh:1033
statistics::Vector hitLatency
Total number of ticks per thread/command spent waiting for a hit.
Definition: base.hh:1012
statistics::Vector mshrHits
Number of misses that hit in the MSHRs per command and thread.
Definition: base.hh:1025
statistics::Vector mshrUncacheable
Number of misses that miss in the MSHRs, per command and thread.
Definition: base.hh:1029
CacheCmdStats(BaseCache &c, const std::string &name)
Definition: base.cc:2024
statistics::Formula avgMissLatency
The average miss latency per command and thread.
Definition: base.hh:1023
statistics::Vector mshrMisses
Number of misses that miss in the MSHRs, per command and thread.
Definition: base.hh:1027
statistics::Vector mshrMissLatency
Total tick latency of each MSHR miss, per command and thread.
Definition: base.hh:1031
statistics::Vector hits
Number of hits per thread for each type of command.
Definition: base.hh:1004
statistics::Formula overallMshrMissLatency
Total tick latency of overall MSHR misses.
Definition: base.hh:1115
statistics::Formula demandMshrMissLatency
Total tick latency of demand MSHR misses.
Definition: base.hh:1113
statistics::Formula overallAvgMshrUncacheableLatency
The average overall latency of an MSHR miss.
Definition: base.hh:1131
const BaseCache & cache
Definition: base.hh:1052
statistics::Formula demandHits
Number of hits for demand accesses.
Definition: base.hh:1055
statistics::Formula demandHitLatency
Total number of ticks spent waiting for demand hits.
Definition: base.hh:1059
statistics::Formula demandAccesses
The number of demand accesses.
Definition: base.hh:1074
statistics::Scalar replacements
Number of replacements of valid blocks.
Definition: base.hh:1134
statistics::Formula overallAvgMshrMissLatency
The average overall latency of an MSHR miss.
Definition: base.hh:1128
statistics::Formula demandMissRate
The miss rate of all demand accesses.
Definition: base.hh:1079
statistics::Formula overallMissRate
The miss rate for all accesses.
Definition: base.hh:1081
statistics::Formula demandAvgMshrMissLatency
The average latency of a demand MSHR miss.
Definition: base.hh:1126
statistics::Formula demandMshrMisses
Demand misses that miss in the MSHRs.
Definition: base.hh:1105
statistics::Formula overallMshrMisses
Total number of misses that miss in the MSHRs.
Definition: base.hh:1107
statistics::Formula overallMshrHits
Total number of misses that hit in the MSHRs.
Definition: base.hh:1102
statistics::Formula overallHitLatency
Total number of ticks spent waiting for all hits.
Definition: base.hh:1061
statistics::Scalar dataContractions
Number of data contractions (blocks that had their compression factor improved).
Definition: base.hh:1143
CacheStats(BaseCache &c)
Definition: base.cc:2197
void regStats() override
Callback to set stat parameters.
Definition: base.cc:2281
statistics::Scalar dataExpansions
Number of data expansions.
Definition: base.hh:1137
statistics::Formula overallMshrUncacheable
Total number of misses that miss in the MSHRs.
Definition: base.hh:1110
statistics::Formula demandMissLatency
Total number of ticks spent waiting for demand misses.
Definition: base.hh:1069
statistics::Formula overallMisses
Number of misses for all accesses.
Definition: base.hh:1066
statistics::Formula overallMshrMissRate
The overall miss rate in the MSHRs.
Definition: base.hh:1123
statistics::Formula overallAccesses
The number of overall accesses.
Definition: base.hh:1076
std::vector< std::unique_ptr< CacheCmdStats > > cmd
Per-command statistics.
Definition: base.hh:1146
statistics::Formula demandMshrMissRate
The demand miss rate in the MSHRs.
Definition: base.hh:1121
statistics::Formula avgBlocked
The average number of cycles blocked for each blocked cause.
Definition: base.hh:1094
statistics::Formula overallMshrUncacheableLatency
Total tick latency of overall MSHR misses.
Definition: base.hh:1118
statistics::Formula demandMisses
Number of misses for demand accesses.
Definition: base.hh:1064
statistics::Formula demandAvgMissLatency
The average miss latency for demand misses.
Definition: base.hh:1084
statistics::Formula overallMissLatency
Total number of ticks spent waiting for all misses.
Definition: base.hh:1071
statistics::Formula demandMshrHits
Demand misses that hit in the MSHRs.
Definition: base.hh:1100
statistics::Formula overallAvgMissLatency
The average miss latency for all misses.
Definition: base.hh:1086
statistics::Vector blockedCauses
The number of times this cache blocked for each blocked cause.
Definition: base.hh:1091
statistics::Vector writebacks
Number of blocks written back per thread.
Definition: base.hh:1097
CacheCmdStats & cmdStats(const PacketPtr p)
Definition: base.hh:1048
statistics::Vector blockedCycles
The total number of cycles blocked for each blocked cause.
Definition: base.hh:1089
statistics::Formula overallHits
Number of hit for all accesses.
Definition: base.hh:1057
A data contents update is composed of the updated block's address, the old contents,...
Definition: base.hh:125
Addr addr
The updated block's address.
Definition: base.hh:127
std::vector< uint64_t > newData
The new data contents.
Definition: base.hh:133
DataUpdate(Addr _addr, bool is_secure)
Definition: base.hh:135
bool isSecure
Whether the block belongs to the secure address space.
Definition: base.hh:129
std::vector< uint64_t > oldData
The stale data contents.
Definition: base.hh:131
Write queue entry.

Generated on Wed Dec 21 2022 10:22:28 for gem5 by doxygen 1.9.1