NoC ConfigurationΒΆ
Constellation divides the NoC specification into three orthogonal concerns.
Physical specification describes the topology and microarchitecture of the NoC
Flow specification describes what flows the network might expect
Routing specification describes how flows traverse the physical resources of the NoC
The total specification of the NoC is captured in the constellation.noc.NoCParams case class. The total class is depicted below. Please see the subsections for more details.
case class NoCParams(
// Physical specifications
topology: PhysicalTopology = UnidirectionalLine(1),
channelParamGen: (Int, Int) => UserChannelParams = (_, _) => UserChannelParams(),
ingresses: Seq[UserIngressParams] = Nil,
egresses: Seq[UserEgressParams] = Nil,
routerParams: Int => UserRouterParams = (i: Int) => UserRouterParams(),
// Flow specification
// (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,
// Routing specification
routingRelation: PhysicalTopology => RoutingRelation = AllLegalRouting(),
// other
nocName: String = "test",
skipValidationChecks: Boolean = false,
hasCtrl: Boolean = false,
)
A specification is constructed as an instance of a NoCParams
case class. Examples of
specifications can be seen in src/main/scala/test/Configs.scala.