public class SeaOfGatesEngine
extends java.lang.Object
Class to do sea-of-gates routing.
This router replaces unrouted arcs with real geometry. It has these features:
> The router only works in layout, and only routes metal wires.
> The router uses vias to move up and down the metal layers.
> Understands multiple vias and multiple via orientations.
> The router is not tracked: it runs on the Electric grid
> Favors wires on full-grid units
> Tries to cover multiple grid units in a single jump
> Routes power and ground first, then goes by length (shortest nets first)
> Prefers to run odd metal layers on horizontal, even layers on vertical
> Routes in both directions (from A to B and from B to A) and chooses the one that completes first
> Serial method alternates advancing each wavefront, stopping when one completes
> Parallel option runs both wavefronts at once and aborts the slower one
> Users can request that some layers not be used, can request that some layers be favored
> Routes are made as wide as the widest arc already connected to any point
> User preference can limit width
> Cost penalty also includes space left in the track on either side of a segment
Things to do:
At the end of routing, try again with those that failed
Detect "river routes" and route specially
Ability to route to any previous part of route when daisy-chaining?
Lower cost if running over existing layout (on the same net)
Ability to connect to anything on the destination net
Rip-up
Global routing(?)
Sweeping cost parameters (with parallel processors) to find best, dynamically
Forcing each processor to use a different grid track
Characterizing routing task (which parallelism to use)