AMF-Placer
2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
|
Placement net, compared to design net, includes information related to placement. More...
#include <PlacementInfo.h>
Classes | |
struct | _pinOffset |
Public Types | |
typedef struct PlacementInfo::PlacementNet::_pinOffset | pinOffset |
Public Member Functions | |
PlacementNet (DesignInfo::DesignNet *designNet, int id, std::vector< PlacementUnit * > &cellId2PlacementUnitVec, PlacementInfo *placementInfo) | |
Construct a new Placement Net object. More... | |
~PlacementNet () | |
std::vector< PlacementUnit * > & | getUnits () |
Get the reference of the vector of PlacementUnits connected to the net The placement units in the vector might be duplicated because a net might connect to multiple pins of a unit. More... | |
std::vector< PlacementUnit * > & | getDriverUnits () |
Get the reference of the vector of the driver units that drive the net. More... | |
std::vector< PlacementUnit * > & | getUnitsBeDriven () |
Get the reference of the vector of the PlacementUnits driven by the net. More... | |
DesignInfo::DesignNet * | getDesignNet () |
Get the Design Net object. More... | |
int | getId () |
Get the Id of the net in current placement procedure. More... | |
std::vector< pinOffset > & | getPinOffsetsInUnit () |
Get the Pin Offsets (x,y) of the Units object. More... | |
bool | updateNetBounds (bool updateX, bool updateY) |
update the bounding box of the net More... | |
float | getHPWL (float y2xRatio) |
get current HPWL of the net More... | |
float | getNewHPWLByTrying (PlacementUnit *curPU, double targetPUX, double targetPUY, float y2xRatio) const |
Get the New HPWL By Trying to move a PlacementUnit object. More... | |
void | updateBound2BoundNetWeight (std::vector< Eigen::Triplet< float >> &objectiveMatrixTripletList, std::vector< float > &objectiveMatrixDiag, Eigen::VectorXd &objectiveVector, float generalWeight, float y2xRatio, bool updateX, bool updateY, bool checkClockRegion=false) |
update the weights of 2-pin nets between PlacementUnits in this hyperedge(PlacementNet) according to Bound2Bound net model More... | |
void | addPseudoNet_enhancePin2Pin (std::vector< Eigen::Triplet< float >> &objectiveMatrixTripletList, std::vector< float > &objectiveMatrixDiag, Eigen::VectorXd &objectiveVector, float generalWeight, float y2xRatio, bool updateX, bool updateY, int PUIdA, int PUIdB, int pinIdA_net, int pinIdB_net) |
void | drawNet (float generalWeight=1.0) |
void | addB2BNet (std::vector< Eigen::Triplet< float >> &objectiveMatrixTripletList, std::vector< float > &objectiveMatrixDiag, Eigen::VectorXd &objectiveVector, int puId0, int puId1, float pos0, float pos1, float pinOffset0, float pinOffset1, bool movable0, bool movable1, float w) |
set weights of the terms in the quadratic problem More... | |
std::set< PlacementUnit * > & | getPUSet () |
float | getLeftPinX () |
float | getRightPinX () |
float | getTopPinY () |
float | getBottomPinY () |
int | getLeftPUId () |
int | getRightPUId () |
int | getTopPUId () |
int | getBottomPUId () |
bool | isGlobalClock () |
Private Attributes | |
DesignInfo::DesignNet * | designNet = nullptr |
std::vector< PlacementUnit * > | unitsOfNetPins |
std::vector< PlacementUnit * > | unitsOfDriverPins |
std::vector< PlacementUnit * > | unitsOfPinsBeDriven |
std::vector< pinOffset > | pinOffsetsInUnit |
std::set< PlacementUnit * > | PUSet |
int | id |
PlacementInfo * | placementInfo = nullptr |
float | leftPUX |
float | rightPUX |
float | topPUY |
float | bottomPUY |
float | leftPinX |
float | rightPinX |
float | topPinY |
float | bottomPinY |
unsigned int | leftPuId |
unsigned int | rightPuId |
unsigned int | topPuId |
unsigned int | bottomPuId |
unsigned int | leftPinId_net |
unsigned int | rightPinId_net |
unsigned int | topPinId_net |
unsigned int | bottomPinId_net |
float | eps = 1e-5 |
float | minDist = 1 |
Placement net, compared to design net, includes information related to placement.
Placement net, compared to design net, includes information related to placement: HPWL bounding box, interconnection between placement units (unpacked/macro), APIs to check wirelength.
Please note that PlacementNet is HyperEdge, connecting to multiple pins.
Definition at line 1876 of file PlacementInfo.h.
|
inline |
Construct a new Placement Net object.
designNet | each PlacementNet is binded to design net. |
id | |
cellId2PlacementUnitVec |
Definition at line 1886 of file PlacementInfo.h.
|
inline |
Definition at line 1926 of file PlacementInfo.h.
|
inline |
set weights of the terms in the quadratic problem
min_x 0.5 * x'Px + q'x s.t. l <= Ax <= u
objectiveMatrixTripletList | The non-Diag elements in matrix Q, stored in the vector of Eigen Triplet (i,j,val) |
objectiveMatrixDiag | The Diag elements in matrix Q, stored in a 1-D vector |
objectiveVector | The elements in the vector P |
puId0 | PlacementUnit 0's Id (might be invaid -1) |
puId1 | PlacementUnit 1's Id (might be invaid -1) |
pos0 | PlacementUnit 0's position on one of the dimensions |
pos1 | PlacementUnit 1's position on one of the dimensions |
pinOffset0 | The pin's offset in PlacementUnit 0 |
pinOffset1 | The pin's offset in PlacementUnit 1 |
movable0 | whether the object 0 is movable |
movable1 | whether the object 0 is movable |
w | the weight of the net |
Definition at line 2353 of file PlacementInfo.h.
Referenced by addPseudoNet_enhancePin2Pin(), and updateBound2BoundNetWeight().
|
inline |
void PlacementInfo::PlacementNet::drawNet | ( | float | generalWeight = 1.0 | ) |
Definition at line 760 of file PlacementInfo.cc.
|
inline |
Definition at line 2427 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight().
|
inline |
Definition at line 2451 of file PlacementInfo.h.
|
inline |
Get the Design Net object.
Definition at line 1973 of file PlacementInfo.h.
|
inline |
Get the reference of the vector of the driver units that drive the net.
Definition at line 1953 of file PlacementInfo.h.
|
inline |
get current HPWL of the net
y2xRatio | a factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate |
Definition at line 2076 of file PlacementInfo.h.
|
inline |
Get the Id of the net in current placement procedure.
Definition at line 1983 of file PlacementInfo.h.
Referenced by Packing_Netcompare::operator()().
|
inline |
Definition at line 2409 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight().
|
inline |
Definition at line 2433 of file PlacementInfo.h.
|
inline |
Get the New HPWL By Trying to move a PlacementUnit object.
For some procedures like legalization and packing, evaluate the wirelength change if the location of a PlacementUnit is changed.
curPU | the PlacementUnit to be moved |
targetPUX | |
targetPUY | |
y2xRatio |
Definition at line 2093 of file PlacementInfo.h.
|
inline |
Get the Pin Offsets (x,y) of the Units object.
Definition at line 1993 of file PlacementInfo.h.
|
inline |
Definition at line 2404 of file PlacementInfo.h.
|
inline |
Definition at line 2415 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight().
|
inline |
Definition at line 2439 of file PlacementInfo.h.
|
inline |
Definition at line 2421 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight().
|
inline |
Definition at line 2445 of file PlacementInfo.h.
|
inline |
Get the reference of the vector of PlacementUnits connected to the net The placement units in the vector might be duplicated because a net might connect to multiple pins of a unit.
Definition at line 1943 of file PlacementInfo.h.
Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::getInternalPinsNum(), and PlacementInfo::reloadNets().
|
inline |
Get the reference of the vector of the PlacementUnits driven by the net.
Definition at line 1963 of file PlacementInfo.h.
Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::getInternalPinsNum().
|
inline |
Definition at line 2457 of file PlacementInfo.h.
Referenced by PlacementInfo::reloadNets().
|
inline |
update the weights of 2-pin nets between PlacementUnits in this hyperedge(PlacementNet) according to Bound2Bound net model
In the quadratic placement, the wirelength(HPWL) can be modeled into a quadratic equation based on Bound2Bound net model. The equation can be represented by matrix operation (XQX^T+PX)
objectiveMatrixTripletList | The non-Diag elements in matrix Q, stored in the vector of Eigen Triplet (i,j,val) |
objectiveMatrixDiag | The Diag elements in matrix Q, stored in a 1-D vector |
objectiveVector | The elements in the vector P |
generalWeight | a weight given from external setting |
pseudoWeight | pseudo net weight to constrain the movement of PlacementUnits from their locations in last optimization iteration |
y2xRatio | a factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate |
updateX | update the X-coordinate term in the quadratic problem |
updateY | update the X-coordinate term in the quadratic problem |
Definition at line 2184 of file PlacementInfo.h.
|
inline |
update the bounding box of the net
updateX | if true, update the bounding box of the net in X coordinate |
updateY | if true, update the bounding box of the net in Y coordinate |
Definition at line 2006 of file PlacementInfo.h.
|
private |
Definition at line 2476 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2474 of file PlacementInfo.h.
Referenced by getBottomPinY(), getHPWL(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2475 of file PlacementInfo.h.
Referenced by getBottomPinY(), getBottomPUId(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2473 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2464 of file PlacementInfo.h.
Referenced by getDesignNet(), isGlobalClock(), PlacementNet(), and updateBound2BoundNetWeight().
|
private |
Definition at line 2477 of file PlacementInfo.h.
Referenced by addB2BNet().
|
private |
Definition at line 2471 of file PlacementInfo.h.
Referenced by getId().
|
private |
Definition at line 2476 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2474 of file PlacementInfo.h.
Referenced by getHPWL(), getLeftPinX(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2475 of file PlacementInfo.h.
Referenced by getLeftPinX(), getLeftPUId(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2473 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2478 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight().
|
private |
Definition at line 2468 of file PlacementInfo.h.
Referenced by addPseudoNet_enhancePin2Pin(), getNewHPWLByTrying(), getPinOffsetsInUnit(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2472 of file PlacementInfo.h.
Referenced by getNewHPWLByTrying(), and updateBound2BoundNetWeight().
|
private |
Definition at line 2469 of file PlacementInfo.h.
Referenced by getPUSet(), and PlacementNet().
|
private |
Definition at line 2476 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2474 of file PlacementInfo.h.
Referenced by getHPWL(), getRightPinX(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2475 of file PlacementInfo.h.
Referenced by getRightPinX(), getRightPUId(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2473 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2476 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2474 of file PlacementInfo.h.
Referenced by getHPWL(), getTopPinY(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2475 of file PlacementInfo.h.
Referenced by getTopPinY(), getTopPUId(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2473 of file PlacementInfo.h.
Referenced by updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2466 of file PlacementInfo.h.
Referenced by getDriverUnits(), and PlacementNet().
|
private |
Definition at line 2465 of file PlacementInfo.h.
Referenced by addPseudoNet_enhancePin2Pin(), getNewHPWLByTrying(), getUnits(), PlacementNet(), updateBound2BoundNetWeight(), and updateNetBounds().
|
private |
Definition at line 2467 of file PlacementInfo.h.
Referenced by getUnitsBeDriven(), and PlacementNet().