gem5 v24.0.0.0
Loading...
Searching...
No Matches
cache.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012-2018 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) 2002-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_CACHE_HH__
47#define __MEM_CACHE_CACHE_HH__
48
49#include <cstdint>
50#include <unordered_set>
51
52#include "base/compiler.hh"
53#include "base/types.hh"
54#include "mem/cache/base.hh"
55#include "mem/packet.hh"
56
57namespace gem5
58{
59
60class CacheBlk;
61struct CacheParams;
62class MSHR;
63
67class Cache : public BaseCache
68{
69 protected:
73 const bool doFastWrites;
74
80 std::unordered_set<RequestPtr> outstandingSnoop;
81
82 protected:
87
88 bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat,
89 PacketList &writebacks) override;
90
92 Tick request_time) override;
93
95 Tick forward_time,
96 Tick request_time) override;
97
98 void recvTimingReq(PacketPtr pkt) override;
99
100 void doWritebacks(PacketList& writebacks, Tick forward_time) override;
101
102 void doWritebacksAtomic(PacketList& writebacks) override;
103
104 void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt,
105 CacheBlk *blk) override;
106
107 void recvTimingSnoopReq(PacketPtr pkt) override;
108
109 void recvTimingSnoopResp(PacketPtr pkt) override;
110
112 PacketList &writebacks) override;
113
114 Tick recvAtomic(PacketPtr pkt) override;
115
116 Tick recvAtomicSnoop(PacketPtr pkt) override;
117
118 void satisfyRequest(PacketPtr pkt, CacheBlk *blk,
119 bool deferred_response = false,
120 bool pending_downgrade = false) override;
121
122 void doTimingSupplyResponse(PacketPtr req_pkt, const uint8_t *blk_data,
123 bool already_copied, bool pending_inval);
124
137 uint32_t handleSnoop(PacketPtr pkt, CacheBlk *blk,
138 bool is_timing, bool is_deferred, bool pending_inval);
139
140 [[nodiscard]] PacketPtr evictBlock(CacheBlk *blk) override;
141
149
151 bool needs_writable,
152 bool is_whole_line_write) const override;
153
158 bool isCachedAbove(PacketPtr pkt, bool is_timing = true);
159
160 public:
162 Cache(const CacheParams &p);
163
172 bool sendMSHRQueuePacket(MSHR* mshr) override;
173};
174
175} // namespace gem5
176
177#endif // __MEM_CACHE_CACHE_HH__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
A basic cache interface.
Definition base.hh:100
A Basic Cache block.
Definition cache_blk.hh:72
A coherent cache that can be arranged in flexible topologies.
Definition cache.hh:68
PacketPtr cleanEvictBlk(CacheBlk *blk)
Create a CleanEvict request for the given block.
Definition cache.cc:972
Cache(const CacheParams &p)
Instantiates a basic cache object.
Definition cache.cc:69
void recvTimingSnoopReq(PacketPtr pkt) override
Snoops bus transactions to maintain coherence.
Definition cache.cc:1261
bool isCachedAbove(PacketPtr pkt, bool is_timing=true)
Send up a snoop request and find cached copies.
Definition cache.cc:1392
void promoteWholeLineWrites(PacketPtr pkt)
Turn line-sized writes into WriteInvalidate transactions.
Definition cache.cc:301
void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt, CacheBlk *blk) override
Service non-deferred MSHR targets using the received response.
Definition cache.cc:699
Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk, PacketList &writebacks) override
Handle a request in atomic mode that missed in this cache.
Definition cache.cc:578
Tick recvAtomicSnoop(PacketPtr pkt) override
Snoop for the provided request in the cache and return the estimated time taken.
Definition cache.cc:1379
std::unordered_set< RequestPtr > outstandingSnoop
Store the outstanding requests that we are expecting snoop responses from so we can determine which s...
Definition cache.hh:80
void satisfyRequest(PacketPtr pkt, CacheBlk *blk, bool deferred_response=false, bool pending_downgrade=false) override
Perform any necessary updates to the block and perform any data exchange between the packet and the b...
Definition cache.cc:78
void recvTimingSnoopResp(PacketPtr pkt) override
Handle a snoop response.
Definition cache.cc:267
void recvTimingReq(PacketPtr pkt) override
Performs the access specified by the request.
Definition cache.cc:418
Tick recvAtomic(PacketPtr pkt) override
Performs the access specified by the request.
Definition cache.cc:668
void handleTimingReqMiss(PacketPtr pkt, CacheBlk *blk, Tick forward_time, Tick request_time) override
Definition cache.cc:324
bool sendMSHRQueuePacket(MSHR *mshr) override
Take an MSHR, turn it into a suitable downstream packet, and send it out.
Definition cache.cc:1420
void doTimingSupplyResponse(PacketPtr req_pkt, const uint8_t *blk_data, bool already_copied, bool pending_inval)
Definition cache.cc:1000
PacketPtr createMissPacket(PacketPtr cpu_pkt, CacheBlk *blk, bool needs_writable, bool is_whole_line_write) const override
Create an appropriate downstream bus request packet.
Definition cache.cc:492
void handleTimingReqHit(PacketPtr pkt, CacheBlk *blk, Tick request_time) override
Definition cache.cc:313
uint32_t handleSnoop(PacketPtr pkt, CacheBlk *blk, bool is_timing, bool is_deferred, bool pending_inval)
Perform an upward snoop if needed, and update the block state (possibly invalidating the block).
Definition cache.cc:1045
PacketPtr evictBlock(CacheBlk *blk) override
Evict a cache block.
Definition cache.cc:961
const bool doFastWrites
This cache should allocate a block on a line-sized write miss.
Definition cache.hh:73
void doWritebacks(PacketList &writebacks, Tick forward_time) override
Insert writebacks into the write buffer.
Definition cache.cc:190
bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat, PacketList &writebacks) override
Does all the processing necessary to perform the provided request.
Definition cache.cc:161
void doWritebacksAtomic(PacketList &writebacks) override
Send writebacks down the memory hierarchy in atomic mode.
Definition cache.cc:232
Cycles is a wrapper class for representing cycle counts, i.e.
Definition types.hh:79
Miss Status and handling Register.
Definition mshr.hh:75
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition packet.hh:295
STL list class.
Definition stl.hh:51
Declares a basic cache interface BaseCache.
Bitfield< 0 > p
@ CacheParams
Definition cpuid.hh:51
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
uint64_t Tick
Tick count type.
Definition types.hh:58
Declaration of the Packet class.

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