AMF-Placer  2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
PlacementInfo Class Reference

Information related to FPGA placement (wirelength optimization, cell spreading, legalization, packing) More...

#include <PlacementInfo.h>

Collaboration diagram for PlacementInfo:

Classes

struct  _ClockNetCoverage
 the retangular clock region coverage of a clock net More...
 
struct  CellBinInfo
 record the bin information for a cell (BELtype, column/row, resource demand) More...
 
class  ClusterNet
 The net between the objects of ClusterUnit class. More...
 
class  ClusterUnit
 a group of PlacementUnits More...
 
class  CompatiblePlacementTable
 describes the type mapping from design to device, where a cell can be placed (which BEL in which site) More...
 
struct  Location
 
class  PlacementBinInfo
 BEL bin for global placement for a specific shared BEL type. More...
 
class  PlacementHybridBinInfo
 BEL bin for global placement for multiple specific shared BEL types. More...
 
class  PlacementMacro
 a fixed group of multiple standard cells with constraints of their relative locations More...
 
class  PlacementNet
 Placement net, compared to design net, includes information related to placement. More...
 
class  PlacementSiteBinInfo
 Site bin for global placement for some specific Site types. More...
 
class  PlacementSiteTypeInfo
 information for a site, e.g. what BEL in site and where are these kind of sites More...
 
class  PlacementUnit
 a movement unit in placement with information of location and resource demand More...
 
class  PlacementUnpackedCell
 the smallest, indivisible, representable component. It will include only one standard cell More...
 

Public Types

enum  PlacementUnitType { PlacementUnitType_UnpackedCell = 0, PlacementUnitType_Macro }
 Placement Instance Types. More...
 
typedef struct PlacementInfo::Location Location
 
typedef struct PlacementInfo::CellBinInfo CellBinInfo
 record the bin information for a cell (BELtype, column/row, resource demand) More...
 

Public Member Functions

 PlacementInfo (DesignInfo *designInfo, DeviceInfo *deviceInfo, std::map< std::string, std::string > &JSONCfg)
 Construct a new Placement Info object based on the information of design and device. More...
 
 ~PlacementInfo ()
 
void printStat (bool verbose=false)
 
CompatiblePlacementTableloadCompatiblePlacementTable (std::string cellType2fixedAmoFileName, std::string cellType2sharedCellTypeFileName, std::string sharedCellType2BELtypeFileName)
 describes the type mapping from design to device, where a cell can be placed (which BEL in which site) More...
 
CompatiblePlacementTablegetCompatiblePlacementTable ()
 
void setBELTypeForCells (DesignInfo *designInfo)
 
float getMinXFromSites (std::vector< DeviceInfo::DeviceSite * > &sites)
 Get the Min X of sites to identify the boundary of the device. More...
 
float getMinYFromSites (std::vector< DeviceInfo::DeviceSite * > &sites)
 Get the Min Y of sites to identify the boundary of the device. More...
 
float getMaxXFromSites (std::vector< DeviceInfo::DeviceSite * > &sites)
 Get the Max X of sites to identify the boundary of the device. More...
 
float getMaxYFromSites (std::vector< DeviceInfo::DeviceSite * > &sites)
 Get the Max Y of sites to identify the boundary of the device. More...
 
void createGridBins (float binWidth, float binHeight)
 Create a grid of bins on the device. More...
 
void createSiteBinGrid ()
 
void reloadNets ()
 update PlacementNet objects when there are some updates of PlacementUnit objects (e.g., some cells are packed) More...
 
void updateLongPaths ()
 update the long path in the design and enhance their net weights More...
 
void verifyDeviceForDesign ()
 verify that each cells in the design can be mapped on the resource elements on the device. More...
 
std::vector< PlacementUnit * > & getPlacementUnits ()
 
std::vector< PlacementMacro * > & getPlacementMacros ()
 
std::vector< PlacementUnit * > & getFixedPlacementUnits ()
 
std::vector< PlacementNet * > & getPlacementNets ()
 
std::set< DesignInfo::DesignCell * > & getCellInMacros ()
 
std::map< int, PlacementUnit * > & getCellId2PlacementUnit ()
 
std::vector< PlacementUnit * > & getCellId2PlacementUnitVec ()
 
std::vector< PlacementUnpackedCell * > & getPlacementUnpackedCells ()
 
int getNumCells ()
 
float getGlobalMaxX ()
 Get the Global Max X (right boundary of the device) More...
 
float getGlobalMaxY ()
 Get the Global Max Y (top boundary of the device) More...
 
float getGlobalMinX ()
 Get the Global Min X (left boundary of the device) More...
 
float getGlobalMinY ()
 Get the Global Min Y (bottom boundary of the device) More...
 
float getGlobalBinMaxLocX ()
 get right boundary of the bin grid More...
 
float getGlobalBinMaxLocY ()
 get top boundary of the bin grid More...
 
float getGlobalBinMinLocX ()
 get left boundary of the bin grid More...
 
float getGlobalBinMinLocY ()
 get bottom boundary of the bin grid More...
 
float getDeviceMaxEdgeLength ()
 
std::vector< int > & getPotentialBELTypeIDs (DesignInfo::DesignCell *cell)
 
std::vector< int > & getPotentialBELTypeIDs (DesignInfo::DesignCellType cellType)
 
int getSharedBELTypeId (std::string tmpStr)
 
float getActualOccupation (DesignInfo::DesignCell *cell)
 Get the actual occupation of a specific cell. More...
 
float getInflateRatio (DesignInfo::DesignCell *cell)
 Get the inflate ratio of a cell. More...
 
std::vector< float > & getcellId2Occupation ()
 
float getOccupation (DesignInfo::DesignCellType cellType)
 Get the theoratical occupation of a specific cell type. More...
 
float getActualOccupationByCellId (int id)
 Get the Actual Occupation By Cell Id. More...
 
std::vector< DesignInfo::DesignCell * > * findNeiborLUTFFsFromBinGrid (DesignInfo::DesignCell *curCell, float displacementUpperbound, int minNumNeighbor=10)
 find neibor LUTs/FFs from bin grid More...
 
std::vector< std::vector< PlacementBinInfo * > > & getBinGrid (unsigned int BELTypeId)
 Get the Bin Grid object. More...
 
std::vector< std::vector< std::vector< PlacementBinInfo * > > > & getBinGrid ()
 Get the Bin Grid object for all types of BEL. More...
 
std::vector< std::vector< PlacementSiteBinInfo * > > & getSiteBinGrid ()
 
PlacementUnitgetPlacementUnitByCell (DesignInfo::DesignCell *curCell)
 
PlacementUnitgetPlacementUnitByCellId (int cellId)
 
PlacementNetgetPlacementNetByDesignNetId (int netId)
 
void addB2BNetInPlacementInfo (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)
 directly set weight in the quadratic Matrix and vector according to given request. More...
 
void addPseudoNetsInPlacementInfo (std::vector< Eigen::Triplet< float >> &objectiveMatrixTripletList, std::vector< float > &objectiveMatrixDiag, Eigen::VectorXd &objectiveVector, PlacementUnit *tmpPU, float targetLoc, float pseudoWeight, float y2xRatio, bool updateX, bool updateY)
 directly set weight in the quadratic Matrix and vector according to given request. More...
 
void updateCells2PlacementUnits ()
 update the mapping from Cells to PlacementUnits, since sometime, PlacementUnits might change More...
 
void updateElementBinGrid ()
 map design cells to the bins in the bin grid. More...
 
void adjustLUTFFUtilization_Routability (bool enfore)
 adjust the resource demand of LUTs/FFs according to routing congestion refer to RippleFPGA's implementation More...
 
void adjustLUTFFUtilization_Routability_Reset ()
 reset the inflate ratio of all the cells to be 1, for re-evaluation More...
 
void adjustLUTFFUtilization_Packablity (float neighborDisplacementUpperbound, bool enfore)
 adjust the resource demand of LUTs/FFs according to packing feasibility More...
 
void adjustLUTFFUtilization (float neighborDisplacementUpperbound, bool enfore=false)
 adjust the resource demand of LUTs/FFs according to packing feasibility and routing congestion More...
 
void adjustLUTFFUtilization_Clocking ()
 adjust the utlization of clock-related elements to mitigate the overflow of clock utilization More...
 
void resetElementBinGrid ()
 clean the information in bin grid More...
 
void updateSiteBinGrid ()
 
void resetSiteBinGrid ()
 
DesignInfogetDesignInfo ()
 
DeviceInfogetDeviceInfo ()
 
PlacementTimingInfogetTimingInfo ()
 
std::string getBELType2FalseBELType (std::string curBELType)
 get the remapped BEL type of a specific BEL type since some cell can be placed in sites of different sites. For cell spreading, we need to remap some BEL types to a unified BEL types. Belows are some examples: More...
 
void getGridXY (float cellX, float cellY, int &binIdX, int &binIdY)
 Get the Grid row/column based on given location X,Y. More...
 
void legalizeXYInArea (PlacementUnit *curPU, float &fX, float &fY)
 move the PlacementUnit to ensure the cells in it are within the device area. More...
 
void enforceLegalizeXYInArea (PlacementUnit *curPU)
 move the PlacementUnit to ensure the cells in it are within the device area. More...
 
bool isLegalLocation (DesignInfo::DesignCell *curCell, float targetX, float targetY)
 check whether the PlacementUnit is legalized in the device area when a cell in it is placed at target location More...
 
bool isLegalLocation (PlacementUnit *curPU, float targetX, float targetY)
 check whether the PlacementUnit is legalized in the device area when it is placed at target location More...
 
void getPULocationByCellLocation (DesignInfo::DesignCell *curCell, float targetX, float targetY, float &PUX, float &PUY)
 
std::vector< Location > & getCellId2location ()
 
std::vector< Location > & getPinId2location ()
 
float getBinGridW ()
 Get the width of a bin in grid. More...
 
float getBinGridH ()
 Get the height of a bin in grid. More...
 
void setPULegalXY (std::map< PlacementInfo::PlacementUnit *, float > &PU2X, std::map< PlacementInfo::PlacementUnit *, float > &PU2Y)
 set the legalization of some PlacementUnit objects More...
 
void setPULegalSite (std::map< PlacementInfo::PlacementUnit *, std::vector< DeviceInfo::DeviceSite * >> &PU2Sites)
 set the sites occupied by the PlacementUnit objects More...
 
std::map< PlacementInfo::PlacementUnit *, std::vector< DeviceInfo::DeviceSite * > > & getPULegalSite ()
 get the sites occupied by the legalized PlacementUnit objects More...
 
std::pair< std::map< PlacementInfo::PlacementUnit *, float >, std::map< PlacementInfo::PlacementUnit *, float > > & getPULegalXY ()
 get the locations (pair of X,Y) of the legalized PlacementUnit objects More...
 
void resetPULegalInformation ()
 forget all the legalization information More...
 
void deleteLegalizationInfoFor (PlacementInfo::PlacementUnit *curPU)
 remove the legalization information of a PlacementUnit object More...
 
void setCellBinInfo (int cellId, int sharedTypeId, int X, int Y, float occupation)
 Set the cell bin Information of a design cell. More...
 
void transferCellBinInfo (int cellId, float fX, int fY)
 update the bin information of a design cell when it is moved to a new location More...
 
float getDisplacement (float fX, float fY, DeviceInfo::DeviceSite *curSite)
 Get the Displacement from a given location to a device site (y2xRatio is considered.) More...
 
std::vector< DeviceInfo::DeviceSite * > * findNeiborSiteFromBinGrid (DesignInfo::DesignCell *curCell, float targetX, float targetY, float displacementThreshold, int siteNumThreshold, bool checkClockRegion=false)
 find neibor device sites of a given cell from bin grid More...
 
std::vector< CellBinInfo > & getCellId2CellBinInfo ()
 
std::vector< DesignInfo::DesignCell * > & getCells ()
 
std::vector< std::vector< PlacementNet * > > & getPlacementUnitId2Nets ()
 
double updateB2BAndGetTotalHPWL ()
 update the B2B net model for the placement and get the total HPWL of all the nets in the design More...
 
double getTotalHPWL ()
 get the total HPWL of all the nets in the design without updating the B2B net model for the placement More...
 
void setProgress (float p)
 Set the progress ratio, indicating the progress of the placement convergence,. More...
 
float getProgress ()
 Get the Progress ratio of the placement. More...
 
void dumpCongestion (std::string dumpFileName)
 dump the congestion mesh grid for evaluation More...
 
void dumpVivadoPlacementTclWithPULegalizationInfo (std::string dumpFile)
 dump the placement commands to place cells in Vivado (do not use this temporarily) More...
 
void dumpPlacementUnitInformation (std::string dumpFile)
 dump the PlacementUnit objects and some placement parameters as a checkpoint More...
 
void loadPlacementUnitInformation (std::string locationFile)
 load the data of the PlacementUnit objects and some placement parameters from a checkpoint file More...
 
void setPseudoNetWeight (float weight)
 Set the Pseudo Net Weight according to a given value. More...
 
float getPseudoNetWeight ()
 Get the Pseudo Net Weight object. More...
 
int getMacroPseudoNetEnhanceCnt ()
 Get the Macro Pseudo Net Enhance Counter. More...
 
float getMacroLegalizationWeight ()
 Get the Macro Legalization Weight. More...
 
void setMacroLegalizationParameters (int cnt, float _macroLegalizationWeight)
 Set the Macro Legalization Parameters. More...
 
void resetLUTFFDeterminedOccupation ()
 reset the LUTFFDeterminedOccupation object More...
 
int getDeterminedOccupation (int cellId)
 
void setDeterminedOccupation (int cellId, int occupation)
 Set the Determined Occupation of a specific cell. More...
 
unsigned int getPairPinNum (DesignInfo::DesignCell *LUTA, DesignInfo::DesignCell *LUTB)
 Get the Pair Pin Num of two LUTs. More...
 
void calculateNetNumDistributionOfPUs ()
 calculate the proportion of the PlacementUnit objects with high interconnection density More...
 
float getPUWithManyNetsRatio ()
 get the proportion of the PlacementUnit objects with high interconnection density More...
 
void setMinHPWL (float val)
 record the minimum HPWL during placement procedure More...
 
float getMinHPWL ()
 
bool checkClockUtilization (bool dump)
 check the utlization of the clock regions on the device More...
 
void enhanceRiskyClockNet ()
 
void enhanceDDRNet ()
 
void enhanceHighFanoutNet ()
 
void dumpOverflowClockUtilization ()
 
bool checkClockColumnLegalization (PlacementInfo::PlacementUnit *curPU, DeviceInfo::DeviceSite *curSite)
 check whether the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules More...
 
int getClockColumnUtilizationIncrease (PlacementInfo::PlacementUnit *curPU, DeviceInfo::DeviceSite *curSite)
 check the clock resource increase extent if the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules More...
 
void printOutClockColumnLegalization (PlacementInfo::PlacementUnit *curPU, DeviceInfo::DeviceSite *curSite)
 
void addPUIntoClockColumn (PlacementInfo::PlacementUnit *curPU, DeviceInfo::DeviceSite *curSite)
 map the given PlacementUnit to the site for later checking of the half-column clock legalization rules More...
 
std::vector< std::vector< PlacementUnit * > > & getLongPaths ()
 Get the Long Paths in the net list for later optimization. More...
 
void optimizeLongPaths ()
 make the PlacementUnits in the long path closer to each other More...
 
void buildSimpleTimingGraph ()
 call timing info to build simple timing graph More...
 
std::map< PlacementUnit *, std::pair< float, float > > & getPU2ClockRegionCenters ()
 get the PlacementUnit Mapping to clock region centers for timing optimzation More...
 
std::map< PlacementUnit *, int > & getPU2ClockRegionColumn ()
 get the PlacementUnit Mapping to clock region column for timing optimzation More...
 
int getLongPathThresholdLevel ()
 
int getMediumPathThresholdLevel ()
 
std::map< DeviceInfo::ClockColumn *, std::set< DesignInfo::DesignNet * > > & getClockCol2ClockNets ()
 
std::vector< std::vector< PlacementBinInfo * > > & getGlobalBinGrid ()
 
void setClusterNum (int _clusterNum)
 
int getClusterNum ()
 
bool isDensePlacement ()
 
bool isClockLegalizationRisky ()
 
int getHighFanOutThr ()
 
int getNetDistributionByDensity (int density)
 
float getMacroRatio ()
 
void setPaintDataBase (PaintDataBase *_paintData)
 
void transferPaintData ()
 

Private Types

typedef struct PlacementInfo::_ClockNetCoverage ClockNetCoverage
 the retangular clock region coverage of a clock net More...
 

Private Attributes

CompatiblePlacementTablecompatiblePlacementTable = nullptr
 
std::vector< PlacementUnit * > placementUnits
 
std::vector< PlacementUnpackedCell * > placementUnpackedCells
 
std::vector< PlacementMacro * > placementMacros
 
std::vector< PlacementUnit * > fixedPlacementUnits
 
std::set< DesignInfo::DesignCell * > cellInMacros
 
std::map< int, PlacementUnit * > cellId2PlacementUnit
 
std::vector< PlacementUnit * > cellId2PlacementUnitVec
 
std::vector< CellBinInfocellId2CellBinInfo
 
std::vector< LocationcellId2location
 
std::vector< LocationpinId2location
 
DesignInfodesignInfo
 
DeviceInfodeviceInfo
 
PlacementTimingInfosimplePlacementTimingInfo = nullptr
 
std::pair< std::map< PlacementInfo::PlacementUnit *, float >, std::map< PlacementInfo::PlacementUnit *, float > > PULegalXY
 a mapping from PlaceuementUnit objects to legalized locations More...
 
std::map< PlacementInfo::PlacementUnit *, std::vector< DeviceInfo::DeviceSite * > > PU2LegalSites
 a mapping from PlaceuementUnit objects to device sites More...
 
float globalMinX
 left boundary of the device More...
 
float globalMinY
 bottom boundary of the device More...
 
float globalMaxX
 right boundary of the device More...
 
float globalMaxY
 top boundary of the device More...
 
float startX
 left boundary of the bin grid More...
 
float startY
 bottom boundary of the bin grid More...
 
float endX
 right boundary of the bin grid More...
 
float endY
 bottom boundary of the bin grid More...
 
float eps = 1e-5
 
std::vector< std::vector< std::vector< PlacementBinInfo * > > > SharedBELTypeBinGrid
 
std::vector< std::vector< PlacementBinInfo * > > LUTFFBinGrid
 Bin Grid for LUTs and FFs, mainly for searching neighbor elements during packing. More...
 
std::vector< std::vector< PlacementBinInfo * > > globalBinGrid
 Bin Grid includes all types of sites, mainly for congestion evalution. More...
 
std::vector< std::vector< PlacementSiteBinInfo * > > siteGridForMacros
 
float binWidth
 
float binHeight
 
std::vector< PlacementNet * > placementNets
 
std::vector< std::vector< PlacementNet * > > placementUnitId2Nets
 
std::vector< PlacementNet * > designNetId2PlacementNet
 
std::vector< PlacementNet * > clockNets
 
std::vector< std::vector< int > > clockRegionUtilization
 
std::set< PlacementUnit * > PUSetContainingFF
 
std::vector< PlacementUnit * > PUsContainingFF
 
std::vector< std::vector< PlacementUnit * > > longPaths
 
std::map< PlacementUnit *, std::pair< float, float > > PU2ClockRegionCenters
 
std::map< PlacementUnit *, int > PU2ClockRegionColumn
 
std::map< DeviceInfo::ClockColumn *, std::set< DesignInfo::DesignNet * > > clockCol2ClockNets
 
PaintDataBase * paintData = nullptr
 
std::vector< float > PaintXs
 
std::vector< float > PaintYs
 
std::vector< int > PaintTypes
 
std::vector< ClockNetCoverageclockNetCoverages
 
float placementProressRatio = 0.01
 the progress ratio, indicating the progress of the placement convergence. More...
 
std::map< std::string, std::string > & JSONCfg
 
std::string cellType2fixedAmoFileName
 
std::string cellType2sharedCellTypeFileName
 
std::string sharedCellType2BELtypeFileName
 
int netPinNumDistribution [8] = {8, 16, 24, 32, 64, 256, 512, 1000000}
 
int netDistribution [8] = {0, 0, 0, 0, 0, 0, 0, 0}
 
float y2xRatio = 1.0
 a factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate More...
 
int longPathThresholdLevel = 10
 the long path threshold for timing optimization More...
 
int mediumPathThresholdLevel = 5
 the medium path threshold for timing optimization More...
 
int dumpPlacementUnitLocationCnt = 0
 
int clusterNum = 1
 
bool clockLegalizationRisky = false
 
float oriPseudoNetWeight = -1
 
int macroPseudoNetEnhanceCnt = -1
 
float macroLegalizationWeight = -1
 
float lastProgressWhenLUTFFUtilAdjust = -1.0
 
float PUWithManyNetsRatio = -1
 
float minHPWL = 1e8
 
bool LUTFFUtilizationAdjusted = false
 
int highFanOutThr = 10000000
 
float macroRatio = 0.0
 
bool guiEnable = false
 

Detailed Description

Information related to FPGA placement (wirelength optimization, cell spreading, legalization, packing)

includes design information, device information includes numerical information for: wirelength optimization: Bound2Bound model, HPWL for nets, macros cell spreading: bin grid, instance density, routing congestion, packability legalization: mapping design instance to device site at coarse-grained level packing: mapping fine-grained instances to sites (e.g., CLB site)

Definition at line 58 of file PlacementInfo.h.

Member Typedef Documentation

◆ CellBinInfo

record the bin information for a cell (BELtype, column/row, resource demand)

◆ ClockNetCoverage

the retangular clock region coverage of a clock net

◆ Location

Member Enumeration Documentation

◆ PlacementUnitType

Placement Instance Types.

UnpackedCell: the smallest, indivisible, representable component Macro: a fixed group of multiple standard cells with constraints of their relative locations

Enumerator
PlacementUnitType_UnpackedCell 
PlacementUnitType_Macro 

Definition at line 67 of file PlacementInfo.h.

Constructor & Destructor Documentation

◆ PlacementInfo()

PlacementInfo::PlacementInfo ( DesignInfo designInfo,
DeviceInfo deviceInfo,
std::map< std::string, std::string > &  JSONCfg 
)

Construct a new Placement Info object based on the information of design and device.

Parameters
designInfo
deviceInfo
JSONCfguser-defined placement configuration

Definition at line 36 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ ~PlacementInfo()

PlacementInfo::~PlacementInfo ( )
inline

Definition at line 2697 of file PlacementInfo.h.

Member Function Documentation

◆ addB2BNetInPlacementInfo()

void PlacementInfo::addB2BNetInPlacementInfo ( 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 
)
inline

directly set weight in the quadratic Matrix and vector according to given request.

Usually B2B Net will be called inside PlacementNet, but we set this API to handle pseudo net settings.

Parameters
objectiveMatrixTripletListThe non-Diag elements in matrix Q, stored in the vector of Eigen Triplet (i,j,val)
objectiveMatrixDiagThe Diag elements in matrix Q, stored in a 1-D vector
objectiveVectorThe elements in the vector P
puId0PlacementUnit 0's Id (might be invaid -1)
puId1PlacementUnit 1's Id (might be invaid -1)
pos0PlacementUnit 0's position on one of the dimensions
pos1PlacementUnit 1's position on one of the dimensions
pinOffset0The pin's offset in PlacementUnit 0
pinOffset1The pin's offset in PlacementUnit 1
movable0whether the object 0 is movable
movable1whether the object 0 is movable
wthe weight of the net

Definition at line 3159 of file PlacementInfo.h.

Referenced by addPseudoNetsInPlacementInfo().

Here is the caller graph for this function:

◆ addPseudoNetsInPlacementInfo()

void PlacementInfo::addPseudoNetsInPlacementInfo ( std::vector< Eigen::Triplet< float >> &  objectiveMatrixTripletList,
std::vector< float > &  objectiveMatrixDiag,
Eigen::VectorXd &  objectiveVector,
PlacementUnit tmpPU,
float  targetLoc,
float  pseudoWeight,
float  y2xRatio,
bool  updateX,
bool  updateY 
)
inline

directly set weight in the quadratic Matrix and vector according to given request.

Usually B2B Net will be called inside PlacementNet, but we set this API to handle pseudo net settings.

Parameters
objectiveMatrixTripletListThe non-Diag elements in matrix Q, stored in the vector of Eigen Triplet (i,j,val)
objectiveMatrixDiagThe Diag elements in matrix Q, stored in a 1-D vector
objectiveVectorThe elements in the vector P
tmpPUPlacementUnit which need a pseudo net
targetLocthe location of the anchor which the pseudo net connected to
pseudoWeightpseudo net weight to constrain the movement of PlacementUnits from their locations in last optimization iteration
y2xRatioa factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate
updateXupdate the X-coordinate term in the quadratic problem
updateYupdate the X-coordinate term in the quadratic problem

Definition at line 3228 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::addPseudoNet2LoctionForAllPUs(), WirelengthOptimizer::addPseudoNetForMacros(), WirelengthOptimizer::updatePseudoNetForClockRegion(), and WirelengthOptimizer::updatePseudoNetForUserDefinedClusters().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ addPUIntoClockColumn()

void PlacementInfo::addPUIntoClockColumn ( PlacementInfo::PlacementUnit curPU,
DeviceInfo::DeviceSite curSite 
)
inline

map the given PlacementUnit to the site for later checking of the half-column clock legalization rules

Parameters
curPUa given PU
curSitethe target site

Definition at line 4301 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::packCLBsIteration(), ParallelCLBPacker::prePackLegalizedMacros(), ParallelCLBPacker::timingDrivenDetailedPlacement_LUTFFPairReloacationAfterSlotMapping(), ParallelCLBPacker::timingDrivenDetailedPlacement_shortestPath(), ParallelCLBPacker::timingDrivenDetailedPlacement_swap(), and ParallelCLBPacker::PackingCLBSite::updateConsistentPUsInTop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjustLUTFFUtilization()

void PlacementInfo::adjustLUTFFUtilization ( float  neighborDisplacementUpperbound,
bool  enfore = false 
)

adjust the resource demand of LUTs/FFs according to packing feasibility and routing congestion

Parameters
neighborDisplacementUpperboundset displacement threshold to identify the neighbors of a cell
enforeenfore adjustment without considering other factors

Definition at line 1544 of file PlacementInfo.cc.

Referenced by AMFPlacer::run(), and GlobalPlacer::spreading().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjustLUTFFUtilization_Clocking()

void PlacementInfo::adjustLUTFFUtilization_Clocking ( )

adjust the utlization of clock-related elements to mitigate the overflow of clock utilization

Definition at line 1409 of file PlacementInfo.cc.

Referenced by adjustLUTFFUtilization().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjustLUTFFUtilization_Packablity()

void PlacementInfo::adjustLUTFFUtilization_Packablity ( float  neighborDisplacementUpperbound,
bool  enfore 
)

adjust the resource demand of LUTs/FFs according to packing feasibility

Parameters
neighborDisplacementUpperboundset displacement threshold to identify the neighbors of a cell
enforeenfore adjustment without considering other factors

Definition at line 1073 of file PlacementInfo.cc.

Referenced by adjustLUTFFUtilization().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjustLUTFFUtilization_Routability()

void PlacementInfo::adjustLUTFFUtilization_Routability ( bool  enfore)

adjust the resource demand of LUTs/FFs according to routing congestion refer to RippleFPGA's implementation

Parameters
enforeenfore adjustment without considering other factors

Definition at line 1273 of file PlacementInfo.cc.

Referenced by adjustLUTFFUtilization().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjustLUTFFUtilization_Routability_Reset()

void PlacementInfo::adjustLUTFFUtilization_Routability_Reset ( )

reset the inflate ratio of all the cells to be 1, for re-evaluation

Definition at line 1511 of file PlacementInfo.cc.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements(), and GlobalPlacer::updatePseudoNetWeight().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ buildSimpleTimingGraph()

void PlacementInfo::buildSimpleTimingGraph ( )
inline

call timing info to build simple timing graph

Definition at line 4331 of file PlacementInfo.h.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calculateNetNumDistributionOfPUs()

void PlacementInfo::calculateNetNumDistributionOfPUs ( )
inline

calculate the proportion of the PlacementUnit objects with high interconnection density

if a PlacementUnit connects to more than 30 nets, count it. calculate the proportion of the PlacementUnit objects with high interconnection density

Definition at line 4176 of file PlacementInfo.h.

Referenced by InitialPacker::pack().

Here is the caller graph for this function:

◆ checkClockColumnLegalization()

bool PlacementInfo::checkClockColumnLegalization ( PlacementInfo::PlacementUnit curPU,
DeviceInfo::DeviceSite curSite 
)
inline

check whether the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules

Parameters
curPUa given PU
curSitethe target site
Returns
true if the the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules
false if the the given PlacementUnit CANNOT be mapped to the site considering the half-column clock legalization rules

Definition at line 4242 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::areAllPUsValidForThisSite(), ParallelCLBPacker::packCLBsIteration(), and ParallelCLBPacker::PackingCLBSite::updateConsistentPUsInTop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ checkClockUtilization()

bool PlacementInfo::checkClockUtilization ( bool  dump)

check the utlization of the clock regions on the device

Parameters
dumpdump the clock utilization
Returns
true if the placement does not cause clock legalization problem
false if the placement causes clock legalization problem

Definition at line 2087 of file PlacementInfo.cc.

Referenced by ClusterPlacer::ClusterPlacement(), GlobalPlacer::GlobalPlacement_CLBElements(), and AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createGridBins()

void PlacementInfo::createGridBins ( float  binWidth,
float  binHeight 
)

Create a grid of bins on the device.

Parameters
binWidththe width of each bin
binHeightthe height of each bin

Definition at line 325 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createSiteBinGrid()

void PlacementInfo::createSiteBinGrid ( )

Definition at line 1582 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ deleteLegalizationInfoFor()

void PlacementInfo::deleteLegalizationInfoFor ( PlacementInfo::PlacementUnit curPU)
inline

remove the legalization information of a PlacementUnit object

Parameters
curPU

Definition at line 3714 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::updatePackedMacro().

Here is the caller graph for this function:

◆ dumpCongestion()

void PlacementInfo::dumpCongestion ( std::string  dumpFileName)

dump the congestion mesh grid for evaluation

Parameters
dumpFileName

Definition at line 1562 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dumpOverflowClockUtilization()

void PlacementInfo::dumpOverflowClockUtilization ( )

Definition at line 2163 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dumpPlacementUnitInformation()

void PlacementInfo::dumpPlacementUnitInformation ( std::string  dumpFile)

dump the PlacementUnit objects and some placement parameters as a checkpoint

Parameters
dumpFile

Definition at line 1723 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dumpVivadoPlacementTclWithPULegalizationInfo()

void PlacementInfo::dumpVivadoPlacementTclWithPULegalizationInfo ( std::string  dumpFile)

dump the placement commands to place cells in Vivado (do not use this temporarily)

(do not use this temporarily) We move this functionality to the packer/placer. There is a conterpart function in ParallelPack, which is relatively complete. We will collect those information back to PlacementInfo in later implementation.

Parameters
dumpFile

Definition at line 1696 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ enforceLegalizeXYInArea()

void PlacementInfo::enforceLegalizeXYInArea ( PlacementUnit curPU)
inline

move the PlacementUnit to ensure the cells in it are within the device area.

Parameters
curPUtarget PlacementUnit

Definition at line 3402 of file PlacementInfo.h.

Referenced by optimizeLongPaths(), GeneralSpreader::updatePlacementUnitsWithSpreadedCellLocations(), and GeneralSpreader::updatePlacementUnitsWithSpreadedCellLocationsWorker().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ enhanceDDRNet()

void PlacementInfo::enhanceDDRNet ( )

Definition at line 2073 of file PlacementInfo.cc.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ enhanceHighFanoutNet()

void PlacementInfo::enhanceHighFanoutNet ( )

Definition at line 2019 of file PlacementInfo.cc.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ enhanceRiskyClockNet()

void PlacementInfo::enhanceRiskyClockNet ( )

Definition at line 2034 of file PlacementInfo.cc.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ findNeiborLUTFFsFromBinGrid()

std::vector<DesignInfo::DesignCell *>* PlacementInfo::findNeiborLUTFFsFromBinGrid ( DesignInfo::DesignCell curCell,
float  displacementUpperbound,
int  minNumNeighbor = 10 
)
inline

find neibor LUTs/FFs from bin grid

Parameters
curCelltarget Cell
displacementUpperbounddisplacement threshold
minNumNeighborcurrently not used
Returns
std::vector<DesignInfo::DesignCell *>*

Definition at line 3009 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ findNeiborSiteFromBinGrid()

std::vector<DeviceInfo::DeviceSite *>* PlacementInfo::findNeiborSiteFromBinGrid ( DesignInfo::DesignCell curCell,
float  targetX,
float  targetY,
float  displacementThreshold,
int  siteNumThreshold,
bool  checkClockRegion = false 
)
inline

find neibor device sites of a given cell from bin grid

Parameters
curCelltarget cell
targetXtarget location X
targetYtarget location Y
displacementThresholdthe displacement threshold from the sites to the target location
siteNumThresholdif the number of sites exceed this threshold, stop the searching
checkClockRegionenable to check whether the clock region column of the sites are the same as the one of the cell
Returns
std::vector<DeviceInfo::DeviceSite *>*

Definition at line 3799 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::dumpFinalPacking(), MacroLegalizer::findMacroCell2SitesInDistance(), and CLBLegalizer::findPU2SitesInDistance().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getActualOccupation()

float PlacementInfo::getActualOccupation ( DesignInfo::DesignCell cell)
inline

Get the actual occupation of a specific cell.

Parameters
cell
Returns
float

it will be the multiplication of cellId2Occupation and cellId2InfationRatio. cellId2Occupation might be adjusted by the packing feasibility. cellId2InfationRatio might be adjusted by the routing congestion level.

Definition at line 2957 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::exceptionHandling(), and updateElementBinGrid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getActualOccupationByCellId()

float PlacementInfo::getActualOccupationByCellId ( int  id)
inline

Get the Actual Occupation By Cell Id.

Parameters
id
Returns
float

Definition at line 2995 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::dumpFinalPacking(), ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::getTotalCellWeight(), GeneralSpreader::SpreadRegion::SubBox::spreadCellsH(), and GeneralSpreader::SpreadRegion::SubBox::spreadCellsV().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBELType2FalseBELType()

std::string PlacementInfo::getBELType2FalseBELType ( std::string  curBELType)
inline

get the remapped BEL type of a specific BEL type since some cell can be placed in sites of different sites. For cell spreading, we need to remap some BEL types to a unified BEL types. Belows are some examples:

SLICEM_CARRY8 => SLICEL_CARRY8

SLICEM_LUT => SLICEL_LUT

SLICEM_FF => SLICEL_FF

Parameters
curBELType
Returns
std::string

Definition at line 3331 of file PlacementInfo.h.

Referenced by createGridBins().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBinGrid() [1/2]

std::vector<std::vector<std::vector<PlacementBinInfo *> > >& PlacementInfo::getBinGrid ( )
inline

Get the Bin Grid object for all types of BEL.

Returns
std::vector<std::vector<std::vector<PlacementBinInfo *>>>&

Definition at line 3110 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Clocking(), adjustLUTFFUtilization_Routability(), adjustLUTFFUtilization_Routability_Reset(), and updateElementBinGrid().

Here is the caller graph for this function:

◆ getBinGrid() [2/2]

std::vector<std::vector<PlacementBinInfo *> >& PlacementInfo::getBinGrid ( unsigned int  BELTypeId)
inline

Get the Bin Grid object.

Parameters
BELTypeIdindicate the target BELtype ID, since we map the different resource to different grid for easier processing
Returns
std::vector<std::vector<PlacementBinInfo *>>&

Definition at line 3099 of file PlacementInfo.h.

Referenced by GeneralSpreader::dumpSiteGridDensity(), ParallelCLBPacker::PackingCLBSite::findNeiborPUsFromBinGrid(), and ParallelCLBPacker::findNeiborSitesFromBinGrid().

Here is the caller graph for this function:

◆ getBinGridH()

float PlacementInfo::getBinGridH ( )
inline

Get the height of a bin in grid.

Returns
float

Definition at line 3625 of file PlacementInfo.h.

Referenced by GeneralSpreader::SpreadRegion::SubBox::spreadCellsV().

Here is the caller graph for this function:

◆ getBinGridW()

float PlacementInfo::getBinGridW ( )
inline

Get the width of a bin in grid.

Returns
float

Definition at line 3615 of file PlacementInfo.h.

Referenced by GeneralSpreader::SpreadRegion::SubBox::spreadCellsH(), and GlobalPlacer::spreading().

Here is the caller graph for this function:

◆ getCellId2CellBinInfo()

std::vector<CellBinInfo>& PlacementInfo::getCellId2CellBinInfo ( )
inline

Definition at line 3893 of file PlacementInfo.h.

◆ getCellId2location()

◆ getcellId2Occupation()

std::vector<float>& PlacementInfo::getcellId2Occupation ( )
inline

Definition at line 2973 of file PlacementInfo.h.

Here is the call graph for this function:

◆ getCellId2PlacementUnit()

std::map<int, PlacementUnit *>& PlacementInfo::getCellId2PlacementUnit ( )
inline

Definition at line 2830 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacement_fixedCLB().

Here is the caller graph for this function:

◆ getCellId2PlacementUnitVec()

std::vector<PlacementUnit *>& PlacementInfo::getCellId2PlacementUnitVec ( )
inline

Definition at line 2834 of file PlacementInfo.h.

◆ getCellInMacros()

std::set<DesignInfo::DesignCell *>& PlacementInfo::getCellInMacros ( )
inline

Definition at line 2826 of file PlacementInfo.h.

◆ getCells()

◆ getClockCol2ClockNets()

std::map<DeviceInfo::ClockColumn *, std::set<DesignInfo::DesignNet *> >& PlacementInfo::getClockCol2ClockNets ( )
inline

Definition at line 4368 of file PlacementInfo.h.

◆ getClockColumnUtilizationIncrease()

int PlacementInfo::getClockColumnUtilizationIncrease ( PlacementInfo::PlacementUnit curPU,
DeviceInfo::DeviceSite curSite 
)
inline

check the clock resource increase extent if the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules

Parameters
curPUa given PU
curSitethe target site
Returns
true if the the given PlacementUnit can be mapped to the site considering the half-column clock legalization rules
int

Definition at line 4266 of file PlacementInfo.h.

Here is the call graph for this function:

◆ getClusterNum()

int PlacementInfo::getClusterNum ( )
inline

Definition at line 4383 of file PlacementInfo.h.

Referenced by isDensePlacement().

Here is the caller graph for this function:

◆ getCompatiblePlacementTable()

CompatiblePlacementTable* PlacementInfo::getCompatiblePlacementTable ( )
inline

Definition at line 2740 of file PlacementInfo.h.

Referenced by loadPlacementUnitInformation(), and ParallelCLBPacker::updatePackedMacro().

Here is the caller graph for this function:

◆ getDesignInfo()

◆ getDeterminedOccupation()

int PlacementInfo::getDeterminedOccupation ( int  cellId)
inline

@briefget the Determined Occupation of a specific cell

LUTFFDeterminedOccupation is used to record the final resource demand of a LUT/FF after final packing

Parameters
cellIdtarget cell
Returns
int

Definition at line 4099 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getDeviceInfo()

◆ getDeviceMaxEdgeLength()

float PlacementInfo::getDeviceMaxEdgeLength ( )
inline

Definition at line 2927 of file PlacementInfo.h.

◆ getDisplacement()

float PlacementInfo::getDisplacement ( float  fX,
float  fY,
DeviceInfo::DeviceSite curSite 
)
inline

Get the Displacement from a given location to a device site (y2xRatio is considered.)

Parameters
fXgiven X
fYgiven Y
curSitetarget device site
Returns
float

Definition at line 3781 of file PlacementInfo.h.

Referenced by findNeiborSiteFromBinGrid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFixedPlacementUnits()

std::vector<PlacementUnit *>& PlacementInfo::getFixedPlacementUnits ( )
inline

Definition at line 2818 of file PlacementInfo.h.

Referenced by ClusterPlacer::setClusterNetsAdjMat().

Here is the caller graph for this function:

◆ getGlobalBinGrid()

std::vector<std::vector<PlacementBinInfo *> >& PlacementInfo::getGlobalBinGrid ( )
inline

Definition at line 4373 of file PlacementInfo.h.

Referenced by PlacementTimingOptimizer::stretchClockRegionColumns().

Here is the caller graph for this function:

◆ getGlobalBinMaxLocX()

float PlacementInfo::getGlobalBinMaxLocX ( )
inline

get right boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 2892 of file PlacementInfo.h.

◆ getGlobalBinMaxLocY()

float PlacementInfo::getGlobalBinMaxLocY ( )
inline

get top boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 2902 of file PlacementInfo.h.

Referenced by PlacementTimingOptimizer::stretchClockRegionColumns().

Here is the caller graph for this function:

◆ getGlobalBinMinLocX()

float PlacementInfo::getGlobalBinMinLocX ( )
inline

get left boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 2912 of file PlacementInfo.h.

◆ getGlobalBinMinLocY()

float PlacementInfo::getGlobalBinMinLocY ( )
inline

get bottom boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 2922 of file PlacementInfo.h.

Referenced by PlacementTimingOptimizer::stretchClockRegionColumns().

Here is the caller graph for this function:

◆ getGlobalMaxX()

float PlacementInfo::getGlobalMaxX ( )
inline

◆ getGlobalMaxY()

float PlacementInfo::getGlobalMaxY ( )
inline

Get the Global Max Y (top boundary of the device)

Returns
float

Definition at line 2862 of file PlacementInfo.h.

Referenced by ClusterPlacer::ClusterPlacement(), GeneralSpreader::makeCellInLegalArea(), ClusterPlacer::placeClusters(), ClusterPlacer::placeUnitBaseOnClusterPlacement(), WirelengthOptimizer::reloadPlacementInfo(), and WirelengthOptimizer::WirelengthOptimizer().

Here is the caller graph for this function:

◆ getGlobalMinX()

float PlacementInfo::getGlobalMinX ( )
inline

◆ getGlobalMinY()

float PlacementInfo::getGlobalMinY ( )
inline

Get the Global Min Y (bottom boundary of the device)

Returns
float

Definition at line 2882 of file PlacementInfo.h.

Referenced by ClusterPlacer::ClusterPlacement(), GeneralSpreader::makeCellInLegalArea(), ClusterPlacer::placeClusters(), ClusterPlacer::placeUnitBaseOnClusterPlacement(), WirelengthOptimizer::reloadPlacementInfo(), and WirelengthOptimizer::WirelengthOptimizer().

Here is the caller graph for this function:

◆ getGridXY()

void PlacementInfo::getGridXY ( float  cellX,
float  cellY,
int &  binIdX,
int &  binIdY 
)
inline

Get the Grid row/column based on given location X,Y.

Parameters
cellXinput X
cellYinput Y
binIdXoutput target column of grid
binIdYoutput target row of grid

Definition at line 3344 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity(), adjustLUTFFUtilization_Routability(), findNeiborLUTFFsFromBinGrid(), ParallelCLBPacker::PackingCLBSite::findNeiborPUsFromBinGrid(), findNeiborSiteFromBinGrid(), ParallelCLBPacker::findNeiborSitesFromBinGrid(), PlacementTimingOptimizer::stretchClockRegionColumns(), transferCellBinInfo(), and updateElementBinGrid().

Here is the caller graph for this function:

◆ getHighFanOutThr()

int PlacementInfo::getHighFanOutThr ( )
inline

Definition at line 4399 of file PlacementInfo.h.

◆ getInflateRatio()

float PlacementInfo::getInflateRatio ( DesignInfo::DesignCell cell)
inline

Get the inflate ratio of a cell.

Parameters
cell
Returns
float

Definition at line 2968 of file PlacementInfo.h.

Here is the call graph for this function:

◆ getLongPaths()

std::vector<std::vector<PlacementUnit *> >& PlacementInfo::getLongPaths ( )
inline

Get the Long Paths in the net list for later optimization.

Returns
std::vector<std::vector<PlacementUnit *>>&

Definition at line 4316 of file PlacementInfo.h.

◆ getLongPathThresholdLevel()

int PlacementInfo::getLongPathThresholdLevel ( )
inline

Definition at line 4358 of file PlacementInfo.h.

Referenced by ClusterPlacer::createLongPathClusterUnits(), WirelengthOptimizer::LUTLUTPairing_TimingDriven(), and AMFPlacer::run().

Here is the caller graph for this function:

◆ getMacroLegalizationWeight()

float PlacementInfo::getMacroLegalizationWeight ( )
inline

Get the Macro Legalization Weight.

it is the legalization pseudo nets for macros.

Returns
float

Definition at line 4060 of file PlacementInfo.h.

Referenced by dumpPlacementUnitInformation().

Here is the caller graph for this function:

◆ getMacroPseudoNetEnhanceCnt()

int PlacementInfo::getMacroPseudoNetEnhanceCnt ( )
inline

Get the Macro Pseudo Net Enhance Counter.

The legalization pseudo nets for macros are strengthened as this counter is increased, so we can force the macros get closer and closer to their legal location.

Returns
int

Definition at line 4040 of file PlacementInfo.h.

Referenced by dumpPlacementUnitInformation().

Here is the caller graph for this function:

◆ getMacroRatio()

float PlacementInfo::getMacroRatio ( )
inline

Definition at line 4418 of file PlacementInfo.h.

◆ getMaxXFromSites()

float PlacementInfo::getMaxXFromSites ( std::vector< DeviceInfo::DeviceSite * > &  sites)

Get the Max X of sites to identify the boundary of the device.

Parameters
sites
Returns
float

Definition at line 272 of file PlacementInfo.cc.

Referenced by PlacementInfo().

Here is the caller graph for this function:

◆ getMaxYFromSites()

float PlacementInfo::getMaxYFromSites ( std::vector< DeviceInfo::DeviceSite * > &  sites)

Get the Max Y of sites to identify the boundary of the device.

Parameters
sites
Returns
float

Definition at line 283 of file PlacementInfo.cc.

Referenced by PlacementInfo().

Here is the caller graph for this function:

◆ getMediumPathThresholdLevel()

int PlacementInfo::getMediumPathThresholdLevel ( )
inline

Definition at line 4363 of file PlacementInfo.h.

Referenced by ClusterPlacer::setClusterNetsAdjMat().

Here is the caller graph for this function:

◆ getMinHPWL()

float PlacementInfo::getMinHPWL ( )
inline

Definition at line 4210 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacer().

Here is the caller graph for this function:

◆ getMinXFromSites()

float PlacementInfo::getMinXFromSites ( std::vector< DeviceInfo::DeviceSite * > &  sites)

Get the Min X of sites to identify the boundary of the device.

Parameters
sites
Returns
float

Definition at line 250 of file PlacementInfo.cc.

Referenced by PlacementInfo().

Here is the caller graph for this function:

◆ getMinYFromSites()

float PlacementInfo::getMinYFromSites ( std::vector< DeviceInfo::DeviceSite * > &  sites)

Get the Min Y of sites to identify the boundary of the device.

Parameters
sites
Returns
float

Definition at line 261 of file PlacementInfo.cc.

Referenced by PlacementInfo().

Here is the caller graph for this function:

◆ getNetDistributionByDensity()

int PlacementInfo::getNetDistributionByDensity ( int  density)
inline

Definition at line 4404 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::addPseudoNet_SlackBased(), and PlacementTimingOptimizer::conductStaticTimingAnalysis().

Here is the caller graph for this function:

◆ getNumCells()

int PlacementInfo::getNumCells ( )
inline

Definition at line 2842 of file PlacementInfo.h.

Referenced by ClusterPlacer::hypergraphPartitioning().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getOccupation()

float PlacementInfo::getOccupation ( DesignInfo::DesignCellType  cellType)
inline

Get the theoratical occupation of a specific cell type.

Parameters
cellType
Returns
float

Definition at line 2984 of file PlacementInfo.h.

Here is the call graph for this function:

◆ getPairPinNum()

unsigned int PlacementInfo::getPairPinNum ( DesignInfo::DesignCell LUTA,
DesignInfo::DesignCell LUTB 
)
inline

Get the Pair Pin Num of two LUTs.

Two LUTs can share the input pins of a BEL in CLB. However, device architecture might have requirements on their demands of the number of input pins. This function will return the total number of input pins for the two LUTs.

Parameters
LUTALUT Cell A
LUTBLUT Cell A
Returns
unsigned int

Definition at line 4127 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getPinId2location()

std::vector<Location>& PlacementInfo::getPinId2location ( )
inline

◆ getPlacementMacros()

std::vector<PlacementMacro *>& PlacementInfo::getPlacementMacros ( )
inline

Definition at line 2814 of file PlacementInfo.h.

Referenced by InitialPacker::dumpMacroHighLight().

Here is the caller graph for this function:

◆ getPlacementNetByDesignNetId()

PlacementNet* PlacementInfo::getPlacementNetByDesignNetId ( int  netId)
inline

Definition at line 3134 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::LUTLUTPairing_TimingDriven().

Here is the caller graph for this function:

◆ getPlacementNets()

◆ getPlacementUnitByCell()

◆ getPlacementUnitByCellId()

◆ getPlacementUnitId2Nets()

std::vector<std::vector<PlacementNet *> >& PlacementInfo::getPlacementUnitId2Nets ( )
inline

Definition at line 3903 of file PlacementInfo.h.

Referenced by CLBLegalizer::getHPWLChange(), and MacroLegalizer::getHPWLChange().

Here is the caller graph for this function:

◆ getPlacementUnits()

std::vector<PlacementUnit *>& PlacementInfo::getPlacementUnits ( )
inline

Definition at line 2810 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::addPseudoNet2LoctionForAllPUs(), ClusterPlacer::basicPartitioning(), AMFPlacer::clearSomeAttributesCannotRecord(), ClusterPlacer::clockBasedPartitioning(), ClusterPlacer::ClusterPlacement(), ClusterPlacer::createLongPathClusterUnits(), ClusterPlacer::createSinglePUClusterUnits(), ClusterPlacer::createUserDefinedClusterBasedClusterUnits(), GlobalPlacer::dumpAllCellsCoordinate(), ParallelCLBPacker::dumpAllCellsCoordinate(), GlobalPlacer::dumpBRAMCoordinate(), GlobalPlacer::dumpCARRYCoordinate(), PlacementTimingOptimizer::dumpClockRegionClusters(), ClusterPlacer::dumpClusters(), GlobalPlacer::dumpDSPCoordinate(), GlobalPlacer::dumpFFCoordinate(), ParallelCLBPacker::dumpFinalPacking(), GlobalPlacer::dumpLUTCoordinate(), GeneralSpreader::dumpLUTFFCoordinate(), GlobalPlacer::dumpLUTFFCoordinate(), dumpPlacementUnitInformation(), PlacementTimingOptimizer::getPUId2Slack(), CLBLegalizer::getPUsToLegalize(), ClusterPlacer::isClustersToLarges(), ParallelCLBPacker::packCLBs(), ParallelCLBPacker::packCLBsIteration(), ClusterPlacer::placeUnitBaseOnClusterPlacement(), GlobalPlacer::printPlacedUnits(), GeneralSpreader::recordSpreadedCellLocations(), WirelengthOptimizer::reloadPlacementInfo(), ClusterPlacer::resetClusterInfo(), ClusterPlacer::setClusterNetsAdjMat(), WirelengthOptimizer::solverLoadData(), WirelengthOptimizer::solverLoadFixedData(), WirelengthOptimizer::solverWriteBackData(), PlacementTimingOptimizer::stretchClockRegionColumns(), WirelengthOptimizer::updateB2BNetWeightWorker(), ClusterPlacer::userDefinedClusterBasedPartitioning(), and WirelengthOptimizer::WirelengthOptimizer().

Here is the caller graph for this function:

◆ getPlacementUnpackedCells()

std::vector<PlacementUnpackedCell *>& PlacementInfo::getPlacementUnpackedCells ( )
inline

Definition at line 2838 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::addNonCLBPackingSites().

Here is the caller graph for this function:

◆ getPotentialBELTypeIDs() [1/2]

◆ getPotentialBELTypeIDs() [2/2]

std::vector<int>& PlacementInfo::getPotentialBELTypeIDs ( DesignInfo::DesignCellType  cellType)
inline

Definition at line 2937 of file PlacementInfo.h.

Here is the call graph for this function:

◆ getProgress()

float PlacementInfo::getProgress ( )
inline

Get the Progress ratio of the placement.

Returns
float

Definition at line 3969 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::addPseudoNet2LoctionForAllPUs(), WirelengthOptimizer::addPseudoNetForMacros(), adjustLUTFFUtilization(), adjustLUTFFUtilization_Packablity(), and GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ getPseudoNetWeight()

float PlacementInfo::getPseudoNetWeight ( )
inline

Get the Pseudo Net Weight object.

usually it is used to set the configuration of placer or dump placement information

Returns
float

Definition at line 4026 of file PlacementInfo.h.

Referenced by dumpPlacementUnitInformation(), and ParallelCLBPacker::packCLBs().

Here is the caller graph for this function:

◆ getPU2ClockRegionCenters()

std::map<PlacementUnit *, std::pair<float, float> >& PlacementInfo::getPU2ClockRegionCenters ( )
inline

get the PlacementUnit Mapping to clock region centers for timing optimzation

Returns
std::map<PlacementUnit *, std::pair<float, float>>&

Definition at line 4343 of file PlacementInfo.h.

Referenced by PlacementTimingOptimizer::clusterLongPathInOneClockRegion(), ParallelCLBPacker::packCLBs(), AMFPlacer::run(), and WirelengthOptimizer::updatePseudoNetForClockRegion().

Here is the caller graph for this function:

◆ getPU2ClockRegionColumn()

std::map<PlacementUnit *, int>& PlacementInfo::getPU2ClockRegionColumn ( )
inline

get the PlacementUnit Mapping to clock region column for timing optimzation

Returns
std::map<PlacementUnit *, int>&

Definition at line 4353 of file PlacementInfo.h.

Referenced by PlacementTimingOptimizer::clusterLongPathInOneClockRegion(), PlacementTimingOptimizer::stretchClockRegionColumns(), GeneralSpreader::updatePlacementUnitsWithSpreadedCellLocations(), and WirelengthOptimizer::updatePseudoNetForClockRegion().

Here is the caller graph for this function:

◆ getPULegalSite()

std::map<PlacementInfo::PlacementUnit *, std::vector<DeviceInfo::DeviceSite *> >& PlacementInfo::getPULegalSite ( )
inline

get the sites occupied by the legalized PlacementUnit objects

Returns
std::map<PlacementInfo::PlacementUnit *, std::vector<DeviceInfo::DeviceSite *>>&

Definition at line 3681 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::addNonCLBPackingSites(), ParallelCLBPacker::dumpDSPBRAMPlacementTcl(), and ParallelCLBPacker::prePackLegalizedMacros().

Here is the caller graph for this function:

◆ getPULegalXY()

std::pair<std::map<PlacementInfo::PlacementUnit *, float>, std::map<PlacementInfo::PlacementUnit *, float> >& PlacementInfo::getPULegalXY ( )
inline

get the locations (pair of X,Y) of the legalized PlacementUnit objects

Returns
std::pair<std::map<PlacementInfo::PlacementUnit *, float>, std::map<PlacementInfo::PlacementUnit *, float>>&

Definition at line 3693 of file PlacementInfo.h.

Referenced by WirelengthOptimizer::addPseudoNetForMacros(), AMFPlacer::clearSomeAttributesCannotRecord(), MacroLegalizer::dumpMatching(), and GlobalPlacer::macroLegalize().

Here is the caller graph for this function:

◆ getPULocationByCellLocation()

void PlacementInfo::getPULocationByCellLocation ( DesignInfo::DesignCell curCell,
float  targetX,
float  targetY,
float &  PUX,
float &  PUY 
)
inline

Definition at line 3546 of file PlacementInfo.h.

Referenced by MacroLegalizer::updatePUMatchingLocation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getPUWithManyNetsRatio()

float PlacementInfo::getPUWithManyNetsRatio ( )
inline

get the proportion of the PlacementUnit objects with high interconnection density

Returns
float

Definition at line 4194 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacer().

Here is the caller graph for this function:

◆ getSharedBELTypeId()

int PlacementInfo::getSharedBELTypeId ( std::string  tmpStr)
inline

Definition at line 2942 of file PlacementInfo.h.

Referenced by GeneralSpreader::dumpSiteGridDensity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getSiteBinGrid()

std::vector<std::vector<PlacementSiteBinInfo *> >& PlacementInfo::getSiteBinGrid ( )
inline

Definition at line 3115 of file PlacementInfo.h.

◆ getTimingInfo()

◆ getTotalHPWL()

double PlacementInfo::getTotalHPWL ( )
inline

get the total HPWL of all the nets in the design without updating the B2B net model for the placement

Returns
double

Definition at line 3939 of file PlacementInfo.h.

◆ isClockLegalizationRisky()

bool PlacementInfo::isClockLegalizationRisky ( )
inline

Definition at line 4394 of file PlacementInfo.h.

Referenced by GlobalPlacer::updatePseudoNetWeight().

Here is the caller graph for this function:

◆ isDensePlacement()

bool PlacementInfo::isDensePlacement ( )
inline

Definition at line 4388 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Clocking(), PlacementTimingOptimizer::clusterLongPathInOneClockRegion(), ParallelCLBPacker::exceptionHandling(), and GlobalPlacer::updatePseudoNetWeight().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isLegalLocation() [1/2]

bool PlacementInfo::isLegalLocation ( DesignInfo::DesignCell curCell,
float  targetX,
float  targetY 
)
inline

check whether the PlacementUnit is legalized in the device area when a cell in it is placed at target location

Parameters
curCell
targetX
targetY
Returns
true the PlacementUnit is legalized in the device area when a cell in it is placed at target location
false the PlacementUnit cannot be legalized in the device area when a cell in it is placed at target location

Definition at line 3452 of file PlacementInfo.h.

Referenced by CLBLegalizer::findPossibleLegalLocation(), and MacroLegalizer::findPossibleLegalLocation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isLegalLocation() [2/2]

bool PlacementInfo::isLegalLocation ( PlacementUnit curPU,
float  targetX,
float  targetY 
)
inline

check whether the PlacementUnit is legalized in the device area when it is placed at target location

Parameters
curPU
targetX
targetY
Returns
true the PlacementUnit is legalized in the device area when a cell in it is placed at target location
false the PlacementUnit cannot be legalized in the device area when a cell in it is placed at target location

Definition at line 3506 of file PlacementInfo.h.

Here is the call graph for this function:

◆ legalizeXYInArea()

void PlacementInfo::legalizeXYInArea ( PlacementUnit curPU,
float &  fX,
float &  fY 
)
inline

◆ loadCompatiblePlacementTable()

CompatiblePlacementTable* PlacementInfo::loadCompatiblePlacementTable ( std::string  cellType2fixedAmoFileName,
std::string  cellType2sharedCellTypeFileName,
std::string  sharedCellType2BELtypeFileName 
)
inline

describes the type mapping from design to device, where a cell can be placed (which BEL in which site)

Since different cell types can be mapped to a group of resource BEL types, we handle the mapping in the following way, with a intermediate Shared BEL Type:

cell type A => A => BEL type 1

cell type B => Shared => BEL type 2

cell type C => BEL => BEL type 3

cell type D => Type => BEL type 4

Parameters
cellType2fixedAmoFileNamea file indicates how many slot will a cell of specific type cost
cellType2sharedCellTypeFileNamea file indicates the mapping from cell types to shared BEL types
sharedCellType2BELtypeFileNamea file indicates the mapping from shared BEL types to resource BEL types
Returns
CompatiblePlacementTable*

Definition at line 2732 of file PlacementInfo.h.

Referenced by PlacementInfo().

Here is the caller graph for this function:

◆ loadPlacementUnitInformation()

void PlacementInfo::loadPlacementUnitInformation ( std::string  locationFile)

load the data of the PlacementUnit objects and some placement parameters from a checkpoint file

Parameters
locationFile

Definition at line 1752 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ optimizeLongPaths()

void PlacementInfo::optimizeLongPaths ( )

make the PlacementUnits in the long path closer to each other

Definition at line 723 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ printOutClockColumnLegalization()

void PlacementInfo::printOutClockColumnLegalization ( PlacementInfo::PlacementUnit curPU,
DeviceInfo::DeviceSite curSite 
)
inline

Definition at line 4278 of file PlacementInfo.h.

Here is the call graph for this function:

◆ printStat()

void PlacementInfo::printStat ( bool  verbose = false)

Definition at line 294 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reloadNets()

void PlacementInfo::reloadNets ( )

update PlacementNet objects when there are some updates of PlacementUnit objects (e.g., some cells are packed)

Definition at line 507 of file PlacementInfo.cc.

Referenced by IncrementalBELPacker::FFPairing(), loadPlacementUnitInformation(), IncrementalBELPacker::LUTFFPairing(), InitialPacker::pack(), and ParallelCLBPacker::updatePackedMacro().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resetElementBinGrid()

void PlacementInfo::resetElementBinGrid ( )

clean the information in bin grid

Definition at line 898 of file PlacementInfo.cc.

Referenced by updateElementBinGrid().

Here is the caller graph for this function:

◆ resetLUTFFDeterminedOccupation()

void PlacementInfo::resetLUTFFDeterminedOccupation ( )
inline

reset the LUTFFDeterminedOccupation object

LUTFFDeterminedOccupation is used to record the final resource demand of a LUT/FF after final packing

Definition at line 4087 of file PlacementInfo.h.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resetPULegalInformation()

void PlacementInfo::resetPULegalInformation ( )
inline

forget all the legalization information

Definition at line 3702 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacer().

Here is the caller graph for this function:

◆ resetSiteBinGrid()

void PlacementInfo::resetSiteBinGrid ( )

Definition at line 1650 of file PlacementInfo.cc.

◆ setBELTypeForCells()

void PlacementInfo::setBELTypeForCells ( DesignInfo designInfo)
inline

Definition at line 2745 of file PlacementInfo.h.

Here is the call graph for this function:

◆ setCellBinInfo()

void PlacementInfo::setCellBinInfo ( int  cellId,
int  sharedTypeId,
int  X,
int  Y,
float  occupation 
)
inline

Set the cell bin Information of a design cell.

Parameters
cellIdthe Id of the design cell
sharedTypeIdwhich BEL type the design cell is
Xthe column in the grid of the bin which the cell is located in
Ythe row in the grid of the bin which the cell is located in
occupationhow much resource is cost by the design cell

Definition at line 3733 of file PlacementInfo.h.

Referenced by updateElementBinGrid().

Here is the caller graph for this function:

◆ setClusterNum()

void PlacementInfo::setClusterNum ( int  _clusterNum)
inline

Definition at line 4378 of file PlacementInfo.h.

Referenced by ClusterPlacer::clusterPlacementUnits().

Here is the caller graph for this function:

◆ setDeterminedOccupation()

void PlacementInfo::setDeterminedOccupation ( int  cellId,
int  occupation 
)
inline

Set the Determined Occupation of a specific cell.

LUTFFDeterminedOccupation is used to record the final resource demand of a LUT/FF after final packing

Parameters
cellIdtarget cell
occupationresource demand of the cell after packing

Definition at line 4112 of file PlacementInfo.h.

Referenced by ParallelCLBPacker::updatePackedMacro().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setMacroLegalizationParameters()

void PlacementInfo::setMacroLegalizationParameters ( int  cnt,
float  _macroLegalizationWeight 
)
inline

Set the Macro Legalization Parameters.

We have specific pseudo net parameters for macro legalizations. We need to set them if loading a check point or re-configuring the placement.

Parameters
cntMacroPseudoNetEnhanceCnt
_macroLegalizationWeightMacroPseudoNetEnhanceCnt

Definition at line 4075 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ setMinHPWL()

void PlacementInfo::setMinHPWL ( float  val)
inline

record the minimum HPWL during placement procedure

Parameters
val

Definition at line 4205 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ setPaintDataBase()

void PlacementInfo::setPaintDataBase ( PaintDataBase *  _paintData)
inline

Definition at line 4423 of file PlacementInfo.h.

Referenced by AMFPlacer::run().

Here is the caller graph for this function:

◆ setProgress()

void PlacementInfo::setProgress ( float  p)
inline

Set the progress ratio, indicating the progress of the placement convergence,.

the progress ratio is usually HPWL_lower / HPWL_upper

Parameters
p

Definition at line 3959 of file PlacementInfo.h.

Referenced by loadPlacementUnitInformation(), and GlobalPlacer::updatePseudoNetWeight().

Here is the caller graph for this function:

◆ setPseudoNetWeight()

void PlacementInfo::setPseudoNetWeight ( float  weight)
inline

Set the Pseudo Net Weight according to a given value.

This pseudo net weight will be used in the global placement iteration

Parameters
weight

Definition at line 4014 of file PlacementInfo.h.

Referenced by GlobalPlacer::GlobalPlacement_CLBElements().

Here is the caller graph for this function:

◆ setPULegalSite()

void PlacementInfo::setPULegalSite ( std::map< PlacementInfo::PlacementUnit *, std::vector< DeviceInfo::DeviceSite * >> &  PU2Sites)
inline

set the sites occupied by the PlacementUnit objects

Parameters
PU2Sitesa mapping from PlaceuementUnit objects to device sites

Definition at line 3668 of file PlacementInfo.h.

Referenced by CLBLegalizer::finalLegalizeBasedOnDP(), MacroLegalizer::finalLegalizeBasedOnDP(), and ParallelCLBPacker::updatePackedMacro().

Here is the caller graph for this function:

◆ setPULegalXY()

void PlacementInfo::setPULegalXY ( std::map< PlacementInfo::PlacementUnit *, float > &  PU2X,
std::map< PlacementInfo::PlacementUnit *, float > &  PU2Y 
)
inline

set the legalization of some PlacementUnit objects

Parameters
PU2XX of PlacementUnits
PU2YY of PlacementUnits

Definition at line 3648 of file PlacementInfo.h.

Referenced by CLBLegalizer::finalLegalizeBasedOnDP(), MacroLegalizer::finalLegalizeBasedOnDP(), ParallelCLBPacker::updatePackedMacro(), CLBLegalizer::updatePUMatchingLocation(), and MacroLegalizer::updatePUMatchingLocation().

Here is the caller graph for this function:

◆ transferCellBinInfo()

void PlacementInfo::transferCellBinInfo ( int  cellId,
float  fX,
int  fY 
)
inline

update the bin information of a design cell when it is moved to a new location

When a cell is moved to a new location, corresponding bins should be updated accordingly.

Parameters
cellIdthe Id of the design cell
fXthe X coordinate the cell is moved to
fYthe Y coordinate the cell is moved to

Definition at line 3751 of file PlacementInfo.h.

Referenced by GeneralSpreader::updatePlacementUnitsWithSpreadedCellLocations(), and GeneralSpreader::updatePlacementUnitsWithSpreadedCellLocationsWorker().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ transferPaintData()

void PlacementInfo::transferPaintData ( )

Definition at line 2219 of file PlacementInfo.cc.

Referenced by updateElementBinGrid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateB2BAndGetTotalHPWL()

double PlacementInfo::updateB2BAndGetTotalHPWL ( )
inline

update the B2B net model for the placement and get the total HPWL of all the nets in the design

Returns
double

Definition at line 3913 of file PlacementInfo.h.

Referenced by ClusterPlacer::ClusterPlacement(), GlobalPlacer::clusterPlacement(), GlobalPlacer::GlobalPlacement_CLBElements(), GlobalPlacer::GlobalPlacement_fixedCLB(), ParallelCLBPacker::packCLBs(), AMFPlacer::run(), ParallelCLBPacker::setPULocationToPackedSite(), and ParallelCLBPacker::updatePackedMacro().

Here is the caller graph for this function:

◆ updateCells2PlacementUnits()

void PlacementInfo::updateCells2PlacementUnits ( )

update the mapping from Cells to PlacementUnits, since sometime, PlacementUnits might change

Definition at line 1683 of file PlacementInfo.cc.

Referenced by IncrementalBELPacker::FFPairing(), IncrementalBELPacker::LUTFFPairing(), InitialPacker::pack(), and ParallelCLBPacker::updatePackedMacro().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateElementBinGrid()

◆ updateLongPaths()

void PlacementInfo::updateLongPaths ( )

update the long path in the design and enhance their net weights

Definition at line 635 of file PlacementInfo.cc.

Here is the call graph for this function:

◆ updateSiteBinGrid()

void PlacementInfo::updateSiteBinGrid ( )

Definition at line 1657 of file PlacementInfo.cc.

◆ verifyDeviceForDesign()

void PlacementInfo::verifyDeviceForDesign ( )

verify that each cells in the design can be mapped on the resource elements on the device.

Definition at line 790 of file PlacementInfo.cc.

Referenced by AMFPlacer::run().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ binHeight

float PlacementInfo::binHeight
private

◆ binWidth

float PlacementInfo::binWidth
private

◆ cellId2CellBinInfo

std::vector<CellBinInfo> PlacementInfo::cellId2CellBinInfo
private

◆ cellId2location

◆ cellId2PlacementUnit

◆ cellId2PlacementUnitVec

◆ cellInMacros

std::set<DesignInfo::DesignCell *> PlacementInfo::cellInMacros
private

◆ cellType2fixedAmoFileName

std::string PlacementInfo::cellType2fixedAmoFileName
private

◆ cellType2sharedCellTypeFileName

std::string PlacementInfo::cellType2sharedCellTypeFileName
private

◆ clockCol2ClockNets

◆ clockLegalizationRisky

bool PlacementInfo::clockLegalizationRisky = false
private

Definition at line 4613 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Clocking(), and isClockLegalizationRisky().

◆ clockNetCoverages

std::vector<ClockNetCoverage> PlacementInfo::clockNetCoverages
private

Definition at line 4576 of file PlacementInfo.h.

Referenced by checkClockUtilization().

◆ clockNets

std::vector<PlacementNet *> PlacementInfo::clockNets
private

◆ clockRegionUtilization

std::vector<std::vector<int> > PlacementInfo::clockRegionUtilization
private

◆ clusterNum

int PlacementInfo::clusterNum = 1
private

Definition at line 4612 of file PlacementInfo.h.

Referenced by getClusterNum(), and setClusterNum().

◆ compatiblePlacementTable

◆ designInfo

◆ designNetId2PlacementNet

std::vector<PlacementNet *> PlacementInfo::designNetId2PlacementNet
private

Definition at line 4526 of file PlacementInfo.h.

Referenced by getPlacementNetByDesignNetId(), and reloadNets().

◆ deviceInfo

◆ dumpPlacementUnitLocationCnt

int PlacementInfo::dumpPlacementUnitLocationCnt = 0
private

◆ endX

float PlacementInfo::endX
private

right boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 4497 of file PlacementInfo.h.

Referenced by createGridBins(), createSiteBinGrid(), getDeviceMaxEdgeLength(), and getGlobalBinMaxLocX().

◆ endY

float PlacementInfo::endY
private

bottom boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 4504 of file PlacementInfo.h.

Referenced by createGridBins(), createSiteBinGrid(), getDeviceMaxEdgeLength(), and getGlobalBinMaxLocY().

◆ eps

◆ fixedPlacementUnits

std::vector<PlacementUnit *> PlacementInfo::fixedPlacementUnits
private

Definition at line 4436 of file PlacementInfo.h.

Referenced by getFixedPlacementUnits(), and loadPlacementUnitInformation().

◆ globalBinGrid

std::vector<std::vector<PlacementBinInfo *> > PlacementInfo::globalBinGrid
private

Bin Grid includes all types of sites, mainly for congestion evalution.

Definition at line 4519 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Routability(), createGridBins(), dumpCongestion(), getGlobalBinGrid(), and updateElementBinGrid().

◆ globalMaxX

float PlacementInfo::globalMaxX
private

◆ globalMaxY

float PlacementInfo::globalMaxY
private

◆ globalMinX

float PlacementInfo::globalMinX
private

◆ globalMinY

float PlacementInfo::globalMinY
private

◆ guiEnable

bool PlacementInfo::guiEnable = false
private

Definition at line 4628 of file PlacementInfo.h.

Referenced by PlacementInfo(), and updateElementBinGrid().

◆ highFanOutThr

int PlacementInfo::highFanOutThr = 10000000
private

Definition at line 4624 of file PlacementInfo.h.

Referenced by enhanceHighFanoutNet(), getHighFanOutThr(), and reloadNets().

◆ JSONCfg

std::map<std::string, std::string>& PlacementInfo::JSONCfg
private

Definition at line 4585 of file PlacementInfo.h.

Referenced by getMacroPseudoNetEnhanceCnt(), and PlacementInfo().

◆ lastProgressWhenLUTFFUtilAdjust

float PlacementInfo::lastProgressWhenLUTFFUtilAdjust = -1.0
private

Definition at line 4619 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity().

◆ longPaths

std::vector<std::vector<PlacementUnit *> > PlacementInfo::longPaths
private

Definition at line 4533 of file PlacementInfo.h.

Referenced by getLongPaths(), optimizeLongPaths(), and updateLongPaths().

◆ longPathThresholdLevel

int PlacementInfo::longPathThresholdLevel = 10
private

the long path threshold for timing optimization

Definition at line 4602 of file PlacementInfo.h.

Referenced by buildSimpleTimingGraph(), and getLongPathThresholdLevel().

◆ LUTFFBinGrid

std::vector<std::vector<PlacementBinInfo *> > PlacementInfo::LUTFFBinGrid
private

Bin Grid for LUTs and FFs, mainly for searching neighbor elements during packing.

Definition at line 4513 of file PlacementInfo.h.

Referenced by adjustLUTFFUtilization_Packablity(), createGridBins(), and findNeiborLUTFFsFromBinGrid().

◆ LUTFFUtilizationAdjusted

bool PlacementInfo::LUTFFUtilizationAdjusted = false
private

◆ macroLegalizationWeight

float PlacementInfo::macroLegalizationWeight = -1
private

◆ macroPseudoNetEnhanceCnt

int PlacementInfo::macroPseudoNetEnhanceCnt = -1
private

◆ macroRatio

float PlacementInfo::macroRatio = 0.0
private

Definition at line 4626 of file PlacementInfo.h.

Referenced by getMacroRatio(), and updateCells2PlacementUnits().

◆ mediumPathThresholdLevel

int PlacementInfo::mediumPathThresholdLevel = 5
private

the medium path threshold for timing optimization

Definition at line 4608 of file PlacementInfo.h.

Referenced by buildSimpleTimingGraph(), and getMediumPathThresholdLevel().

◆ minHPWL

float PlacementInfo::minHPWL = 1e8
private

Definition at line 4621 of file PlacementInfo.h.

Referenced by getMinHPWL(), and setMinHPWL().

◆ netDistribution

int PlacementInfo::netDistribution[8] = {0, 0, 0, 0, 0, 0, 0, 0}
private

Definition at line 4590 of file PlacementInfo.h.

Referenced by getNetDistributionByDensity(), and reloadNets().

◆ netPinNumDistribution

int PlacementInfo::netPinNumDistribution[8] = {8, 16, 24, 32, 64, 256, 512, 1000000}
private

Definition at line 4589 of file PlacementInfo.h.

Referenced by getNetDistributionByDensity(), and reloadNets().

◆ oriPseudoNetWeight

float PlacementInfo::oriPseudoNetWeight = -1
private

◆ paintData

PaintDataBase* PlacementInfo::paintData = nullptr
private

Definition at line 4538 of file PlacementInfo.h.

Referenced by setPaintDataBase(), and transferPaintData().

◆ PaintTypes

std::vector<int> PlacementInfo::PaintTypes
private

Definition at line 4542 of file PlacementInfo.h.

Referenced by transferPaintData().

◆ PaintXs

std::vector<float> PlacementInfo::PaintXs
private

Definition at line 4540 of file PlacementInfo.h.

Referenced by transferPaintData().

◆ PaintYs

std::vector<float> PlacementInfo::PaintYs
private

Definition at line 4541 of file PlacementInfo.h.

Referenced by transferPaintData().

◆ pinId2location

std::vector<Location> PlacementInfo::pinId2location
private

Definition at line 4442 of file PlacementInfo.h.

Referenced by getPinId2location().

◆ placementMacros

std::vector<PlacementMacro *> PlacementInfo::placementMacros
private

◆ placementNets

◆ placementProressRatio

float PlacementInfo::placementProressRatio = 0.01
private

the progress ratio, indicating the progress of the placement convergence.

the progress ratio is usually HPWL_lower / HPWL_upper

Definition at line 4583 of file PlacementInfo.h.

Referenced by getProgress(), and setProgress().

◆ placementUnitId2Nets

std::vector<std::vector<PlacementNet *> > PlacementInfo::placementUnitId2Nets
private

Definition at line 4525 of file PlacementInfo.h.

Referenced by getPlacementUnitId2Nets(), and reloadNets().

◆ placementUnits

◆ placementUnpackedCells

std::vector<PlacementUnpackedCell *> PlacementInfo::placementUnpackedCells
private

◆ PU2ClockRegionCenters

std::map<PlacementUnit *, std::pair<float, float> > PlacementInfo::PU2ClockRegionCenters
private

Definition at line 4535 of file PlacementInfo.h.

Referenced by getPU2ClockRegionCenters().

◆ PU2ClockRegionColumn

std::map<PlacementUnit *, int> PlacementInfo::PU2ClockRegionColumn
private

Definition at line 4536 of file PlacementInfo.h.

Referenced by findNeiborSiteFromBinGrid(), and getPU2ClockRegionColumn().

◆ PU2LegalSites

std::map<PlacementInfo::PlacementUnit *, std::vector<DeviceInfo::DeviceSite *> > PlacementInfo::PU2LegalSites
private

a mapping from PlaceuementUnit objects to device sites

Definition at line 4456 of file PlacementInfo.h.

Referenced by deleteLegalizationInfoFor(), dumpPlacementUnitInformation(), getPULegalSite(), loadPlacementUnitInformation(), resetPULegalInformation(), and setPULegalSite().

◆ PULegalXY

std::pair<std::map<PlacementInfo::PlacementUnit *, float>, std::map<PlacementInfo::PlacementUnit *, float> > PlacementInfo::PULegalXY
private

a mapping from PlaceuementUnit objects to legalized locations

Definition at line 4451 of file PlacementInfo.h.

Referenced by deleteLegalizationInfoFor(), getPULegalXY(), loadPlacementUnitInformation(), resetPULegalInformation(), and setPULegalXY().

◆ PUsContainingFF

std::vector<PlacementUnit *> PlacementInfo::PUsContainingFF
private

Definition at line 4532 of file PlacementInfo.h.

Referenced by reloadNets(), and updateLongPaths().

◆ PUSetContainingFF

std::set<PlacementUnit *> PlacementInfo::PUSetContainingFF
private

Definition at line 4531 of file PlacementInfo.h.

Referenced by reloadNets().

◆ PUWithManyNetsRatio

float PlacementInfo::PUWithManyNetsRatio = -1
private

Definition at line 4620 of file PlacementInfo.h.

Referenced by calculateNetNumDistributionOfPUs(), and getPUWithManyNetsRatio().

◆ SharedBELTypeBinGrid

std::vector<std::vector<std::vector<PlacementBinInfo *> > > PlacementInfo::SharedBELTypeBinGrid
private

◆ sharedCellType2BELtypeFileName

std::string PlacementInfo::sharedCellType2BELtypeFileName
private

◆ simplePlacementTimingInfo

PlacementTimingInfo* PlacementInfo::simplePlacementTimingInfo = nullptr
private

◆ siteGridForMacros

std::vector<std::vector<PlacementSiteBinInfo *> > PlacementInfo::siteGridForMacros
private

◆ startX

float PlacementInfo::startX
private

left boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 4483 of file PlacementInfo.h.

Referenced by createGridBins(), createSiteBinGrid(), getDeviceMaxEdgeLength(), getGlobalBinMinLocX(), and getGridXY().

◆ startY

float PlacementInfo::startY
private

bottom boundary of the bin grid

the coverage of bin grid is a bit larger than the device.

Definition at line 4490 of file PlacementInfo.h.

Referenced by createGridBins(), createSiteBinGrid(), getDeviceMaxEdgeLength(), getGlobalBinMinLocY(), and getGridXY().

◆ y2xRatio


The documentation for this class was generated from the following files: