abc/src/phys/place/place_gordian.c
// --------------------------------------------------------------------
// globalPlace()
//
/// \brief Performs analytic placement using a GORDIAN-like algorithm.
//
/// Updates the positions of all non-fixed non-pad cells.
///
// --------------------------------------------------------------------
globalPlace()
\brief Performs analytic placement using a GORDIAN-like algorithm.

Updates the positions of all non-fixed non-pad cells.
globalPlace () \ brief Performs analytic placement using a GORDIAN - like algorithm . Updates the positions of all non - fixed non - pad cells .
void globalPlace() {
  bool completionFlag = false;
  int iteration = 0;  
  printf("PLAC-10 : Global placement (wirelength-driven Gordian)\n");
  initPartitioning();
  printf("QMAN-00 : \tconstructing initial quadratic problem...\n");
  constructQuadraticProblem();
  while(!completionFlag) {
    printf("QMAN-01 : \titeration %d numPartitions = %d\n",iteration,g_place_numPartitions);
    printf("QMAN-01 : \t\tglobal optimization\n");
    solveQuadraticProblem(!IGNORE_COG);
    printf("QMAN-01 : \t\tpartition refinement\n");
    if (REALLOCATE_PARTITIONS) reallocPartitions();
    completionFlag |= refinePartitions();
    printf("QMAN-01 : \t\twirelength = %e\n", getTotalWirelength());
    iteration++;
  }
  printf("QMAN-02 : \t\tfinal pass\n");
  if (FINAL_REALLOCATE_PARTITIONS) reallocPartitions();
  solveQuadraticProblem(!IGNORE_COG);
  printf("QMAN-01 : \t\twirelength = %e\n", getTotalWirelength());
  sanitizePlacement();
  printf("QMAN-01 : \t\twirelength = %e\n", getTotalWirelength());
  globalFixDensity(25, g_place_rowHeight*5);
  printf("QMAN-01 : \t\twirelength = %e\n", getTotalWirelength());
}
void globalPlace ( ) { bool completionFlag = false ; int iteration = 0 ; printf ( " \n " ) ; initPartitioning ( ) ; printf ( " \t \n " ) ; constructQuadraticProblem ( ) ; while ( ! completionFlag ) { printf ( " \t \n " , iteration , g_place_numPartitions ) ; printf ( " \t \t \n " ) ; solveQuadraticProblem ( ! IGNORE_COG ) ; printf ( " \t \t \n " ) ; if ( REALLOCATE_PARTITIONS ) reallocPartitions ( ) ; completionFlag |= refinePartitions ( ) ; printf ( " \t \t \n " , getTotalWirelength ( ) ) ; iteration ++ ; } printf ( " \t \t \n " ) ; if ( FINAL_REALLOCATE_PARTITIONS ) reallocPartitions ( ) ; solveQuadraticProblem ( ! IGNORE_COG ) ; printf ( " \t \t \n " , getTotalWirelength ( ) ) ; sanitizePlacement ( ) ; printf ( " \t \t \n " , getTotalWirelength ( ) ) ; globalFixDensity ( 25 , g_place_rowHeight * 5 ) ; printf ( " \t \t \n " , getTotalWirelength ( ) ) ; }
globalPlace()
\brief Performs analytic placement using a GORDIAN-like algorithm.
globalPlace () \ brief Performs analytic placement using a GORDIAN - like algorithm .
// build matrices representing interconnections // iterate placement until termination condition is met // do the global optimization in each direction // -------- PARTITIONING BASED CELL SPREADING ------ // bisection // final global optimization // clean up