32#ifndef __ARCH_AMDGPU_VEGA_TLB_COALESCER_HH__
33#define __ARCH_AMDGPU_VEGA_TLB_COALESCER_HH__
44#include "params/VegaTLBCoalescer.hh"
156 fatal(
"recvRespRetry() is not implemented in the TLB "
186 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 void recvReqRetry()
CpuSidePort(const std::string &_name, VegaTLBCoalescer *tlb_coalescer, PortID _index)
virtual Tick recvAtomic(PacketPtr pkt)
Receive an atomic request packet from the peer.
virtual AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
VegaTLBCoalescer * coalescer
virtual void recvFunctional(PacketPtr pkt)
Receive a functional request packet from the peer.
virtual void recvRangeChange()
virtual void recvRespRetry()
Called by the peer if sendTimingResp was called on this protocol (causing recvTimingResp to be called...
virtual bool recvTimingReq(PacketPtr pkt)
Receive a timing request from the peer.
virtual void recvRangeChange()
Called to receive an address range change from the peer response port.
std::deque< PacketPtr > retries
virtual void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
virtual void recvFunctional(PacketPtr pkt)
virtual bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
virtual void recvRespRetry()
MemSidePort(const std::string &_name, VegaTLBCoalescer *tlb_coalescer, PortID _index)
virtual Tick recvAtomic(PacketPtr pkt)
VegaTLBCoalescer * coalescer
The VegaTLBCoalescer is a ClockedObject sitting on the front side (CPUSide) of each TLB.
std::map< Tick, std::vector< coalescedReq > > CoalescingFIFO
statistics::Scalar localqueuingCycles
statistics::Scalar coalescedAccesses
void processCleanupEvent()
CoalescingTable issuedTranslationsTable
void updatePhysAddresses(PacketPtr pkt)
statistics::Scalar queuingCycles
EventFunctionWrapper cleanupEvent
The cleanupEvent is scheduled after a TLBEvent triggers in order to free memory and do the required c...
std::queue< CpuSidePort * > stalledPortsQueue
void incrementNumDownstream()
void decrementNumDownstream()
statistics::Scalar uncoalescedAccesses
std::vector< PacketPtr > coalescedReq
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
std::vector< CpuSidePort * > cpuSidePort
CpuSidePort * stalledPort
std::vector< MemSidePort * > memSidePort
EventFunctionWrapper probeTLBEvent
This event issues the TLB probes.
VegaTLBCoalescer(const VegaTLBCoalescerParams &p)
void insertStalledPortIfNotMapped(CpuSidePort *)
CoalescingFIFO coalescerFIFO
std::unordered_map< Addr, coalescedReq > CoalescingTable
std::map< CpuSidePort *, CpuSidePort * > stalledPortsMap
bool canCoalesce(PacketPtr pkt1, PacketPtr pkt2)
void regStats() override
Callback to set stat parameters.
statistics::Formula localLatency
unsigned int availDownstreamSlots()
std::queue< Addr > cleanupQueue
bool mustStallCUPort(CpuSidePort *)
statistics::Scalar localCycles
unsigned int numDownstream
void processProbeTLBEvent()
statistics::Formula latency
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.