next up previous contents index
Next: Use with Xic Up: Introduction to MRouter Previous: MRouter Overview   Contents   Index

Theory of Operation

The MRouter is a maze router, which is terminology that describes a routing program that makes use of the Lee algorithm. On oversimplified description of the Lee algorithm is as follows.

  1. The routing space is logically divided into an x-y grid of routing channels. We will assume that each layer has the same routing pitch for simplicity. From each routing grid location, one can logically move north, south, east, west, and up or down.

  2. Obstructions and pins from placed gate instances are added to the grid by setting flags in the overlapping grid locations. These indicate locations where it is not possible to "travel".

  3. Suppose you have a route with two connections: the source and the target. Both the source and target consist initially of a set of one or more points, each marked accordinly. One iteratively visits all of the non-obstructed grid points adjacent to a previously visited grid point, whth the initial points being the source. Iteration continues until a new point falls on a target location. We have then found a route through the maze.

  4. Nets with more than two connections are handled analogously.

  5. Once a complete route is found, we then "commit" the route by marking all of the grid points that the route covers, which are then treated like obstructions when finding routes on other nets.

Maze routers are most successful for small to medium designs, as they are compute and memory intensive. They do have the advantage that if a layout is routable, the Lee algorithm will find a route, and the route will be the lowest cost (perhaps shortest) of any alternatives.

MRouter (and Qrouter) use extensions to the basic Lee algorithm in order to reduce routing timer. First of all, routing is a two stage process. In stage 1, we route as much as can be routed, but typically some fraction of the nets will be painted into a corner and not be routable. We keep a "failed route" list of these routes. In stage 2, we use a different approach. For each route in the failed list, we will find a best route while ignoring collisions with existing routes. If this succeeds, we then find the routes that collide, rip them up, and add them to the end of the failed route list. We continue processing the failed route list until all nets are routed, or stage 2 can no longer make progress and stalls.

One important factor is the use of masking and multiple passes when finding routes. The mask identifies grid points that are candidates for searching for a route. We attempt to identify where a solution is likely to be found, and enable this area, plus some "slop" space. This minimizes the number of grid locations that need processing, speeding up the finding of nets, at least until congestion becomes heavy. As congestion becomes heavier, one has to increase the size of the mask open areas to find a solution. To find the last of the nets, one may work with no mask at all. This is resource consuming, but may be the only way to find nets that need to wander a long way off-course in order to finally make the connection.

When finding a route, we try an initial pass with a tight mask. If that fails, we perform subsequent passes, each time increasing the open area of the mask, until we have success or reach a limit on the number of passes.


next up previous contents index
Next: Use with Xic Up: Introduction to MRouter Previous: MRouter Overview   Contents   Index
Stephen R. Whiteley 2017-02-17