Now that the modules have been placed horizontally and ordered
vertically, and each wire that needs to be routed has a goal column
for every level it must pass through, routing can proceed. Routing
proceeds from the outputs, up through the levels, to the inputs (thus
routing proceeds in the opposite direction of the flow of
data). The routing algorithm maintains the following state: the
current level and the set of wires, , that are currently being
routed. It proceeds as follows:
As wires are being routed, a number of conflicts can arise. These include two wires interacting (such as needing to cross) or a wire needing to move left or right and not being able to (because it is already at the left or right side of a processor, and thus can't go sideways on the current level). Such conflicts are resolved according to the appropriate entry in Table 3.1. For example, if the wire entering on the left side of the node needs to go right and the wire entering on the right side of the node needs to go left, a crossover should be placed at the current location. Likewise if only one wire is entering the node, is entering on the left, and needs to go left, a passthrough should be placed since the wire will be able to move left on the next level up (because of the alternate-slant architecture).
The only conflict not covered by this table is the case where two
wires are entering a node and have the same goal column for the
current level. In this case, the wires should be combined by using a
left or right broadcast and removing one of the wires from the current
wire list .