From 426e9366f3a9d6096e9f29973842c582ea9b3b3e Mon Sep 17 00:00:00 2001 From: luis201420 Date: Sat, 19 Oct 2024 15:05:50 +0000 Subject: [PATCH 01/22] odb: adding has_jumpers flag in dbNet Signed-off-by: luis201420 --- src/odb/include/odb/db.h | 4 ++++ src/odb/src/db/dbDatabase.h | 4 +++- src/odb/src/db/dbNet.cpp | 21 +++++++++++++++++++++ src/odb/src/db/dbNet.h | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/odb/include/odb/db.h b/src/odb/include/odb/db.h index 6bca3ab1ae8..f389ab7a51f 100644 --- a/src/odb/include/odb/db.h +++ b/src/odb/include/odb/db.h @@ -2879,6 +2879,10 @@ class dbNet : public dbObject dbSet getTracks() const; void clearTracks(); + + bool hasJumpers(); + + void setJumpers(bool has_jumpers); }; /////////////////////////////////////////////////////////////////////////////// diff --git a/src/odb/src/db/dbDatabase.h b/src/odb/src/db/dbDatabase.h index 7f248ae9e20..abd93af5f13 100644 --- a/src/odb/src/db/dbDatabase.h +++ b/src/odb/src/db/dbDatabase.h @@ -70,7 +70,9 @@ namespace odb { const uint db_schema_major = 0; // Not used... const uint db_schema_initial = 57; -const uint db_schema_minor = 96; // Current revision number +const uint db_schema_minor = 97; // Current revision number + +const uint db_schema_has_jumpers = 97; // Revision where the dbMarkerGroup/Categories were added to dbBlock const uint db_schema_dbmarkergroup = 96; diff --git a/src/odb/src/db/dbNet.cpp b/src/odb/src/db/dbNet.cpp index d2682f8091a..97fb065b8e7 100644 --- a/src/odb/src/db/dbNet.cpp +++ b/src/odb/src/db/dbNet.cpp @@ -132,6 +132,7 @@ _dbNet::_dbNet(_dbDatabase* db) _flags._source = dbSourceType::NONE; _flags._rc_disconnected = 0; _flags._block_rule = 0; + _flags._has_jumpers = 0; _name = 0; _gndc_calibration_factor = 1.0; _cc_calibration_factor = 1.0; @@ -3313,4 +3314,24 @@ void dbNet::clearTracks() } } +bool dbNet::hasJumpers() +{ + bool has_jumpers = false; + _dbNet* net = (_dbNet*) this; + _dbDatabase* db = net->getImpl()->getDatabase(); + if (db->isSchema(db_schema_has_jumpers)) { + has_jumpers = net->_flags._has_jumpers == 1; + } + return has_jumpers; +} + +void dbNet::setJumpers(bool has_jumpers) +{ + _dbNet* net = (_dbNet*) this; + _dbDatabase* db = net->getImpl()->getDatabase(); + if (db->isSchema(db_schema_has_jumpers)) { + net->_flags._has_jumpers = has_jumpers ? 1 : 0; + } +} + } // namespace odb diff --git a/src/odb/src/db/dbNet.h b/src/odb/src/db/dbNet.h index ac39035be88..cab578de895 100644 --- a/src/odb/src/db/dbNet.h +++ b/src/odb/src/db/dbNet.h @@ -82,6 +82,7 @@ struct _dbNetFlags dbSourceType::Value _source : 4; uint _rc_disconnected : 1; uint _block_rule : 1; + uint _has_jumpers : 1; }; class _dbNet : public _dbObject From c54c317590be13d50ea2d6c77a8d203a75cfd3eb Mon Sep 17 00:00:00 2001 From: luis201420 Date: Sat, 19 Oct 2024 15:08:12 +0000 Subject: [PATCH 02/22] drt: using has_jumpers flag to increase the guide cost Signed-off-by: luis201420 --- src/drt/src/db/obj/frNet.h | 3 +++ src/drt/src/dr/FlexDR_graphics.cpp | 2 +- src/drt/src/dr/FlexDR_maze.cpp | 9 ++++++++- src/drt/src/dr/FlexGridGraph.h | 15 +++++++++----- src/drt/src/dr/FlexGridGraph_maze.cpp | 29 ++++++++++++++++++--------- src/drt/src/io/io.cpp | 4 ++++ 6 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/drt/src/db/obj/frNet.h b/src/drt/src/db/obj/frNet.h index e23158a0ef2..6b1ca4aec06 100644 --- a/src/drt/src/db/obj/frNet.h +++ b/src/drt/src/db/obj/frNet.h @@ -239,6 +239,8 @@ class frNet : public frBlockObject orig_guides_ = guides; } const std::vector& getOrigGuides() const { return orig_guides_; } + void setHasJumpers(bool has_jumpers) {hasJumpers_ = has_jumpers;} + bool hasJumpers() {return hasJumpers_;} protected: frString name_; @@ -272,6 +274,7 @@ class frNet : public frBlockObject bool hasInitialRouting_{false}; bool isFixed_{false}; + bool hasJumpers_{false}; std::vector all_pinfigs_; }; } // namespace drt diff --git a/src/drt/src/dr/FlexDR_graphics.cpp b/src/drt/src/dr/FlexDR_graphics.cpp index 2e93d10bf31..0aa6ea28feb 100644 --- a/src/drt/src/dr/FlexDR_graphics.cpp +++ b/src/drt/src/dr/FlexDR_graphics.cpp @@ -185,7 +185,7 @@ gui::Descriptor::Properties GridGraphDescriptor::getProperties( costs.push_back( {name + " total cost", graph->getCosts( - x, y, z, dir, layer, data.graph->getNDR() != nullptr)}); + x, y, z, dir, layer, data.graph->getNDR() != nullptr, false)}); // WHY false? } props.insert(props.end(), costs.begin(), costs.end()); return props; diff --git a/src/drt/src/dr/FlexDR_maze.cpp b/src/drt/src/dr/FlexDR_maze.cpp index be7300525e5..e107aef2352 100644 --- a/src/drt/src/dr/FlexDR_maze.cpp +++ b/src/drt/src/dr/FlexDR_maze.cpp @@ -3222,6 +3222,12 @@ bool FlexDRWorker::routeNet(drNet* net, std::vector& paths) { // ProfileTask profile("DR:routeNet"); + // Verify if net has jumpers + bool route_with_jumpers = false; + if (net->getFrNet()->hasJumpers()) { + route_with_jumpers = true; + } + if (net->getPins().size() <= 1) { return true; } @@ -3273,7 +3279,8 @@ bool FlexDRWorker::routeNet(drNet* net, std::vector& paths) ccMazeIdx1, ccMazeIdx2, centerPt, - mazeIdx2TaperBox)) { + mazeIdx2TaperBox, + route_with_jumpers)) { routeNet_postAstarUpdate( path, connComps, unConnPins, mazeIdx2unConnPins, isFirstConn); routeNet_postAstarWritePath( diff --git a/src/drt/src/dr/FlexGridGraph.h b/src/drt/src/dr/FlexGridGraph.h index 7a29c928cf4..a61d42dffec 100644 --- a/src/drt/src/dr/FlexGridGraph.h +++ b/src/drt/src/dr/FlexGridGraph.h @@ -914,7 +914,8 @@ class FlexGridGraph frMIdx gridZ, frDirEnum dir, frLayer* layer, - bool considerNDR) const; + bool considerNDR, + bool route_with_jumpers) const; bool useNDRCosts(const FlexWavefrontGrid& p) const; frNonDefaultRule* getNDR() const { return ndr_; } @@ -938,7 +939,8 @@ class FlexGridGraph FlexMazeIdx& ccMazeIdx1, FlexMazeIdx& ccMazeIdx2, const Point& centerPt, - std::map& mazeIdx2TaperBox); + std::map& mazeIdx2TaperBox, + bool route_with_jumpers); void setCost(frUInt4 drcCostIn, frUInt4 markerCostIn, frUInt4 FixedShapeCostIn) @@ -1284,7 +1286,8 @@ class FlexGridGraph const FlexMazeIdx& dstMazeIdx2, const frDirEnum& dir) const; frCost getNextPathCost(const FlexWavefrontGrid& currGrid, - const frDirEnum& dir) const; + const frDirEnum& dir, + bool route_with_jumpers) const; frDirEnum getLastDir(const std::bitset& buffer) const; void traceBackPath(const FlexWavefrontGrid& currGrid, std::vector& path, @@ -1294,7 +1297,8 @@ class FlexGridGraph void expandWavefront(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, - const Point& centerPt); + const Point& centerPt, + bool route_with_jumpers); bool isExpandable(const FlexWavefrontGrid& currGrid, frDirEnum dir) const; FlexMazeIdx getTailIdx(const FlexMazeIdx& currIdx, const FlexWavefrontGrid& currGrid) const; @@ -1302,7 +1306,8 @@ class FlexGridGraph const frDirEnum& dir, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, - const Point& centerPt); + const Point& centerPt, + bool route_with_jumpers); bool hasAlignedUpDefTrack( frLayerNum layerNum, const std::map& xSubMap, diff --git a/src/drt/src/dr/FlexGridGraph_maze.cpp b/src/drt/src/dr/FlexGridGraph_maze.cpp index 19ccbc24129..652619b2ffa 100644 --- a/src/drt/src/dr/FlexGridGraph_maze.cpp +++ b/src/drt/src/dr/FlexGridGraph_maze.cpp @@ -37,7 +37,8 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, const frDirEnum& dir, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, - const Point& centerPt) + const Point& centerPt, + bool route_with_jumpers) { frCost nextEstCost, nextPathCost; int gridX = currGrid.x(); @@ -53,7 +54,7 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, dstMazeIdx1, dstMazeIdx2, dir); - nextPathCost = getNextPathCost(currGrid, dir); + nextPathCost = getNextPathCost(currGrid, dir, route_with_jumpers); Point currPt; getPoint(currPt, gridX, gridY); frCoord currDist = Point::manhattanDistance(currPt, centerPt); @@ -153,11 +154,12 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, void FlexGridGraph::expandWavefront(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, - const Point& centerPt) + const Point& centerPt, + bool route_with_jumpers) { for (const auto dir : frDirEnumAll) { if (isExpandable(currGrid, dir)) { - expand(currGrid, dir, dstMazeIdx1, dstMazeIdx2, centerPt); + expand(currGrid, dir, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); } } } @@ -322,7 +324,8 @@ void FlexGridGraph::getPrevGrid(frMIdx& gridX, } frCost FlexGridGraph::getNextPathCost(const FlexWavefrontGrid& currGrid, - const frDirEnum& dir) const + const frDirEnum& dir, + bool route_with_jumpers) const { frMIdx gridX = currGrid.x(); frMIdx gridY = currGrid.y(); @@ -474,7 +477,7 @@ frCost FlexGridGraph::getNextPathCost(const FlexWavefrontGrid& currGrid, } } nextPathCost - += getCosts(gridX, gridY, gridZ, dir, layer, useNDRCosts(currGrid)); + += getCosts(gridX, gridY, gridZ, dir, layer, useNDRCosts(currGrid), route_with_jumpers); return nextPathCost; } @@ -484,7 +487,8 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, frMIdx gridZ, frDirEnum dir, frLayer* layer, - bool considerNDR) const + bool considerNDR, + bool route_with_jumpers) const { bool gridCost = hasGridCost(gridX, gridY, gridZ, dir); bool drcCost = hasRouteShapeCostAdj(gridX, gridY, gridZ, dir, considerNDR); @@ -494,6 +498,10 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, bool guideCost = hasGuide(gridX, gridY, gridZ, dir); frCoord edgeLength = getEdgeLength(gridX, gridY, gridZ, dir); + frUInt4 jumper_cost = 1; + if (route_with_jumpers) { + jumper_cost = 5; + } // temporarily disable guideCost return getEdgeLength(gridX, gridY, gridZ, dir) + (gridCost ? GRIDCOST * edgeLength : 0) @@ -501,7 +509,7 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, + (markerCost ? ggMarkerCost_ * edgeLength : 0) + (shapeCost ? ggFixedShapeCost_ * edgeLength : 0) + (blockCost ? BLOCKCOST * layer->getMinWidth() * 20 : 0) - + (!guideCost ? GUIDECOST * edgeLength : 0); + + (!guideCost ? (GUIDECOST * jumper_cost) * edgeLength : 0); } bool FlexGridGraph::useNDRCosts(const FlexWavefrontGrid& p) const @@ -659,7 +667,8 @@ bool FlexGridGraph::search(std::vector& connComps, FlexMazeIdx& ccMazeIdx1, FlexMazeIdx& ccMazeIdx2, const Point& centerPt, - std::map& mazeIdx2TaperBox) + std::map& mazeIdx2TaperBox, + bool route_with_jumpers) { if (drWorker_->getDRIter() >= debugMazeIter) { std::cout << "INIT search: target pin " << nextPin->getName() @@ -735,7 +744,7 @@ bool FlexGridGraph::search(std::vector& connComps, return true; } // expand and update wavefront - expandWavefront(currGrid, dstMazeIdx1, dstMazeIdx2, centerPt); + expandWavefront(currGrid, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); } return false; } diff --git a/src/drt/src/io/io.cpp b/src/drt/src/io/io.cpp index f0cba280eb1..f9b60c21a65 100644 --- a/src/drt/src/io/io.cpp +++ b/src/drt/src/io/io.cpp @@ -961,6 +961,7 @@ void io::Parser::setNets(odb::dbBlock* block) { for (auto net : block->getNets()) { bool is_special = net->isSpecial(); + bool has_jumpers = net->hasJumpers(); if (!is_special && net->getSigType().isSupply()) { logger_->error(DRT, 305, @@ -981,6 +982,9 @@ void io::Parser::setNets(odb::dbBlock* block) if (is_special) { uNetIn->setIsSpecial(true); } + if (has_jumpers) { + uNetIn->setHasJumpers(has_jumpers); + } updateNetRouting(netIn, net); netIn->setType(net->getSigType()); if (is_special) { From b894f2c774b6c342fe76af68bd2e827fcf7e5322 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Sat, 19 Oct 2024 15:09:06 +0000 Subject: [PATCH 03/22] grt: using jumper insertion and set has_jumpers flag Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 16 ++++++++++++++++ src/grt/src/RepairAntennas.cpp | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index 055102b0b19..c977c46a503 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -386,6 +386,22 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm, "repair_antennas should perform only one iteration when the " "routing source is detailed routing."); } + + // Run jumper insertion only in GRT stage + if (!haveDetailedRoutes(nets_to_repair)) { + violations = repair_antennas_->checkAntennaViolations(routes_, + nets_to_repair, + getMaxRoutingLayer(), + diode_mterm, + ratio_margin, + num_threads); + if (violations) { + repair_antennas_->jumperInsertion( + routes_, grid_->getTileSize(), getMaxRoutingLayer()); + repair_antennas_->clearViolations(); + } + } + while (violations && itr < iterations) { if (verbose_) { logger_->info(GRT, 6, "Repairing antennas, iteration {}.", itr + 1); diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index 9f1cbbdfc13..47e1a993791 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -511,6 +511,10 @@ void RepairAntennas::repairAntennas(odb::dbMTerm* diode_mterm) repair_failures = true; } if (inserted_diodes) { + // check if net has jumpers + if (db_net->hasJumpers()) { + db_net->setJumpers(false); + } grouter_->addDirtyNet(db_net); } } @@ -1497,6 +1501,7 @@ void RepairAntennas::jumperInsertion(NetRouteMap& routing, if (jumpers_by_net) { net_with_jumpers++; total_jumpers += jumpers_by_net; + db_net->setJumpers(true); } } } From 9d7760074738f21d9bb67a41d940441b2822df8a Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 21 Oct 2024 21:21:37 +0000 Subject: [PATCH 04/22] drt: increasing the jumper cost Signed-off-by: luis201420 --- src/drt/src/dr/FlexGridGraph_maze.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drt/src/dr/FlexGridGraph_maze.cpp b/src/drt/src/dr/FlexGridGraph_maze.cpp index 652619b2ffa..34c1c02bb19 100644 --- a/src/drt/src/dr/FlexGridGraph_maze.cpp +++ b/src/drt/src/dr/FlexGridGraph_maze.cpp @@ -500,7 +500,7 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, frUInt4 jumper_cost = 1; if (route_with_jumpers) { - jumper_cost = 5; + jumper_cost = 10; } // temporarily disable guideCost return getEdgeLength(gridX, gridY, gridZ, dir) From 71cbe416c8a9b1cec2e60d9e144593372706b372 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Wed, 23 Oct 2024 17:55:28 +0000 Subject: [PATCH 05/22] grt: running jumper insertion when there are new nets to repair Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 28 ++++++++++++++-------------- src/grt/src/RepairAntennas.cpp | 11 +++++++++++ src/grt/src/RepairAntennas.h | 2 ++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index cc50a19d712..389bf210300 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -392,31 +392,31 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm, "routing source is detailed routing."); } - // Run jumper insertion only in GRT stage - if (!haveDetailedRoutes(nets_to_repair)) { + while (violations && itr < iterations) { + if (verbose_) { + logger_->info(GRT, 6, "Repairing antennas, iteration {}.", itr + 1); + } violations = repair_antennas_->checkAntennaViolations(routes_, nets_to_repair, getMaxRoutingLayer(), diode_mterm, ratio_margin, num_threads); - if (violations) { - repair_antennas_->jumperInsertion( - routes_, grid_->getTileSize(), getMaxRoutingLayer()); - repair_antennas_->clearViolations(); - } - } - - while (violations && itr < iterations) { - if (verbose_) { - logger_->info(GRT, 6, "Repairing antennas, iteration {}.", itr + 1); - } - violations = repair_antennas_->checkAntennaViolations(routes_, + // if run in GRT and it need run jumper insertion + if (!haveDetailedRoutes(nets_to_repair) && repair_antennas_->runJumperInsertion()) { + // Run jumper insertion and clean + repair_antennas_->jumperInsertion( + routes_, grid_->getTileSize(), getMaxRoutingLayer()); + repair_antennas_->clearViolations(); + + // run again antenna checker + violations = repair_antennas_->checkAntennaViolations(routes_, nets_to_repair, getMaxRoutingLayer(), diode_mterm, ratio_margin, num_threads); + } if (violations) { IncrementalGRoute incr_groute(this, block_); repair_antennas_->repairAntennas(diode_mterm); diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index 47e1a993791..edd14dc19d7 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -83,6 +83,12 @@ bool RepairAntennas::checkAntennaViolations( float ratio_margin, const int num_threads) { + // Save nets repaired in last iteration + std::unordered_set last_nets; + for (const auto& violation : antenna_violations_) { + last_nets.insert(violation.first->getConstName()); + } + antenna_violations_.clear(); for (odb::dbNet* db_net : nets_to_repair) { antenna_violations_[db_net]; @@ -106,12 +112,17 @@ bool RepairAntennas::checkAntennaViolations( destroyNetWires(nets_to_repair); } + run_jumper_insertion_ = false; // remove nets with zero violations for (auto it = antenna_violations_.begin(); it != antenna_violations_.end();) { if (it->second.empty()) { it = antenna_violations_.erase(it); } else { + // check if the net is new to repair + if (last_nets.find(it->first->getConstName()) == last_nets.end()) { + run_jumper_insertion_ = true; + } ++it; } } diff --git a/src/grt/src/RepairAntennas.h b/src/grt/src/RepairAntennas.h index 6369204f9e8..5eb782192ec 100644 --- a/src/grt/src/RepairAntennas.h +++ b/src/grt/src/RepairAntennas.h @@ -214,6 +214,7 @@ class RepairAntennas void destroyNetWires(const std::vector& nets_to_repair); odb::dbMTerm* findDiodeMTerm(); double diffArea(odb::dbMTerm* mterm); + bool runJumperInsertion() {return run_jumper_insertion_;} private: typedef int coord_type; @@ -295,6 +296,7 @@ class RepairAntennas AntennaViolations antenna_violations_; int unique_diode_index_; int illegal_diode_placement_count_; + bool run_jumper_insertion_; LayerIdToViaPosition vias_pos_; RoutingSource routing_source_; }; From 91278bdc30b336a71784d439ca39724fa1791761 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Tue, 29 Oct 2024 15:22:59 +0000 Subject: [PATCH 06/22] drt: adding clang-format Signed-off-by: luis201420 --- src/drt/src/db/obj/frNet.h | 4 ++-- src/drt/src/dr/FlexDR_graphics.cpp | 2 +- src/drt/src/dr/FlexDR_maze.cpp | 2 +- src/drt/src/dr/FlexGridGraph.h | 10 ++++----- src/drt/src/dr/FlexGridGraph_maze.cpp | 29 ++++++++++++++++++--------- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/drt/src/db/obj/frNet.h b/src/drt/src/db/obj/frNet.h index 6b1ca4aec06..f59114d9681 100644 --- a/src/drt/src/db/obj/frNet.h +++ b/src/drt/src/db/obj/frNet.h @@ -239,8 +239,8 @@ class frNet : public frBlockObject orig_guides_ = guides; } const std::vector& getOrigGuides() const { return orig_guides_; } - void setHasJumpers(bool has_jumpers) {hasJumpers_ = has_jumpers;} - bool hasJumpers() {return hasJumpers_;} + void setHasJumpers(bool has_jumpers) { hasJumpers_ = has_jumpers; } + bool hasJumpers() { return hasJumpers_; } protected: frString name_; diff --git a/src/drt/src/dr/FlexDR_graphics.cpp b/src/drt/src/dr/FlexDR_graphics.cpp index 0aa6ea28feb..470cd908db7 100644 --- a/src/drt/src/dr/FlexDR_graphics.cpp +++ b/src/drt/src/dr/FlexDR_graphics.cpp @@ -185,7 +185,7 @@ gui::Descriptor::Properties GridGraphDescriptor::getProperties( costs.push_back( {name + " total cost", graph->getCosts( - x, y, z, dir, layer, data.graph->getNDR() != nullptr, false)}); // WHY false? + x, y, z, dir, layer, data.graph->getNDR() != nullptr, false)}); } props.insert(props.end(), costs.begin(), costs.end()); return props; diff --git a/src/drt/src/dr/FlexDR_maze.cpp b/src/drt/src/dr/FlexDR_maze.cpp index e107aef2352..ad000064b39 100644 --- a/src/drt/src/dr/FlexDR_maze.cpp +++ b/src/drt/src/dr/FlexDR_maze.cpp @@ -3280,7 +3280,7 @@ bool FlexDRWorker::routeNet(drNet* net, std::vector& paths) ccMazeIdx2, centerPt, mazeIdx2TaperBox, - route_with_jumpers)) { + route_with_jumpers)) { routeNet_postAstarUpdate( path, connComps, unConnPins, mazeIdx2unConnPins, isFirstConn); routeNet_postAstarWritePath( diff --git a/src/drt/src/dr/FlexGridGraph.h b/src/drt/src/dr/FlexGridGraph.h index a61d42dffec..cec636faf68 100644 --- a/src/drt/src/dr/FlexGridGraph.h +++ b/src/drt/src/dr/FlexGridGraph.h @@ -915,7 +915,7 @@ class FlexGridGraph frDirEnum dir, frLayer* layer, bool considerNDR, - bool route_with_jumpers) const; + bool route_with_jumpers) const; bool useNDRCosts(const FlexWavefrontGrid& p) const; frNonDefaultRule* getNDR() const { return ndr_; } @@ -940,7 +940,7 @@ class FlexGridGraph FlexMazeIdx& ccMazeIdx2, const Point& centerPt, std::map& mazeIdx2TaperBox, - bool route_with_jumpers); + bool route_with_jumpers); void setCost(frUInt4 drcCostIn, frUInt4 markerCostIn, frUInt4 FixedShapeCostIn) @@ -1287,7 +1287,7 @@ class FlexGridGraph const frDirEnum& dir) const; frCost getNextPathCost(const FlexWavefrontGrid& currGrid, const frDirEnum& dir, - bool route_with_jumpers) const; + bool route_with_jumpers) const; frDirEnum getLastDir(const std::bitset& buffer) const; void traceBackPath(const FlexWavefrontGrid& currGrid, std::vector& path, @@ -1298,7 +1298,7 @@ class FlexGridGraph const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, - bool route_with_jumpers); + bool route_with_jumpers); bool isExpandable(const FlexWavefrontGrid& currGrid, frDirEnum dir) const; FlexMazeIdx getTailIdx(const FlexMazeIdx& currIdx, const FlexWavefrontGrid& currGrid) const; @@ -1307,7 +1307,7 @@ class FlexGridGraph const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, - bool route_with_jumpers); + bool route_with_jumpers); bool hasAlignedUpDefTrack( frLayerNum layerNum, const std::map& xSubMap, diff --git a/src/drt/src/dr/FlexGridGraph_maze.cpp b/src/drt/src/dr/FlexGridGraph_maze.cpp index 34c1c02bb19..cfb11ecdc83 100644 --- a/src/drt/src/dr/FlexGridGraph_maze.cpp +++ b/src/drt/src/dr/FlexGridGraph_maze.cpp @@ -38,7 +38,7 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, - bool route_with_jumpers) + bool route_with_jumpers) { frCost nextEstCost, nextPathCost; int gridX = currGrid.x(); @@ -155,11 +155,16 @@ void FlexGridGraph::expandWavefront(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, - bool route_with_jumpers) + bool route_with_jumpers) { for (const auto dir : frDirEnumAll) { if (isExpandable(currGrid, dir)) { - expand(currGrid, dir, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); + expand(currGrid, + dir, + dstMazeIdx1, + dstMazeIdx2, + centerPt, + route_with_jumpers); } } } @@ -325,7 +330,7 @@ void FlexGridGraph::getPrevGrid(frMIdx& gridX, frCost FlexGridGraph::getNextPathCost(const FlexWavefrontGrid& currGrid, const frDirEnum& dir, - bool route_with_jumpers) const + bool route_with_jumpers) const { frMIdx gridX = currGrid.x(); frMIdx gridY = currGrid.y(); @@ -476,8 +481,13 @@ frCost FlexGridGraph::getNextPathCost(const FlexWavefrontGrid& currGrid, } } } - nextPathCost - += getCosts(gridX, gridY, gridZ, dir, layer, useNDRCosts(currGrid), route_with_jumpers); + nextPathCost += getCosts(gridX, + gridY, + gridZ, + dir, + layer, + useNDRCosts(currGrid), + route_with_jumpers); return nextPathCost; } @@ -488,7 +498,7 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, frDirEnum dir, frLayer* layer, bool considerNDR, - bool route_with_jumpers) const + bool route_with_jumpers) const { bool gridCost = hasGridCost(gridX, gridY, gridZ, dir); bool drcCost = hasRouteShapeCostAdj(gridX, gridY, gridZ, dir, considerNDR); @@ -668,7 +678,7 @@ bool FlexGridGraph::search(std::vector& connComps, FlexMazeIdx& ccMazeIdx2, const Point& centerPt, std::map& mazeIdx2TaperBox, - bool route_with_jumpers) + bool route_with_jumpers) { if (drWorker_->getDRIter() >= debugMazeIter) { std::cout << "INIT search: target pin " << nextPin->getName() @@ -744,7 +754,8 @@ bool FlexGridGraph::search(std::vector& connComps, return true; } // expand and update wavefront - expandWavefront(currGrid, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); + expandWavefront( + currGrid, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); } return false; } From 4e3fd2f54fb3837c48a978d0fca554f56c048411 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Tue, 29 Oct 2024 15:23:35 +0000 Subject: [PATCH 07/22] grt: adding clang-format Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 26 ++++++++++++++------------ src/grt/src/RepairAntennas.cpp | 2 +- src/grt/src/RepairAntennas.h | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index 389bf210300..1f33c17e291 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -403,19 +403,21 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm, ratio_margin, num_threads); // if run in GRT and it need run jumper insertion - if (!haveDetailedRoutes(nets_to_repair) && repair_antennas_->runJumperInsertion()) { - // Run jumper insertion and clean - repair_antennas_->jumperInsertion( + if (!haveDetailedRoutes(nets_to_repair) + && repair_antennas_->runJumperInsertion()) { + // Run jumper insertion and clean + repair_antennas_->jumperInsertion( routes_, grid_->getTileSize(), getMaxRoutingLayer()); - repair_antennas_->clearViolations(); - - // run again antenna checker - violations = repair_antennas_->checkAntennaViolations(routes_, - nets_to_repair, - getMaxRoutingLayer(), - diode_mterm, - ratio_margin, - num_threads); + repair_antennas_->clearViolations(); + + // run again antenna checker + violations + = repair_antennas_->checkAntennaViolations(routes_, + nets_to_repair, + getMaxRoutingLayer(), + diode_mterm, + ratio_margin, + num_threads); } if (violations) { IncrementalGRoute incr_groute(this, block_); diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index edd14dc19d7..73f5012af0c 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -1512,7 +1512,7 @@ void RepairAntennas::jumperInsertion(NetRouteMap& routing, if (jumpers_by_net) { net_with_jumpers++; total_jumpers += jumpers_by_net; - db_net->setJumpers(true); + db_net->setJumpers(true); } } } diff --git a/src/grt/src/RepairAntennas.h b/src/grt/src/RepairAntennas.h index 5eb782192ec..d5e3101763e 100644 --- a/src/grt/src/RepairAntennas.h +++ b/src/grt/src/RepairAntennas.h @@ -214,7 +214,7 @@ class RepairAntennas void destroyNetWires(const std::vector& nets_to_repair); odb::dbMTerm* findDiodeMTerm(); double diffArea(odb::dbMTerm* mterm); - bool runJumperInsertion() {return run_jumper_insertion_;} + bool runJumperInsertion() { return run_jumper_insertion_; } private: typedef int coord_type; From c01575b42f5ac1f3bc8cdffd3c9417894414ce30 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Tue, 29 Oct 2024 15:29:08 +0000 Subject: [PATCH 08/22] odb: adding comment for jumper insertion schema Signed-off-by: luis201420 --- src/odb/src/db/dbDatabase.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/odb/src/db/dbDatabase.h b/src/odb/src/db/dbDatabase.h index abd93af5f13..7bbbdc1256e 100644 --- a/src/odb/src/db/dbDatabase.h +++ b/src/odb/src/db/dbDatabase.h @@ -72,6 +72,7 @@ const uint db_schema_initial = 57; const uint db_schema_minor = 97; // Current revision number +// Revision where the jumper insertion flag is added to dbNet const uint db_schema_has_jumpers = 97; // Revision where the dbMarkerGroup/Categories were added to dbBlock From dd52984ed39631993d00a3616e8a8234a6c45df4 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Thu, 31 Oct 2024 18:40:56 +0000 Subject: [PATCH 09/22] odb: adding flag to mark guides that are jumpers Signed-off-by: luis201420 --- src/odb/include/odb/db.h | 4 ++++ src/odb/src/db/dbGuide.cpp | 28 ++++++++++++++++++++++++++++ src/odb/src/db/dbGuide.h | 1 + 3 files changed, 33 insertions(+) diff --git a/src/odb/include/odb/db.h b/src/odb/include/odb/db.h index 30bb2426775..22969433e21 100644 --- a/src/odb/include/odb/db.h +++ b/src/odb/include/odb/db.h @@ -7747,6 +7747,10 @@ class dbGuide : public dbObject static dbSet::iterator destroy(dbSet::iterator& itr); + bool isJumper(); + + void setIsJumper(bool jumper); + // User Code End dbGuide }; diff --git a/src/odb/src/db/dbGuide.cpp b/src/odb/src/db/dbGuide.cpp index c7068d763c8..320e6ab3993 100644 --- a/src/odb/src/db/dbGuide.cpp +++ b/src/odb/src/db/dbGuide.cpp @@ -109,6 +109,7 @@ _dbGuide::_dbGuide(_dbDatabase* db, const _dbGuide& r) layer_ = r.layer_; via_layer_ = r.via_layer_; guide_next_ = r.guide_next_; + is_jumper_ = false; } dbIStream& operator>>(dbIStream& stream, _dbGuide& obj) @@ -120,6 +121,9 @@ dbIStream& operator>>(dbIStream& stream, _dbGuide& obj) stream >> obj.via_layer_; } stream >> obj.guide_next_; + if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { + stream >> obj.is_jumper_; + } return stream; } @@ -132,6 +136,9 @@ dbOStream& operator<<(dbOStream& stream, const _dbGuide& obj) stream << obj.via_layer_; } stream << obj.guide_next_; + if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { + stream << obj.is_jumper_; + } return stream; } @@ -198,6 +205,7 @@ dbGuide* dbGuide::create(dbNet* net, guide->box_ = box; guide->net_ = owner->getId(); guide->guide_next_ = owner->guides_; + guide->is_jumper_ = false; owner->guides_ = guide->getOID(); return (dbGuide*) guide; } @@ -262,6 +270,26 @@ dbSet::iterator dbGuide::destroy(dbSet::iterator& itr) return next; } +bool dbGuide::isJumper() +{ + bool is_jumper = false; + _dbGuide* guide = (_dbGuide*) this; + _dbDatabase* db = guide->getDatabase(); + if (db->isSchema(db_schema_has_jumpers)) { + is_jumper = guide->is_jumper_; + } + return is_jumper; +} + +void dbGuide::setIsJumper(bool jumper) +{ + _dbGuide* guide = (_dbGuide*) this; + _dbDatabase* db = guide->getDatabase(); + if (db->isSchema(db_schema_has_jumpers)) { + guide->is_jumper_ = jumper; + } +} + // User Code End dbGuidePublicMethods } // namespace odb // Generator Code End Cpp diff --git a/src/odb/src/db/dbGuide.h b/src/odb/src/db/dbGuide.h index 16bc1dd4558..f5a5478670a 100644 --- a/src/odb/src/db/dbGuide.h +++ b/src/odb/src/db/dbGuide.h @@ -63,6 +63,7 @@ class _dbGuide : public _dbObject dbId<_dbTechLayer> layer_; dbId<_dbTechLayer> via_layer_; dbId<_dbGuide> guide_next_; + bool is_jumper_; }; dbIStream& operator>>(dbIStream& stream, _dbGuide& obj); dbOStream& operator<<(dbOStream& stream, const _dbGuide& obj); From 58796730229d47fdabece1fcbc6e45dc8f724526 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Thu, 31 Oct 2024 18:50:59 +0000 Subject: [PATCH 10/22] grt: using flag to mark jumper guides Signed-off-by: luis201420 --- src/grt/include/grt/GRoute.h | 4 +++- src/grt/src/GlobalRouter.cpp | 12 ++++++++++-- src/grt/src/RepairAntennas.cpp | 9 +++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/grt/include/grt/GRoute.h b/src/grt/include/grt/GRoute.h index 939415850c6..a52d6d0db3c 100644 --- a/src/grt/include/grt/GRoute.h +++ b/src/grt/include/grt/GRoute.h @@ -54,9 +54,11 @@ struct GSegment int final_x; int final_y; int final_layer; + bool is_jumper; GSegment() = default; - GSegment(int x0, int y0, int l0, int x1, int y1, int l1); + GSegment(int x0, int y0, int l0, int x1, int y1, int l1, bool jumper = false); bool isVia() const { return (init_x == final_x && init_y == final_y); } + bool isJumper() const { return is_jumper; } int length() const { return std::abs(init_x - final_x) + std::abs(init_y - final_y); diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index 1f33c17e291..739b688e62c 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -2340,6 +2340,7 @@ void GlobalRouter::saveGuides() int offset_x = grid_origin_.x(); int offset_y = grid_origin_.y(); + int jumper_count = 0; for (odb::dbNet* db_net : block_->getNets()) { auto iter = routes_.find(db_net); if (iter == routes_.end()) { @@ -2387,7 +2388,12 @@ void GlobalRouter::saveGuides() } odb::dbTechLayer* layer = routing_layers_[segment.init_layer]; - odb::dbGuide::create(db_net, layer, layer, box); + bool is_jumper = segment.isJumper(); + auto guide = odb::dbGuide::create(db_net, layer, layer, box); + if (is_jumper) { + guide->setIsJumper(true); + } + jumper_count += guide->isJumper(); } } } @@ -2395,6 +2401,7 @@ void GlobalRouter::saveGuides() if (dbGuides.orderReversed() && dbGuides.reversible()) dbGuides.reverse(); } + printf("%d jumpers marked!!\n", jumper_count); } void GlobalRouter::writeSegments(const char* file_name) @@ -4891,7 +4898,7 @@ void GRouteDbCbk::inDbBTermPreDisconnect(odb::dbBTerm* bterm) //////////////////////////////////////////////////////////////// -GSegment::GSegment(int x0, int y0, int l0, int x1, int y1, int l1) +GSegment::GSegment(int x0, int y0, int l0, int x1, int y1, int l1, bool jumper) { init_x = std::min(x0, x1); init_y = std::min(y0, y1); @@ -4899,6 +4906,7 @@ GSegment::GSegment(int x0, int y0, int l0, int x1, int y1, int l1) final_x = std::max(x0, x1); final_y = std::max(y0, y1); final_layer = l1; + is_jumper = jumper; } bool GSegment::operator==(const GSegment& segment) const diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index 73f5012af0c..971be0af0ca 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -888,8 +888,13 @@ void RepairAntennas::addJumperAndVias(GRoute& route, GSegment(final_x, final_y, layer, final_x, final_y, layer + 1)); } // Create segment in upper layer (jumper) - route.push_back(GSegment( - init_x, init_y, layer_level + 2, final_x, final_y, layer_level + 2)); + route.push_back(GSegment(init_x, + init_y, + layer_level + 2, + final_x, + final_y, + layer_level + 2, + true)); // Reducing usage in the layer level grouter_->updateResources(init_x, init_y, final_x, final_y, layer_level, -1); // Increasing usage in the layer level + 2 From 765bcca8f942b45da3a07d7e0889f5ad749bc885 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Thu, 31 Oct 2024 18:54:54 +0000 Subject: [PATCH 11/22] drt: checking the number of jumper guides Signed-off-by: luis201420 --- src/drt/src/io/GuideProcessor.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/drt/src/io/GuideProcessor.cpp b/src/drt/src/io/GuideProcessor.cpp index 9a7b3ac2636..d10c91fef27 100644 --- a/src/drt/src/io/GuideProcessor.cpp +++ b/src/drt/src/io/GuideProcessor.cpp @@ -703,6 +703,7 @@ bool GuideProcessor::readGuides() ProfileTask profile("IO:readGuide"); int num_guides = 0; const auto block = db_->getChip()->getBlock(); + int jumper_count = 0; for (const auto db_net : block->getNets()) { frNet* net = getDesign()->getTopBlock()->findNet(db_net->getName()); if (net == nullptr) { @@ -719,8 +720,12 @@ bool GuideProcessor::readGuides() tmp_guides_[net].emplace_back(rect); ++num_guides; logGuidesRead(num_guides, logger_); + if (db_guide->isJumper()) { + jumper_count++; + } } } + printf("%d jumpers detected!!\n", jumper_count); if (VERBOSE > 0) { logger_->report(""); logger_->info(utl::DRT, 157, "Number of guides: {}", num_guides); @@ -1997,4 +2002,4 @@ void GuideProcessor::processGuides() } } -} // namespace drt::io \ No newline at end of file +} // namespace drt::io From 153481e3fa996409dd0808d02be7e95e2893eb81 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Sat, 2 Nov 2024 13:42:04 +0000 Subject: [PATCH 12/22] drt: finding nets with jumpers Signed-off-by: luis201420 --- src/drt/src/io/io.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drt/src/io/io.cpp b/src/drt/src/io/io.cpp index 3b0b6b0f878..6b9fffd8f74 100644 --- a/src/drt/src/io/io.cpp +++ b/src/drt/src/io/io.cpp @@ -976,7 +976,7 @@ void io::Parser::setNets(odb::dbBlock* block) frNet* io::Parser::addNet(odb::dbNet* db_net) { bool is_special = db_net->isSpecial(); - bool has_jumpers = net->hasJumpers(); + bool has_jumpers = db_net->hasJumpers(); if (!is_special && db_net->getSigType().isSupply()) { logger_->error(DRT, 305, From 434f1821255e4d662ca8a657c26de225bedc0701 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 11 Nov 2024 16:23:01 +0000 Subject: [PATCH 13/22] drt: removing debug code Signed-off-by: luis201420 --- src/drt/src/io/GuideProcessor.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/drt/src/io/GuideProcessor.cpp b/src/drt/src/io/GuideProcessor.cpp index ffda98f7592..ba5709e2e89 100644 --- a/src/drt/src/io/GuideProcessor.cpp +++ b/src/drt/src/io/GuideProcessor.cpp @@ -708,7 +708,6 @@ bool GuideProcessor::readGuides() ProfileTask profile("IO:readGuide"); int num_guides = 0; const auto block = db_->getChip()->getBlock(); - int jumper_count = 0; for (const auto db_net : block->getNets()) { frNet* net = getDesign()->getTopBlock()->findNet(db_net->getName()); if (net == nullptr) { @@ -728,12 +727,8 @@ bool GuideProcessor::readGuides() tmp_guides_[net].emplace_back(rect); ++num_guides; logGuidesRead(num_guides, logger_); - if (db_guide->isJumper()) { - jumper_count++; - } } } - printf("%d jumpers detected!!\n", jumper_count); if (VERBOSE > 0) { logger_->report(""); logger_->info(utl::DRT, 157, "Number of guides: {}", num_guides); @@ -2018,4 +2013,4 @@ void GuideProcessor::processGuides() } } -} // namespace drt::io +} // namespace drt::io \ No newline at end of file From 1c4efbe19b0b34ca7ff44f3ae016534561906f73 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 11 Nov 2024 16:23:16 +0000 Subject: [PATCH 14/22] grt: removing debug code Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index b5575a66b0b..962a4585e95 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -2326,7 +2326,6 @@ void GlobalRouter::saveGuides() int offset_x = grid_origin_.x(); int offset_y = grid_origin_.y(); - int jumper_count = 0; bool is_congested = fastroute_->has2Doverflow() && !allow_congestion_; for (odb::dbNet* db_net : block_->getNets()) { @@ -2376,12 +2375,12 @@ void GlobalRouter::saveGuides() } odb::dbTechLayer* layer = routing_layers_[segment.init_layer]; + // Set guide flag when it is jumper bool is_jumper = segment.isJumper(); auto guide = odb::dbGuide::create(db_net, layer, layer, box, is_congested); if (is_jumper) { guide->setIsJumper(true); } - jumper_count += guide->isJumper(); } } } @@ -2389,7 +2388,6 @@ void GlobalRouter::saveGuides() if (dbGuides.orderReversed() && dbGuides.reversible()) dbGuides.reverse(); } - printf("%d jumpers marked!!\n", jumper_count); } void GlobalRouter::writeSegments(const char* file_name) From 666ab8533cc710f17cea82e1cb61d8d81a266895 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 11 Nov 2024 16:30:48 +0000 Subject: [PATCH 15/22] grt: adding clang format Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index 962a4585e95..8b4ff222403 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -2375,9 +2375,10 @@ void GlobalRouter::saveGuides() } odb::dbTechLayer* layer = routing_layers_[segment.init_layer]; - // Set guide flag when it is jumper + // Set guide flag when it is jumper bool is_jumper = segment.isJumper(); - auto guide = odb::dbGuide::create(db_net, layer, layer, box, is_congested); + auto guide + = odb::dbGuide::create(db_net, layer, layer, box, is_congested); if (is_jumper) { guide->setIsJumper(true); } From 25bfb2b9db37c341afed69a230a18397f7e38821 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Tue, 12 Nov 2024 03:32:24 +0000 Subject: [PATCH 16/22] odb: adding is_jumper flag to dbGuide Signed-off-by: luis201420 --- .../codeGenerator/schema/chip/dbGuide.json | 9 +++++++++ src/odb/src/db/dbGuide.cpp | 20 ++++++++++++------- src/odb/src/db/dbGuide.h | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/odb/src/codeGenerator/schema/chip/dbGuide.json b/src/odb/src/codeGenerator/schema/chip/dbGuide.json index 52438ec1cce..5816cf4ec39 100644 --- a/src/odb/src/codeGenerator/schema/chip/dbGuide.json +++ b/src/odb/src/codeGenerator/schema/chip/dbGuide.json @@ -44,6 +44,15 @@ "flags": [ "private" ] + }, + { + "name":"is_jumper_", + "type":"bool", + "schema":"db_schema_has_jumpers", + "default":"false", + "flags": [ + "private" + ] } ], "cpp_includes": [ diff --git a/src/odb/src/db/dbGuide.cpp b/src/odb/src/db/dbGuide.cpp index 00a66198834..0881eb5dff8 100644 --- a/src/odb/src/db/dbGuide.cpp +++ b/src/odb/src/db/dbGuide.cpp @@ -67,6 +67,9 @@ bool _dbGuide::operator==(const _dbGuide& rhs) const if (is_congested_ != rhs.is_congested_) { return false; } + if (is_jumper_ != rhs.is_jumper_) { + return false; + } return true; } @@ -87,6 +90,7 @@ void _dbGuide::differences(dbDiff& diff, DIFF_FIELD(via_layer_); DIFF_FIELD(guide_next_); DIFF_FIELD(is_congested_); + DIFF_FIELD(is_jumper_); DIFF_END } @@ -99,6 +103,7 @@ void _dbGuide::out(dbDiff& diff, char side, const char* field) const DIFF_OUT_FIELD(via_layer_); DIFF_OUT_FIELD(guide_next_); DIFF_OUT_FIELD(is_congested_); + DIFF_OUT_FIELD(is_jumper_); DIFF_END } @@ -106,6 +111,7 @@ void _dbGuide::out(dbDiff& diff, char side, const char* field) const _dbGuide::_dbGuide(_dbDatabase* db) { is_congested_ = false; + is_jumper_ = false; } _dbGuide::_dbGuide(_dbDatabase* db, const _dbGuide& r) @@ -115,8 +121,8 @@ _dbGuide::_dbGuide(_dbDatabase* db, const _dbGuide& r) layer_ = r.layer_; via_layer_ = r.via_layer_; guide_next_ = r.guide_next_; - is_jumper_ = r.is_jumper_; is_congested_ = r.is_congested_; + is_jumper_ = r.is_jumper_; } dbIStream& operator>>(dbIStream& stream, _dbGuide& obj) @@ -128,12 +134,12 @@ dbIStream& operator>>(dbIStream& stream, _dbGuide& obj) stream >> obj.via_layer_; } stream >> obj.guide_next_; - if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { - stream >> obj.is_jumper_; - } if (obj.getDatabase()->isSchema(db_schema_db_guide_congested)) { stream >> obj.is_congested_; } + if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { + stream >> obj.is_jumper_; + } return stream; } @@ -146,12 +152,12 @@ dbOStream& operator<<(dbOStream& stream, const _dbGuide& obj) stream << obj.via_layer_; } stream << obj.guide_next_; - if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { - stream << obj.is_jumper_; - } if (obj.getDatabase()->isSchema(db_schema_db_guide_congested)) { stream << obj.is_congested_; } + if (obj.getDatabase()->isSchema(db_schema_has_jumpers)) { + stream << obj.is_jumper_; + } return stream; } diff --git a/src/odb/src/db/dbGuide.h b/src/odb/src/db/dbGuide.h index 12acbf2fb99..ed9647a9771 100644 --- a/src/odb/src/db/dbGuide.h +++ b/src/odb/src/db/dbGuide.h @@ -63,8 +63,8 @@ class _dbGuide : public _dbObject dbId<_dbTechLayer> layer_; dbId<_dbTechLayer> via_layer_; dbId<_dbGuide> guide_next_; - bool is_jumper_; bool is_congested_; + bool is_jumper_; }; dbIStream& operator>>(dbIStream& stream, _dbGuide& obj); dbOStream& operator<<(dbOStream& stream, const _dbGuide& obj); From 3c40cad61a6d2682a1330cec5f14f9d8798b29bc Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 16:48:33 +0000 Subject: [PATCH 17/22] grt: running jumper insertion for each antenna violation of a net Signed-off-by: luis201420 --- src/grt/src/RepairAntennas.cpp | 94 +++++++++++++++++----------------- src/grt/src/RepairAntennas.h | 13 +++-- 2 files changed, 55 insertions(+), 52 deletions(-) diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index 971be0af0ca..a9e04b778b5 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -1373,11 +1373,12 @@ void RepairAntennas::getSegmentsConnectedToPins( ViolationIdToSegmentIds RepairAntennas::getSegmentsWithViolation( odb::dbNet* db_net, const GRoute& route, - const int& max_layer, - std::map& layer_with_violation) + const int& violation_id) { - // Get segment data by layer below max layer LayerToSegmentDataVector segment_by_layer; + const auto& violation = antenna_violations_[db_net][violation_id]; + const int max_layer = violation.routing_level; + // Get segment data by layer below max layer int added_seg_count = getSegmentByLayer(route, max_layer, segment_by_layer); // Set connection to adjacent segments (colliding segments) @@ -1388,7 +1389,6 @@ ViolationIdToSegmentIds RepairAntennas::getSegmentsWithViolation( getSegmentsConnectedToPins(db_net, segment_by_layer, seg_connected_to_pin); // Get violation info - const auto& violations = antenna_violations_[db_net]; ViolationIdToSegmentIds segment_with_violations; odb::dbTech* tech = db_->getTech(); @@ -1419,12 +1419,10 @@ ViolationIdToSegmentIds RepairAntennas::getSegmentsWithViolation( } int iter_layer_level = layer_iter->getRoutingLevel(); // verify if layer has violation - if (layer_with_violation.find(iter_layer_level) - != layer_with_violation.end()) { + if (iter_layer_level == violation.routing_level) { for (auto& seg_it : segment_by_layer[layer_iter]) { const int& id_u = seg_it.id; - const int& violation_id = layer_with_violation[iter_layer_level]; - for (const auto& iterm : violations[violation_id].gates) { + for (const auto& iterm : violation.gates) { odb::dbMTerm* mterm = iterm->getMTerm(); std::string pin_name = getPinName(iterm, mterm); bool is_conected = false; @@ -1451,6 +1449,40 @@ ViolationIdToSegmentIds RepairAntennas::getSegmentsWithViolation( return segment_with_violations; } +int RepairAntennas::addJumperToViolation(GRoute& route, + odb::dbNet* db_net, + const int& violation_id, + const int& tile_size) +{ + odb::dbTech* tech = db_->getTech(); + const auto& violation = antenna_violations_[db_net][violation_id]; + const int& violation_layer_level = violation.routing_level; + ViolationIdToSegmentIds segment_with_violations_id; + // Get segments with violation in each layer + segment_with_violations_id + = getSegmentsWithViolation(db_net, route, violation_id); + // Add jumpers in segments for each layer + PinsCountNearSegments pins_count; + int jumpers_by_violation = 0; + // if the layer has no segments + if (segment_with_violations_id[violation_id].size() != 0) { + // get info, number of pins near the ends of the segments + getPinCountNearEndPoints(segment_with_violations_id[violation_id], + violation.gates, + route, + pins_count); + // Add the jumpers in the segments + jumpers_by_violation + = addJumpers(segment_with_violations_id[violation_id], + route, + tech->findRoutingLayer(violation_layer_level), + tile_size, + violation.excess_ratio, + pins_count); + } + return jumpers_by_violation; +} + void RepairAntennas::jumperInsertion(NetRouteMap& routing, const int& tile_size, const int& max_routing_layer) @@ -1458,16 +1490,13 @@ void RepairAntennas::jumperInsertion(NetRouteMap& routing, odb::dbTech* tech = db_->getTech(); int total_jumpers = 0; int jumpers_by_net; - int jumpers_by_layer; int net_with_jumpers = 0; // Iterate each violation found for (auto const& net_violations : antenna_violations_) { odb::dbNet* db_net = net_violations.first; const auto& violations = net_violations.second; - std::map routing_layer_with_violations; jumpers_by_net = 0; - int max_layer_level = 1; // Iterate all layers with violations to check if jumper can be added int violation_id = 0; for (const ant::Violation& violation : violations) { @@ -1479,46 +1508,17 @@ void RepairAntennas::jumperInsertion(NetRouteMap& routing, // type layers if (upper_layer && upper_layer->getRoutingLevel() <= max_routing_layer && violation_layer->getType() == odb::dbTechLayerType::ROUTING) { - routing_layer_with_violations[violation.routing_level] = violation_id; - max_layer_level = std::max(max_layer_level, violation.routing_level); + jumpers_by_net += addJumperToViolation( + routing[db_net], db_net, violation_id, tile_size); } violation_id++; } - // if there are layers available to add jumper - if (routing_layer_with_violations.size()) { - ViolationIdToSegmentIds segment_with_violations_id; - GRoute& route = routing[db_net]; - // Get segments with violation in each layer - segment_with_violations_id = getSegmentsWithViolation( - db_net, route, max_layer_level, routing_layer_with_violations); - // Add jumpers in segments for each layer - for (auto it : routing_layer_with_violations) { - PinsCountNearSegments pins_count; - // if the layer has no segments - if (segment_with_violations_id[it.second].size() == 0) { - continue; - } - // get info, number of pins near the ends of the segments - getPinCountNearEndPoints(segment_with_violations_id[it.second], - violations[it.second].gates, - route, - pins_count); - // Add the jumpers in the segments - jumpers_by_layer = addJumpers(segment_with_violations_id[it.second], - route, - tech->findRoutingLayer(it.first), - tile_size, - violations[it.second].excess_ratio, - pins_count); - jumpers_by_net += jumpers_by_layer; - } - // if jumper was added in net - if (jumpers_by_net) { - net_with_jumpers++; - total_jumpers += jumpers_by_net; - db_net->setJumpers(true); - } + // if jumper was added in net + if (jumpers_by_net) { + net_with_jumpers++; + total_jumpers += jumpers_by_net; + db_net->setJumpers(true); } } logger_->info(GRT, diff --git a/src/grt/src/RepairAntennas.h b/src/grt/src/RepairAntennas.h index d5e3101763e..5da9d7f2274 100644 --- a/src/grt/src/RepairAntennas.h +++ b/src/grt/src/RepairAntennas.h @@ -184,11 +184,9 @@ class RepairAntennas void getSegmentsConnectedToPins(odb::dbNet* db_net, LayerToSegmentDataVector& segment_by_layer, PinNameToSegmentIds& seg_connected_to_pin); - ViolationIdToSegmentIds getSegmentsWithViolation( - odb::dbNet* db_net, - const GRoute& route, - const int& max_layer, - std::map& layer_with_violation); + ViolationIdToSegmentIds getSegmentsWithViolation(odb::dbNet* db_net, + const GRoute& route, + const int& violation_id); void getPinCountNearEndPoints(const std::vector& segment_ids, const std::vector& gates, const GRoute& route, @@ -285,6 +283,11 @@ class RepairAntennas const int pin_layer, const std::vector& pin_boxes, const GRoute& route); + // Jumper insertion functions + int addJumperToViolation(GRoute& route, + odb::dbNet* db_net, + const int& violation_id, + const int& tile_size); GlobalRouter* grouter_; ant::AntennaChecker* arc_; From 1707cadd818ed3d5f1ad9b20696e4af83a2eec4a Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 19:50:42 +0000 Subject: [PATCH 18/22] drt: adding requested changes Signed-off-by: luis201420 --- src/drt/src/db/obj/frNet.h | 7 ++++--- src/drt/src/dr/FlexDR_maze.cpp | 5 +---- src/drt/src/dr/FlexGridGraph_maze.cpp | 7 +++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/drt/src/db/obj/frNet.h b/src/drt/src/db/obj/frNet.h index f59114d9681..54553cf51af 100644 --- a/src/drt/src/db/obj/frNet.h +++ b/src/drt/src/db/obj/frNet.h @@ -239,8 +239,8 @@ class frNet : public frBlockObject orig_guides_ = guides; } const std::vector& getOrigGuides() const { return orig_guides_; } - void setHasJumpers(bool has_jumpers) { hasJumpers_ = has_jumpers; } - bool hasJumpers() { return hasJumpers_; } + void setHasJumpers(bool has_jumpers) { has_jumpers_ = has_jumpers; } + bool hasJumpers() { return has_jumpers_; } protected: frString name_; @@ -274,7 +274,8 @@ class frNet : public frBlockObject bool hasInitialRouting_{false}; bool isFixed_{false}; - bool hasJumpers_{false}; + // Flag to mark when a frNet has a jumper + bool has_jumpers_{false}; std::vector all_pinfigs_; }; } // namespace drt diff --git a/src/drt/src/dr/FlexDR_maze.cpp b/src/drt/src/dr/FlexDR_maze.cpp index ad000064b39..9c277681139 100644 --- a/src/drt/src/dr/FlexDR_maze.cpp +++ b/src/drt/src/dr/FlexDR_maze.cpp @@ -3223,10 +3223,7 @@ bool FlexDRWorker::routeNet(drNet* net, std::vector& paths) // ProfileTask profile("DR:routeNet"); // Verify if net has jumpers - bool route_with_jumpers = false; - if (net->getFrNet()->hasJumpers()) { - route_with_jumpers = true; - } + const bool route_with_jumpers = net->getFrNet()->hasJumpers(); if (net->getPins().size() <= 1) { return true; diff --git a/src/drt/src/dr/FlexGridGraph_maze.cpp b/src/drt/src/dr/FlexGridGraph_maze.cpp index cfb11ecdc83..2bed325718e 100644 --- a/src/drt/src/dr/FlexGridGraph_maze.cpp +++ b/src/drt/src/dr/FlexGridGraph_maze.cpp @@ -508,10 +508,9 @@ frCost FlexGridGraph::getCosts(frMIdx gridX, bool guideCost = hasGuide(gridX, gridY, gridZ, dir); frCoord edgeLength = getEdgeLength(gridX, gridY, gridZ, dir); - frUInt4 jumper_cost = 1; - if (route_with_jumpers) { - jumper_cost = 10; - } + // increase cost when a net has jumper + frUInt4 jumper_cost = route_with_jumpers ? 10 : 1; + // temporarily disable guideCost return getEdgeLength(gridX, gridY, gridZ, dir) + (gridCost ? GRIDCOST * edgeLength : 0) From 265e4ac717022050a20e4daa08a3f1fc4289b389 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 19:51:03 +0000 Subject: [PATCH 19/22] grt: adding requested changes Signed-off-by: luis201420 --- src/grt/src/GlobalRouter.cpp | 2 +- src/grt/src/RepairAntennas.cpp | 10 ++++------ src/grt/src/RepairAntennas.h | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/grt/src/GlobalRouter.cpp b/src/grt/src/GlobalRouter.cpp index 8b4ff222403..7b14cc6efd7 100644 --- a/src/grt/src/GlobalRouter.cpp +++ b/src/grt/src/GlobalRouter.cpp @@ -411,7 +411,7 @@ int GlobalRouter::repairAntennas(odb::dbMTerm* diode_mterm, num_threads); // if run in GRT and it need run jumper insertion if (!haveDetailedRoutes(nets_to_repair) - && repair_antennas_->runJumperInsertion()) { + && repair_antennas_->hasNewViolations()) { // Run jumper insertion and clean repair_antennas_->jumperInsertion( routes_, grid_->getTileSize(), getMaxRoutingLayer()); diff --git a/src/grt/src/RepairAntennas.cpp b/src/grt/src/RepairAntennas.cpp index a9e04b778b5..2f10813a991 100644 --- a/src/grt/src/RepairAntennas.cpp +++ b/src/grt/src/RepairAntennas.cpp @@ -112,7 +112,7 @@ bool RepairAntennas::checkAntennaViolations( destroyNetWires(nets_to_repair); } - run_jumper_insertion_ = false; + has_new_violations_ = false; // remove nets with zero violations for (auto it = antenna_violations_.begin(); it != antenna_violations_.end();) { @@ -121,7 +121,7 @@ bool RepairAntennas::checkAntennaViolations( } else { // check if the net is new to repair if (last_nets.find(it->first->getConstName()) == last_nets.end()) { - run_jumper_insertion_ = true; + has_new_violations_ = true; } ++it; } @@ -522,10 +522,8 @@ void RepairAntennas::repairAntennas(odb::dbMTerm* diode_mterm) repair_failures = true; } if (inserted_diodes) { - // check if net has jumpers - if (db_net->hasJumpers()) { - db_net->setJumpers(false); - } + // Diode insertion deletes the jumpers in guides + db_net->setJumpers(false); grouter_->addDirtyNet(db_net); } } diff --git a/src/grt/src/RepairAntennas.h b/src/grt/src/RepairAntennas.h index 5da9d7f2274..aa368b2d238 100644 --- a/src/grt/src/RepairAntennas.h +++ b/src/grt/src/RepairAntennas.h @@ -212,7 +212,7 @@ class RepairAntennas void destroyNetWires(const std::vector& nets_to_repair); odb::dbMTerm* findDiodeMTerm(); double diffArea(odb::dbMTerm* mterm); - bool runJumperInsertion() { return run_jumper_insertion_; } + bool hasNewViolations() { return has_new_violations_; } private: typedef int coord_type; @@ -299,7 +299,7 @@ class RepairAntennas AntennaViolations antenna_violations_; int unique_diode_index_; int illegal_diode_placement_count_; - bool run_jumper_insertion_; + bool has_new_violations_; LayerIdToViaPosition vias_pos_; RoutingSource routing_source_; }; From 9c512f90f80ea0832533c99ea72b141aa354e197 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 20:37:51 +0000 Subject: [PATCH 20/22] grt: updating unit tests Signed-off-by: luis201420 --- src/grt/test/repair_antennas1.defok | 41 +++----- src/grt/test/repair_antennas1.guideok | 130 ++++++++++++++++++-------- src/grt/test/repair_antennas1.ok | 7 +- src/grt/test/repair_antennas2.defok | 23 ++--- src/grt/test/repair_antennas2.guideok | 29 ++++-- src/grt/test/repair_antennas2.ok | 5 +- src/grt/test/repair_antennas3.defok | 10 +- src/grt/test/repair_antennas3.guideok | 29 ++++-- src/grt/test/repair_antennas3.ok | 3 +- src/grt/test/repair_antennas4.ok | 3 +- 10 files changed, 169 insertions(+), 111 deletions(-) diff --git a/src/grt/test/repair_antennas1.defok b/src/grt/test/repair_antennas1.defok index 8baff6e1575..c0f3d8bbf08 100644 --- a/src/grt/test/repair_antennas1.defok +++ b/src/grt/test/repair_antennas1.defok @@ -107,18 +107,7 @@ VIAS 3 ; - via2_960x490 + VIARULE M2M3_PR + CUTSIZE 200 200 + LAYERS met2 via2 met3 + CUTSPACING 200 200 + ENCLOSURE 40 145 180 65 + ROWCOL 1 2 ; - via3_960x490 + VIARULE M3M4_PR + CUTSIZE 200 200 + LAYERS met3 via3 met4 + CUTSPACING 200 200 + ENCLOSURE 180 60 180 145 + ROWCOL 1 2 ; END VIAS -COMPONENTS 1371 ; - - ANTENNA_1 sky130_fd_sc_hs__diode_2 + PLACED ( 127680 146520 ) N ; - - ANTENNA_10 sky130_fd_sc_hs__diode_2 + PLACED ( 71040 149850 ) FS ; - - ANTENNA_11 sky130_fd_sc_hs__diode_2 + PLACED ( 207360 166500 ) N ; - - ANTENNA_2 sky130_fd_sc_hs__diode_2 + PLACED ( 106560 49950 ) FS ; - - ANTENNA_3 sky130_fd_sc_hs__diode_2 + PLACED ( 169440 263070 ) FS ; - - ANTENNA_4 sky130_fd_sc_hs__diode_2 + PLACED ( 141600 246420 ) N ; - - ANTENNA_5 sky130_fd_sc_hs__diode_2 + PLACED ( 142080 59940 ) N ; - - ANTENNA_6 sky130_fd_sc_hs__diode_2 + PLACED ( 104640 203130 ) FS ; - - ANTENNA_7 sky130_fd_sc_hs__diode_2 + PLACED ( 143520 206460 ) N ; - - ANTENNA_8 sky130_fd_sc_hs__diode_2 + PLACED ( 158400 103230 ) FS ; - - ANTENNA_9 sky130_fd_sc_hs__diode_2 + PLACED ( 196800 216450 ) FS ; +COMPONENTS 1360 ; - PHY_0 sky130_fd_sc_hs__decap_4 + FIXED ( 9600 9990 ) FS ; - PHY_1 sky130_fd_sc_hs__decap_4 + FIXED ( 288000 9990 ) S ; - PHY_10 sky130_fd_sc_hs__decap_4 + FIXED ( 9600 26640 ) N ; @@ -1175,7 +1164,7 @@ COMPONENTS 1371 ; - _395_ sky130_fd_sc_hs__inv_2 + PLACED ( 95520 159840 ) N ; - _396_ sky130_fd_sc_hs__nor2_1 + PLACED ( 98880 159840 ) N ; - _397_ sky130_fd_sc_hs__inv_2 + PLACED ( 97440 156510 ) FS ; - - _398_ sky130_fd_sc_hs__inv_2 + PLACED ( 101280 203130 ) FS ; + - _398_ sky130_fd_sc_hs__inv_2 + PLACED ( 104160 203130 ) FS ; - _399_ sky130_fd_sc_hs__nor2_2 + PLACED ( 102720 193140 ) N ; - _400_ sky130_fd_sc_hs__and2_1 + PLACED ( 103200 189810 ) FS ; - _401_ sky130_fd_sc_hs__or2_2 + PLACED ( 98880 189810 ) FS ; @@ -1436,7 +1425,7 @@ COMPONENTS 1371 ; - _665_ sky130_fd_sc_hs__and2_1 + PLACED ( 189120 209790 ) FS ; - _666_ sky130_fd_sc_hs__nand2_1 + PLACED ( 192960 206460 ) N ; - _667_ sky130_fd_sc_hs__dfxtp_4 + PLACED ( 200160 126540 ) N ; - - _668_ sky130_fd_sc_hs__dfxtp_1 + PLACED ( 197280 166500 ) N ; + - _668_ sky130_fd_sc_hs__dfxtp_1 + PLACED ( 197760 166500 ) N ; - _669_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 200160 146520 ) N ; - _670_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 124320 106560 ) N ; - _671_ sky130_fd_sc_hs__dfxtp_1 + PLACED ( 168960 173160 ) N ; @@ -1446,7 +1435,7 @@ COMPONENTS 1371 ; - _675_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 76320 56610 ) FS ; - _676_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 54240 93240 ) N ; - _677_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 109440 66600 ) N ; - - _678_ sky130_fd_sc_hs__dfxtp_1 + PLACED ( 117600 146520 ) N ; + - _678_ sky130_fd_sc_hs__dfxtp_1 + PLACED ( 118560 146520 ) N ; - _679_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 54720 183150 ) FS ; - _680_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 96480 219780 ) N ; - _681_ sky130_fd_sc_hs__dfxtp_2 + PLACED ( 89760 139860 ) N ; @@ -3395,7 +3384,7 @@ NETS 411 ; - _322_ ( _665_ A ) ( _663_ Y ) + USE SIGNAL ; - _323_ ( _665_ B ) ( _664_ Y ) + USE SIGNAL ; - _324_ ( _666_ B ) ( _665_ X ) + USE SIGNAL ; - - clk ( PIN clk ) ( ANTENNA_1 DIODE ) ( clkbuf_0_clk A ) + USE CLOCK ; + - clk ( PIN clk ) ( clkbuf_0_clk A ) + USE CLOCK ; - clknet_0_clk ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) ( clkbuf_2_0__f_clk A ) ( clkbuf_0_clk X ) + USE CLOCK ; - clknet_2_0__leaf_clk ( _674_ CLK ) ( _675_ CLK ) ( _676_ CLK ) ( _677_ CLK ) ( _681_ CLK ) ( _690_ CLK ) ( _691_ CLK ) ( _692_ CLK ) ( _694_ CLK ) ( _697_ CLK ) ( clkbuf_2_0__f_clk X ) + USE CLOCK ; @@ -3451,11 +3440,11 @@ NETS 411 ; ( _524_ A ) ( _525_ A1 ) ( _610_ A2 ) ( _342_ A ) ( repeater4 X ) + USE SIGNAL ; - req_msg[0] ( PIN req_msg[0] ) ( _513_ B ) + USE SIGNAL ; - req_msg[10] ( PIN req_msg[10] ) ( _564_ B ) + USE SIGNAL ; - - req_msg[11] ( PIN req_msg[11] ) ( ANTENNA_2 DIODE ) ( _569_ A ) + USE SIGNAL ; + - req_msg[11] ( PIN req_msg[11] ) ( _569_ A ) + USE SIGNAL ; - req_msg[12] ( PIN req_msg[12] ) ( _574_ B ) + USE SIGNAL ; - req_msg[13] ( PIN req_msg[13] ) ( _579_ B ) + USE SIGNAL ; - - req_msg[14] ( PIN req_msg[14] ) ( ANTENNA_3 DIODE ) ( _584_ A ) + USE SIGNAL ; - - req_msg[15] ( PIN req_msg[15] ) ( ANTENNA_4 DIODE ) ( _589_ A ) + USE SIGNAL ; + - req_msg[14] ( PIN req_msg[14] ) ( _584_ A ) + USE SIGNAL ; + - req_msg[15] ( PIN req_msg[15] ) ( _589_ A ) + USE SIGNAL ; - req_msg[16] ( PIN req_msg[16] ) ( _602_ A1 ) + USE SIGNAL ; - req_msg[17] ( PIN req_msg[17] ) ( _606_ A1 ) + USE SIGNAL ; - req_msg[18] ( PIN req_msg[18] ) ( _610_ A1 ) + USE SIGNAL ; @@ -3464,16 +3453,16 @@ NETS 411 ; - req_msg[20] ( PIN req_msg[20] ) ( _616_ A1 ) + USE SIGNAL ; - req_msg[21] ( PIN req_msg[21] ) ( _623_ A1 ) + USE SIGNAL ; - req_msg[22] ( PIN req_msg[22] ) ( _627_ A1 ) + USE SIGNAL ; - - req_msg[23] ( PIN req_msg[23] ) ( ANTENNA_5 DIODE ) ( _631_ A1 ) + USE SIGNAL ; + - req_msg[23] ( PIN req_msg[23] ) ( _631_ A1 ) + USE SIGNAL ; - req_msg[24] ( PIN req_msg[24] ) ( _635_ A1 ) + USE SIGNAL ; - - req_msg[25] ( PIN req_msg[25] ) ( ANTENNA_6 DIODE ) ( _639_ A1 ) + USE SIGNAL ; + - req_msg[25] ( PIN req_msg[25] ) ( _639_ A1 ) + USE SIGNAL ; - req_msg[26] ( PIN req_msg[26] ) ( _643_ A1 ) + USE SIGNAL ; - req_msg[27] ( PIN req_msg[27] ) ( _646_ A1 ) + USE SIGNAL ; - - req_msg[28] ( PIN req_msg[28] ) ( ANTENNA_7 DIODE ) ( _652_ A1 ) + USE SIGNAL ; + - req_msg[28] ( PIN req_msg[28] ) ( _652_ A1 ) + USE SIGNAL ; - req_msg[29] ( PIN req_msg[29] ) ( _656_ A1 ) + USE SIGNAL ; - - req_msg[2] ( PIN req_msg[2] ) ( ANTENNA_8 DIODE ) ( _524_ B ) + USE SIGNAL ; + - req_msg[2] ( PIN req_msg[2] ) ( _524_ B ) + USE SIGNAL ; - req_msg[30] ( PIN req_msg[30] ) ( _660_ A1 ) + USE SIGNAL ; - - req_msg[31] ( PIN req_msg[31] ) ( ANTENNA_9 DIODE ) ( _664_ A1 ) + USE SIGNAL ; + - req_msg[31] ( PIN req_msg[31] ) ( _664_ A1 ) + USE SIGNAL ; - req_msg[3] ( PIN req_msg[3] ) ( _530_ A ) + USE SIGNAL ; - req_msg[4] ( PIN req_msg[4] ) ( _535_ A ) + USE SIGNAL ; - req_msg[5] ( PIN req_msg[5] ) ( _540_ B ) + USE SIGNAL ; @@ -3487,7 +3476,7 @@ NETS 411 ; - reset ( PIN reset ) ( _346_ A1 ) ( _343_ B1 ) ( _339_ B1 ) ( _330_ A ) + USE SIGNAL ; - resp_msg[0] ( PIN resp_msg[0] ) ( _596_ B ) ( _503_ B ) ( _328_ X ) + USE SIGNAL ; - resp_msg[10] ( PIN resp_msg[10] ) ( _641_ B ) ( _468_ X ) + USE SIGNAL ; - - resp_msg[11] ( PIN resp_msg[11] ) ( ANTENNA_10 DIODE ) ( _648_ A ) ( _474_ Y ) + USE SIGNAL ; + - resp_msg[11] ( PIN resp_msg[11] ) ( _648_ A ) ( _474_ Y ) + USE SIGNAL ; - resp_msg[12] ( PIN resp_msg[12] ) ( _650_ B ) ( _475_ Y ) + USE SIGNAL ; - resp_msg[13] ( PIN resp_msg[13] ) ( _654_ A ) ( _479_ Y ) + USE SIGNAL ; - resp_msg[14] ( PIN resp_msg[14] ) ( _658_ A ) ( _480_ X ) + USE SIGNAL ; @@ -3501,7 +3490,7 @@ NETS 411 ; - resp_msg[7] ( PIN resp_msg[7] ) ( _629_ B ) ( _462_ Y ) + USE SIGNAL ; - resp_msg[8] ( PIN resp_msg[8] ) ( _633_ B ) ( _463_ Y ) + USE SIGNAL ; - resp_msg[9] ( PIN resp_msg[9] ) ( _637_ B ) ( _466_ Y ) + USE SIGNAL ; - - resp_rdy ( PIN resp_rdy ) ( ANTENNA_11 DIODE ) ( _343_ A2 ) + USE SIGNAL ; + - resp_rdy ( PIN resp_rdy ) ( _343_ A2 ) + USE SIGNAL ; - resp_val ( PIN resp_val ) ( _343_ A1 ) ( _341_ X ) + USE SIGNAL ; END NETS END DESIGN diff --git a/src/grt/test/repair_antennas1.guideok b/src/grt/test/repair_antennas1.guideok index af649902371..739873e2532 100644 --- a/src/grt/test/repair_antennas1.guideok +++ b/src/grt/test/repair_antennas1.guideok @@ -2976,14 +2976,16 @@ _324_ ) clk ( -122400 151200 129600 158400 li1 -122400 151200 129600 158400 met1 -122400 144000 129600 158400 met2 -122400 144000 129600 151200 met1 -122400 144000 129600 151200 li1 -93600 151200 100800 300130 met2 +93600 172800 100800 300130 met2 93600 151200 100800 158400 met1 93600 151200 129600 158400 met1 +122400 151200 129600 158400 li1 +93600 158400 100800 165600 met2 +93600 172800 100800 180000 met2 +93600 158400 100800 165600 met3 +93600 172800 100800 180000 met3 +93600 158400 100800 180000 met4 +93600 151200 100800 165600 met2 ) clknet_0_clk ( @@ -3881,14 +3883,17 @@ req_msg[10] ) req_msg[11] ( -100800 50400 108000 57600 li1 -100800 50400 115200 57600 met1 108000 50400 115200 57600 li1 -108000 50400 299960 57600 met1 -288000 50400 299960 57600 met1 -288000 14400 299960 57600 met2 -288000 14400 299960 21600 met2 -288000 14400 299960 21600 met3 +108000 50400 115200 57600 met1 +108000 14400 115200 57600 met2 +108000 14400 115200 21600 met2 +129600 14400 299960 21600 met3 +115200 14400 122400 21600 met3 +129600 14400 136800 21600 met3 +115200 14400 122400 21600 met4 +129600 14400 136800 21600 met4 +115200 14400 136800 21600 met5 +108000 14400 122400 21600 met3 ) req_msg[12] ( @@ -3912,14 +3917,26 @@ req_msg[14] 165600 259200 172800 266400 met1 165600 259200 172800 273600 met2 165600 266400 172800 273600 met2 -165600 266400 299960 273600 met3 +187200 266400 299960 273600 met3 +172800 266400 180000 273600 met3 +187200 266400 194400 273600 met3 +172800 266400 180000 273600 met4 +187200 266400 194400 273600 met4 +172800 266400 194400 273600 met5 +165600 266400 180000 273600 met3 ) req_msg[15] ( -0 244800 144000 252000 met3 +129600 244800 144000 252000 met3 136800 244800 144000 252000 met2 136800 244800 144000 252000 met1 136800 244800 144000 252000 li1 +115200 244800 122400 252000 met3 +129600 244800 136800 252000 met3 +115200 244800 122400 252000 met4 +129600 244800 136800 252000 met4 +115200 244800 136800 252000 met5 +0 244800 122400 252000 met3 ) req_msg[16] ( @@ -3990,7 +4007,13 @@ req_msg[23] 136800 57600 144000 64800 met1 136800 43200 144000 64800 met2 136800 43200 144000 50400 met2 -136800 43200 299960 50400 met3 +158400 43200 299960 50400 met3 +144000 43200 151200 50400 met3 +158400 43200 165600 50400 met3 +144000 43200 151200 50400 met4 +158400 43200 165600 50400 met4 +144000 43200 165600 50400 met5 +136800 43200 151200 50400 met3 ) req_msg[24] ( @@ -4004,14 +4027,17 @@ req_msg[24] ) req_msg[25] ( -100800 201600 108000 208800 li1 -100800 201600 115200 208800 met1 108000 201600 115200 208800 li1 -108000 201600 299960 208800 met1 -288000 201600 299960 208800 met1 -288000 72000 299960 208800 met2 -288000 72000 299960 79200 met2 -288000 72000 299960 79200 met3 +108000 201600 115200 208800 met1 +108000 72000 115200 208800 met2 +108000 72000 115200 79200 met2 +129600 72000 299960 79200 met3 +115200 72000 122400 79200 met3 +129600 72000 136800 79200 met3 +115200 72000 122400 79200 met4 +129600 72000 136800 79200 met4 +115200 72000 136800 79200 met5 +108000 72000 122400 79200 met3 ) req_msg[26] ( @@ -4030,14 +4056,17 @@ req_msg[27] ) req_msg[28] ( -144000 201600 151200 208800 li1 -144000 201600 299960 208800 met1 -288000 201600 299960 208800 met1 -288000 151200 299960 208800 met2 -288000 151200 299960 158400 met2 -288000 151200 299960 158400 met3 136800 201600 144000 208800 li1 -136800 201600 151200 208800 met1 +136800 201600 144000 208800 met1 +136800 151200 144000 208800 met2 +136800 151200 144000 158400 met2 +158400 151200 299960 158400 met3 +144000 151200 151200 158400 met3 +158400 151200 165600 158400 met3 +144000 151200 151200 158400 met4 +158400 151200 165600 158400 met4 +144000 151200 165600 158400 met5 +136800 151200 151200 158400 met3 ) req_msg[29] ( @@ -4055,8 +4084,14 @@ req_msg[2] 0 108000 7200 115200 met3 0 100800 7200 115200 met2 0 100800 7200 108000 met1 -0 100800 165600 108000 met1 +151200 100800 165600 108000 met1 158400 100800 165600 108000 li1 +136800 100800 144000 108000 met1 +151200 100800 158400 108000 met1 +136800 100800 144000 108000 met2 +151200 100800 158400 108000 met2 +136800 100800 158400 108000 met3 +0 100800 144000 108000 met1 ) req_msg[30] ( @@ -4073,7 +4108,13 @@ req_msg[31] 194400 216000 201600 223200 met1 194400 216000 201600 244800 met2 194400 237600 201600 244800 met2 -194400 237600 299960 244800 met3 +216000 237600 299960 244800 met3 +201600 237600 208800 244800 met3 +216000 237600 223200 244800 met3 +201600 237600 208800 244800 met4 +216000 237600 223200 244800 met4 +201600 237600 223200 244800 met5 +194400 237600 208800 244800 met3 ) req_msg[3] ( @@ -4226,13 +4267,19 @@ resp_msg[11] ( 64800 151200 72000 158400 li1 64800 151200 79200 158400 met1 -72000 151200 299960 158400 met1 +93600 151200 299960 158400 met1 288000 151200 299960 158400 met1 288000 0 299960 158400 met2 72000 158400 79200 165600 li1 72000 158400 79200 165600 met1 72000 151200 79200 165600 met2 72000 151200 79200 158400 met1 +79200 151200 86400 158400 met1 +93600 151200 100800 158400 met1 +79200 151200 86400 158400 met2 +93600 151200 100800 158400 met2 +79200 151200 100800 158400 met3 +72000 151200 86400 158400 met1 ) resp_msg[12] ( @@ -4393,14 +4440,17 @@ resp_msg[9] ) resp_rdy ( -201600 165600 208800 172800 li1 -201600 165600 216000 172800 met1 208800 165600 216000 172800 li1 -208800 165600 230400 172800 met1 -223200 165600 230400 172800 met1 -223200 165600 230400 216000 met2 -223200 208800 230400 216000 met2 -223200 208800 299960 216000 met3 +208800 165600 216000 172800 met1 +208800 165600 216000 216000 met2 +208800 208800 216000 216000 met2 +230400 208800 299960 216000 met3 +216000 208800 223200 216000 met3 +230400 208800 237600 216000 met3 +216000 208800 223200 216000 met4 +230400 208800 237600 216000 met4 +216000 208800 237600 216000 met5 +208800 208800 223200 216000 met3 ) resp_val ( diff --git a/src/grt/test/repair_antennas1.ok b/src/grt/test/repair_antennas1.ok index 4af39b3739b..94fad7b636b 100644 --- a/src/grt/test/repair_antennas1.ok +++ b/src/grt/test/repair_antennas1.ok @@ -8,10 +8,9 @@ [INFO ANT-0002] Found 11 net violations. [INFO ANT-0001] Found 11 pin violations. [INFO GRT-0012] Found 11 antenna violations. -[INFO GRT-0015] Inserted 11 diodes. +[INFO GRT-0302] Inserted 11 jumpers for 11 nets. +[INFO GRT-0012] Found 0 antenna violations. [INFO ANT-0002] Found 0 net violations. [INFO ANT-0001] Found 0 pin violations. -Differences found at line 3912. -165600 259200 172800 266400 met1 -165600 259200 273600 266400 met1 +No differences found. No differences found. diff --git a/src/grt/test/repair_antennas2.defok b/src/grt/test/repair_antennas2.defok index d885e7e641a..922a953ea46 100644 --- a/src/grt/test/repair_antennas2.defok +++ b/src/grt/test/repair_antennas2.defok @@ -101,9 +101,7 @@ VIAS 3 ; - via2_960x490 + VIARULE M2M3_PR + CUTSIZE 200 200 + LAYERS met2 via2 met3 + CUTSPACING 200 200 + ENCLOSURE 40 145 180 65 + ROWCOL 1 2 ; - via3_960x490 + VIARULE M3M4_PR + CUTSIZE 200 200 + LAYERS met3 via3 met4 + CUTSPACING 200 200 + ENCLOSURE 180 60 180 145 + ROWCOL 1 2 ; END VIAS -COMPONENTS 7170 ; - - ANTENNA_1 sky130_fd_sc_hs__diode_2 + PLACED ( 132480 156510 ) FS ; - - ANTENNA_2 sky130_fd_sc_hs__diode_2 + PLACED ( 169920 206460 ) N ; +COMPONENTS 7167 ; - FILLER_0_104 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 59520 9990 ) FS ; - FILLER_0_112 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 63360 9990 ) FS ; - FILLER_0_117 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 65760 9990 ) FS ; @@ -3013,10 +3011,9 @@ COMPONENTS 7170 ; - FILLER_44_223 sky130_fd_sc_hs__fill_2 + SOURCE DIST + PLACED ( 116640 156510 ) FS ; - FILLER_44_228 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 119040 156510 ) FS ; - FILLER_44_233 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 121440 156510 ) FS ; - - FILLER_44_241 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 125280 156510 ) FS ; - - FILLER_44_245 sky130_fd_sc_hs__fill_2 + SOURCE DIST + PLACED ( 127200 156510 ) FS ; - - FILLER_44_247 sky130_fd_sc_hs__fill_1 + SOURCE DIST + PLACED ( 128160 156510 ) FS ; - - FILLER_44_252 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 130560 156510 ) FS ; + - FILLER_44_241 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 125280 156510 ) FS ; + - FILLER_44_249 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 129120 156510 ) FS ; + - FILLER_44_253 sky130_fd_sc_hs__fill_1 + SOURCE DIST + PLACED ( 131040 156510 ) FS ; - FILLER_44_258 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 133440 156510 ) FS ; - FILLER_44_266 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 137280 156510 ) FS ; - FILLER_44_274 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 141120 156510 ) FS ; @@ -4227,9 +4224,9 @@ COMPONENTS 7170 ; - FILLER_59_303 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 155040 206460 ) N ; - FILLER_59_311 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 158880 206460 ) N ; - FILLER_59_320 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 163200 206460 ) N ; - - FILLER_59_330 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 168000 206460 ) N ; - - FILLER_59_336 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 170880 206460 ) N ; - - FILLER_59_344 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 174720 206460 ) N ; + - FILLER_59_330 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 168000 206460 ) N ; + - FILLER_59_338 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 171840 206460 ) N ; + - FILLER_59_346 sky130_fd_sc_hs__fill_2 + SOURCE DIST + PLACED ( 175680 206460 ) N ; - FILLER_59_348 sky130_fd_sc_hs__fill_1 + SOURCE DIST + PLACED ( 176640 206460 ) N ; - FILLER_59_354 sky130_fd_sc_hs__fill_4 + SOURCE DIST + PLACED ( 179520 206460 ) N ; - FILLER_59_361 sky130_fd_sc_hs__fill_8 + SOURCE DIST + PLACED ( 182880 206460 ) N ; @@ -7109,7 +7106,7 @@ COMPONENTS 7170 ; - _533_ sky130_fd_sc_hs__o21ai_1 + PLACED ( 124320 146520 ) N ; - _535_ sky130_fd_sc_hs__inv_2 + PLACED ( 137280 106560 ) N ; - _536_ sky130_fd_sc_hs__nor2_1 + PLACED ( 132000 163170 ) FS ; - - _537_ sky130_fd_sc_hs__a21oi_1 + PLACED ( 128640 156510 ) FS ; + - _537_ sky130_fd_sc_hs__a21oi_1 + PLACED ( 131520 156510 ) FS ; - _538_ sky130_fd_sc_hs__inv_1 + PLACED ( 127200 203130 ) FS ; - _539_ sky130_fd_sc_hs__nor2_8 + PLACED ( 124800 206460 ) N ; - _541_ sky130_fd_sc_hs__nand2_1 + PLACED ( 104160 163170 ) FS ; @@ -8995,7 +8992,7 @@ NETS 437 ; - _221_ ( _507_ B1 ) ( _506_ Y ) + USE SIGNAL ; - _222_ ( _509_ A ) ( _507_ X ) + USE SIGNAL ; - _223_ ( _509_ B ) ( _508_ Y ) + USE SIGNAL ; - - _224_ ( ANTENNA_2 DIODE ) ( _511_ B1 ) ( _510_ Y ) + USE SIGNAL ; + - _224_ ( _511_ B1 ) ( _510_ Y ) + USE SIGNAL ; - _225_ ( _513_ A ) ( _511_ X ) + USE SIGNAL ; - _226_ ( _513_ B ) ( _512_ Y ) + USE SIGNAL ; - _227_ ( _515_ B1 ) ( _514_ Y ) + USE SIGNAL ; @@ -9061,7 +9058,7 @@ NETS 437 ; - _288_ ( _596_ B1 ) ( _595_ Y ) + USE SIGNAL ; - _289_ ( _597_ B1 ) ( _596_ Y ) + USE SIGNAL ; - _290_ ( _598_ B ) ( _597_ X ) + USE SIGNAL ; - - clk ( PIN clk ) ( ANTENNA_1 DIODE ) ( clkbuf_0_clk A ) + USE CLOCK ; + - clk ( PIN clk ) ( clkbuf_0_clk A ) + USE CLOCK ; - clknet_0_clk ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) ( clkbuf_2_0__f_clk A ) ( clkbuf_0_clk X ) + USE CLOCK ; - clknet_2_0__leaf_clk ( _614_ CLK ) ( _616_ CLK ) ( _617_ CLK ) ( _630_ CLK ) ( _631_ CLK ) ( _632_ CLK ) ( _633_ CLK ) ( clkbuf_2_0__f_clk X ) + USE CLOCK ; diff --git a/src/grt/test/repair_antennas2.guideok b/src/grt/test/repair_antennas2.guideok index d58d1806b8d..f060d510ebd 100644 --- a/src/grt/test/repair_antennas2.guideok +++ b/src/grt/test/repair_antennas2.guideok @@ -2042,8 +2042,14 @@ _224_ 28800 216000 36000 223200 met1 28800 201600 36000 223200 met2 28800 201600 36000 208800 met1 -28800 201600 172800 208800 met1 +158400 201600 172800 208800 met1 165600 201600 172800 208800 li1 +144000 201600 151200 208800 met1 +158400 201600 165600 208800 met1 +144000 201600 151200 208800 met2 +158400 201600 165600 208800 met2 +144000 201600 165600 208800 met3 +28800 201600 151200 208800 met1 ) _225_ ( @@ -2564,8 +2570,14 @@ clk 0 201600 7200 208800 met3 0 151200 7200 208800 met2 0 151200 7200 158400 met1 -0 151200 136800 158400 met1 +122400 151200 136800 158400 met1 129600 151200 136800 158400 li1 +108000 151200 115200 158400 met1 +122400 151200 129600 158400 met1 +108000 151200 115200 158400 met2 +122400 151200 129600 158400 met2 +108000 151200 129600 158400 met3 +0 151200 115200 158400 met1 ) clknet_0_clk ( @@ -3660,8 +3672,7 @@ net54 79200 151200 86400 158400 li1 79200 151200 100800 158400 met1 93600 151200 100800 158400 li1 -93600 151200 129600 158400 met1 -122400 151200 129600 158400 li1 +93600 151200 136800 158400 met1 129600 100800 144000 108000 met1 136800 100800 144000 108000 li1 129600 108000 136800 115200 li1 @@ -3680,18 +3691,18 @@ net54 129600 115200 136800 122400 li1 129600 115200 136800 122400 met1 129600 108000 136800 122400 met2 +129600 151200 136800 158400 li1 129600 151200 136800 158400 met1 129600 115200 136800 158400 met2 -122400 151200 136800 158400 met1 +129600 158400 136800 165600 met1 +129600 151200 136800 165600 met2 129600 180000 136800 187200 li1 129600 180000 136800 187200 met1 129600 158400 136800 187200 met2 -129600 158400 136800 165600 met1 129600 187200 158400 194400 met1 151200 187200 158400 194400 li1 151200 187200 165600 194400 met1 129600 180000 136800 194400 met2 -129600 151200 136800 165600 met2 115200 201600 136800 208800 met1 86400 100800 108000 108000 met1 28800 201600 36000 208800 met1 @@ -3808,8 +3819,8 @@ net7 net8 ( 14400 158400 21600 165600 li1 -14400 158400 129600 165600 met1 -122400 158400 129600 165600 li1 +14400 158400 136800 165600 met1 +129600 158400 136800 165600 li1 ) net9 ( diff --git a/src/grt/test/repair_antennas2.ok b/src/grt/test/repair_antennas2.ok index 51ee92fdf8a..ce11cb1a7cb 100644 --- a/src/grt/test/repair_antennas2.ok +++ b/src/grt/test/repair_antennas2.ok @@ -8,9 +8,10 @@ [INFO ANT-0002] Found 2 net violations. [INFO ANT-0001] Found 2 pin violations. [INFO GRT-0012] Found 2 antenna violations. -[INFO GRT-0015] Inserted 2 diodes. +[INFO GRT-0302] Inserted 2 jumpers for 2 nets. +[INFO GRT-0012] Found 0 antenna violations. [INFO ANT-0002] Found 0 net violations. [INFO ANT-0001] Found 0 pin violations. -[INFO DPL-0001] Placed 5891 filler instances. +[INFO DPL-0001] Placed 5890 filler instances. No differences found. No differences found. diff --git a/src/grt/test/repair_antennas3.defok b/src/grt/test/repair_antennas3.defok index d583b16f315..7202df1336f 100644 --- a/src/grt/test/repair_antennas3.defok +++ b/src/grt/test/repair_antennas3.defok @@ -101,9 +101,7 @@ VIAS 3 ; - via2_960x490 + VIARULE M2M3_PR + CUTSIZE 200 200 + LAYERS met2 via2 met3 + CUTSPACING 200 200 + ENCLOSURE 40 145 180 65 + ROWCOL 1 2 ; - via3_960x490 + VIARULE M3M4_PR + CUTSIZE 200 200 + LAYERS met3 via3 met4 + CUTSPACING 200 200 + ENCLOSURE 180 60 180 145 + ROWCOL 1 2 ; END VIAS -COMPONENTS 1279 ; - - ANTENNA_1 sky130_fd_sc_hs__diode_2 + PLACED ( 132480 156510 ) FS ; - - ANTENNA_2 sky130_fd_sc_hs__diode_2 + PLACED ( 169920 206460 ) N ; +COMPONENTS 1277 ; - PHY_0 sky130_fd_sc_hs__decap_4 + FIXED ( 9600 9990 ) FS ; - PHY_1 sky130_fd_sc_hs__decap_4 + FIXED ( 267840 9990 ) S ; - PHY_10 sky130_fd_sc_hs__decap_4 + FIXED ( 9600 26640 ) N ; @@ -1218,7 +1216,7 @@ COMPONENTS 1279 ; - _533_ sky130_fd_sc_hs__o21ai_1 + PLACED ( 124320 146520 ) N ; - _535_ sky130_fd_sc_hs__inv_2 + PLACED ( 137280 106560 ) N ; - _536_ sky130_fd_sc_hs__nor2_1 + PLACED ( 132000 163170 ) FS ; - - _537_ sky130_fd_sc_hs__a21oi_1 + PLACED ( 128640 156510 ) FS ; + - _537_ sky130_fd_sc_hs__a21oi_1 + PLACED ( 131520 156510 ) FS ; - _538_ sky130_fd_sc_hs__inv_1 + PLACED ( 127200 203130 ) FS ; - _539_ sky130_fd_sc_hs__nor2_8 + PLACED ( 124800 206460 ) N ; - _541_ sky130_fd_sc_hs__nand2_1 + PLACED ( 104160 163170 ) FS ; @@ -3104,7 +3102,7 @@ NETS 437 ; - _221_ ( _507_ B1 ) ( _506_ Y ) + USE SIGNAL ; - _222_ ( _509_ A ) ( _507_ X ) + USE SIGNAL ; - _223_ ( _509_ B ) ( _508_ Y ) + USE SIGNAL ; - - _224_ ( ANTENNA_2 DIODE ) ( _511_ B1 ) ( _510_ Y ) + USE SIGNAL ; + - _224_ ( _511_ B1 ) ( _510_ Y ) + USE SIGNAL ; - _225_ ( _513_ A ) ( _511_ X ) + USE SIGNAL ; - _226_ ( _513_ B ) ( _512_ Y ) + USE SIGNAL ; - _227_ ( _515_ B1 ) ( _514_ Y ) + USE SIGNAL ; @@ -3170,7 +3168,7 @@ NETS 437 ; - _288_ ( _596_ B1 ) ( _595_ Y ) + USE SIGNAL ; - _289_ ( _597_ B1 ) ( _596_ Y ) + USE SIGNAL ; - _290_ ( _598_ B ) ( _597_ X ) + USE SIGNAL ; - - clk ( PIN clk ) ( ANTENNA_1 DIODE ) ( clkbuf_0_clk A ) + USE CLOCK ; + - clk ( PIN clk ) ( clkbuf_0_clk A ) + USE CLOCK ; - clknet_0_clk ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) ( clkbuf_2_0__f_clk A ) ( clkbuf_0_clk X ) + USE CLOCK ; - clknet_2_0__leaf_clk ( _614_ CLK ) ( _616_ CLK ) ( _617_ CLK ) ( _630_ CLK ) ( _631_ CLK ) ( _632_ CLK ) ( _633_ CLK ) ( clkbuf_2_0__f_clk X ) + USE CLOCK ; diff --git a/src/grt/test/repair_antennas3.guideok b/src/grt/test/repair_antennas3.guideok index d58d1806b8d..f060d510ebd 100644 --- a/src/grt/test/repair_antennas3.guideok +++ b/src/grt/test/repair_antennas3.guideok @@ -2042,8 +2042,14 @@ _224_ 28800 216000 36000 223200 met1 28800 201600 36000 223200 met2 28800 201600 36000 208800 met1 -28800 201600 172800 208800 met1 +158400 201600 172800 208800 met1 165600 201600 172800 208800 li1 +144000 201600 151200 208800 met1 +158400 201600 165600 208800 met1 +144000 201600 151200 208800 met2 +158400 201600 165600 208800 met2 +144000 201600 165600 208800 met3 +28800 201600 151200 208800 met1 ) _225_ ( @@ -2564,8 +2570,14 @@ clk 0 201600 7200 208800 met3 0 151200 7200 208800 met2 0 151200 7200 158400 met1 -0 151200 136800 158400 met1 +122400 151200 136800 158400 met1 129600 151200 136800 158400 li1 +108000 151200 115200 158400 met1 +122400 151200 129600 158400 met1 +108000 151200 115200 158400 met2 +122400 151200 129600 158400 met2 +108000 151200 129600 158400 met3 +0 151200 115200 158400 met1 ) clknet_0_clk ( @@ -3660,8 +3672,7 @@ net54 79200 151200 86400 158400 li1 79200 151200 100800 158400 met1 93600 151200 100800 158400 li1 -93600 151200 129600 158400 met1 -122400 151200 129600 158400 li1 +93600 151200 136800 158400 met1 129600 100800 144000 108000 met1 136800 100800 144000 108000 li1 129600 108000 136800 115200 li1 @@ -3680,18 +3691,18 @@ net54 129600 115200 136800 122400 li1 129600 115200 136800 122400 met1 129600 108000 136800 122400 met2 +129600 151200 136800 158400 li1 129600 151200 136800 158400 met1 129600 115200 136800 158400 met2 -122400 151200 136800 158400 met1 +129600 158400 136800 165600 met1 +129600 151200 136800 165600 met2 129600 180000 136800 187200 li1 129600 180000 136800 187200 met1 129600 158400 136800 187200 met2 -129600 158400 136800 165600 met1 129600 187200 158400 194400 met1 151200 187200 158400 194400 li1 151200 187200 165600 194400 met1 129600 180000 136800 194400 met2 -129600 151200 136800 165600 met2 115200 201600 136800 208800 met1 86400 100800 108000 108000 met1 28800 201600 36000 208800 met1 @@ -3808,8 +3819,8 @@ net7 net8 ( 14400 158400 21600 165600 li1 -14400 158400 129600 165600 met1 -122400 158400 129600 165600 li1 +14400 158400 136800 165600 met1 +129600 158400 136800 165600 li1 ) net9 ( diff --git a/src/grt/test/repair_antennas3.ok b/src/grt/test/repair_antennas3.ok index 42594b543d7..331a8f202c7 100644 --- a/src/grt/test/repair_antennas3.ok +++ b/src/grt/test/repair_antennas3.ok @@ -8,7 +8,8 @@ [INFO ANT-0002] Found 2 net violations. [INFO ANT-0001] Found 2 pin violations. [INFO GRT-0012] Found 2 antenna violations. -[INFO GRT-0015] Inserted 2 diodes. +[INFO GRT-0302] Inserted 2 jumpers for 2 nets. +[INFO GRT-0012] Found 0 antenna violations. [INFO ANT-0002] Found 0 net violations. [INFO ANT-0001] Found 0 pin violations. No differences found. diff --git a/src/grt/test/repair_antennas4.ok b/src/grt/test/repair_antennas4.ok index ab40f0d9b80..5cffb88cbcc 100644 --- a/src/grt/test/repair_antennas4.ok +++ b/src/grt/test/repair_antennas4.ok @@ -6,4 +6,5 @@ [INFO ODB-0132] Created 2 special nets and 0 connections. [INFO ODB-0133] Created 411 nets and 1210 connections. [INFO GRT-0012] Found 18 antenna violations. -[INFO GRT-0015] Inserted 209 diodes. +[INFO GRT-0302] Inserted 18 jumpers for 18 nets. +[INFO GRT-0012] Found 0 antenna violations. From 1bad828ee83f92fbfb4222fafa3979fad91fc80e Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 20:58:48 +0000 Subject: [PATCH 21/22] updating ibex_sky130hd and jpeg_sky130hd tests Signed-off-by: luis201420 --- test/ibex_sky130hd.metrics | 138 ++++++++++++++++------------ test/ibex_sky130hd.metrics_limits | 12 +-- test/jpeg_sky130hd.metrics | 144 +++++++++++++++++------------- test/jpeg_sky130hd.metrics_limits | 14 +-- 4 files changed, 178 insertions(+), 130 deletions(-) diff --git a/test/ibex_sky130hd.metrics b/test/ibex_sky130hd.metrics index 2d42995ee0a..39c3c785a6d 100644 --- a/test/ibex_sky130hd.metrics +++ b/test/ibex_sky130hd.metrics @@ -29,82 +29,110 @@ "DPL::design_area": "167616", "route__net": 15575, "route__net__special": 2, - "grt__antenna_diodes_count": 381, + "grt__antenna_diodes_count": 243, "grt__antenna__violating__nets": 0, "grt__antenna__violating__pins": 0, "GRT::ANT::errors": "0", "route__net": 15575, "route__net__special": 2, - "route__drc_errors__iter:1": 6329, - "route__wirelength__iter:1": 964401, - "route__drc_errors__iter:2": 1918, - "route__wirelength__iter:2": 957933, - "route__drc_errors__iter:3": 1428, - "route__wirelength__iter:3": 955938, + "route__drc_errors__iter:1": 6428, + "route__wirelength__iter:1": 966577, + "route__drc_errors__iter:2": 2042, + "route__wirelength__iter:2": 959535, + "route__drc_errors__iter:3": 1728, + "route__wirelength__iter:3": 957808, "route__drc_errors__iter:4": 250, - "route__wirelength__iter:4": 956071, - "route__drc_errors__iter:5": 81, - "route__wirelength__iter:5": 956043, - "route__drc_errors__iter:6": 19, - "route__wirelength__iter:6": 956037, - "route__drc_errors__iter:7": 7, - "route__wirelength__iter:7": 956041, - "route__drc_errors__iter:8": 0, - "route__wirelength__iter:8": 956042, + "route__wirelength__iter:4": 957776, + "route__drc_errors__iter:5": 59, + "route__wirelength__iter:5": 957731, + "route__drc_errors__iter:6": 9, + "route__wirelength__iter:6": 957736, + "route__drc_errors__iter:7": 8, + "route__wirelength__iter:7": 957743, + "route__drc_errors__iter:8": 4, + "route__wirelength__iter:8": 957732, + "route__drc_errors__iter:9": 4, + "route__wirelength__iter:9": 957732, + "route__drc_errors__iter:10": 4, + "route__wirelength__iter:10": 957732, + "route__drc_errors__iter:11": 1, + "route__wirelength__iter:11": 957732, + "route__drc_errors__iter:12": 0, + "route__wirelength__iter:12": 957733, "route__drc_errors": 0, - "route__wirelength": 956042, - "route__vias": 132519, - "route__vias__singlecut": 132519, + "route__wirelength": 957733, + "route__vias": 132618, + "route__vias__singlecut": 132618, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 41, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 48, - "drt__repair_antennas__iter_0__antenna_diodes_count": 442, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 749, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 955989, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 162, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 955776, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 131, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 955747, - "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 6, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 955720, - "drt__repair_antennas__iter_0__route__drc_errors__iter:5": 4, - "drt__repair_antennas__iter_0__route__wirelength__iter:5": 955720, - "drt__repair_antennas__iter_0__route__drc_errors__iter:6": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:6": 955727, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 39, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 45, + "drt__repair_antennas__iter_0__antenna_diodes_count": 293, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 1082, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 956738, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 407, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 956592, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 343, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 956548, + "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 22, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 956633, + "drt__repair_antennas__iter_0__route__drc_errors__iter:5": 1, + "drt__repair_antennas__iter_0__route__wirelength__iter:5": 956621, + "drt__repair_antennas__iter_0__route__drc_errors__iter:6": 1, + "drt__repair_antennas__iter_0__route__wirelength__iter:6": 956621, + "drt__repair_antennas__iter_0__route__drc_errors__iter:7": 1, + "drt__repair_antennas__iter_0__route__wirelength__iter:7": 956621, + "drt__repair_antennas__iter_0__route__drc_errors__iter:8": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:8": 956619, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 955727, - "drt__repair_antennas__iter_0__route__vias": 132846, - "drt__repair_antennas__iter_0__route__vias__singlecut": 132846, + "drt__repair_antennas__iter_0__route__wirelength": 956619, + "drt__repair_antennas__iter_0__route__vias": 132900, + "drt__repair_antennas__iter_0__route__vias__singlecut": 132900, "drt__repair_antennas__iter_0__route__vias__multicut": 0, "drt__repair_antennas__iter_0__antenna__violating__nets": 2, - "drt__repair_antennas__iter_0__antenna__violating__pins": 3, - "drt__repair_antennas__iter_1__antenna_diodes_count": 445, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 20, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 955739, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 955745, + "drt__repair_antennas__iter_0__antenna__violating__pins": 4, + "drt__repair_antennas__iter_1__antenna_diodes_count": 297, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 8, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 956688, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 956679, + "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 956679, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 955745, - "drt__repair_antennas__iter_1__route__vias": 132855, - "drt__repair_antennas__iter_1__route__vias__singlecut": 132855, + "drt__repair_antennas__iter_1__route__wirelength": 956679, + "drt__repair_antennas__iter_1__route__vias": 132910, + "drt__repair_antennas__iter_1__route__vias__singlecut": 132910, "drt__repair_antennas__iter_1__route__vias__multicut": 0, - "drt__repair_antennas__iter_1__antenna__violating__nets": 0, - "drt__repair_antennas__iter_1__antenna__violating__pins": 0, + "drt__repair_antennas__iter_1__antenna__violating__nets": 1, + "drt__repair_antennas__iter_1__antenna__violating__pins": 4, + "drt__repair_antennas__iter_2__antenna_diodes_count": 301, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 11, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 956695, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 2, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 956692, + "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 956692, + "drt__repair_antennas__iter_2__route__drc_errors": 0, + "drt__repair_antennas__iter_2__route__wirelength": 956692, + "drt__repair_antennas__iter_2__route__vias": 132919, + "drt__repair_antennas__iter_2__route__vias__singlecut": 132919, + "drt__repair_antennas__iter_2__route__vias__multicut": 0, + "drt__repair_antennas__iter_2__antenna__violating__nets": 0, + "drt__repair_antennas__iter_2__antenna__violating__pins": 0, "drt__antenna__violating__nets": 0, "drt__antenna__violating__pins": 0, "DRT::ANT::errors": "0", "design__violations": 0, "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "-0.5065912277501585", - "DRT::worst_slack_max": "-3.0107419631785644", - "DRT::tns_max": "-186.86758624962098", - "DRT::clock_skew": "2.6634939452320303", - "DRT::max_slew_slack": "-3.487891455491384", + "DRT::worst_slack_min": "-0.45996696642319107", + "DRT::worst_slack_max": "-2.9796326249703156", + "DRT::tns_max": "-169.04627864888963", + "DRT::clock_skew": "2.6606966272200716", + "DRT::max_slew_slack": "-4.364013175169626", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "0.1676710884303128", + "DRT::max_capacitance_slack": "-3.810565901203564", "DRT::clock_period": "15.155000", - "flow__warnings__count": 92, + "flow__warnings__count": 104, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/ibex_sky130hd.metrics_limits b/test/ibex_sky130hd.metrics_limits index 185e5444f13..8bd00cc458c 100644 --- a/test/ibex_sky130hd.metrics_limits +++ b/test/ibex_sky130hd.metrics_limits @@ -12,12 +12,12 @@ ,"RSZ::hold_buffer_count" : "387" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-2.022091227750159" - ,"DRT::worst_slack_max" : "-4.526241963178564" - ,"DRT::tns_max" : "-2565.5963862496214" - ,"DRT::clock_skew" : "3.196192734278436" - ,"DRT::max_slew_slack" : "-4.185469746589661" - ,"DRT::max_capacitance_slack" : "0" + ,"DRT::worst_slack_min" : "-1.9754669664231912" + ,"DRT::worst_slack_max" : "-4.495132624970315" + ,"DRT::tns_max" : "-2547.77507864889" + ,"DRT::clock_skew" : "3.192835952664086" + ,"DRT::max_slew_slack" : "-5.236815810203551" + ,"DRT::max_capacitance_slack" : "-4.572679081444277" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "15.155" ,"DRT::ANT::errors" : "0" diff --git a/test/jpeg_sky130hd.metrics b/test/jpeg_sky130hd.metrics index 6772f80f6b7..7dfc30b98f9 100644 --- a/test/jpeg_sky130hd.metrics +++ b/test/jpeg_sky130hd.metrics @@ -29,88 +29,108 @@ "DPL::design_area": "512281", "route__net": 57279, "route__net__special": 2, - "grt__antenna_diodes_count": 969, - "grt__antenna__violating__nets": 3, - "grt__antenna__violating__pins": 3, - "GRT::ANT::errors": "3", + "grt__antenna_diodes_count": 383, + "grt__antenna__violating__nets": 2, + "grt__antenna__violating__pins": 2, + "GRT::ANT::errors": "2", "route__net": 57279, "route__net__special": 2, - "route__drc_errors__iter:1": 7022, - "route__wirelength__iter:1": 1746599, - "route__drc_errors__iter:2": 1041, - "route__wirelength__iter:2": 1733682, - "route__drc_errors__iter:3": 624, - "route__wirelength__iter:3": 1732079, - "route__drc_errors__iter:4": 11, - "route__wirelength__iter:4": 1731993, + "route__drc_errors__iter:1": 7084, + "route__wirelength__iter:1": 1745722, + "route__drc_errors__iter:2": 1118, + "route__wirelength__iter:2": 1733428, + "route__drc_errors__iter:3": 677, + "route__wirelength__iter:3": 1731712, + "route__drc_errors__iter:4": 4, + "route__wirelength__iter:4": 1731402, "route__drc_errors__iter:5": 0, - "route__wirelength__iter:5": 1731992, + "route__wirelength__iter:5": 1731402, "route__drc_errors": 0, - "route__wirelength": 1731992, - "route__vias": 310157, - "route__vias__singlecut": 310157, + "route__wirelength": 1731402, + "route__vias": 310307, + "route__vias__singlecut": 310307, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 49, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 61, - "drt__repair_antennas__iter_0__antenna_diodes_count": 1096, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 841, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1733124, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 98, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1732823, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 70, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1732802, - "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1732806, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 66, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 89, + "drt__repair_antennas__iter_0__antenna_diodes_count": 571, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 1627, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1732947, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 510, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1732609, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 494, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1732516, + "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 19, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1732481, + "drt__repair_antennas__iter_0__route__drc_errors__iter:5": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:5": 1732473, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1732806, - "drt__repair_antennas__iter_0__route__vias": 310609, - "drt__repair_antennas__iter_0__route__vias__singlecut": 310609, + "drt__repair_antennas__iter_0__route__wirelength": 1732473, + "drt__repair_antennas__iter_0__route__vias": 310978, + "drt__repair_antennas__iter_0__route__vias__singlecut": 310978, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 4, - "drt__repair_antennas__iter_0__antenna__violating__pins": 5, - "drt__repair_antennas__iter_1__antenna_diodes_count": 1101, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 70, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1732789, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 1, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1732738, - "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 1, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1732738, + "drt__repair_antennas__iter_0__antenna__violating__nets": 10, + "drt__repair_antennas__iter_0__antenna__violating__pins": 16, + "drt__repair_antennas__iter_1__antenna_diodes_count": 588, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 163, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1732545, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 8, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1732478, + "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 3, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1732479, "drt__repair_antennas__iter_1__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:4": 1732739, + "drt__repair_antennas__iter_1__route__wirelength__iter:4": 1732479, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1732739, - "drt__repair_antennas__iter_1__route__vias": 310631, - "drt__repair_antennas__iter_1__route__vias__singlecut": 310631, + "drt__repair_antennas__iter_1__route__wirelength": 1732479, + "drt__repair_antennas__iter_1__route__vias": 311026, + "drt__repair_antennas__iter_1__route__vias__singlecut": 311026, "drt__repair_antennas__iter_1__route__vias__multicut": 0, - "drt__repair_antennas__iter_1__antenna__violating__nets": 1, - "drt__repair_antennas__iter_1__antenna__violating__pins": 1, - "drt__repair_antennas__iter_2__antenna_diodes_count": 1102, - "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 26, - "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1732786, - "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 0, - "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1732761, + "drt__repair_antennas__iter_1__antenna__violating__nets": 4, + "drt__repair_antennas__iter_1__antenna__violating__pins": 4, + "drt__repair_antennas__iter_2__antenna_diodes_count": 593, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 110, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1732535, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 4, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1732505, + "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 1, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1732504, + "drt__repair_antennas__iter_2__route__drc_errors__iter:4": 0, + "drt__repair_antennas__iter_2__route__wirelength__iter:4": 1732502, "drt__repair_antennas__iter_2__route__drc_errors": 0, - "drt__repair_antennas__iter_2__route__wirelength": 1732761, - "drt__repair_antennas__iter_2__route__vias": 310634, - "drt__repair_antennas__iter_2__route__vias__singlecut": 310634, + "drt__repair_antennas__iter_2__route__wirelength": 1732502, + "drt__repair_antennas__iter_2__route__vias": 311021, + "drt__repair_antennas__iter_2__route__vias__singlecut": 311021, "drt__repair_antennas__iter_2__route__vias__multicut": 0, - "drt__repair_antennas__iter_2__antenna__violating__nets": 0, - "drt__repair_antennas__iter_2__antenna__violating__pins": 0, + "drt__repair_antennas__iter_2__antenna__violating__nets": 2, + "drt__repair_antennas__iter_2__antenna__violating__pins": 2, + "drt__repair_antennas__iter_3__antenna_diodes_count": 595, + "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 111, + "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1732537, + "drt__repair_antennas__iter_3__route__drc_errors__iter:2": 5, + "drt__repair_antennas__iter_3__route__wirelength__iter:2": 1732512, + "drt__repair_antennas__iter_3__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_3__route__wirelength__iter:3": 1732512, + "drt__repair_antennas__iter_3__route__drc_errors": 0, + "drt__repair_antennas__iter_3__route__wirelength": 1732512, + "drt__repair_antennas__iter_3__route__vias": 311031, + "drt__repair_antennas__iter_3__route__vias__singlecut": 311031, + "drt__repair_antennas__iter_3__route__vias__multicut": 0, + "drt__repair_antennas__iter_3__antenna__violating__nets": 0, + "drt__repair_antennas__iter_3__antenna__violating__pins": 0, "drt__antenna__violating__nets": 0, "drt__antenna__violating__pins": 0, "DRT::ANT::errors": "0", "design__violations": 0, "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "-0.088321796820521", - "DRT::worst_slack_max": "-0.7905383238451821", - "DRT::tns_max": "-32.87254295147692", - "DRT::clock_skew": "0.5943281590647659", - "DRT::max_slew_slack": "-7.94659157594045", + "DRT::worst_slack_min": "-0.20850188832288483", + "DRT::worst_slack_max": "-0.678380038011817", + "DRT::tns_max": "-24.531705361455874", + "DRT::clock_skew": "0.5802225530933646", + "DRT::max_slew_slack": "-13.174853722254435", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-6.32495578424572", + "DRT::max_capacitance_slack": "-5.978689666391697", "DRT::clock_period": "8.000000", - "flow__warnings__count": 175, + "flow__warnings__count": 199, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/jpeg_sky130hd.metrics_limits b/test/jpeg_sky130hd.metrics_limits index 68ce3b65c30..5c8d8ba53ed 100644 --- a/test/jpeg_sky130hd.metrics_limits +++ b/test/jpeg_sky130hd.metrics_limits @@ -10,14 +10,14 @@ ,"RSZ::worst_slack_max" : "-0.7993951504790779" ,"RSZ::tns_max" : "-3650.720062172492" ,"RSZ::hold_buffer_count" : "112" - ,"GRT::ANT::errors" : "3" + ,"GRT::ANT::errors" : "2" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.888321796820521" - ,"DRT::worst_slack_max" : "-1.5905383238451822" - ,"DRT::tns_max" : "-3683.5925429514778" - ,"DRT::clock_skew" : "0.7131937908777191" - ,"DRT::max_slew_slack" : "-9.53590989112854" - ,"DRT::max_capacitance_slack" : "-7.589946941094864" + ,"DRT::worst_slack_min" : "-1.008501888322885" + ,"DRT::worst_slack_max" : "-1.478380038011817" + ,"DRT::tns_max" : "-3675.2517053614565" + ,"DRT::clock_skew" : "0.6962670637120375" + ,"DRT::max_slew_slack" : "-15.80982446670532" + ,"DRT::max_capacitance_slack" : "-7.174427599670036" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "8.0" ,"DRT::ANT::errors" : "0" From 460b4f8bc26fe918c35654a24155226fa6a1c475 Mon Sep 17 00:00:00 2001 From: luis201420 Date: Mon, 18 Nov 2024 21:02:13 +0000 Subject: [PATCH 22/22] drt: adding comment with a brief explanation about what is a jumper Signed-off-by: luis201420 --- src/drt/src/db/obj/frNet.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/drt/src/db/obj/frNet.h b/src/drt/src/db/obj/frNet.h index 54553cf51af..95b1d4ce284 100644 --- a/src/drt/src/db/obj/frNet.h +++ b/src/drt/src/db/obj/frNet.h @@ -274,7 +274,8 @@ class frNet : public frBlockObject bool hasInitialRouting_{false}; bool isFixed_{false}; - // Flag to mark when a frNet has a jumper + // Flag to mark when a frNet has a jumper, which is a special route guide used + // to prevent antenna violations bool has_jumpers_{false}; std::vector all_pinfigs_; };