AMF-Placer
2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
|
a directed graph for timing analysis More...
#include <PlacementTimingInfo.h>
Classes | |
class | TimingEdge |
TimingEdge records a directed interconnection relationship between two TimingNode. It is a point-to-point information instead of HyperEdge. More... | |
class | TimingNode |
TimingNode is the node in TimingGraph, which could be pin or cell in the design netlist. More... | |
Public Member Functions | |
TimingGraph (PlacementTimingInfo *timingInfo) | |
Construct a new empty Timing Graph object. More... | |
~TimingGraph () | |
void | insertTimingNode (TimingNode *timingNode) |
insert a TimingNode into this TimingGraph More... | |
std::vector< TimingNode * > & | getNodes () |
std::vector< TimingEdge * > & | getEdges () |
void | addEdgeBetween (int idA, int idB, DesignInfo::DesignPin *srcPin, DesignInfo::DesignPin *sinkPin, DesignInfo::DesignNet *net=nullptr, float delay=0.0) |
add a TimingEdge into TimingGraph based on some related information More... | |
void | findALoopFromNode (std::vector< int > &nodeInPath, int startNode, int curNode, int level) |
find loop from a node in timing graph (for debug) More... | |
void | forwardLevelization () |
propogate the forward level of each TimingNode forward level of a TimingNode is the distance toward the farthest predecessor register based on the path length (instead of delay) More... | |
void | backwardLevelization () |
propogate the backward level of each TimingNode backward level of a TimingNode is the distance toward the farthest successor register based on the path length (instead of delay) More... | |
void | propogateArrivalTime () |
propogate the timing delay along the TimingEdge More... | |
void | backPropogateRequiredArrivalTime () |
back propogate the required arrival time More... | |
void | updateCriticalPath () |
int | getCriticalEndPoint () |
float | getCriticalPathDelay () |
std::vector< int > | backTraceDelayLongestPathFromNode (int curNodeId) |
backtrace the longest delay path from the node More... | |
bool | backTraceDelayLongestPathFromNode (int curNodeId, std::vector< int > &isCovered, std::vector< int > &resPath, int converThr=30) |
void | setLongestPathLength () |
Set the Longest Path Length for each TimingNode in the TimingGraph and get a sorted vector of TimingNodes. More... | |
void | sortedEndpointByDelay () |
std::vector< TimingNode * > & | getSortedTimingEndpoints () |
std::vector< int > | traceBackFromNode (int targetId) |
find the longest path from a register to the target node (id) More... | |
std::vector< int > | traceForwardFromNode (int targetId) |
find the longest path from the target node (id) to a register More... | |
std::vector< int > | BFSFromNode (int startNodeId, int pathLenThr, unsigned sizeThr, std::set< int > &exceptionCells) |
BFS the sucessors(predecessors) of a node in the long paths. More... | |
std::vector< int > | DFSFromNode (int startNodeId, int pathLenThr, unsigned sizeThr, std::set< int > &exceptionCells, int fanoutThr=10000000) |
DFS the sucessors(predecessors) of a node in the long paths. More... | |
std::vector< TimingNode * > & | getPathLenSortedNodes () |
int | getLongPathThresholdLevel () |
Get the long path threshold level. More... | |
int | getMediumPathThresholdLevel () |
Get the medium path threshold level. More... | |
void | setLongPathThrRatio (float _r) |
float | getClockPeriod () |
Get the clock period. More... | |
void | setClockPeriod (float _clockPeriod) |
Set the clock period. More... | |
Private Attributes | |
PlacementTimingInfo * | timingInfo = nullptr |
std::vector< TimingNode * > | nodes |
std::vector< TimingNode * > | pathLenSortedNodes |
std::vector< TimingNode * > | delaySortedTimingEndpointNodes |
std::vector< TimingEdge * > | edges |
std::vector< std::vector< int > > | forwardlevel2NodeIds |
levelized nodes in difference forward level More... | |
std::vector< std::vector< int > > | backwardlevel2NodeIds |
levelized nodes in difference backward level More... | |
float | longPathThrRatio = 0.95 |
float | mediumPathThrRatio = 0.8 |
int | longPathThresholdLevel = 1 |
int | mediumPathThresholdLevel = 1 |
float | clockPeriod = 10.0 |
float | maxDelay = 0 |
int | maxDelayId = -1 |
a directed graph for timing analysis
nodeType | indicate the type of a node in the graph, usually it is a DesignCell* or DesignPin* |
Definition at line 70 of file PlacementTimingInfo.h.
|
inline |
Construct a new empty Timing Graph object.
Definition at line 77 of file PlacementTimingInfo.h.
|
inline |
Definition at line 82 of file PlacementTimingInfo.h.
|
inline |
add a TimingEdge into TimingGraph based on some related information
idA | TimingNode A id |
idB | TimingNode B id |
srcPin | source DesignPin |
sinkPin | sink DesignPin |
net | related DesignNet |
delay | the delay of this interconnection |
Definition at line 557 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
void PlacementTimingInfo::TimingGraph< nodeType >::backPropogateRequiredArrivalTime | ( | ) |
back propogate the required arrival time
Definition at line 650 of file PlacementTimingInfo.cc.
std::vector< int > PlacementTimingInfo::TimingGraph< nodeType >::backTraceDelayLongestPathFromNode | ( | int | curNodeId | ) |
backtrace the longest delay path from the node
curNodeId |
Definition at line 685 of file PlacementTimingInfo.cc.
bool PlacementTimingInfo::TimingGraph< nodeType >::backTraceDelayLongestPathFromNode | ( | int | curNodeId, |
std::vector< int > & | isCovered, | ||
std::vector< int > & | resPath, | ||
int | converThr = 30 |
||
) |
Definition at line 703 of file PlacementTimingInfo.cc.
void PlacementTimingInfo::TimingGraph< nodeType >::backwardLevelization | ( | ) |
propogate the backward level of each TimingNode backward level of a TimingNode is the distance toward the farthest successor register based on the path length (instead of delay)
Definition at line 309 of file PlacementTimingInfo.cc.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
std::vector< int > PlacementTimingInfo::TimingGraph< nodeType >::BFSFromNode | ( | int | startNodeId, |
int | pathLenThr, | ||
unsigned | sizeThr, | ||
std::set< int > & | exceptionCells | ||
) |
BFS the sucessors(predecessors) of a node in the long paths.
startNodeId | start node Id |
sizeThr | the number limitation to avoid huge cluster |
Definition at line 519 of file PlacementTimingInfo.cc.
std::vector< int > PlacementTimingInfo::TimingGraph< nodeType >::DFSFromNode | ( | int | startNodeId, |
int | pathLenThr, | ||
unsigned | sizeThr, | ||
std::set< int > & | exceptionCells, | ||
int | fanoutThr = 10000000 |
||
) |
DFS the sucessors(predecessors) of a node in the long paths.
startNodeId | start node Id |
sizeThr | the number limitation to avoid huge cluster |
fanoutThr | limit the node fanout during DFS |
Definition at line 460 of file PlacementTimingInfo.cc.
|
inline |
find loop from a node in timing graph (for debug)
nodeInPath | |
startNode | |
curNode | |
level |
Definition at line 576 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::findALoopFromNode().
void PlacementTimingInfo::TimingGraph< nodeType >::forwardLevelization | ( | ) |
propogate the forward level of each TimingNode forward level of a TimingNode is the distance toward the farthest predecessor register based on the path length (instead of delay)
Definition at line 186 of file PlacementTimingInfo.cc.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
|
inline |
Get the clock period.
TODO: enable multiple clock
Definition at line 777 of file PlacementTimingInfo.h.
Referenced by WirelengthOptimizer::addPseudoNet_SlackBased(), ParallelCLBPacker::PackingCLBSite::checkDirectLUTFFConnect_slack(), ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCarrySite(), ParallelCLBPacker::PackingCLBSite::finalMapToSlotsForCommonLUTFFInSite(), ParallelCLBPacker::PackingCLBSite::greedyMapMuxForCommonLUTFFInSite(), and WirelengthOptimizer::LUTLUTPairing_TimingDriven().
|
inline |
Definition at line 642 of file PlacementTimingInfo.h.
|
inline |
Definition at line 647 of file PlacementTimingInfo.h.
|
inline |
Definition at line 542 of file PlacementTimingInfo.h.
|
inline |
Get the long path threshold level.
Definition at line 750 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::getLongPathThresholdLevel().
|
inline |
Get the medium path threshold level.
Definition at line 760 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::getMediumPathThresholdLevel().
|
inline |
Definition at line 537 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph(), PlacementTimingOptimizer::findCriticalPath(), PlacementTimingInfo::getSimplePlacementTimingInfo(), PlacementInfo::reloadNets(), PlacementTimingInfo::setDSPInnerDelay(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::updateCriticalPath().
|
inline |
Definition at line 740 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::getSimplePlacementTimingInfo_PathLenSorted().
|
inline |
Definition at line 699 of file PlacementTimingInfo.h.
|
inline |
insert a TimingNode into this TimingGraph
timingNode | a given TimingNode |
Definition at line 532 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
void PlacementTimingInfo::TimingGraph< nodeType >::propogateArrivalTime | ( | ) |
propogate the timing delay along the TimingEdge
Definition at line 578 of file PlacementTimingInfo.cc.
|
inline |
Set the clock period.
TODO: enable multiple clock
_clockPeriod |
Definition at line 789 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
|
inline |
Set the Longest Path Length for each TimingNode in the TimingGraph and get a sorted vector of TimingNodes.
Definition at line 668 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::buildSimpleTimingGraph().
|
inline |
Definition at line 765 of file PlacementTimingInfo.h.
|
inline |
Definition at line 684 of file PlacementTimingInfo.h.
Referenced by PlacementTimingOptimizer::findCriticalPaths(), PlacementTimingOptimizer::getSortedTimingNodes(), and PlacementInfo::transferPaintData().
std::vector< int > PlacementTimingInfo::TimingGraph< nodeType >::traceBackFromNode | ( | int | targetId | ) |
find the longest path from a register to the target node (id)
targetId |
Definition at line 399 of file PlacementTimingInfo.cc.
std::vector< int > PlacementTimingInfo::TimingGraph< nodeType >::traceForwardFromNode | ( | int | targetId | ) |
find the longest path from the target node (id) to a register
targetId |
Definition at line 429 of file PlacementTimingInfo.cc.
|
inline |
Definition at line 628 of file PlacementTimingInfo.h.
|
private |
levelized nodes in difference backward level
Definition at line 811 of file PlacementTimingInfo.h.
|
private |
Definition at line 818 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getClockPeriod(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::setClockPeriod().
|
private |
Definition at line 798 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getSortedTimingEndpoints(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::sortedEndpointByDelay().
|
private |
Definition at line 799 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::addEdgeBetween(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getEdges(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::TimingGraph(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::~TimingGraph().
|
private |
levelized nodes in difference forward level
Definition at line 805 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::sortedEndpointByDelay().
|
private |
Definition at line 815 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getLongPathThresholdLevel().
|
private |
Definition at line 813 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::setLongPathThrRatio().
|
private |
Definition at line 820 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getCriticalPathDelay(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::updateCriticalPath().
|
private |
Definition at line 821 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getCriticalEndPoint(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::updateCriticalPath().
|
private |
Definition at line 816 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getMediumPathThresholdLevel().
|
private |
Definition at line 814 of file PlacementTimingInfo.h.
|
private |
Definition at line 796 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::addEdgeBetween(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::findALoopFromNode(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getNodes(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::insertTimingNode(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::setLongestPathLength(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::sortedEndpointByDelay(), PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::TimingGraph(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::~TimingGraph().
|
private |
Definition at line 797 of file PlacementTimingInfo.h.
Referenced by PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::getPathLenSortedNodes(), and PlacementTimingInfo::TimingGraph< DesignInfo::DesignCell >::setLongestPathLength().
|
private |
Definition at line 795 of file PlacementTimingInfo.h.