public class Router extends AbstractRouter
Modifier and Type | Field and Description |
---|---|
static boolean |
ENABLE_LUT_INPUT_SWAP |
static boolean |
ENABLE_RIPUP |
static int |
LONG_LINE_THRESHOLD |
Modifier and Type | Method and Description |
---|---|
ClockRegion |
calcClockTreeCentroid() |
boolean |
checkClkResource(RouteNode clkNode) |
Wire |
checkSink(RouteNode myNode) |
RouteNode |
clkBufToClkRoutes(RouteNode src,
boolean debug) |
RouteNode |
clkToSink(RouteNode clkHDistNode,
boolean debug) |
void |
elaboratePhysicalNets()
Assumes design is fully placed and that all site nets are routed
but that not all physical nets (
Net ) or physical pins
(SitePinInst ) have been created. |
static ArrayList<RouteNode> |
findInputPinFeed(SitePinInst p)
Attempts to find a switch box wire that will drive the site pin provided.
|
RouteNode |
findSwitchBoxInput(RouteNode src) |
static List<String> |
getAlternativeLUTInputs(SitePinInst currSink)
Checks the current sink LUT to see if there are any alternative LUT input pins
that could be used instead
|
int |
getClkNumber(RouteNode clkNode) |
RouteNode |
getHDfromBUF(RouteNode routeNode,
boolean debug) |
RouteNode |
getHDISTRCol(RouteNode hDistr,
boolean debug) |
RouteNode |
getHDISTRfromVHROUTE(RouteNode clkRoute,
boolean debug) |
RouteNode |
getRAMSink(RouteNode sink) |
PBlock |
getRoutingPblock() |
HashSet<RouteNode> |
getSourcesFromPIPs(List<PIP> pips,
HashSet<RouteNode> sources)
Creates sources from a list of PIPs
|
void |
identifyMissingPins() |
boolean |
isClockResource(RouteNode tmpRoute) |
boolean |
isRoutable(RouteNode rn,
int depth)
Looks backwards from an input pin depth number of hops to see if there
exists at least one free path.
|
boolean |
isSupressWarningsErrors() |
static boolean |
isSwitchBox(Tile t) |
static void |
main(String[] args) |
void |
markAndUpdateNetPIPsAsUsed() |
void |
markExistingRouteResourcesUsed()
This router will preserve all existing routes (even partials) intact.
|
void |
prepareSinkPinsForRouting(SitePinInst currSource,
SitePinInst currPin)
Updates class members with the current route information
|
void |
printClkNodeInfo(RouteNode myNode,
String myString) |
void |
reserveCriticalNodes()
Certain input pins in a switch box can also serve as a bounce.
|
void |
reserveCriticalNodes(ArrayList<SitePinInst> sitePinInsts) |
RouteNode |
routeCentroidToSinkClkRegion(RouteNode clkRoute,
boolean debug) |
void |
routeClockNet() |
void |
routeClockTrees(boolean debug,
SitePinInst currSource) |
Design |
routeDesign()
This the central method for routing the design in this class.
|
void |
routeNet()
This method routes all the connections within a net.
|
void |
routePinsReEntrant(ArrayList<SitePinInst> sitePinInsts,
boolean routeUnroutedNets)
This is a specialized routing function that will only route the pins given.
|
void |
routeStaticNet() |
void |
routeStaticNets() |
RouteNode |
routeToCentroid(RouteNode clkRoute,
boolean debug) |
void |
setClkCostDistance(RouteNode src,
RouteNode sink) |
void |
setClkCostLevel(RouteNode src) |
void |
setRoutingPblock(PBlock routingPblock) |
void |
setSupressWarningsErrors(boolean supressWarningsErrors) |
static void |
swapLUTInputPins(SitePinInst lutInput,
String newPinName)
Changes the physical pin mapping of lutInput to an alternate physical pin
on a LUT in provide for an alternative routing solution.
|
void |
swapLUTPinForUnused(SitePinInst p) |
addInitialSourceForRouting, getDesign, getReservedNodes, getReservedNodesForNet, getSourcesFromPIPs, isClkPin, isNodeUsed, isNodeUsed, markNodeUsed, markPIPsAsUsed, setCost
public static boolean ENABLE_RIPUP
public static boolean ENABLE_LUT_INPUT_SWAP
public static final int LONG_LINE_THRESHOLD
public Router(Design design)
public PBlock getRoutingPblock()
public void setRoutingPblock(PBlock routingPblock)
public void prepareSinkPinsForRouting(SitePinInst currSource, SitePinInst currPin)
currSource
- The source pin for this netcurrPin
- The current sink pin to be routedpublic boolean isRoutable(RouteNode rn, int depth)
rn
- Input pin to check routabilitydepth
- Number of PIP hops to checkpublic void swapLUTPinForUnused(SitePinInst p)
public static List<String> getAlternativeLUTInputs(SitePinInst currSink)
public static void swapLUTInputPins(SitePinInst lutInput, String newPinName)
lutInput
- The physical pin on the site to be swappednewPinName
- The new physical BEL pin on the lut to serve as the new input.public void routeNet()
public boolean isSupressWarningsErrors()
public void setSupressWarningsErrors(boolean supressWarningsErrors)
public HashSet<RouteNode> getSourcesFromPIPs(List<PIP> pips, HashSet<RouteNode> sources)
pips
- The pips of the net to examine.public static boolean isSwitchBox(Tile t)
public void reserveCriticalNodes()
public void reserveCriticalNodes(ArrayList<SitePinInst> sitePinInsts)
public void markExistingRouteResourcesUsed()
public void identifyMissingPins()
public void markAndUpdateNetPIPsAsUsed()
public boolean checkClkResource(RouteNode clkNode)
public int getClkNumber(RouteNode clkNode)
public boolean isClockResource(RouteNode tmpRoute)
public RouteNode routeCentroidToSinkClkRegion(RouteNode clkRoute, boolean debug)
public ClockRegion calcClockTreeCentroid()
public void setClkCostLevel(RouteNode src)
public void printClkNodeInfo(RouteNode myNode, String myString)
public void routeClockTrees(boolean debug, SitePinInst currSource)
public void routeClockNet()
public void routeStaticNet()
public void routePinsReEntrant(ArrayList<SitePinInst> sitePinInsts, boolean routeUnroutedNets)
sitePinInsts
- The sink pins to be routed.public void routeStaticNets()
public void elaboratePhysicalNets()
Net
) or physical pins
(SitePinInst
) have been created. TODO - Experimental stagepublic Design routeDesign()
public static ArrayList<RouteNode> findInputPinFeed(SitePinInst p)
p
- The pin to start frompublic static void main(String[] args)