-# Copyright (c) 2012, 2015, 2017, 2019 ARM Limited
+# Copyright (c) 2012, 2015, 2017, 2019-2020 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
forward_latency = Param.Cycles("Forward latency")
response_latency = Param.Cycles("Response latency")
+ # The XBar uses one Layer per master. Each Layer forwards a packet
+ # to its destination and is occupied for header_latency + size /
+ # width cycles
+ header_latency = Param.Cycles(1, "Header latency")
+
# Width governing the throughput of the crossbar
width = Param.Unsigned("Datapath width per port (bytes)")
/*
- * Copyright (c) 2011-2019 ARM Limited
+ * Copyright (c) 2011-2020 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
calcPacketTiming(pkt, xbar_delay);
// determine how long to be crossbar layer is busy
- Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
+ Tick packetFinishTime = clockEdge(headerLatency) + pkt->payloadDelay;
// is this the destination point for this packet? (e.g. true if
// this xbar is the PoC for a cache maintenance operation to the
calcPacketTiming(pkt, xbar_delay);
// determine how long to be crossbar layer is busy
- Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
+ Tick packetFinishTime = clockEdge(headerLatency) + pkt->payloadDelay;
if (snoopFilter && !system->bypassCaches()) {
// let the snoop filter inspect the response and update its state
calcPacketTiming(pkt, xbar_delay);
// determine how long to be crossbar layer is busy
- Tick packetFinishTime = clockEdge(Cycles(1)) + pkt->payloadDelay;
+ Tick packetFinishTime = clockEdge(headerLatency) + pkt->payloadDelay;
// forward it either as a snoop response or a normal response
if (forwardAsSnoop) {
/*
- * Copyright (c) 2011-2015, 2018-2019 ARM Limited
+ * Copyright (c) 2011-2015, 2018-2020 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
frontendLatency(p->frontend_latency),
forwardLatency(p->forward_latency),
responseLatency(p->response_latency),
+ headerLatency(p->header_latency),
width(p->width),
gotAddrRanges(p->port_default_connection_count +
p->port_master_connection_count, false),
/*
- * Copyright (c) 2011-2015, 2018-2019 ARM Limited
+ * Copyright (c) 2011-2015, 2018-2020 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
const Cycles frontendLatency;
const Cycles forwardLatency;
const Cycles responseLatency;
+ /** Cycles the layer is occupied processing the packet header */
+ const Cycles headerLatency;
/** the width of the xbar in bytes */
const uint32_t width;