AMF-Placer
2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
|
Go to the documentation of this file.
33 #include "Eigen/SparseCore"
46 #include <semaphore.h>
70 bool resetLegalizationInfo =
true);
107 bool enableMacroPseudoNet2Site =
false,
bool stopStrictly =
false,
108 unsigned int spreadRegionBinNumLimit = 10000000,
205 void spreading(
int currentIteration,
int spreadRegionSizeLimit = 100000000,
float displacementLimit = -10);
298 void macroLegalize(
int curIteration,
bool timingDriven =
false,
312 return ((
float)random() / RAND_MAX) * (max - min) + min;
bool disableSpreadingForgetRatio
diable cell spreading forget ratio
ClusterPlacer will cluster nodes in the given netlist and place the clusters on the device based on s...
float averageCarryLegalDisplacement
record the legalization displacement of CARRY
WirelengthOptimizer * getWirelengthOptimizer()
int LUTFFCoordinateDumpCnt
int CARRYCoordinateDumpCnt
void printPlacedUnits(std::ostream &os)
This header file contains the definitions of GlobalPlacer class and its internal modules and APIs whi...
WirelengthOptimizer * WLOptimizer
wirelength optimizer is based on numerial model and used to reduce the overall wirelength with variou...
void spreading(int currentIteration, int spreadRegionSizeLimit=100000000, float displacementLimit=-10)
cell spreading for all types of elements
bool macrosBindedToSites
macros are binded to sites and such binding will lead to pseudo nets between anchors and elements
void dumpBRAMCoordinate(bool enforced=false)
std::deque< float > historyHPWLs
record the change history of HPWL
void setPseudoNetWeight(float weight)
Set the initial pseudo net weight for the global placer.
bool directMacroLegalize
directly legalize macros without the phase of rough legalization (each standard cell in a macro will ...
MacroLegalizer maps DSP/BRAM/CARRY macros to legal location.
float averageMCLBLegalDisplacement
record the legalization displacement of SLICEM-Macro
void dumpDSPCoordinate(bool enforced=false)
int getMacroPseudoNetEnhanceCnt()
Get the number of the conducted macro iterations.
ClusterPlacer * clusterPlacer
cluster placer is used for initial placement
float spreadingForgetRatio
we use the forget ratio to control the sensitivity of cell spreading during the location updateing (n...
void setMacroLegalizationParameters(int cnt, float macroLegalizationWeight)
Set the macro legalization parameters.
bool updateMinHPWLAfterLegalization
when legalization is started, the HPWL might have a significant change due to the legalization displa...
bool macroLocked
lock the macro binding and bypass serveral legalizaiton iterations for wirelength stable convergence
MacroLegalizer * BRAMDSPLegalizer
legalize multi-site BRAM/DSP elements
float oriPseudoNetWeight
record the pseudo net weight at the end of placement functions for later iterations....
bool enableClockRegionAware
bool HPWLChangeLittle
the small change of minHPWL might imply that the optimization converges.
This header file contains the classes of data for a standalone design netlist.
float upperBoundHPWL
upperbound HPWL is obtained just after cell spreading and legalization
void dumpCARRYCoordinate()
void updatePseudoNetWeight(float &pseudoNetWeight, int curIter)
update pseudo net weight according to placement progress
This header file contains the classes of data for a standalone device.
void dumpLUTFFCoordinate(bool enforced=false)
float averageMacroLegalDisplacement
record the legalization displacement of DSP/BRAM
void setNeighborDisplacementUpperbound(float _threshold)
Set the distance upperbound of neighbor LUT/FF-like elements for area adjustion.
float pseudoNetWeight
the pseudo net weight in the iterations of placement functions
int getMacroPseudoNetEnhanceCnt()
Get the number of macro pseudo net enhancements.
This header file contains the definitions of CLBLegalizer class and its internal modules and APIs whi...
GeneralSpreader accounts for the cell spreading, which controls the cell density of specific resource...
bool macroLegalizationFixed
fix the macros to the exact legal location
This header file contains the definitions of ClusterPlacer class and its internal modules and APIs wh...
int BRAMCoordinateDumpCnt
void macroLegalize(int curIteration, bool timingDriven=false, PlacementTimingOptimizer *timingOptimizer=nullptr)
legalize specific types of macro to the target regions
This header file contains the definitions of MacroLegalizer class and its internal modules and APIs w...
int timingDrivenDetailedPlacement_shortestPath_intermediate(PlacementTimingOptimizer *timingOptimizer)
void GlobalPlacement_CLBElements(int iterNum, bool continuePreviousIteration=false, int lowerBoundIterNum=6, bool enableMacroPseudoNet2Site=false, bool stopStrictly=false, unsigned int spreadRegionBinNumLimit=10000000, PlacementTimingOptimizer *timingOptimizer=nullptr)
wirelength optimization + cell spreading + legalization + area adjustion
void GlobalPlacement_fixedCLB(int iterNum, float pseudoNetWeight)
fix the locations of CLB and let macros move without low pseudo net at initial stages,...
This header file contains the definitions of GeneralSpreader class and its internal modules and APIs ...
bool pseudoNetWeightConsiderNetNum
set adaptive pseudo net weight according to net density
std::map< std::string, std::string > & JSONCfg
float lowerBoundHPWL
lowerbound HPWL is obtained just after wirelength optimization
bool hasUserDefinedClusterInfo
void dumpAllCellsCoordinate()
GlobalPlacer accounts for the general iterations in global placement.
void clusterPlacement()
cluster elements and conduct initial placement at coarse-grained level
CLBLegalizer * mCLBLegalizer
legalize single-site SLICEM-CLB elements
void setMacroLegalizationParameters(int cnt, float macroLegalizationWeight)
Set the macro legalization parameters (including legalization counter and pseudo net weight)
MacroLegalizer * CARRYMacroLegalizer
legalize multi-site CARRY elements
void setMacroLegalizationFixed()
fix the macro legalization result
bool macroCloseToSite
macros are located closely to their legalized locations
float getMacroLegalizationWeight()
Get the net weight for macro legalization.
GeneralSpreader * generalSpreader
a general spreading will spread cells to meet cell density requirements
CLBLegalizer * lCLBLegalizer
legalize single-site SLICEL-CLB elements
float getPseudoNetWeight()
Get the current pseudo net weight.
float neighborDisplacementUpperbound
the distance threshold for the neighbor detection during area adjustion
float getMacroLegalizationWeight()
Get the current macro legalization weight object.
This header file mainly contains the definition of class PlacementInfo, including information related...
float random_float(float min, float max)
bool dumpClockUtilization
std::deque< float > historyAverageDisplacement
float progressRatio
the similarity between upperbound wirelength and lowerbound wirelength
CLBLegalizer maps CLBs (each of which consists of one site) to legal location. e.g....
WirelengthOptimizer builds numerical models based on the element locations and calls solvers to find ...
GlobalPlacer(PlacementInfo *placementInfo, std::map< std::string, std::string > &JSONCfg, bool resetLegalizationInfo=true)
Construct a new Global Placer object based on placement information.
Information related to FPGA placement (wirelength optimization, cell spreading, legalization,...
PlacementInfo * placementInfo