public class PIP
extends Object
implements Comparable<Object>, Serializable
Modifier and Type | Field and Description |
---|---|
static int |
NULL_END_WIRE_IDX
Sentinel index for a partial PIP where only the start node is valid.
|
static char |
PIP_TILE_SEPARATOR
Character used in Vivado string representation of PIP
|
static char |
PIP_TILETYPE_SEPARATOR
Character used in Vivado string representation of PIP
|
Constructor and Description |
---|
PIP(Device d,
String tileName,
String startWireName,
String endWireName)
Creates a new PIP from names of the tile and wires
|
PIP(PIP p)
Copy constructor
|
PIP(PIP prototype,
Tile newTile)
Copy constructor and translate to new tile.
|
PIP(String pipName,
Device dev)
Constructs a PIP object based on its toString() representation.
|
PIP(Tile tile,
int startWire,
int endWire)
Constructor that creates a new PIP from parameters.
|
PIP(Tile tile,
String startWireName,
String endWireName)
Constructor that creates a new PIP from parameters.
|
Modifier and Type | Method and Description |
---|---|
int |
compareTo(Object o)
Compares this PIP to another PIP (for sorting purposes).
|
boolean |
deepEquals(Object obj)
Include flags on PIPs as part of equality check
|
int |
deepHashCode()
Includes flags set on PIP as part of hash
|
boolean |
equals(Object obj) |
List<Wire> |
getAllPossibleEndWires()
This method will return an array of all possible wire connections that
can be made from the start wire of this PIP.
|
static PIP |
getArbitraryPIP(Node startNode,
Node endNode)
Gets an arbitrary PIP between two nodes, if at least one exists.
|
Node |
getEndNode()
Creates and returns the end node associated with the start wire of this PIP.
|
RouteNode |
getEndRouteNode()
Creates and returns the end node associated with the start wire of this PIP.
|
Wire |
getEndWire()
Creates a new
Wire object to represent the end wire of this
PIP. |
int |
getEndWireIndex()
Gets and returns the end wire id of this PIP.
|
String |
getEndWireName()
Gets the name of the end wire of the PIP.
|
PIPType |
getPIPType()
Gets the PIP type (denoted by the arrow string between start and end wire).
|
Node |
getStartNode()
Creates and returns the start node associated with the start wire of this PIP.
|
RouteNode |
getStartRouteNode()
Creates and returns the start node associated with the start wire of this PIP.
|
Wire |
getStartWire()
Creates a new
Wire object to represent the start wire of this
PIP. |
int |
getStartWireIndex()
Gets the index of the start wire of this PIP.
|
String |
getStartWireName()
Gets the name of the start wire of the PIP.
|
Tile |
getTile()
Gets and returns the tile of this PIP.
|
int |
hashCode() |
boolean |
isArcInverted()
If the PIP is inverting the signal.
|
boolean |
isBidirectional()
Checks if the PIP is bidirectional
|
boolean |
isEndWireNull()
Checks if the end wire is null, which should only happen in a PIP marked as a GAP PIP
|
boolean |
isGapArc()
If this PIP(or Node) is driven by a GAP.
|
boolean |
isLogicalDriver()
Check if this PIP is a logical driver (nets with multiple site pin sources)
|
boolean |
isPIPFixed()
Checks if this PIP (in the context of a routed net) is fixed, such that
Vivado cannot re-route it.
|
boolean |
isReversed()
A small number of PIPs are bi-directional, in those cases, sometimes the the signal flows
in the opposite direction (EndWire-->StartWire).
|
boolean |
isRouteThru()
Flag indicating if this PIP is actually an abstracted route thru on
a site.
|
boolean |
isStub() |
void |
setIsLogicalDriver(boolean isLogicalDriver)
Sets a flag on this PIP to denote that it is the logical driver when more
than one output site pins exist on a net that are driven from the same
source.
|
void |
setIsPIPFixed(boolean isFixed)
Sets this PIP as fixed such that Vivado cannot re-route it.
|
void |
setIsReversed(boolean isReversed)
Sets a flag on the PIP to keep track if the PIP is being used in a reversed direction
(relevant for bi-directional PIPs only).
|
void |
setTile(Tile tile)
Sets the tile where this PIP resides.
|
String |
toString() |
public static final int NULL_END_WIRE_IDX
public static final char PIP_TILE_SEPARATOR
public static final char PIP_TILETYPE_SEPARATOR
public PIP(PIP p)
p
- The PIP to copypublic PIP(Device d, String tileName, String startWireName, String endWireName)
Vivado Tcl:
foreach p [get_pips -downhill -of [get_wires -of $tile -filter NAME==$startWireName]] {if {$endWireName == [get_property NAME [lindex [get_wires -of $p] 1]]} {$p} }
d
- The device from which to get the PIPtileName
- Name of the tilestartWireName
- Name of the start wireendWireName
- Name of the end wirepublic PIP(Tile tile, int startWire, int endWire)
Vivado Tcl:
foreach p [get_pips -downhill -of [get_wires -of $tile -filter ID_IN_TILE_TYPE==$startWire]] {if {$endWire == [get_property ID_IN_TILE_TYPE [lindex [get_wires -of $p] 1]]} {$p} }
tile
- The tile of the PIP.startWire
- The start wire of the PIP.endWire
- The end wire of the PIP.public PIP(Tile tile, String startWireName, String endWireName)
Vivado Tcl:
foreach p [get_pips -downhill -of [get_wires -of $tile -filter NAME==$tile/$startWireName]] {if {$tile/$endWireName == [get_property NAME [lindex [get_wires -of $p] 1]]} {$p} }
tile
- The tile of the PIP.startWireName
- The start wire name of the PIP.endWireName
- The end wire name of the PIP.public PIP(String pipName, Device dev)
Vivado Tcl:
get_pips $pipName
pipName
- The full name of the PIP (as used in Vivado)dev
- A reference to the device where the PIP existspublic Tile getTile()
Vivado Tcl:
get_tiles -of $this
public void setTile(Tile tile)
tile
- The new tile of this PIP.public int getStartWireIndex()
Vivado Tcl:
get_property ID_IN_TILE_TYPE [lindex [get_wires -of $this] 0]
public Wire getStartWire()
Wire
object to represent the start wire of this
PIP.
Vivado Tcl:
lindex [get_wires -of $this] 0
public Wire getEndWire()
Wire
object to represent the end wire of this
PIP.
Vivado Tcl:
lindex [get_wires -of $this] 1
public PIPType getPIPType()
Vivado Tcl:
get_property NAME $this
public String getStartWireName()
Vivado Tcl:
get_property NAME [lindex [get_wires -of $this] 0]
public String getEndWireName()
Vivado Tcl:
get_property NAME [lindex [get_wires -of $this] 1]
public int getEndWireIndex()
Vivado Tcl:
get_property ID_IN_TILE_TYPE [lindex [get_wires -of $this] 1]
public Node getStartNode()
public Node getEndNode()
public RouteNode getStartRouteNode()
public RouteNode getEndRouteNode()
public List<Wire> getAllPossibleEndWires()
Vivado Tcl:
set s "$tile/[get_property TILE_TYPE $tile].$startWireName*";get_pips -of $tile -filter NAME=~$s
public boolean isEndWireNull()
public boolean isRouteThru()
Vivado Tcl:
get_property IS_PSEUDO $this
public int deepHashCode()
public boolean deepEquals(Object obj)
obj
- The other object to checkpublic int hashCode()
hashCode
in class Object
public boolean equals(Object obj)
equals
in class Object
public int compareTo(Object o) throws ClassCastException
compareTo
in interface Comparable<Object>
ClassCastException
public String toString()
toString
in class Object
public boolean isStub()
public boolean isLogicalDriver()
public boolean isGapArc()
public boolean isArcInverted()
public boolean isPIPFixed()
Vivado Tcl:
[get_property FIXED_ROUTE $net] != {}
public void setIsLogicalDriver(boolean isLogicalDriver)
isLogicalDriver
- public void setIsPIPFixed(boolean isFixed)
Vivado Tcl:
set_property FIXED_ROUTE $this $net
isFixed
- Fixed == true, unfixed == falsepublic boolean isBidirectional()
Vivado Tcl:
expr ![get_property IS_DIRECTIONAL $this]
public boolean isReversed()
public void setIsReversed(boolean isReversed)
isReversed
- The desired flag to be set on the PIP to indicate if it is being used
in a reversed direction (EndWire-->StartWire)public static PIP getArbitraryPIP(Node startNode, Node endNode)
Node.getAllDownhillPIPs()
or
{@link Node#getAllUphillPIPs().startNode
- The matching start node or first node of the PIP to queryendNode
- The matching end node or second node of the PIP to query