Skip to main content

Module node

Module node 

Source
Expand description

A functional implementation of a fabric with very basic timing.

Assumes that all traffic will move a Manhattan distance through the fabric to get from ingress to egress.

The fabric is assumed to be rectangular with a configurable num_rows and num_columns. The grid has a configurable number of ports at each node within the fabric grid.

§Ports

Each point in the fabric grid has a configurable number

where:

  • N = number of ingress/egress ports.

The Node is constructed with fabric row and column ports in addition to the N ingress/egress ports:

+-------------------------------------------------------+
| ingress[0..N-1]       row_minus                       |
|                                                       |
| col_minus                                    col_plus |
|                                                       |
| egress[0..N-1]        row_plus                        |
+-------------------------------------------------------+

A full fabric model is built of existing limiters, buffers, arbiters and routers such that the path of a frame from ingress to egress could look like:

         +-------------------------------------+       +-------------------------------------+
         |              NODE0                  |       |                 NODE1               |
 INGRESS -> LIMIT -> BUF -> ROUTER -> ARBITER -> DELAY -> ROUTER -> ARBITER -> LIMIT -> BUF -> EGRESS
         |                                     |       |                                     |
         +-------------------------------------+       +-------------------------------------+

Each Router performs the task of taking the frame from an input and deciding which arbiter to send the frame to. For example, if there were two fabric ingress/egress ports per node then the router at one of those ingress ports would look like:

            +--------------------------------------------+
            |                  NODE                      |
            |               +---------------+            |
            |               |     ROUTER    |  ARBITERS  |
            |               |               |            |
            |               |     /-> tx[0] -> col_minus |
            |               |     +-> tx[1] -> col_plus  |
 ingress[0] -> LIMIT -> BUF -> rx +-> tx[2] -> row_minus |
            |               |     +-> tx[3] -> row_plus  |
            |               |     \-> tx[4] -> egress[1] |
            |               +---------------+            |
            +--------------------------------------------+

Each Arbiter does the job of deciding which frame to send next from those available on their inputs. For example, again considering a fabric with two ingress/egress ports per node, the arbiter at one of the egress ports would look like:

 +-------------------------------------------+
 |                    NODE                   |
 |           +---------------+               |
 |  ROUTERS  |     ARBITER   |               |
 |           |               |               |
 | col_minus -> rx[0] \      |               |
 | col_plus  -> rx[1] +      |               |
 | row_minus -> rx[2] +-> tx -> LIMIT -> BUF -> egress[0]
 | row_plus  -> rx[3] +      |               |
 | egress[1] -> rx[4] /      |               |
 |           +---------------+               |
 +-------------------------------------------+

Structs§

FabricNode

Enums§

FabricRoutingAlgorithm
Port