diff --git a/src/mpl2/src/SimulatedAnnealingCore.cpp b/src/mpl2/src/SimulatedAnnealingCore.cpp index a80a0906352..e100111a685 100644 --- a/src/mpl2/src/SimulatedAnnealingCore.cpp +++ b/src/mpl2/src/SimulatedAnnealingCore.cpp @@ -364,11 +364,12 @@ void SimulatedAnnealingCore::addBoundaryDistToWirelength( += net_weight * std::min( {dist_to_left, dist_to_right, dist_to_bottom, dist_to_top}); - } else if (constraint_boundary == Boundary::L - || constraint_boundary == Boundary::R) { + } else if (constraint_boundary == Boundary::L && !left_is_blocked_ + || constraint_boundary == Boundary::R && !right_is_blocked_) { const float x2 = io.getPinX(); wirelength_ += net_weight * std::abs(x2 - x1); - } else { // Top or Bottom + } else if (constraint_boundary == Boundary::T && !top_is_blocked_ + || constraint_boundary == Boundary::B && !bottom_is_blocked_) { const float y2 = io.getPinY(); wirelength_ += net_weight * std::abs(y2 - y1); } diff --git a/src/mpl2/src/clusterEngine.cpp b/src/mpl2/src/clusterEngine.cpp index 1258a4627ff..3fe836af16f 100644 --- a/src/mpl2/src/clusterEngine.cpp +++ b/src/mpl2/src/clusterEngine.cpp @@ -417,7 +417,8 @@ void ClusteringEngine::createIOCluster( void ClusteringEngine::setBlockedBoundariesForIOs() { const float blocked_boundary_threshold = 0.7; - std::map blockage_extension_map = getBlockageExtensionMap(); + std::map blockage_extension_map + = computeBlockageExtensionMap(); for (const auto [boundary, blockage_extension] : blockage_extension_map) { if (blockage_extension >= blocked_boundary_threshold) { @@ -428,7 +429,7 @@ void ClusteringEngine::setBlockedBoundariesForIOs() // Computes how much blocked each boundary is for IOs base on PPL exclude // contraints. -std::map ClusteringEngine::getBlockageExtensionMap() +std::map ClusteringEngine::computeBlockageExtensionMap() { std::map blockage_extension_map; diff --git a/src/mpl2/src/clusterEngine.h b/src/mpl2/src/clusterEngine.h index 29122bbd386..803b757f167 100644 --- a/src/mpl2/src/clusterEngine.h +++ b/src/mpl2/src/clusterEngine.h @@ -184,7 +184,7 @@ class ClusteringEngine void setBaseThresholds(); void createIOClusters(); void setBlockedBoundariesForIOs(); - std::map getBlockageExtensionMap(); + std::map computeBlockageExtensionMap(); Boundary getConstraintBoundary(const odb::Rect& die, const odb::Rect& constraint_region); void createIOCluster(const odb::Rect& die,