@@ -866,12 +866,11 @@ bool GlobalRouter::makeFastrouteNet(Net* net)
866
866
// See https://github.com/The-OpenROAD-Project/OpenROAD/pull/2893 and
867
867
// https://github.com/The-OpenROAD-Project/OpenROAD/discussions/2870
868
868
// for a detailed discussion
869
- int min_pin_layer = std::numeric_limits< int >:: max ();
869
+
870
870
for (RoutePt& pin_pos : pins_on_grid) {
871
871
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 ());
873
872
}
874
- fr_net-> setMinLayer ( std::max (min_pin_layer - 1 , min_layer - 1 ));
873
+
875
874
// Save stt input on debug file
876
875
if (fastroute_->hasSaveSttInput ()
877
876
&& net->getDbNet () == fastroute_->getDebugNet ()) {
@@ -901,18 +900,16 @@ void GlobalRouter::getNetLayerRange(odb::dbNet* db_net,
901
900
int & max_layer)
902
901
{
903
902
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 ();
905
904
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 ());
909
906
}
910
907
911
908
bool is_non_leaf_clock = isNonLeafClock (db_net);
912
909
min_layer = (is_non_leaf_clock && min_layer_for_clock_ > 0 )
913
910
? min_layer_for_clock_
914
911
: min_routing_layer_;
915
- min_layer = std::min (min_layer, port_min_layer );
912
+ min_layer = std::max (min_layer, pin_min_layer );
916
913
max_layer = (is_non_leaf_clock && max_layer_for_clock_ > 0 )
917
914
? max_layer_for_clock_
918
915
: max_routing_layer_;
@@ -1801,7 +1798,7 @@ void GlobalRouter::saveGuides()
1801
1798
db_net->getConstName ());
1802
1799
}
1803
1800
1804
- if (net->isLocal ()) {
1801
+ if (net->isLocal () || ( isCoveringPin (net, segment)) ) {
1805
1802
int layer_idx1 = segment.init_layer ;
1806
1803
int layer_idx2 = segment.final_layer ;
1807
1804
odb::dbTechLayer* layer1 = routing_layers_[layer_idx1];
@@ -1810,13 +1807,8 @@ void GlobalRouter::saveGuides()
1810
1807
odb::dbGuide::create (db_net, layer2, box);
1811
1808
} else {
1812
1809
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);
1820
1812
}
1821
1813
} else if (segment.init_layer == segment.final_layer ) {
1822
1814
if (segment.init_layer < min_routing_layer_
0 commit comments