|
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().