4 #include "debug/HMCController.hh"
8 n_master_ports(p->port_master_connection_count),
11 assert(p->port_slave_connection_count == 1);
15 HMCControllerParams::create()
24 if (master_port_id == 0)
56 if (!
reqLayers[master_port_id]->tryTiming(src_port)) {
88 bool success =
masterPorts[master_port_id]->sendTimingReq(pkt);
98 reqLayers[master_port_id]->failedTiming(src_port,
105 if (expect_response) {
110 reqLayers[master_port_id]->succeededTiming(packetFinishTime);
113 pktCount[slave_port_id][master_port_id]++;
114 pktSize[slave_port_id][master_port_id] += pkt_size;
Cycles is a wrapper class for representing cycle counts, i.e.
std::vector< ReqLayer * > reqLayers
Declare the layers of this crossbar, one vector for requests and one for responses.
int rotate_counter()
Function for rotating the round robin counter.
const std::string name() const
Return port name (for DPRINTF).
HMCController declaration.
bool isExpressSnoop() const
std::unordered_map< RequestPtr, PortID > routeTo
Remember where request packets came from so that we can route responses to the appropriate port...
A SlavePort is a specialisation of a port.
int cmdToIndex() const
Return the index of this command.
std::vector< bool > gotAddrRanges
Remember for each of the master ports of the crossbar if we got an address range from the connected s...
virtual bool recvTimingReq(PacketPtr pkt, PortID slave_port_id)
Function called by the port when the crossbar is recieving a Timing request packet.
virtual void recvRangeChange(PortID master_port_id)
Function called by the port when the crossbar is recieving a range change.
Tick clockEdge(Cycles cycles=Cycles(0)) const
Determine the tick when a cycle begins, by default the current one, but the argument also enables the...
uint32_t headerDelay
The extra delay from seeing the packet until the header is transmitted.
HMC Controller, in general, is responsible for translating the host protocol (AXI for example) to ser...
uint64_t Tick
Tick count type.
Stats::Vector transDist
Stats for transaction distribution and data passing through the crossbar.
const RequestPtr req
A pointer to the original request.
void calcPacketTiming(PacketPtr pkt, Tick header_delay)
Calculate the timing parameters for the packet.
bool needsResponse() const
bool cacheResponding() const
uint32_t payloadDelay
The extra pipelining delay from seeing the packet until the end of payload is transmitted by the comp...
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
const Cycles frontendLatency
Cycles of front-end pipeline including the delay to accept the request and to decode the address...
HMCController(const HMCControllerParams *p)
A non-coherent crossbar connects a number of non-snooping masters and slaves, and routes the request ...
std::vector< MasterPort * > masterPorts
std::vector< QueuedSlavePort * > slavePorts
The master and slave ports of the crossbar.
const std::string & cmdString() const
Return the string name of the cmd field (for debugging and tracing).
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
const Cycles forwardLatency
Cycles of forward latency.
virtual void recvRangeChange(PortID master_port_id)
Function called by the port when the crossbar is recieving a range change.