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.