49#ifndef __MEM_CACHE_NONCOHERENT_CACHE_HH__
50#define __MEM_CACHE_NONCOHERENT_CACHE_HH__
63struct NoncoherentCacheParams;
76 Tick request_time)
override;
81 Tick forward_time)
override;
91 panic(
"Unexpected timing snoop request %s", pkt->
print());
95 panic(
"Unexpected timing snoop response %s", pkt->
print());
104 panic(
"Unexpected atomic snoop request %s", pkt->
print());
110 bool deferred_response =
false,
111 bool pending_downgrade =
false)
override;
121 bool is_whole_line_write)
const override;
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
Cycles is a wrapper class for representing cycle counts, i.e.
Miss Status and handling Register.
NoncoherentCache(const NoncoherentCacheParams &p)
void recvTimingSnoopReq(PacketPtr pkt) override
Snoops bus transactions to maintain coherence.
void doWritebacksAtomic(PacketList &writebacks) override
Send writebacks down the memory hierarchy in atomic mode.
PacketPtr evictBlock(CacheBlk *blk) override
Evict a cache block.
void functionalAccess(PacketPtr pkt, bool from_cpu_side) override
Performs the access specified by the request.
bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat, PacketList &writebacks) override
Does all the processing necessary to perform the provided request.
void recvTimingSnoopResp(PacketPtr pkt) override
Handle a snoop response.
void recvTimingReq(PacketPtr pkt) override
Performs the access specified by the request.
PacketPtr createMissPacket(PacketPtr cpu_pkt, CacheBlk *blk, bool needs_writable, bool is_whole_line_write) const override
Create an appropriate downstream bus request packet.
void doWritebacks(PacketList &writebacks, Tick forward_time) override
Insert writebacks into the write buffer.
void handleTimingReqMiss(PacketPtr pkt, CacheBlk *blk, Tick forward_time, Tick request_time) override
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...
Tick recvAtomic(PacketPtr pkt) override
Performs the access specified by the request.
Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk, PacketList &writebacks) override
Handle a request in atomic mode that missed in this cache.
void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt, CacheBlk *blk) override
Service non-deferred MSHR targets using the received response.
void recvTimingResp(PacketPtr pkt) override
Handles a response (cache line fill/write ack) from the bus.
Tick recvAtomicSnoop(PacketPtr pkt) override
Snoop for the provided request in the cache and return the estimated time taken.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
void print(std::ostream &o, int verbosity=0, const std::string &prefix="") const
#define panic(...)
This implements a cprintf based panic() function.
Declares a basic cache interface BaseCache.
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
uint64_t Tick
Tick count type.
Declaration of the Packet class.