TerminalsΒΆ

Constellation decouples the parameterization of ingress and egress channels from the base routing topology to allow for more flexibility in the described networks. Any router in the network can support many or no ingress and egress channels. The UserIngressParams and UserEgressParams case classes specify where the ingress and egress terminals are.

ingresses=Seq(UserIngressParams(0),
              UserIngressParams(1),
              UserIngressParams(1)),
egresses=Seq(UserEgressParams(0),
             UserEgressParams(3),
             UserEgressParams(3))

terminals

Explicit payload widths should also be specified. Usually, the payload width specified here would match the payload width of the router the terminal connects to.

If the terminal payload width is a multiple or factor of the router payload width, Constellation will auto-generate width converters to either further segment or merge flits.

ingresses = Seq(UserIngressParams(0), payloadBits=128)),
egresses  = Seq( UserEgressParams(0), payloadBits=128)),
routers   = (i) => UserRouterParams(payloadBits=64),

terminal_width

Note

The common use case for payloadWidth is to set the same width for all terminals.

Warning

Be wary of using payload width converters liberally. For example, a 3-flit packet of 64 bits per flit, if up-scaled to a 2-flit packet of 128 bits per flit, will be down-scaled into a 4-flit packet of 64 bits per flit.