32#ifndef __TLB_COALESCER_HH__
33#define __TLB_COALESCER_HH__
49#include "params/TLBCoalescer.hh"
101 typedef std::map<int64_t, std::vector<coalescedReq>>
143 fatal(
"recvRespRetry() is not implemented in the TLB "
173 fatal(
"recvRespRetry() not implemented in TLB coalescer");
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Ports are used to interface objects to each other.
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
A ResponsePort is a specialization of a port.
virtual Tick recvAtomic(PacketPtr pkt)
Receive an atomic request packet from the peer.
virtual void recvRespRetry()
Called by the peer if sendTimingResp was called on this protocol (causing recvTimingResp to be called...
virtual AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
virtual void recvReqRetry()
virtual void recvFunctional(PacketPtr pkt)
Receive a functional request packet from the peer.
CpuSidePort(const std::string &_name, TLBCoalescer *tlb_coalescer, PortID _index)
virtual void recvRangeChange()
virtual bool recvTimingReq(PacketPtr pkt)
Receive a timing request from the peer.
virtual void recvFunctional(PacketPtr pkt)
virtual void recvRespRetry()
virtual void recvRangeChange()
Called to receive an address range change from the peer response port.
std::deque< PacketPtr > retries
virtual bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
virtual Tick recvAtomic(PacketPtr pkt)
virtual void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
MemSidePort(const std::string &_name, TLBCoalescer *tlb_coalescer, PortID _index)
The TLBCoalescer is a ClockedObject sitting on the front side (CPUSide) of each TLB.
TLBCoalescerParams Params
std::queue< Addr > cleanupQueue
gem5::TLBCoalescer::TLBCoalescerStats stats
CoalescingTable issuedTranslationsTable
std::vector< MemSidePort * > memSidePort
void updatePhysAddresses(PacketPtr pkt)
EventFunctionWrapper cleanupEvent
The cleanupEvent is scheduled after a TLBEvent triggers in order to free memory and do the required c...
void processCleanupEvent()
EventFunctionWrapper probeTLBEvent
This event issues the TLB probes.
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
std::map< int64_t, std::vector< coalescedReq > > CoalescingFIFO
std::vector< PacketPtr > coalescedReq
CoalescingFIFO coalescerFIFO
TLBCoalescer(const Params &p)
bool canCoalesce(PacketPtr pkt1, PacketPtr pkt2)
void processProbeTLBEvent()
std::vector< CpuSidePort * > cpuSidePort
std::unordered_map< Addr, coalescedReq > CoalescingTable
This is a simple scalar statistic, like a counter.
ClockedObject declaration and implementation.
#define fatal(...)
This implements a cprintf based fatal() function.
ProbePointArg< PacketInfo > Packet
Packet probe point.
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
const PortID InvalidPortID
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
uint64_t Tick
Tick count type.
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
Declaration of Statistics objects.
statistics::Scalar queuingCycles
statistics::Scalar localqueuingCycles
statistics::Formula localLatency
statistics::Scalar coalescedAccesses
statistics::Scalar uncoalescedAccesses
TLBCoalescerStats(statistics::Group *parent)