@@ -1347,13 +1347,15 @@ bool PlacerPadPlacer::padSpreading(
13471347 total_force);
13481348 }
13491349
1350- // Push instances causing tunneling to fail
1350+ // Push instances causing tunneling to fail, these are instances that are too
1351+ // far from the instance that needs to tunnel/jump over the obstruction and
1352+ // therefore needs to push instances under the obstruction over to make room.
13511353 for (const auto & [inst_idx, ideal_pos] : failed_tunnel_positions) {
13521354 const int delta_pos = ideal_pos - positions[insts[inst_idx]]->center ;
13531355 const int push = ((delta_pos < 0 ) ? -1 : 1 )
13541356 * std::ceil ((damper * std::abs (delta_pos)) / site_width)
13551357 * site_width;
1356- std::vector<odb::dbInst*> push_insts;
1358+ std::vector<odb::dbInst*> push_insts; // instances to push
13571359 int last_idx = inst_idx;
13581360 int bound_pos;
13591361 if (delta_pos > 0 ) {
@@ -1398,6 +1400,7 @@ bool PlacerPadPlacer::padSpreading(
13981400 } else {
13991401 desired_pos = std::min (bound_pos, curr_pos + push);
14001402 }
1403+ // new position
14011404 const int move_to = convertRowIndexToPos (snapToRowSite (
14021405 desired_pos - (positions[inst]->width / 2 )))
14031406 + (positions[inst]->width / 2 );
@@ -1611,6 +1614,7 @@ std::pair<int, int> PlacerPadPlacer::getTunnelingPosition(odb::dbInst* inst,
16111614 if (checkInstancePlacement (inst)) {
16121615 const int next = getNearestLegalPosition (inst, target, true , false );
16131616 if (next >= low_bound) {
1617+ // inst is obstructed, so move to the nearest edge of the obstruction
16141618 debugPrint (getLogger (),
16151619 utl::PAD,
16161620 " Place" ,
0 commit comments