@@ -367,6 +367,30 @@ CostT GridGraph::getViaCost(const int layer_index, const PointT loc) const
367367 return cost;
368368}
369369
370+ void GridGraph::convertODBtoCUGR (AccessPointSet& selected_access_points,
371+ odb::dbAccessPoint* ap,
372+ int x,
373+ int y) const
374+ {
375+ const int amount_per_x = design_->getDieRegion ().hx () / x_size_;
376+ const int amount_per_y = design_->getDieRegion ().hy () / y_size_;
377+ auto point = ap->getPoint ();
378+ auto layer = ap->getLayer ();
379+ const int ap_x = ((point.getX () + x) / amount_per_x >= x_size_)
380+ ? x_size_ - 1
381+ : (point.getX () + x) / amount_per_x;
382+ const int ap_y = ((point.getY () + y) / amount_per_y >= y_size_)
383+ ? y_size_ - 1
384+ : (point.getY () + y) / amount_per_y;
385+ const PointT selected_point = PointT (ap_x, ap_y);
386+ const int num_layer = ((layer->getNumber () - 2 ) > (getNumLayers () - 1 ))
387+ ? getNumLayers () - 1
388+ : layer->getNumber () - 2 ;
389+ const IntervalT selected_layer = IntervalT (num_layer);
390+ const AccessPoint ap_new{.point = selected_point, .layers = selected_layer};
391+ selected_access_points.emplace (ap_new);
392+ }
393+
370394bool GridGraph::findODBAccessPoints (
371395 const GRNet* net,
372396 AccessPointSet& selected_access_points) const
@@ -384,23 +408,7 @@ bool GridGraph::findODBAccessPoints(
384408 access_points.insert (
385409 access_points.begin (), bpin_pas.begin (), bpin_pas.end ());
386410 for (auto ap : bpin_pas) {
387- auto point = ap->getPoint ();
388- auto layer = ap->getLayer ();
389- const int ap_x = (point.getX () / amount_per_x >= x_size_)
390- ? x_size_ - 1
391- : point.getX () / amount_per_x;
392- const int ap_y = (point.getY () / amount_per_y >= y_size_)
393- ? y_size_ - 1
394- : point.getY () / amount_per_y;
395- const PointT selected_point = PointT (ap_x, ap_y);
396- const int num_layer
397- = ((layer->getNumber () - 2 ) > (getNumLayers () - 1 ))
398- ? getNumLayers () - 1
399- : layer->getNumber () - 2 ;
400- const IntervalT selected_layer = IntervalT (num_layer);
401- const AccessPoint ap_new{.point = selected_point,
402- .layers = selected_layer};
403- selected_access_points.emplace (ap_new);
411+ convertODBtoCUGR (selected_access_points, ap, 0 , 0 );
404412 }
405413 }
406414 }
@@ -415,23 +423,7 @@ bool GridGraph::findODBAccessPoints(
415423 for (auto ap : pref_access_points) {
416424 int x, y;
417425 iterms->getInst ()->getLocation (x, y);
418- auto point = ap->getPoint ();
419- auto layer = ap->getLayer ();
420- const int ap_x = ((point.getX () + x) / amount_per_x >= x_size_)
421- ? x_size_ - 1
422- : (point.getX () + x) / amount_per_x;
423- const int ap_y = ((point.getY () + y) / amount_per_y >= y_size_)
424- ? y_size_ - 1
425- : (point.getY () + y) / amount_per_y;
426- const PointT selected_point = PointT (ap_x, ap_y);
427- const int num_layer
428- = ((layer->getNumber () - 2 ) > (getNumLayers () - 1 ))
429- ? getNumLayers () - 1
430- : layer->getNumber () - 2 ;
431- const IntervalT selected_layer = IntervalT (num_layer);
432- const AccessPoint ap_new{.point = selected_point,
433- .layers = selected_layer};
434- selected_access_points.emplace (ap_new);
426+ convertODBtoCUGR (selected_access_points, ap, x, y);
435427 }
436428 }
437429 // Currently ignoring non preferred APs
0 commit comments