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

AMFPlacer is an analytical mixed-size FPGA placer. More...

#include <AMFPlacer.h>

Collaboration diagram for AMFPlacer:

Public Member Functions

 AMFPlacer (std::string JSONFileName, bool guiEnable)
 Construct a new AMFPlacer object according to a given placer configuration file. More...
 
 ~AMFPlacer ()
 
void clearSomeAttributesCannotRecord ()
 
void run ()
 launch the analytical mixed-size FPGA placement procedure More...
 

Public Attributes

PaintDataBase * paintData = nullptr
 

Private Attributes

DeviceInfodeviceinfo = nullptr
 information related to the device (BELs, Sites, Tiles, Clock Regions) More...
 
DesignInfodesignInfo = nullptr
 information related to the design (cells, pins and nets) More...
 
PlacementInfoplacementInfo = nullptr
 inforamtion related to placement (locations, interconnections, status, constraints, legalization) More...
 
InitialPackerinitialPacker = nullptr
 initially packing for macro extraction based on pre-defined rules More...
 
IncrementalBELPackerincrementalBELPacker = nullptr
 incremental pairing of some FFs and LUTs into small macros More...
 
GlobalPlacerglobalPlacer = nullptr
 global placer acconting for initial placement, quadratic placement, cell spreading and macro legalization. More...
 
ParallelCLBPackerparallelCLBPacker = nullptr
 final packing of instances into CLB sites More...
 
std::map< std::string, std::string > JSON
 the user-defined settings of placement More...
 

Detailed Description

AMFPlacer is an analytical mixed-size FPGA placer.

To enable the performance optimization of application mapping on modern field-programmable gate arrays (FPGAs), certain critical path portions of the designs might be prearranged into many multi-cell macros during synthesis. These movable macros with constraints of shape and resources lead to challenging mixed-size placement for FPGA designs which cannot be addressed by previous works of analytical placers. AMF-Placer 2.0 is an open-source comprehensive timing-driven Analytical Mixed-size FPGA placer. It supports mixed-size placement of heterogeneous resources (e.g., LUT/FF/LUTRAM/MUX/CARRY/DSP/BRAM) on FPGA. To speed up the convergence and improve the timing quality of the placement, standing upon the shoulders of AMF-Placer 1.0, AMF-Placer 2.0 is equipped with a series of new techniques for timing optimization, including an effective regression-based timing model, placement-blockage-aware anchor insertion, WNS-aware timing-driven quadratic placement, and sector-guided detailed placement. Based on a set of the latest large open-source benchmarks from various domains for Xilinx Ultrascale FPGAs, experimental results indicate that critical path delays realized by AMF-Placer 2.0 are averagely 2.2% and 0.59% higher than those achieved by commercial tool Xilinx Vivavo 2020.2 and 2021.2 respectively. Meanwhile, the average runtime of placement procedure of AMF-Placer 2.0 is 14% and 8.5% higher than Xilinx Vivavo 2020.2 and 2021.2 respectively. Although limited by the absence of the exact timing model of the device, the information of design hierarchy and accurate routing feedback, AMF-Placer 2.0 is the first open-source FPGA placer which can handle the timing-driven mixed-size placement of practical complex designs with various FPGA resources and achieves the comparable quality to the latest commercial tools.

Definition at line 49 of file AMFPlacer.h.

Constructor & Destructor Documentation

◆ AMFPlacer()

AMFPlacer::AMFPlacer ( std::string  JSONFileName,
bool  guiEnable 
)
inline

Construct a new AMFPlacer object according to a given placer configuration file.

Parameters
JSONFileName

Definition at line 57 of file AMFPlacer.h.

Here is the call graph for this function:

◆ ~AMFPlacer()

AMFPlacer::~AMFPlacer ( )
inline

Definition at line 100 of file AMFPlacer.h.

Member Function Documentation

◆ clearSomeAttributesCannotRecord()

void AMFPlacer::clearSomeAttributesCannotRecord ( )
inline

Definition at line 113 of file AMFPlacer.h.

Referenced by run().

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

◆ run()

void AMFPlacer::run ( )
inline

launch the analytical mixed-size FPGA placement procedure

Definition at line 133 of file AMFPlacer.h.

Referenced by runPlacer().

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

Member Data Documentation

◆ designInfo

DesignInfo* AMFPlacer::designInfo = nullptr
private

information related to the design (cells, pins and nets)

Definition at line 267 of file AMFPlacer.h.

Referenced by AMFPlacer(), run(), and ~AMFPlacer().

◆ deviceinfo

DeviceInfo* AMFPlacer::deviceinfo = nullptr
private

information related to the device (BELs, Sites, Tiles, Clock Regions)

Definition at line 261 of file AMFPlacer.h.

Referenced by AMFPlacer(), run(), and ~AMFPlacer().

◆ globalPlacer

GlobalPlacer* AMFPlacer::globalPlacer = nullptr
private

global placer acconting for initial placement, quadratic placement, cell spreading and macro legalization.

Definition at line 291 of file AMFPlacer.h.

Referenced by run(), and ~AMFPlacer().

◆ incrementalBELPacker

IncrementalBELPacker* AMFPlacer::incrementalBELPacker = nullptr
private

incremental pairing of some FFs and LUTs into small macros

Definition at line 285 of file AMFPlacer.h.

Referenced by run(), and ~AMFPlacer().

◆ initialPacker

InitialPacker* AMFPlacer::initialPacker = nullptr
private

initially packing for macro extraction based on pre-defined rules

Definition at line 279 of file AMFPlacer.h.

Referenced by run(), and ~AMFPlacer().

◆ JSON

std::map<std::string, std::string> AMFPlacer::JSON
private

the user-defined settings of placement

Definition at line 303 of file AMFPlacer.h.

Referenced by AMFPlacer(), and run().

◆ paintData

PaintDataBase* AMFPlacer::paintData = nullptr

Definition at line 254 of file AMFPlacer.h.

Referenced by AMFPlacer(), main(), run(), and runVisualization().

◆ parallelCLBPacker

ParallelCLBPacker* AMFPlacer::parallelCLBPacker = nullptr
private

final packing of instances into CLB sites

Definition at line 297 of file AMFPlacer.h.

Referenced by run().

◆ placementInfo

PlacementInfo* AMFPlacer::placementInfo = nullptr
private

inforamtion related to placement (locations, interconnections, status, constraints, legalization)

Definition at line 273 of file AMFPlacer.h.

Referenced by clearSomeAttributesCannotRecord(), run(), and ~AMFPlacer().


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