Channels¶
channelParamGen is a function which determines the channel parameters for each directed
channel in the network. For every edge dictated by the PhysicalTopology, this function is called
to determine the channel parameters for that edge.
This function can return a different set of parameters for each edge.
case class UserChannelParams(
virtualChannelParams: Seq[UserVirtualChannelParams] =
Seq(UserVirtualChannelParams()),
channelGen: Parameters => ChannelOutwardNode => ChannelOutwardNode =
p => u => u,
crossingType: ClockCrossingType = NoCrossing,
useOutputQueues: Boolean = true,
unifiedBuffer: Boolean = true,
srcSpeedup: Int = 1,
destSpeedup: Int = 1
) {
val nVirtualChannels = virtualChannelParams.size
}
case class UserVirtualChannelParams(
bufferSize: Int = 1
)
Virtual Channels¶
The virtualChannelParams field contains a list of UserVirtualChannelParams objects, where
the each element represents one virtual channel, and the UserVirtualChannelParams object holds
the number of buffer entries for that virtual channel.
Channel Generation¶
Currently, the channelGen field is only used to specify adding additional pipeline buffers in
a channel.
For example, the following segment sets a two-deep buffer on the channel.
channelGen = (u) => {
implicit val p: Parameters = u
ChannelBuffer(2) := _
}
Note
In the future more functionality can be added through this interface.
Speedup¶
srcSpeedup indicates the number of flits that may enter a channel in a cycle.
For srcSpeedup > 1, the generator will effectively increase the input bandwidth of
the channel.
destSpeedup indicates the number of flits that may exit a channel in a cycle.
Increasing this pressures the routing resources and switch of the destination router.
Note
Setting srcSpeedup > destSpeedup is an unusual design point.
Clock Crossings¶
Currently unsupported. One day this will allow auto insertion of clock crossings between routers of the network on different clock domains.