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;
bool isExpressSnoop() const
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.
HMCController declaration.
std::unordered_map< RequestPtr, PortID > routeTo
Remember where request packets came from so that we can route responses to the appropriate port...
bool cacheResponding() const
A SlavePort is a specialisation of a port.
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)
virtual void recvRangeChange(PortID master_port_id)
Function called by the port when the crossbar is recieving a range change.
RequestPtr req
A pointer to the original request.
bool needsResponse() const
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.
void calcPacketTiming(PacketPtr pkt, Tick header_delay)
Calculate the timing parameters for the packet.
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...
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...
HMCController(const HMCControllerParams *p)
A non-coherent crossbar connects a number of non-snooping masters and slaves, and routes the request ...
int cmdToIndex() const
Return the index of this command.
std::vector< MasterPort * > masterPorts
std::vector< QueuedSlavePort * > slavePorts
The master and slave ports of the crossbar.
const std::string name() const
Return port name (for DPRINTF).
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
const Cycles forwardLatency
const std::string & cmdString() const
Return the string name of the cmd field (for debugging and tracing).
virtual void recvRangeChange(PortID master_port_id)
Function called by the port when the crossbar is recieving a range change.