Skip to content

Routing

The second aspect of the network is how the routing is performed in FlooNoC, which is where FlooGen comes into play. A lot of of the routing information is quite cumbersome to define and error-prone to do by hand. FlooGen allows you to define the routing in a high-level way, and it will generate the low-level routing information for you. The basic information you need to provide is:

routing:
  route_algo: "XY"
  use_id_table: true

The class that holds essentially all the routing information needed.

Attributes:

Name Type Description
route_algo RouteAlgo

This determines the routing algorithm to use. You can find more information about the different routing algorithms in the routing algorithms documentation.

use_id_table bool

A boolean flag indicating that if set to true, a system address table will be generated in the package which is used to translate system addresses to endpoint IDs or coordinates. This is always used in table-based routing and can be used in XYRouting to translate system addresses to XY-coordinates. If XYRouting is used and this field is set to false, the XY coordinates are automatically derived as address offsets. This is much simpler but requires that all endpoint addresses are contiguous and of the same size.

rob_idx_bits int

The number of bits to allocate for the rob_idx field in the packet header. This is only relevant if reordering buffers are used in the network.

collective CollectiveCfg

Collective operation configuration (multicast, barrier, reduction).

Reference

As seen in the attributes above, there is a lot of information that is automatically generated by FlooGen in addition to the user configuration, such as the System address map (sam), routing tables (table), etc.

The full API reference of the routing model, including methods and other routing-related classes (e.g., RouteMap, RouteTable), can be found in the Routing Reference.