/*===================================================================*/ // // place_gordian.h // // Aaron P. Hurst, 2003-2007 // ahurst@eecs.berkeley.edu // /*===================================================================*/ #if !defined(PLACE_GORDIAN_H_) #define ABC__phys__place__place_gordian_h #include "place_base.h" #include "place_qpsolver.h" ABC_NAMESPACE_HEADER_START // Parameters for analytic placement #define CLIQUE_PENALTY 1.0 #define IGNORE_NETSIZE 20 // Parameters for partitioning #define LARGEST_FINAL_SIZE 20 #define PARTITION_AREA_ONLY true #define REALLOCATE_PARTITIONS false #define FINAL_REALLOCATE_PARTITIONS false #define IGNORE_COG false #define MAX_PARTITION_NONSYMMETRY 0.30 // Parameters for re-partitioning #define REPARTITION_LEVEL_DEPTH 4 #define REPARTITION_TARGET_FRACTION 0.15 #define REPARTITION_FM false #define REPARTITION_HMETIS true // Parameters for F-M re-partitioning #define FM_MAX_BIN 10 #define FM_MAX_PASSES 10 extern int g_place_numPartitions; extern qps_problem_t *g_place_qpProb; typedef struct Partition { int m_numMembers; ConcreteCell **m_members; Rect m_bounds; bool m_done, m_leaf, m_vertical; float m_area; int m_level; struct Partition *m_sub1, *m_sub2; } Partition; extern Partition *g_place_rootPartition; void initPartitioning(); void incrementalPartition(); bool refinePartitions(); void reallocPartitions(); bool refinePartition(Partition *p); void resizePartition(Partition *p); void reallocPartition(Partition *p); void repartitionHMetis(Partition *parent); void repartitionFM(Partition *parent); void partitionScanlineMincut(Partition *parent); void partitionEqualArea(Partition *parent); void sanitizePlacement(); void constructQuadraticProblem(); void solveQuadraticProblem(bool useCOG); ABC_NAMESPACE_HEADER_END #endif