RapidWright icon indicating copy to clipboard operation
RapidWright copied to clipboard

Various RWRoute cleanup/optimizations/refactoring

Open eddieh-xlnx opened this issue 2 years ago • 1 comments

New functionality:

  • Partial router can now cope with partially-routed nets. Previously, only nets which are fully unrouted (i.e. with no PIPs present) were considered for partial routing. Now, nets with one or more unrouted sink pins can be considered for routing by adding it to the pinsToRoute constructor argument. All existing routing on such nets are preserved (even incomplete routing that forms an antennae) and placed into the routing graph with their correct costs for use in routing new connections from the same net, but not available for any other nets to use.
  • Soft preserve mode of the partial router has also been augmented to support this functionality. When a net is unpreserved, it is not automatically ripped up -- its routing resources are simply exposed for other nets to use should they need to do so. The end result is that only the previously-preserved-net's connections containing overused resources will be rerouted.
  • The act of preserving a net's routed nodes is done in parallel using ParallelismTools.

Fixes:

  • Slack is computed correctly for timing-driven flows based on timing requirement; previously, the timing requirement was always set to be the maximum arrival time meaning that minimum slack was always zero.
  • Optimized SLR crossings -- costing estimates improved for SLR-crossing connections, bounding box also enlarged if necessary to ensure that SLL can be reached

Refactors:

  • Routable (interface) and RoutableNode (class) merged and refactored into the RouteNode abstract class.
  • New class RouteNodeGraph to encapsulate all routing graph operations, refactored out of RWRoute
  • New class RouteNodeGraphTimingDriven extends RouteNodeGraph with timing driven capabilities
  • RWRoute refactored to move subclass (e.g. PartialRouter, RapidStreamRoute) functionality into the subclass
  • As a result of the above point, RWConfig has had subclass specific options removed, replaced by constructor parameters to those subclasses.
  • RoutingNode refactored into LightweightRouteNode.

eddieh-xlnx avatar Mar 15 '22 18:03 eddieh-xlnx

Unit Test Results

  45 files    45 suites   15m 1s :stopwatch: 631 tests 622 :heavy_check_mark: 9 :zzz: 0 :x: 650 runs  641 :heavy_check_mark: 9 :zzz: 0 :x:

Results for commit 471d3480.

:recycle: This comment has been updated with latest results.

github-actions[bot] avatar Mar 15 '22 18:03 github-actions[bot]