Skip to content

Commit 639c8ed

Browse files
authored
Merge pull request The-OpenROAD-Project#4263 from arthurjolo/grt_layer_prediction_on_planar_routing
Grt layer prediction on planar routing
2 parents 27065cb + a77a043 commit 639c8ed

8 files changed

+334
-341
lines changed

src/grt/src/GlobalRouter.cpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -866,12 +866,11 @@ bool GlobalRouter::makeFastrouteNet(Net* net)
866866
// See https://github.com/The-OpenROAD-Project/OpenROAD/pull/2893 and
867867
// https://github.com/The-OpenROAD-Project/OpenROAD/discussions/2870
868868
// for a detailed discussion
869-
int min_pin_layer = std::numeric_limits<int>::max();
869+
870870
for (RoutePt& pin_pos : pins_on_grid) {
871871
fr_net->addPin(pin_pos.x(), pin_pos.y(), pin_pos.layer() - 1);
872-
min_pin_layer = std::min(min_pin_layer, pin_pos.layer());
873872
}
874-
fr_net->setMinLayer(std::max(min_pin_layer - 1, min_layer - 1));
873+
875874
// Save stt input on debug file
876875
if (fastroute_->hasSaveSttInput()
877876
&& net->getDbNet() == fastroute_->getDebugNet()) {
@@ -901,18 +900,16 @@ void GlobalRouter::getNetLayerRange(odb::dbNet* db_net,
901900
int& max_layer)
902901
{
903902
Net* net = db_net_map_[db_net];
904-
int port_min_layer = std::numeric_limits<int>::max();
903+
int pin_min_layer = std::numeric_limits<int>::max();
905904
for (const Pin& pin : net->getPins()) {
906-
if (pin.isPort() || pin.isConnectedToPadOrMacro()) {
907-
port_min_layer = std::min(port_min_layer, pin.getConnectionLayer());
908-
}
905+
pin_min_layer = std::min(pin_min_layer, pin.getConnectionLayer());
909906
}
910907

911908
bool is_non_leaf_clock = isNonLeafClock(db_net);
912909
min_layer = (is_non_leaf_clock && min_layer_for_clock_ > 0)
913910
? min_layer_for_clock_
914911
: min_routing_layer_;
915-
min_layer = std::min(min_layer, port_min_layer);
912+
min_layer = std::max(min_layer, pin_min_layer);
916913
max_layer = (is_non_leaf_clock && max_layer_for_clock_ > 0)
917914
? max_layer_for_clock_
918915
: max_routing_layer_;
@@ -1801,7 +1798,7 @@ void GlobalRouter::saveGuides()
18011798
db_net->getConstName());
18021799
}
18031800

1804-
if (net->isLocal()) {
1801+
if (net->isLocal() || (isCoveringPin(net, segment))) {
18051802
int layer_idx1 = segment.init_layer;
18061803
int layer_idx2 = segment.final_layer;
18071804
odb::dbTechLayer* layer1 = routing_layers_[layer_idx1];
@@ -1810,13 +1807,8 @@ void GlobalRouter::saveGuides()
18101807
odb::dbGuide::create(db_net, layer2, box);
18111808
} else {
18121809
int layer_idx = std::min(segment.init_layer, segment.final_layer);
1813-
odb::dbTechLayer* layer = routing_layers_[layer_idx];
1814-
odb::dbGuide::create(db_net, layer, box);
1815-
if (isCoveringPin(net, segment)) {
1816-
int layer_idx = std::max(segment.init_layer, segment.final_layer);
1817-
odb::dbTechLayer* layer = routing_layers_[layer_idx];
1818-
odb::dbGuide::create(db_net, layer, box);
1819-
}
1810+
odb::dbTechLayer* layer1 = routing_layers_[layer_idx];
1811+
odb::dbGuide::create(db_net, layer1, box);
18201812
}
18211813
} else if (segment.init_layer == segment.final_layer) {
18221814
if (segment.init_layer < min_routing_layer_

0 commit comments

Comments
 (0)