public enum RouteNodeType extends Enum<RouteNodeType>
RouteNode. Which side (half) of its INT tile a node is on is not part of its type,
but is described by the parity of its half-tile X coordinate (see RouteNode.getEndHalfTileXCoordinate()).| Enum Constant and Description |
|---|
EXCLUSIVE_SINK |
EXCLUSIVE_SINK_CTRL
Exclusive sink that is a CTRL pin, which can be reached from either side of its INT tile: on
UltraScale/UltraScale+, CTRL_* pins (only via INT_NODE_GLOBAL_*, see
RouteNodeType.LOCAL_SIDE_DEPENDS_ON_SINK);
on Versal, CTRL pins (via RouteNodeType.LOCAL_RESERVED nodes). |
EXCLUSIVE_SINK_NON_LOCAL |
EXCLUSIVE_SINK_SLL_INPUT
Exclusive sink that is a Versal SLL input, which is reached in the same way as a Versal
RouteNodeType.EXCLUSIVE_SINK_CTRL, but is not on either side: it is between two INT tiles (on the east side of one,
and the west side of the next). |
EXCLUSIVE_SOURCE |
INACCESSIBLE
Denotes
RouteNode objects that should be treated as being inaccessible and
never queued for exploration during routing. |
LOCAL
Local nodes that serve only the side (half) of their INT tile that they are on
|
LOCAL_LEADING_TO_SLL
Denotes local
RouteNode objects that correspond to Node objects leading to a SUPER_LONG_LINE
that crosses into another SLR: on UltraScale/UltraScale+, the INODEs and IMUXes that lead into a Laguna tile, and
the TXOUTs (LAG_MUX_ATOM_*_TXOUT) in it that drive such a SUPER_LONG_LINE, considered to be on the west side of
the INT tile of their IMUX (see RouteNodeGraph.populateLagunaLookups(); other TXOUTs, whose SUPER_LONG_LINE stays
within its SLR, are of type RouteNodeType.NON_LOCAL); on Versal, SLL inputs (NODE_SLL_INPUT) that drive such a
SUPER_LONG_LINE, the BNODEs in SLL tiles (NODE_CLE_BNODE) that drive those SLL inputs, which also drive the
INODEs on one side of the INT tile at which they end, and the PINBOUNCEs and INODEs in INT tiles that lead to
those BNODEs (INODE -> PINBOUNCE -> BNODE, in the same row; other SLL inputs, BNODEs, PINBOUNCEs and INODEs
are of type RouteNodeType.LOCAL; see RouteNodeGraph.wireIndicesLeadingToSLL). |
LOCAL_RESERVED
Local nodes reserved for reaching
RouteNodeType.EXCLUSIVE_SINK_CTRL and RouteNodeType.EXCLUSIVE_SINK_SLL_INPUT sinks
(Versal only): the [BC]NODEs uphill of
those sinks, which otherwise serve the INODEs on one side (half) of an INT tile; when in the same tile as
such a sink, these are considered to be on its side (as is RouteNodeType.LOCAL_SIDE_DEPENDS_ON_SINK) |
LOCAL_SIDE_DEPENDS_ON_SINK
Local nodes whose side depends on the sink: INT_NODE_GLOBAL_* (GNODEs, UltraScale/UltraScale+ only) serve
the INODEs on the side (half) of their INT tile that they are on, but the CTRL_* pins on both sides
|
NON_LOCAL |
NON_LOCAL_INHERIT_PREV_SIDE
Non-local nodes that serve both sides (halves) of the INT tile that they end at: UltraScale longs and the
INT_NODE_QUAD_LONG_* / QLND* that drive them, and Versal longs.
|
NON_LOCAL_LEADING_TO_SLL
Denotes non-local
RouteNode objects that lead to RouteNodeType.LOCAL_LEADING_TO_SLL nodes on
UltraScale/UltraScale+: the SDQ nodes and intra-tile singles that drive their INODEs (see
RouteNodeGraph.populateLagunaLookups()). |
SUPER_LONG_LINE
|
| Modifier and Type | Field and Description |
|---|---|
static RouteNodeType[] |
values |
| Modifier and Type | Method and Description |
|---|---|
boolean |
isAnyExclusiveSink() |
static boolean |
isAnyExclusiveSink(int ordinal) |
boolean |
isAnyLocal() |
static boolean |
isAnyLocal(int ordinal) |
boolean |
isExclusiveSinkCtrlOrSllInput()
Checks if this is an exclusive sink that is only reachable from specific nodes in its tile (or its adjacent
INT tiles on Versal):
RouteNodeType.EXCLUSIVE_SINK_CTRL or RouteNodeType.EXCLUSIVE_SINK_SLL_INPUT. |
boolean |
isLeadingToSLL()
Checks if this is a type of node that leads to a SUPER_LONG_LINE crossing into another SLR:
RouteNodeType.LOCAL_LEADING_TO_SLL or RouteNodeType.NON_LOCAL_LEADING_TO_SLL. |
boolean |
isLocalLeadingToSLL() |
boolean |
isSidedLocal()
Checks if this is a local type whose nodes serve only the side (half) of their INT tile that they are on.
|
static RouteNodeType |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static RouteNodeType[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final RouteNodeType EXCLUSIVE_SOURCE
public static final RouteNodeType EXCLUSIVE_SINK
public static final RouteNodeType EXCLUSIVE_SINK_CTRL
RouteNodeType.LOCAL_SIDE_DEPENDS_ON_SINK);
on Versal, CTRL pins (via RouteNodeType.LOCAL_RESERVED nodes). Even so, the pin itself is on one side.public static final RouteNodeType EXCLUSIVE_SINK_SLL_INPUT
RouteNodeType.EXCLUSIVE_SINK_CTRL, but is not on either side: it is between two INT tiles (on the east side of one,
and the west side of the next).public static final RouteNodeType EXCLUSIVE_SINK_NON_LOCAL
public static final RouteNodeType SUPER_LONG_LINE
public static final RouteNodeType LOCAL_LEADING_TO_SLL
RouteNode objects that correspond to Node objects leading to a SUPER_LONG_LINE
that crosses into another SLR: on UltraScale/UltraScale+, the INODEs and IMUXes that lead into a Laguna tile, and
the TXOUTs (LAG_MUX_ATOM_*_TXOUT) in it that drive such a SUPER_LONG_LINE, considered to be on the west side of
the INT tile of their IMUX (see RouteNodeGraph.populateLagunaLookups(); other TXOUTs, whose SUPER_LONG_LINE stays
within its SLR, are of type RouteNodeType.NON_LOCAL); on Versal, SLL inputs (NODE_SLL_INPUT) that drive such a
SUPER_LONG_LINE, the BNODEs in SLL tiles (NODE_CLE_BNODE) that drive those SLL inputs, which also drive the
INODEs on one side of the INT tile at which they end, and the PINBOUNCEs and INODEs in INT tiles that lead to
those BNODEs (INODE -> PINBOUNCE -> BNODE, in the same row; other SLL inputs, BNODEs, PINBOUNCEs and INODEs
are of type RouteNodeType.LOCAL; see RouteNodeGraph.wireIndicesLeadingToSLL). Such nodes are only found in the band of rows next
to an SLR boundary, which gives the direction they cross in (see RouteNodeGraph.isNorthboundSLLRow()); they are
only accessible to connections that must cross in that direction (see RouteNodeGraph.isAccessible()), and are
otherwise treated as RouteNodeType.LOCAL nodes (other than those TXOUTs, which are never accessible otherwise), other
than for their lower bounds (see RWRoute.evaluateCostAndPush()).public static final RouteNodeType NON_LOCAL_LEADING_TO_SLL
RouteNode objects that lead to RouteNodeType.LOCAL_LEADING_TO_SLL nodes on
UltraScale/UltraScale+: the SDQ nodes and intra-tile singles that drive their INODEs (see
RouteNodeGraph.populateLagunaLookups()). Treated as RouteNodeType.NON_LOCAL nodes, other than for their lower bounds
(see RWRoute.evaluateCostAndPush()).
Not used on Versal, where a sending chain starts at its INODE (see RouteNodeGraph.computeIntLookup()): typing
the intra-tile singles and SDQ nodes that drive those INODEs as this too was tried, and experimental data did
not support it.public static final RouteNodeType NON_LOCAL
public static final RouteNodeType NON_LOCAL_INHERIT_PREV_SIDE
public static final RouteNodeType LOCAL
public static final RouteNodeType LOCAL_SIDE_DEPENDS_ON_SINK
public static final RouteNodeType LOCAL_RESERVED
RouteNodeType.EXCLUSIVE_SINK_CTRL and RouteNodeType.EXCLUSIVE_SINK_SLL_INPUT sinks
(Versal only): the [BC]NODEs uphill of
those sinks, which otherwise serve the INODEs on one side (half) of an INT tile; when in the same tile as
such a sink, these are considered to be on its side (as is RouteNodeType.LOCAL_SIDE_DEPENDS_ON_SINK)public static final RouteNodeType INACCESSIBLE
RouteNode objects that should be treated as being inaccessible and
never queued for exploration during routing. Typically, these are routing nodes that
have already been created but later discovered to not be needed (e.g. is a dead-end node).public static final RouteNodeType[] values
public static RouteNodeType[] values()
for (RouteNodeType c : RouteNodeType.values()) System.out.println(c);
public static RouteNodeType valueOf(String name)
name - the name of the enum constant to be returned.IllegalArgumentException - if this enum type has no constant with the specified nameNullPointerException - if the argument is nullpublic boolean isAnyExclusiveSink()
public static boolean isAnyExclusiveSink(int ordinal)
public boolean isExclusiveSinkCtrlOrSllInput()
RouteNodeType.EXCLUSIVE_SINK_CTRL or RouteNodeType.EXCLUSIVE_SINK_SLL_INPUT.public boolean isAnyLocal()
public static boolean isAnyLocal(int ordinal)
public boolean isSidedLocal()
public boolean isLocalLeadingToSLL()
public boolean isLeadingToSLL()
RouteNodeType.LOCAL_LEADING_TO_SLL or RouteNodeType.NON_LOCAL_LEADING_TO_SLL.