Skip to content

Commit 5378cf9

Browse files
Merge pull request The-OpenROAD-Project#7409 from eder-matheus/grt_guides
grt: do not overwrite guides for nets that weren't modified
2 parents ca1e1d1 + 3b9ce30 commit 5378cf9

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

src/grt/include/grt/GlobalRouter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class GlobalRouter : public ant::GlobalRouteSource
149149
void readGuides(const char* file_name);
150150
void loadGuidesFromDB();
151151
void saveGuidesFromFile(std::unordered_map<odb::dbNet*, Guides>& guides);
152-
void saveGuides();
152+
void saveGuides(const std::vector<odb::dbNet*>& nets);
153153
void writeSegments(const char* file_name);
154154
void readSegments(const char* file_name);
155155
bool netIsCovered(odb::dbNet* db_net, std::string& pins_not_covered);

src/grt/src/GlobalRouter.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,12 @@ void GlobalRouter::globalRoute(bool save_guides,
329329
logger_->info(GRT, 14, "Routed nets: {}", routes_.size());
330330
}
331331
if (save_guides) {
332-
saveGuides();
332+
std::vector<odb::dbNet*> nets;
333+
nets.reserve(block_->getNets().size());
334+
for (odb::dbNet* db_net : block_->getNets()) {
335+
nets.push_back(db_net);
336+
}
337+
saveGuides(nets);
333338
}
334339
}
335340

@@ -402,6 +407,7 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm,
402407
"routing source is detailed routing.");
403408
}
404409

410+
std::vector<odb::dbNet*> modified_nets;
405411
while (violations && itr < iterations) {
406412
if (verbose_) {
407413
logger_->info(GRT, 6, "Repairing antennas, iteration {}.", itr + 1);
@@ -417,7 +423,7 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm,
417423
&& repair_antennas_->hasNewViolations()) {
418424
// Run jumper insertion and clean
419425
repair_antennas_->jumperInsertion(
420-
routes_, grid_->getTileSize(), getMaxRoutingLayer());
426+
routes_, grid_->getTileSize(), getMaxRoutingLayer(), modified_nets);
421427
repair_antennas_->clearViolations();
422428

423429
// run again antenna checker
@@ -439,13 +445,14 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm,
439445
nets_to_repair.clear();
440446
for (const Net* net : incr_groute.updateRoutes()) {
441447
nets_to_repair.push_back(net->getDbNet());
448+
modified_nets.push_back(net->getDbNet());
442449
}
443450
}
444451
repair_antennas_->clearViolations();
445452
itr++;
446453
}
447454
logger_->metric("antenna_diodes_count", total_diodes_count_);
448-
saveGuides();
455+
saveGuides(modified_nets);
449456
return total_diodes_count_;
450457
}
451458

@@ -2399,7 +2406,7 @@ void GlobalRouter::saveGuidesFromFile(
23992406
}
24002407
}
24012408

2402-
void GlobalRouter::saveGuides()
2409+
void GlobalRouter::saveGuides(const std::vector<odb::dbNet*>& nets)
24032410
{
24042411
int offset_x = grid_origin_.x();
24052412
int offset_y = grid_origin_.y();
@@ -2409,7 +2416,7 @@ void GlobalRouter::saveGuides()
24092416
int net_with_jumpers, total_jumpers;
24102417
net_with_jumpers = 0;
24112418
total_jumpers = 0;
2412-
for (odb::dbNet* db_net : block_->getNets()) {
2419+
for (odb::dbNet* db_net : nets) {
24132420
auto iter = routes_.find(db_net);
24142421
if (iter == routes_.end()) {
24152422
continue;
@@ -4810,6 +4817,11 @@ std::vector<Net*> GlobalRouter::updateDirtyRoutes(bool save_guides)
48104817
{
48114818
std::vector<Net*> dirty_nets;
48124819
if (!dirty_nets_.empty()) {
4820+
std::vector<odb::dbNet*> modified_nets;
4821+
modified_nets.reserve(dirty_nets.size());
4822+
for (const Net* net : dirty_nets) {
4823+
modified_nets.push_back(net->getDbNet());
4824+
}
48134825
fastroute_->setVerbose(false);
48144826
fastroute_->clearNetsToRoute();
48154827

@@ -4887,7 +4899,7 @@ std::vector<Net*> GlobalRouter::updateDirtyRoutes(bool save_guides)
48874899
fastroute_->setCriticalNetsPercentage(old_critical_nets_percentage);
48884900
fastroute_->setCongestionReportIterStep(congestion_report_iter_step_);
48894901
if (save_guides) {
4890-
saveGuides();
4902+
saveGuides(modified_nets);
48914903
}
48924904
}
48934905

src/grt/src/RepairAntennas.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,7 +1395,8 @@ int RepairAntennas::addJumperOnSegments(
13951395

13961396
void RepairAntennas::jumperInsertion(NetRouteMap& routing,
13971397
const int& tile_size,
1398-
const int& max_routing_layer)
1398+
const int& max_routing_layer,
1399+
std::vector<odb::dbNet*>& modified_nets)
13991400
{
14001401
// Init jumper size
14011402
tile_size_ = tile_size;
@@ -1452,6 +1453,7 @@ void RepairAntennas::jumperInsertion(NetRouteMap& routing,
14521453
db_net->setJumpers(true);
14531454
net_with_jumpers++;
14541455
total_jumpers += jumper_by_net;
1456+
modified_nets.push_back(db_net);
14551457
}
14561458
}
14571459
}

src/grt/src/RepairAntennas.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ class RepairAntennas
123123
bool hasNewViolations() { return has_new_violations_; }
124124
void jumperInsertion(NetRouteMap& routing,
125125
const int& tile_size,
126-
const int& max_routing_layer);
126+
const int& max_routing_layer,
127+
std::vector<odb::dbNet*>& modified_nets);
127128

128129
private:
129130
using coord_type = int;

0 commit comments

Comments
 (0)