AMF-Placer  2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
ParallelCLBPacker::PackingCLBSite Class Reference

PackingCLBSite is a container for the packing information (parameters, candidates and packing status) of a specific DeviceInfo::DeviceSite. More...

#include <ParallelCLBPacker.h>

Collaboration diagram for ParallelCLBPacker::PackingCLBSite:

Classes

class  PackingCLBCluster
 PackingCLBCluster is a container of cells/PlacementUnits which can be packed in the corresponding CLB site. More...
 
class  SiteBELMapping
 SiteBELMapping is a contain recording the mapping between cells and BELs. More...
 

Public Member Functions

 PackingCLBSite (PlacementInfo *placementInfo, DeviceInfo::DeviceSite *CLBSite, int unchangedIterationThr, int numNeighbor, float deltaD, float curD, float maxD, unsigned int PQSize, float y2xRatio, float HPWLWeight, std::vector< PackingCLBSite * > &PUId2PackingCLBSite)
 Construct a new Packing CLB Site object. More...
 
 ~PackingCLBSite ()
 
bool isPQTopCompletelyAccptedByCells ()
 check whether all the PlacementUnit in the top cluster in the priority queue have been assigned to this CLB site More...
 
std::set< PlacementInfo::PlacementUnit *, Packing_PUcompare > * findNeiborPUsFromBinGrid (DesignInfo::DesignCellType curCellType, float targetX, float targetY, float displacementLowerbound, float displacementUpperbound, int PUNumThreshold, const std::vector< PackingCLBSite * > &PUId2PackingCLBSite, float y2xRatio, std::set< PlacementInfo::PlacementUnit *, Packing_PUcompare > *res=nullptr, bool clockRegionAware=true)
 find neighbor PlacementUnit around targetX/Y from the bin grid More...
 
std::set< PlacementInfo::PlacementUnit *, Packing_PUcompare > & getNeighborPUs ()
 
void refreshPrioryQueue ()
 sort the elements in the priority queue More...
 
void removeInvalidClustersFromPQ ()
 remove invalid clusters from the priority queue More...
 
void removeInvalidPUsFromNeighborPUs ()
 remove invalid clusters from neighbor PlacementUnits More...
 
void removeClustersIncompatibleWithDetClusterFromPQ ()
 remove clusters incompatible with determined cluster from PQ More...
 
void findNewClustersWithNeighborPUs ()
 extend the clusters in the priority queue with the neighbor PlacementUnits More...
 
void updateStep (bool initial, bool debug=false)
 a iteration to pack PlacementUnit into a CLB site More...
 
void updateConsistentPUsInTop ()
 update the information of consistent PUs at the top of priority queue More...
 
bool hasValidPQTop ()
 
const PackingCLBClustergetPriorityQueueTop ()
 
DeviceInfo::DeviceSitegetCLBSite ()
 
float getY2xRatio () const
 
float getDetScore ()
 
PackingCLBClustergetDeterminedClusterInSite ()
 
void setDeterminedClusterInSite (PackingCLBCluster *tmpCluster)
 
float getHPWLChangeForPU (PlacementInfo::PlacementUnit *tmpPU)
 
void setDebug ()
 
PlacementInfogetPlacementInfo () const
 
void addCarry ()
 add CARRY-related PlacementUnit into this CLB site More...
 
void addLUTRAMMacro ()
 add LUTRAM-related PlacementUnit into this CLB site More...
 
void setNonCLBCell (DesignInfo::DesignCell *_NonCLBCell)
 
bool checkIsPrePackedSite ()
 
bool checkIsCarrySite ()
 
bool checkIsNonCLBSite ()
 
bool checkIsMuxSite ()
 
bool checkIsLUTRAMSite ()
 
PlacementInfo::PlacementMacrogetCarryMacro ()
 
DesignInfo::DesignCellgetCarryCell ()
 
PlacementInfo::PlacementMacrogetLUTRAMMacro ()
 
DesignInfo::DesignCellgetNonCLBCell ()
 
int getCarrySiteOffset ()
 
unsigned int getPairPinNum (DesignInfo::DesignCell *LUTA, DesignInfo::DesignCell *LUTB)
 check how many input pins will be needed if the two LUTs are packed. More...
 
void mapCarryRelatedCellsToSlots (PlacementInfo::PlacementMacro *_CARRYChain, float siteOffset)
 
void mapLUTRAMRelatedCellsToSlots (PlacementInfo::PlacementMacro *_LUTRAMMacro)
 
void finalMapToSlotsForCarrySite (int FFControlSetOrderId)
 find the slots in the site for Muxes More...
 
void finalMapToSlotsForCarrySite ()
 find the slots in the site for Carry by enumeration More...
 
bool compatibleInOneHalfCLB (int halfCLB, int anotherHalfCLB)
 check whether two half CLB can be packed togather More...
 
void mapMuxF8Macro (int muxF8Offset, PlacementInfo::PlacementMacro *MUXF8Macro)
 map cells in MUXF8 macro to CLB slot More...
 
void mapMuxF7Macro (int halfCLBOffset, PlacementInfo::PlacementMacro *MUXF7Macro)
 map cells in MUXF7 macro to CLB slot More...
 
int findMuxFromHalfCLB (PlacementInfo::PlacementMacro *MUXF8Macro)
 find the correspdnding FF control set id for a given Mux macro (this mux macro should have been mapped to a control set in this site) More...
 
void greedyMapMuxForCommonLUTFFInSite (int FFControlSetOrderId)
 find the slots in the site for Muxes More...
 
void greedyMapMuxForCommonLUTFFInSite ()
 find the slots in the site for Muxes by enumeration More...
 
void finalMapToSlotsForCommonLUTFFInSite (int FFControlSetOrderId)
 greedily find the exact slots for the LUTs/FFs in the site More...
 
void finalMapToSlotsForCommonLUTFFInSite ()
 finally map LUTs/FFs to the exact slots in the sites More...
 
bool isMuxMacro (DesignInfo::DesignCell *cell)
 
bool isCarryMacro (DesignInfo::DesignCell *cell)
 
void moveLUTToLUT6Slot ()
 
void finalMapToSlots ()
 finally map the elements (CARRY/MUX/LUT/FF) packed in this site into the slots in the site More...
 
std::set< std::pair< DesignInfo::DesignCell *, DesignInfo::DesignCell * > > & getFixedPairedLUTs ()
 Get the fixed pairs of LUTs which should NOT be broken. More...
 
std::set< DesignInfo::DesignCell * > & getConflictLUTs ()
 Get the LUTs which CANNOT be paired. More...
 
bool conflictLUTsContain (DesignInfo::DesignCell *tmpCell)
 check whether a given cell is unpackable More...
 
const SiteBELMappinggetSlotMapping () const
 Get the slot(BEL) mapping of the cells. More...
 
SiteBELMappinggetSlotMappingRef ()
 
int checkDirectLUTFFConnect (std::map< DesignInfo::DesignCell *, DesignInfo::DesignCell * > &FF2LUT, DesignInfo::DesignCell *tmpLUT, DesignInfo::DesignCell *tmpFF)
 check whether the FF/LUT are directly connected More...
 
float checkDirectLUTFFConnect_slack (std::map< DesignInfo::DesignCell *, DesignInfo::DesignCell * > &FF2LUT, DesignInfo::DesignCell *tmpLUT, DesignInfo::DesignCell *tmpFF)
 check whether the FF/LUT are directly connected and calculate the slack More...
 
void setClockRegionAwareTo (bool _clockRegionAware)
 
std::array< int, 3 > getLUTSlot (DesignInfo::DesignCell *targetCell)
 
std::array< int, 3 > getFFSlot (DesignInfo::DesignCell *targetCell)
 

Private Attributes

PlacementInfoplacementInfo
 
DeviceInfo::DeviceSiteCLBSite
 
int unchangedIterationThr = 3
 specify how many iterations a PlacementUnit should stay at the top priority of a site before we finally map it to the site More...
 
unsigned int numNeighbor = 10
 the threshold number of cells for site More...
 
float deltaD = 1.0
 the increase step of the neighbor search diameter More...
 
float curD = 0
 current neighbor search diameter More...
 
float maxD = 10
 the maximum constraint of the neighbor search diameter More...
 
unsigned int PQSize = 10
 the size of priority queue (the low-priority candidates will be removed) More...
 
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...
 
float HPWLWeight = 0.01
 the factor of HPWL overhead in packing evaluation for a cell More...
 
bool clockRegionAware = true
 whether make clock region become constraints More...
 
int unchangeIterationCnt = 0
 
std::set< PlacementInfo::PlacementUnit *, Packing_PUcompareneighborPUs
 
std::vector< PackingCLBCluster * > seedClusters
 
std::vector< PackingCLBCluster * > priorityQueue
 
std::map< PlacementInfo::PlacementUnit *, int, Packing_PUcomparePU2TopCnt
 
const std::vector< PackingCLBSite * > & PUId2PackingCLBSite
 
PackingCLBClusterdeterminedClusterInSite = nullptr
 
float detScore = 0
 
bool isCarrySite = false
 
bool isLUTRAMSite = false
 
bool isNonCLBSite = false
 
PlacementInfo::PlacementMacroCARRYChain = nullptr
 
PlacementInfo::PlacementMacroLUTRAMMacro = nullptr
 
DesignInfo::DesignCellcarryCell = nullptr
 
DesignInfo::DesignCellnonCLBCell = nullptr
 
int CARRYChainSiteOffset = -1
 
bool debug = false
 
std::set< DesignInfo::DesignCell * > mappedCells
 
std::set< DesignInfo::DesignCell * > mappedLUTs
 
std::set< DesignInfo::DesignCell * > mappedFFs
 
std::set< std::pair< DesignInfo::DesignCell *, DesignInfo::DesignCell * > > fixedPairedLUTs
 
std::set< DesignInfo::DesignCell * > fixedLUTsInPairs
 
std::set< DesignInfo::DesignCell * > conflictLUTs
 
SiteBELMapping slotMapping
 
float best_DirectConnect = -100000000
 
SiteBELMapping best_SlotMapping
 
std::set< DesignInfo::DesignCell * > best_mappedCells
 
std::set< DesignInfo::DesignCell * > best_mappedLUTs
 
std::set< DesignInfo::DesignCell * > best_mappedFFs
 

Detailed Description

PackingCLBSite is a container for the packing information (parameters, candidates and packing status) of a specific DeviceInfo::DeviceSite.

Definition at line 399 of file ParallelCLBPacker.h.

Constructor & Destructor Documentation

◆ PackingCLBSite()

ParallelCLBPacker::PackingCLBSite::PackingCLBSite ( PlacementInfo placementInfo,
DeviceInfo::DeviceSite CLBSite,
int  unchangedIterationThr,
int  numNeighbor,
float  deltaD,
float  curD,
float  maxD,
unsigned int  PQSize,
float  y2xRatio,
float  HPWLWeight,
std::vector< PackingCLBSite * > &  PUId2PackingCLBSite 
)
inline

Construct a new Packing CLB Site object.

Parameters
placementInfothe PlacementInfo for this placer to handle
CLBSite
unchangedIterationThrspecify how many iterations a PlacementUnit should stay at the top priority of a site before we finally map it to the site
numNeighborthe threshold number of cells for site
deltaDthe increase step of the neighbor search diameter
curDcurrent neighbor search diameter
maxDthe maximum constraint of the neighbor search diameter
PQSizethe size of priority queue (the low-priority candidates will be removed)
y2xRatioa factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate
HPWLWeightthe factor of HPWL overhead in packing evaluation for a cell
PUId2PackingCLBSitethe reference of a map (actually a vector) recording the mapping of PlacementUnits to the PackingCLBSites

Definition at line 420 of file ParallelCLBPacker.h.

◆ ~PackingCLBSite()

ParallelCLBPacker::PackingCLBSite::~PackingCLBSite ( )
inline

Definition at line 435 of file ParallelCLBPacker.h.

Member Function Documentation

◆ addCarry()

void ParallelCLBPacker::PackingCLBSite::addCarry ( )
inline

add CARRY-related PlacementUnit into this CLB site

Definition at line 1994 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::ripUpAndLegalizae().

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

◆ addLUTRAMMacro()

void ParallelCLBPacker::PackingCLBSite::addLUTRAMMacro ( )
inline

add LUTRAM-related PlacementUnit into this CLB site

Definition at line 2052 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::ripUpAndLegalizae().

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

◆ checkDirectLUTFFConnect()

int ParallelCLBPacker::PackingCLBSite::checkDirectLUTFFConnect ( std::map< DesignInfo::DesignCell *, DesignInfo::DesignCell * > &  FF2LUT,
DesignInfo::DesignCell tmpLUT,
DesignInfo::DesignCell tmpFF 
)
inline

check whether the FF/LUT are directly connected

Parameters
FF2LUT
tmpLUT
tmpFF
Returns
int

Definition at line 2593 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ checkDirectLUTFFConnect_slack()

float ParallelCLBPacker::PackingCLBSite::checkDirectLUTFFConnect_slack ( std::map< DesignInfo::DesignCell *, DesignInfo::DesignCell * > &  FF2LUT,
DesignInfo::DesignCell tmpLUT,
DesignInfo::DesignCell tmpFF 
)
inline

check whether the FF/LUT are directly connected and calculate the slack

Parameters
FF2LUT
tmpLUT
tmpFF
Returns
float

Definition at line 2613 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ checkIsCarrySite()

bool ParallelCLBPacker::PackingCLBSite::checkIsCarrySite ( )
inline

Definition at line 2074 of file ParallelCLBPacker.h.

Referenced by finalMapToSlots(), and ParallelCLBPacker::ripUpAndLegalizae().

Here is the caller graph for this function:

◆ checkIsLUTRAMSite()

bool ParallelCLBPacker::PackingCLBSite::checkIsLUTRAMSite ( )
inline

Definition at line 2093 of file ParallelCLBPacker.h.

Referenced by finalMapToSlots(), and ParallelCLBPacker::ripUpAndLegalizae().

Here is the caller graph for this function:

◆ checkIsMuxSite()

bool ParallelCLBPacker::PackingCLBSite::checkIsMuxSite ( )
inline

Definition at line 2084 of file ParallelCLBPacker.h.

Referenced by finalMapToSlots().

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

◆ checkIsNonCLBSite()

bool ParallelCLBPacker::PackingCLBSite::checkIsNonCLBSite ( )
inline

Definition at line 2079 of file ParallelCLBPacker.h.

◆ checkIsPrePackedSite()

bool ParallelCLBPacker::PackingCLBSite::checkIsPrePackedSite ( )
inline

Definition at line 2069 of file ParallelCLBPacker.h.

Referenced by finalMapToSlots(), and ParallelCLBPacker::ripUpAndLegalizae().

Here is the caller graph for this function:

◆ compatibleInOneHalfCLB()

bool ParallelCLBPacker::PackingCLBSite::compatibleInOneHalfCLB ( int  halfCLB,
int  anotherHalfCLB 
)
inline

check whether two half CLB can be packed togather

Parameters
halfCLB
anotherHalfCLB
Returns
true
false

Definition at line 2406 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::addFFGroup().

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

◆ conflictLUTsContain()

bool ParallelCLBPacker::PackingCLBSite::conflictLUTsContain ( DesignInfo::DesignCell tmpCell)
inline

check whether a given cell is unpackable

some driver LUTs of CARRY/MUX cannot be paired

Parameters
tmpCellthe given cell
Returns
true if the cell CANNOT be paired with other LUTs
false if the cell CAN be paired with other LUTs

Definition at line 2565 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::maxCardinalityMatching().

Here is the caller graph for this function:

◆ finalMapToSlots()

void ParallelCLBPacker::PackingCLBSite::finalMapToSlots ( )
inline

finally map the elements (CARRY/MUX/LUT/FF) packed in this site into the slots in the site

Definition at line 2508 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ finalMapToSlotsForCarrySite() [1/2]

void ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCarrySite ( )

find the slots in the site for Carry by enumeration

Definition at line 544 of file ParallelCLBPacker_PackingCLBSite.cc.

Referenced by finalMapToSlots().

Here is the caller graph for this function:

◆ finalMapToSlotsForCarrySite() [2/2]

void ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCarrySite ( int  FFControlSetOrderId)

find the slots in the site for Muxes

Parameters
FFControlSetOrderIdcontrol the order of FF Control sets

Definition at line 569 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ finalMapToSlotsForCommonLUTFFInSite() [1/2]

void ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCommonLUTFFInSite ( )

finally map LUTs/FFs to the exact slots in the sites

Definition at line 2719 of file ParallelCLBPacker_PackingCLBSite.cc.

Referenced by finalMapToSlots().

Here is the caller graph for this function:

◆ finalMapToSlotsForCommonLUTFFInSite() [2/2]

void ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCommonLUTFFInSite ( int  FFControlSetOrderId)

greedily find the exact slots for the LUTs/FFs in the site

Parameters
FFControlSetOrderIdcontrol the order of FF Control sets

Definition at line 1155 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ findMuxFromHalfCLB()

int ParallelCLBPacker::PackingCLBSite::findMuxFromHalfCLB ( PlacementInfo::PlacementMacro MUXF8Macro)

find the correspdnding FF control set id for a given Mux macro (this mux macro should have been mapped to a control set in this site)

Parameters
MUXF8Macroa given Mux macro
Returns
int

Definition at line 2040 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ findNeiborPUsFromBinGrid()

std::set< PlacementInfo::PlacementUnit *, Packing_PUcompare > * ParallelCLBPacker::PackingCLBSite::findNeiborPUsFromBinGrid ( DesignInfo::DesignCellType  curCellType,
float  targetX,
float  targetY,
float  displacementLowerbound,
float  displacementUpperbound,
int  PUNumThreshold,
const std::vector< PackingCLBSite * > &  PUId2PackingCLBSite,
float  y2xRatio,
std::set< PlacementInfo::PlacementUnit *, Packing_PUcompare > *  res = nullptr,
bool  clockRegionAware = true 
)

find neighbor PlacementUnit around targetX/Y from the bin grid

Parameters
curCellTypethe given cell types
targetXtarget location X
targetYtarget location Y
displacementLowerboundthe lower bound threshold of neighbors' displacement from the center (the neighbors with low displacement might be tried by previous procedure)
displacementUpperboundthe upper bound threshold of neighbors' displacement from the center
PUNumThresholdThe threshold number of PlacementUnits found to stop the search procedure
PUId2PackingCLBSiteThe reference mapping indicating mapped PlacementUnits
y2xRatioa factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate
resa input set to store resultant PUs (for inremental search if it is not nullptr)
clockRegionAwarewhether make clock region become constraints
Returns
std::set<PlacementInfo::PlacementUnit *, Packing_PUcompare>*

Definition at line 310 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ findNewClustersWithNeighborPUs()

void ParallelCLBPacker::PackingCLBSite::findNewClustersWithNeighborPUs ( )

extend the clusters in the priority queue with the neighbor PlacementUnits

Definition at line 256 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ getCarryCell()

DesignInfo::DesignCell* ParallelCLBPacker::PackingCLBSite::getCarryCell ( )
inline

Definition at line 2103 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::getCellSet().

Here is the caller graph for this function:

◆ getCarryMacro()

PlacementInfo::PlacementMacro* ParallelCLBPacker::PackingCLBSite::getCarryMacro ( )
inline

◆ getCarrySiteOffset()

int ParallelCLBPacker::PackingCLBSite::getCarrySiteOffset ( )
inline

Definition at line 2118 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::clusterHash(), and operator<<().

Here is the caller graph for this function:

◆ getCLBSite()

◆ getConflictLUTs()

std::set<DesignInfo::DesignCell *>& ParallelCLBPacker::PackingCLBSite::getConflictLUTs ( )
inline

Get the LUTs which CANNOT be paired.

Returns
std::set<DesignInfo::DesignCell *>&

Definition at line 2551 of file ParallelCLBPacker.h.

◆ getDeterminedClusterInSite()

◆ getDetScore()

float ParallelCLBPacker::PackingCLBSite::getDetScore ( )
inline

Definition at line 1928 of file ParallelCLBPacker.h.

◆ getFFSlot()

std::array<int, 3> ParallelCLBPacker::PackingCLBSite::getFFSlot ( DesignInfo::DesignCell targetCell)
inline

Definition at line 2661 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ getFixedPairedLUTs()

std::set<std::pair<DesignInfo::DesignCell *, DesignInfo::DesignCell *> >& ParallelCLBPacker::PackingCLBSite::getFixedPairedLUTs ( )
inline

Get the fixed pairs of LUTs which should NOT be broken.

Returns
std::set<std::pair<DesignInfo::DesignCell *, DesignInfo::DesignCell *>>&

Definition at line 2541 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::getCellSet(), and operator<<().

Here is the caller graph for this function:

◆ getHPWLChangeForPU()

float ParallelCLBPacker::PackingCLBSite::getHPWLChangeForPU ( PlacementInfo::PlacementUnit tmpPU)
inline

◆ getLUTRAMMacro()

PlacementInfo::PlacementMacro* ParallelCLBPacker::PackingCLBSite::getLUTRAMMacro ( )
inline

◆ getLUTSlot()

std::array<int, 3> ParallelCLBPacker::PackingCLBSite::getLUTSlot ( DesignInfo::DesignCell targetCell)
inline

Definition at line 2642 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ getNeighborPUs()

std::set<PlacementInfo::PlacementUnit *, Packing_PUcompare>& ParallelCLBPacker::PackingCLBSite::getNeighborPUs ( )
inline

Definition at line 1848 of file ParallelCLBPacker.h.

◆ getNonCLBCell()

DesignInfo::DesignCell* ParallelCLBPacker::PackingCLBSite::getNonCLBCell ( )
inline

Definition at line 2113 of file ParallelCLBPacker.h.

◆ getPairPinNum()

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

check how many input pins will be needed if the two LUTs are packed.

Parameters
LUTA
LUTB
Returns
unsigned int

Definition at line 2130 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::addLUT().

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

◆ getPlacementInfo()

◆ getPriorityQueueTop()

const PackingCLBCluster* ParallelCLBPacker::PackingCLBSite::getPriorityQueueTop ( )
inline

Definition at line 1912 of file ParallelCLBPacker.h.

◆ getSlotMapping()

const SiteBELMapping& ParallelCLBPacker::PackingCLBSite::getSlotMapping ( ) const
inline

Get the slot(BEL) mapping of the cells.

Returns
const SiteBELMapping&

Definition at line 2575 of file ParallelCLBPacker.h.

◆ getSlotMappingRef()

SiteBELMapping& ParallelCLBPacker::PackingCLBSite::getSlotMappingRef ( )
inline

Definition at line 2580 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::timingDrivenDetailedPlacement_LUTFFPairReloacationAfterSlotMapping().

Here is the caller graph for this function:

◆ getY2xRatio()

float ParallelCLBPacker::PackingCLBSite::getY2xRatio ( ) const
inline

Definition at line 1923 of file ParallelCLBPacker.h.

Referenced by operator<<(), and ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::printMyself().

Here is the caller graph for this function:

◆ greedyMapMuxForCommonLUTFFInSite() [1/2]

void ParallelCLBPacker::PackingCLBSite::greedyMapMuxForCommonLUTFFInSite ( )

find the slots in the site for Muxes by enumeration

Definition at line 2059 of file ParallelCLBPacker_PackingCLBSite.cc.

Referenced by finalMapToSlots().

Here is the caller graph for this function:

◆ greedyMapMuxForCommonLUTFFInSite() [2/2]

void ParallelCLBPacker::PackingCLBSite::greedyMapMuxForCommonLUTFFInSite ( int  FFControlSetOrderId)

find the slots in the site for Muxes

Parameters
FFControlSetOrderIdcontrol the order of FF Control sets

Definition at line 2080 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ hasValidPQTop()

bool ParallelCLBPacker::PackingCLBSite::hasValidPQTop ( )
inline

Definition at line 1907 of file ParallelCLBPacker.h.

◆ isCarryMacro()

bool ParallelCLBPacker::PackingCLBSite::isCarryMacro ( DesignInfo::DesignCell cell)
inline

Definition at line 2490 of file ParallelCLBPacker.h.

Here is the call graph for this function:

◆ isMuxMacro()

bool ParallelCLBPacker::PackingCLBSite::isMuxMacro ( DesignInfo::DesignCell cell)
inline

Definition at line 2477 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::PackingCLBSite::PackingCLBCluster::addFFGroup().

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

◆ isPQTopCompletelyAccptedByCells()

bool ParallelCLBPacker::PackingCLBSite::isPQTopCompletelyAccptedByCells ( )
inline

check whether all the PlacementUnit in the top cluster in the priority queue have been assigned to this CLB site

Returns
true if all the PlacementUnits in the top cluster in the priority queue have been assigned to this CLB site
false if some of the PlacementUnits in the top cluster in the priority queue have NOT been assigned to this CLB site yet (maybe unassigned yet or maybe assigned to some other CLB sites)

Definition at line 1811 of file ParallelCLBPacker.h.

◆ mapCarryRelatedCellsToSlots()

void ParallelCLBPacker::PackingCLBSite::mapCarryRelatedCellsToSlots ( PlacementInfo::PlacementMacro _CARRYChain,
float  siteOffset 
)

Definition at line 2763 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ mapLUTRAMRelatedCellsToSlots()

void ParallelCLBPacker::PackingCLBSite::mapLUTRAMRelatedCellsToSlots ( PlacementInfo::PlacementMacro _LUTRAMMacro)

Definition at line 2757 of file ParallelCLBPacker_PackingCLBSite.cc.

◆ mapMuxF7Macro()

void ParallelCLBPacker::PackingCLBSite::mapMuxF7Macro ( int  halfCLBOffset,
PlacementInfo::PlacementMacro MUXF7Macro 
)

map cells in MUXF7 macro to CLB slot

Parameters
muxF7Offsetthe offset of the MUXF7 in the CLB site. There is only two slots for MUXF8
MUXF7Macrothe pointer of the MUXF7 needed to be mapped into current site

Definition at line 1918 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ mapMuxF8Macro()

void ParallelCLBPacker::PackingCLBSite::mapMuxF8Macro ( int  muxF8Offset,
PlacementInfo::PlacementMacro MUXF8Macro 
)

map cells in MUXF8 macro to CLB slot

Parameters
muxF8Offsetthe offset of the MUXF8 in the CLB site. There is only two slots for MUXF8
MUXF8Macrothe pointer of the MUXF8 needed to be mapped into current site

Definition at line 1775 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ moveLUTToLUT6Slot()

void ParallelCLBPacker::PackingCLBSite::moveLUTToLUT6Slot ( )

Definition at line 2735 of file ParallelCLBPacker_PackingCLBSite.cc.

◆ refreshPrioryQueue()

void ParallelCLBPacker::PackingCLBSite::refreshPrioryQueue ( )

sort the elements in the priority queue

Definition at line 28 of file ParallelCLBPacker_PackingCLBSite.cc.

◆ removeClustersIncompatibleWithDetClusterFromPQ()

void ParallelCLBPacker::PackingCLBSite::removeClustersIncompatibleWithDetClusterFromPQ ( )

remove clusters incompatible with determined cluster from PQ

some of the clusters in the PQ are not compatible with the determined set of PUs, so we need to remove them too.

Definition at line 70 of file ParallelCLBPacker_PackingCLBSite.cc.

◆ removeInvalidClustersFromPQ()

void ParallelCLBPacker::PackingCLBSite::removeInvalidClustersFromPQ ( )

remove invalid clusters from the priority queue

since some of the PlacementUnits have been determined to be mapped to some other sites, they should be removed from the PQ

Definition at line 49 of file ParallelCLBPacker_PackingCLBSite.cc.

◆ removeInvalidPUsFromNeighborPUs()

void ParallelCLBPacker::PackingCLBSite::removeInvalidPUsFromNeighborPUs ( )

remove invalid clusters from neighbor PlacementUnits

since some of the PlacementUnits have been determined to be mapped to some other sites, they should be removed from the neighbor PU set. Moreover, some of the candidate PUs are not compatible with the determined set of PUs, so we need to remove them too.

Definition at line 109 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ setClockRegionAwareTo()

void ParallelCLBPacker::PackingCLBSite::setClockRegionAwareTo ( bool  _clockRegionAware)
inline

Definition at line 2637 of file ParallelCLBPacker.h.

◆ setDebug()

void ParallelCLBPacker::PackingCLBSite::setDebug ( )
inline

Definition at line 1980 of file ParallelCLBPacker.h.

◆ setDeterminedClusterInSite()

void ParallelCLBPacker::PackingCLBSite::setDeterminedClusterInSite ( PackingCLBCluster tmpCluster)
inline

◆ setNonCLBCell()

void ParallelCLBPacker::PackingCLBSite::setNonCLBCell ( DesignInfo::DesignCell _NonCLBCell)
inline

Definition at line 2061 of file ParallelCLBPacker.h.

Referenced by ParallelCLBPacker::addNonCLBPackingSites().

Here is the caller graph for this function:

◆ updateConsistentPUsInTop()

void ParallelCLBPacker::PackingCLBSite::updateConsistentPUsInTop ( )

update the information of consistent PUs at the top of priority queue

the PQ top might be kept updated but some of its PUs might be consistent, which we can make them as determined PUs.

Definition at line 142 of file ParallelCLBPacker_PackingCLBSite.cc.

Here is the call graph for this function:

◆ updateStep()

void ParallelCLBPacker::PackingCLBSite::updateStep ( bool  initial,
bool  debug = false 
)

a iteration to pack PlacementUnit into a CLB site

Parameters
initialindicate whether it is the first packing iteration
debugdump debug information or not

Definition at line 434 of file ParallelCLBPacker_PackingCLBSite.cc.

Member Data Documentation

◆ best_DirectConnect

float ParallelCLBPacker::PackingCLBSite::best_DirectConnect = -100000000
private

Definition at line 2770 of file ParallelCLBPacker.h.

Referenced by finalMapToSlots().

◆ best_mappedCells

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::best_mappedCells
private

Definition at line 2772 of file ParallelCLBPacker.h.

◆ best_mappedFFs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::best_mappedFFs
private

Definition at line 2774 of file ParallelCLBPacker.h.

◆ best_mappedLUTs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::best_mappedLUTs
private

Definition at line 2773 of file ParallelCLBPacker.h.

◆ best_SlotMapping

SiteBELMapping ParallelCLBPacker::PackingCLBSite::best_SlotMapping
private

Definition at line 2771 of file ParallelCLBPacker.h.

◆ carryCell

DesignInfo::DesignCell* ParallelCLBPacker::PackingCLBSite::carryCell = nullptr
private

Definition at line 2756 of file ParallelCLBPacker.h.

Referenced by getCarryCell().

◆ CARRYChain

PlacementInfo::PlacementMacro* ParallelCLBPacker::PackingCLBSite::CARRYChain = nullptr
private

Definition at line 2754 of file ParallelCLBPacker.h.

Referenced by addCarry(), and getCarryMacro().

◆ CARRYChainSiteOffset

int ParallelCLBPacker::PackingCLBSite::CARRYChainSiteOffset = -1
private

Definition at line 2758 of file ParallelCLBPacker.h.

Referenced by addCarry(), and getCarrySiteOffset().

◆ CLBSite

DeviceInfo::DeviceSite* ParallelCLBPacker::PackingCLBSite::CLBSite
private

Definition at line 2683 of file ParallelCLBPacker.h.

Referenced by getCLBSite(), and getHPWLChangeForPU().

◆ clockRegionAware

bool ParallelCLBPacker::PackingCLBSite::clockRegionAware = true
private

whether make clock region become constraints

Definition at line 2739 of file ParallelCLBPacker.h.

Referenced by setClockRegionAwareTo().

◆ conflictLUTs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::conflictLUTs
private

Definition at line 2767 of file ParallelCLBPacker.h.

Referenced by addCarry(), conflictLUTsContain(), and getConflictLUTs().

◆ curD

float ParallelCLBPacker::PackingCLBSite::curD = 0
private

current neighbor search diameter

Definition at line 2708 of file ParallelCLBPacker.h.

◆ debug

bool ParallelCLBPacker::PackingCLBSite::debug = false
private

Definition at line 2760 of file ParallelCLBPacker.h.

Referenced by setDebug().

◆ deltaD

float ParallelCLBPacker::PackingCLBSite::deltaD = 1.0
private

the increase step of the neighbor search diameter

Definition at line 2702 of file ParallelCLBPacker.h.

◆ determinedClusterInSite

PackingCLBCluster* ParallelCLBPacker::PackingCLBSite::determinedClusterInSite = nullptr
private

◆ detScore

float ParallelCLBPacker::PackingCLBSite::detScore = 0
private

Definition at line 2749 of file ParallelCLBPacker.h.

Referenced by getDetScore().

◆ fixedLUTsInPairs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::fixedLUTsInPairs
private

Definition at line 2766 of file ParallelCLBPacker.h.

Referenced by addCarry().

◆ fixedPairedLUTs

std::set<std::pair<DesignInfo::DesignCell *, DesignInfo::DesignCell *> > ParallelCLBPacker::PackingCLBSite::fixedPairedLUTs
private

Definition at line 2765 of file ParallelCLBPacker.h.

Referenced by getFixedPairedLUTs().

◆ HPWLWeight

float ParallelCLBPacker::PackingCLBSite::HPWLWeight = 0.01
private

◆ isCarrySite

bool ParallelCLBPacker::PackingCLBSite::isCarrySite = false
private

Definition at line 2751 of file ParallelCLBPacker.h.

Referenced by checkIsCarrySite(), and checkIsPrePackedSite().

◆ isLUTRAMSite

bool ParallelCLBPacker::PackingCLBSite::isLUTRAMSite = false
private

Definition at line 2752 of file ParallelCLBPacker.h.

Referenced by checkIsLUTRAMSite(), and checkIsPrePackedSite().

◆ isNonCLBSite

bool ParallelCLBPacker::PackingCLBSite::isNonCLBSite = false
private

Definition at line 2753 of file ParallelCLBPacker.h.

Referenced by checkIsNonCLBSite(), and setNonCLBCell().

◆ LUTRAMMacro

PlacementInfo::PlacementMacro* ParallelCLBPacker::PackingCLBSite::LUTRAMMacro = nullptr
private

Definition at line 2755 of file ParallelCLBPacker.h.

Referenced by addLUTRAMMacro(), and getLUTRAMMacro().

◆ mappedCells

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::mappedCells
private

Definition at line 2762 of file ParallelCLBPacker.h.

◆ mappedFFs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::mappedFFs
private

Definition at line 2764 of file ParallelCLBPacker.h.

◆ mappedLUTs

std::set<DesignInfo::DesignCell *> ParallelCLBPacker::PackingCLBSite::mappedLUTs
private

Definition at line 2763 of file ParallelCLBPacker.h.

◆ maxD

float ParallelCLBPacker::PackingCLBSite::maxD = 10
private

the maximum constraint of the neighbor search diameter

Definition at line 2714 of file ParallelCLBPacker.h.

◆ neighborPUs

std::set<PlacementInfo::PlacementUnit *, Packing_PUcompare> ParallelCLBPacker::PackingCLBSite::neighborPUs
private

Definition at line 2742 of file ParallelCLBPacker.h.

Referenced by getNeighborPUs(), and PackingCLBSite().

◆ nonCLBCell

DesignInfo::DesignCell* ParallelCLBPacker::PackingCLBSite::nonCLBCell = nullptr
private

Definition at line 2757 of file ParallelCLBPacker.h.

Referenced by getNonCLBCell(), and setNonCLBCell().

◆ numNeighbor

unsigned int ParallelCLBPacker::PackingCLBSite::numNeighbor = 10
private

the threshold number of cells for site

Definition at line 2696 of file ParallelCLBPacker.h.

◆ placementInfo

PlacementInfo* ParallelCLBPacker::PackingCLBSite::placementInfo
private

◆ PQSize

unsigned int ParallelCLBPacker::PackingCLBSite::PQSize = 10
private

the size of priority queue (the low-priority candidates will be removed)

Definition at line 2720 of file ParallelCLBPacker.h.

◆ priorityQueue

std::vector<PackingCLBCluster *> ParallelCLBPacker::PackingCLBSite::priorityQueue
private

◆ PU2TopCnt

std::map<PlacementInfo::PlacementUnit *, int, Packing_PUcompare> ParallelCLBPacker::PackingCLBSite::PU2TopCnt
private

Definition at line 2746 of file ParallelCLBPacker.h.

Referenced by PackingCLBSite().

◆ PUId2PackingCLBSite

const std::vector<PackingCLBSite *>& ParallelCLBPacker::PackingCLBSite::PUId2PackingCLBSite
private

◆ seedClusters

std::vector<PackingCLBCluster *> ParallelCLBPacker::PackingCLBSite::seedClusters
private

Definition at line 2744 of file ParallelCLBPacker.h.

Referenced by PackingCLBSite().

◆ slotMapping

SiteBELMapping ParallelCLBPacker::PackingCLBSite::slotMapping
private

◆ unchangedIterationThr

int ParallelCLBPacker::PackingCLBSite::unchangedIterationThr = 3
private

specify how many iterations a PlacementUnit should stay at the top priority of a site before we finally map it to the site

Definition at line 2690 of file ParallelCLBPacker.h.

◆ unchangeIterationCnt

int ParallelCLBPacker::PackingCLBSite::unchangeIterationCnt = 0
private

Definition at line 2741 of file ParallelCLBPacker.h.

◆ y2xRatio

float ParallelCLBPacker::PackingCLBSite::y2xRatio = 1.0
private

a factor to tune the weights of the net spanning in Y-coordinate relative to the net spanning in X-coordinate

Definition at line 2727 of file ParallelCLBPacker.h.

Referenced by getHPWLChangeForPU(), and getY2xRatio().


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