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.