public class UltraScaleClockRouting
extends Object
Constructor and Description |
---|
UltraScaleClockRouting() |
Modifier and Type | Method and Description |
---|---|
static Map<ClockRegion,Set<RouteNode>> |
getStartingPoints(List<RouteNode> distLines) |
static void |
incrementalClockRouter(Design design,
Net clkNet,
Function<Node,NodeStatus> getNodeStatus)
Routes a partially routed clock.
|
static void |
incrementalClockRouter(Net clkNet,
List<SitePinInst> clkPins,
Function<Node,NodeStatus> getNodeStatus)
Routes a list of unrouted pins from a partially routed clock.
|
static RouteNode |
routeBUFGToNearestRoutingTrack(Net clk) |
static Map<ClockRegion,RouteNode> |
routeCentroidToVerticalDistributionLines(Net clk,
RouteNode centroidDistNode,
Collection<ClockRegion> clockRegions,
Function<Node,NodeStatus> getNodeStatus)
Routes the vertical distribution path and generates a map between each target clock region and the vertical distribution line to
start from.
|
static void |
routeDistributionToLCBs(Net clk,
List<RouteNode> distLines,
Set<RouteNode> lcbTargets)
Routes from distribution lines to the leaf clock buffers (LCBs)
|
static void |
routeLCBsToSinks(Net clk,
Map<RouteNode,List<SitePinInst>> lcbMappings,
Function<Node,NodeStatus> getNodeStatus) |
static RouteNode |
routeToCentroid(Net clk,
RouteNode clkRoutingLine,
ClockRegion centroid)
Routes a clock from a routing track to a transition point called the centroid
where the clock fans out and transitions from clock routing tracks to clock distribution
tracks
|
static RouteNode |
routeToCentroid(Net clk,
RouteNode startingRouteNode,
ClockRegion clockRegion,
boolean adjusted,
boolean findCentroidHroute)
Routes a clock from a routing track to a transition point where the clock.
|
static RouteNode |
routeToCentroidNode(Net clk,
RouteNode startingRouteNode,
Node centroid)
Routes a clock from a routing track to a given transition point called the centroid
|
static List<RouteNode> |
routeToHorizontalDistributionLines(Net clk,
RouteNode vroute,
Collection<ClockRegion> clockRegions,
boolean down,
Function<Node,NodeStatus> getNodeStatus)
Routes from a GLOBAL_VERTICAL_ROUTE to horizontal distribution lines.
|
static void |
routeToLCBs(Net clk,
Map<ClockRegion,Set<RouteNode>> startingPoints,
Set<RouteNode> lcbTargets) |
static List<RouteNode> |
routeVerticalToHorizontalDistributionLines(Net clk,
Map<ClockRegion,RouteNode> crMap,
Function<Node,NodeStatus> getNodeStatus)
Routes from a vertical distribution centroid to destination horizontal distribution lines
in the clock regions provided.
|
static RouteNode |
transitionCentroidToDistributionLine(Net clk,
RouteNode centroidRouteLine)
Routes the centroid route track to a vertical distribution track to realize
the centroid and root of the clock.
|
static RouteNode |
transitionCentroidToDistributionLine(Net clk,
RouteNode centroidRouteLine,
ClockRegion cr) |
static RouteNode |
transitionCentroidToVerticalDistributionLine(Net clk,
RouteNode centroidRouteLine,
boolean down) |
public static RouteNode routeToCentroid(Net clk, RouteNode clkRoutingLine, ClockRegion centroid)
clk
- The current clock net to contribute routingclkRoutingLine
- The intermediate start point of the clock routecentroid
- ClockRegion/FSR considered to be the centroid targetpublic static RouteNode routeToCentroid(Net clk, RouteNode startingRouteNode, ClockRegion clockRegion, boolean adjusted, boolean findCentroidHroute)
clk
- The current clock net to contribute routing.startingRouteNode
- The intermediate start point of the clock route.clockRegion
- The center clock region or the clock region that is one row above or below the center.adjusted
- A flag to guard the default functionality when routing to centroid clock region.findCentroidHroute
- The flag to indicate the returned RouteNode should be HROUTE in the center or VROUTE going up or down.public static RouteNode routeToCentroidNode(Net clk, RouteNode startingRouteNode, Node centroid)
clk
- The clock net to be routedstartingRouteNode
- The starting routing trackcentroid
- The given centroid nodepublic static RouteNode transitionCentroidToDistributionLine(Net clk, RouteNode centroidRouteLine)
clk
- Clock net to routecentroidRouteLine
- The current routing track found in the centroidpublic static RouteNode transitionCentroidToVerticalDistributionLine(Net clk, RouteNode centroidRouteLine, boolean down)
public static RouteNode transitionCentroidToDistributionLine(Net clk, RouteNode centroidRouteLine, ClockRegion cr)
public static Map<ClockRegion,RouteNode> routeCentroidToVerticalDistributionLines(Net clk, RouteNode centroidDistNode, Collection<ClockRegion> clockRegions, Function<Node,NodeStatus> getNodeStatus)
clk
- The clock net.centroidDistNode
- Starting point vertical distribution lineclockRegions
- The target clock regions.public static List<RouteNode> routeVerticalToHorizontalDistributionLines(Net clk, Map<ClockRegion,RouteNode> crMap, Function<Node,NodeStatus> getNodeStatus)
clk
- The current clock netcrMap
- A map that provides a RouteNode reference for each ClockRegionpublic static void routeDistributionToLCBs(Net clk, List<RouteNode> distLines, Set<RouteNode> lcbTargets)
clk
- The current clock netlcbTargets
- The target LCB nodes to route the clockpublic static Map<ClockRegion,Set<RouteNode>> getStartingPoints(List<RouteNode> distLines)
public static void routeToLCBs(Net clk, Map<ClockRegion,Set<RouteNode>> startingPoints, Set<RouteNode> lcbTargets)
public static void routeLCBsToSinks(Net clk, Map<RouteNode,List<SitePinInst>> lcbMappings, Function<Node,NodeStatus> getNodeStatus)
clk
- lcbMappings
- getNodeStatus
- Lambda for indicating the status of a Node: available, in-use (preserved
for same net as we're routing), or unavailable (preserved for other net).public static List<RouteNode> routeToHorizontalDistributionLines(Net clk, RouteNode vroute, Collection<ClockRegion> clockRegions, boolean down, Function<Node,NodeStatus> getNodeStatus)
clk
- The clock net to be routed.vroute
- The node to start the route.clockRegions
- Target clock regions.down
- To indicate if it is routing to the group of top clock regions.public static void incrementalClockRouter(Design design, Net clkNet, Function<Node,NodeStatus> getNodeStatus)
DesignTools.createMissingSitePinInsts(Design, Net)
to discover those not
yet routed.design
- The current designclkNet
- The partially routed clock net to make fully routedgetNodeStatus
- Lambda for indicating the status of a Node: available, in-use (preserved
for same net as we're routing), or unavailable (preserved for other net).public static void incrementalClockRouter(Net clkNet, List<SitePinInst> clkPins, Function<Node,NodeStatus> getNodeStatus)
clkNet
- The partially routed clock net to make fully routedclkPins
- A list of unrouted pins on the clock net to routegetNodeStatus
- Lambda for indicating the status of a Node: available, in-use (preserved
for same net as we're routing), or unavailable (preserved for other net).