Routing Configuration¶
In Constellation, the desired routing relation is specified by the user as an abstract Scala function, instead of an RTL implementation of a routing table. Constellation will use this function to “compile” a hardware implementation of the desired routing algorithm.
abstract class RoutingRelation(topo: PhysicalTopology) {
// Child classes must implement these
def rel (srcC: ChannelRoutingInfo,
nxtC: ChannelRoutingInfo,
flow: FlowRoutingInfo): Boolean
def isEscape (c: ChannelRoutingInfo,
vNetId: Int): Boolean = true
def getNPrios (src: ChannelRoutingInfo): Int = 1
def getPrio (srcC: ChannelRoutingInfo,
nxtC: ChannelRoutingInfo,
flow: FlowRoutingInfo): Int = 0
Channel Identifier¶
The ChannelRoutingInfo case class uniquely identifies a virtual channel,
ingress channel, or egress channel in the system.
case class ChannelRoutingInfo(
src: Int,
dst: Int,
vc: Int,
n_vc: Int
) {
The fields of this case class are:
srcis the source physical node of the channel. If this is an ingress channel, this value is -1.
dstis the destination physical node of the channel. If this is an egress channel, this value is -1.
vcis the virtual channel index within the channel.
n_vcis the number of available virtual channels in this physical channel.
Consider a toy network depicted below with bidirectional physical channels, and two
virtual channels on each physical channel. The list of all possible ChannelRoutingInfo
in this network is shown
// Ingresses
ChannelRoutingInfo(src=-1, dst=0, vc=0, n_vc=1)
ChannelRoutingInfo(src=-1, dst=1, vc=0, n_vc=1)
// Egresses
ChannelRoutingInfo(src=0, dst=0, vc=0, n_vc=1)
ChannelRoutingInfo(src=0, dst=3, vc=0, n_vc=1)
// Routing channels
ChannelRoutingInfo(src=0, dst=1, vc=0, n_vc=2)
ChannelRoutingInfo(src=0, dst=1, vc=1, n_vc=2)
ChannelRoutingInfo(src=1, dst=0, vc=0, n_vc=2)
ChannelRoutingInfo(src=1, dst=0, vc=1, n_vc=2)
...
|
Note
In the current implementations, packets arriving at the egress physical node are
always directed to the egress. Thus, ChannelRoutingInfo for the egress channels are
not used. Additionally, this limitation prevents the implementation of deflection
routing algorithms
Flow Identifier¶
The FlowRoutingInfo case class uniquely identifies a potential flow, or packet
that might traverse the NoC.
case class FlowRoutingInfo(
ingressId: Int,
egressId: Int,
vNetId: Int,
ingressNode: Int,
ingressNodeId: Int,
egressNode: Int,
egressNodeId: Int,
fifo: Boolean
) {
The fields of this case class are:
ingressIdis the ingress index of the flow.
ingressNodeis the physical node of the ingress of this flow.
ingressNodeIdis the index of the ingress within all ingresses at the physical node.
egressIdis the egress index of the flow
egressNodeis the physical node of the egress of this flow
egressNodeIdis the physical node of the egress within all egresses at the physical node
vNetIdis the virtual subnetwork identifier of this flow
As an example, consider the same topology with two virtual subnetworks, for odd and even ingress and egresses.
egressId
ingressNodeId | egressNode
ingressNode | | | egressNodeId
ingressId | | | | | vNetId
| | | | | | |
FlowRoutingInfo(0, 0, 0, 0, 0, 0, 0)
FlowRoutingInfo(0, 0, 0, 2, 3, 1, 0)
FlowRoutingInfo(0, 0, 0, 2, 3, 1, 0)
FlowRoutingInfo(2, 1, 1, 0, 0, 0, 0)
FlowRoutingInfo(2, 1, 1, 2, 3, 1, 0)
FlowRoutingInfo(2, 1, 1, 2, 3, 1, 0)
FlowRoutingInfo(1, 1, 1, 1, 3, 1, 1)
FlowRoutingInfo(1, 1, 1, 1, 3, 1, 1)
FlowRoutingInfo(1, 1, 1, 1, 3, 1, 1)
|
Base Routing Relations¶
Numerous builtin routing relations are provided. These provide deadlock-free routing for the included topology generators.
RoutingRelation |
Description |
|---|---|
|
Allows any packet to transition to any VC. Only useful for trivial networks |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Routing for a |
|
Escape-channel based adaptive minimal routing for
|
|
Routing for the |
|
Routing for the |
|
Routing for any |
|
Routing for any |
Note
To guarantee deadlock-freedom, both ShortestPathGeneralizedDatelineRouting and CustomLayeredRouting require
sufficient virtual channels to be available.
For
ShortestPathGeneralizedDatelineRouting, the number of VCs needed equals the maximum number of dateline crossings on any path plus one.For
CustomLayeredRouting, the number of VCs must match the number of packed layers computed during path decomposition.
These are automatically computed before elaboration. If an insufficient number of VCs is specified, the Chisel elaboration step may fail to complete successfully.
The required number of VCs will be printed during hardware generation in the chisel.log file.
Different algorithms may produce different VC requirements depending on the structure of the topology. These trade-offs should be considered when selecting a routing relation for your system.
In practice:
ShortestPathGeneralizedDatelineRoutingoften requires fewer VCs but enforces VC transitions only at datelines.
CustomLayeredRoutingmay use more VCs but guarantees a purely acyclic per-flow assignment.
Compositional Routing Relations¶
Several compositional routing relation classes are provided.
Escape Channel Routing¶
Escape-channel based routing can be used to build deadlock-free adaptive routing policies. When the routing policy on the escape virtual channels is deadlock-free, and packets in the escape channels cannot route on the non-escape virtual channels, the resulting policy is deadlock-free, even if circular dependencies exist among the non-escape virtual channels.
The EscapeChannelRouting class has three parameters:
escapeRouter: the base deadlock-free routing algorithm that will be used on the escape VCs.
normalRouter: the routing algorithm for all non-escape VCs.
nEscapeChannels: the number of VCs to dedicate for escape channels on each physical channel
For example, a Mesh2DEscapeRouting algorithm with two escape channels using dimension-orderd routing
can be described as:
EscapeChannelRouting(
escapeRouter = Mesh2DDimensionOrderedRouting(),
normalRouter = Mesh2DMinimalRouting(),
nEscapeChannels = 2
)
Note
ShortestPathRouting can also be used as the normalRouter in EscapeChannelRouting,
particularly when targeting CustomTopology configurations.
Terminal Router Routing¶
TerminalRouter topologies require the TerminalRouterRouting routing relation.
The baseRouting field is the base routing relation used to route among the non-terminal
routers in the topology.
topolog = TerminalRouter(BidirectionalLine(4))routing = TerminalRouterRouting(BidirectionalLineRouting()) |
Hierarchical Topology Routing¶
Hierarchical toplogies require the HierarchicalRouting routing relation.
The baseRouting field is the routing relation for the base topology, while the
childRouting field is alist of routing relations for the sub-topologies.
Hierarchical routing can be composed with terminal router routing.
topology = HierarchicalTopology(
base = UnidirectionalTorus1D(4),
children = Seq(
HierarchicalSubTopology(0,2,BidirectionalLine(5)),
HierarchicalSubTopology(2,1,BidirectionalLine(3))
)
)
routing = HierarchicalRouting(
baseRouting = UnidirectionalTorus1DDatelineRouting(),
childRouting = Seq(
BidirectionalLineRouting(),
BidirectionalLineRouting()
)
)
|
|
topology = TerminalRouter(HierarchicalTopology(
base = UnidirectionalTorus1D(4),
children = Seq(
HierarchicalSubTopology(0,2,BidirectionalLine(5)),
HierarchicalSubTopology(2,1,BidirectionalLine(3))
)
))
routing = TerminalRouter(HierarchicalRouting(
baseRouting = UnidirectionalTorus1DDatelineRouting(),
childRouting = Seq(
BidirectionalLineRouting(),
BidirectionalLineRouting()
)
)
|
Virtual Subnetwork Routing Relations¶
A special class of compositional routing relations can enforce forwards progress on networks with multiple virtual subnetworks.
The
NonblockingVirtualSubnetworksRoutingpolicy guarantees all virtual subnetworks on the network can always make forwards progress by dedicating some number of virtual channels to each subnetwork.The
BlockingVirtualSubnetworksRoutingpolicy guarantees that lower-indexed virtual subnetworks can always make forwards progress while higher-indexed virtual subnetworks are blocked.