Flow Specification¶
The NoC’s flow specification consits of two components.
// (blocker, blockee) => bool
// If true, then blocker must be able to proceed when blockee is blocked
vNetBlocking: (Int, Int) => Boolean = (_, _) => true,
flows: Seq[FlowParams] = Nil,
Flows¶
The flows field of NoCParams is a list of FlowParams case classes, where each flow
uniquely identifies its source ingress terminal, destination egress terminal, and the virtual
subnetwork identifier.
The flows parameter is motivated by the observation that the actually supported traffic
patterns in a NoC is a subset of all possible ingress-egress pairs. Constellation can optimize
the generated RTL for only the flows the network is expected to handle at runtime.
case class FlowParams(
ingressId: Int,
egressId: Int,
vNetId: Int,
fifo: Boolean = false
)
The ingressId and egressId fields index the specified ingresses and egresses of the
NoC. That is, the ingress/egress indices decouple the flow specification from the underlying
physical implementation of the network
The vNetId field can be used to specify a virtual subnetwork identifier to the flow.
Virtual subnetworks are used to delineate between different channels of a actual messaging
protocol, and is necessary for avoiding protocol-deadlock.
Virtual Subnetworks¶
The vNetBlocking function indicates which virtual subnetworks must make forwards progress
while some other virtual subnetwork is blocked. If vNetBlocking(x, y) == true, then packets
from subnetwork x must make forwards progress while packets of subnetwork y are stalled.