From 96e47cc30f641ac83072afb0be5154719e466a0b Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 30 Apr 2025 17:33:33 +0000 Subject: [PATCH 01/41] gpl: enable the removal of filler gcells this allows for removing filler gcells instead of increasing density for area modifications Signed-off-by: Augusto Berndt --- src/gpl/src/graphics.cpp | 4 +- src/gpl/src/nesterovBase.cpp | 105 +++++++++++++++++++++++------------ src/gpl/src/nesterovBase.h | 16 +++--- src/gpl/src/placerBase.cpp | 2 +- src/gpl/src/placerBase.h | 2 +- src/gpl/src/routeBase.cpp | 9 ++- 6 files changed, 88 insertions(+), 50 deletions(-) diff --git a/src/gpl/src/graphics.cpp b/src/gpl/src/graphics.cpp index 74bfd5e8c8..07c47f0f18 100644 --- a/src/gpl/src/graphics.cpp +++ b/src/gpl/src/graphics.cpp @@ -319,7 +319,7 @@ void Graphics::reportSelected() if (!selected_) { return; } - logger_->report("Inst: {}", selected_->name()); + logger_->report("Inst: {}", selected_->getName()); if (np_) { auto wlCoeffX = np_->getWireLengthCoefX(); @@ -334,7 +334,7 @@ void Graphics::reportSelected() wlGrad.x, wlGrad.y, weight, - gPin->pin()->name()); + gPin->pin()->getName()); } FloatPoint wlGrad diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index dedf299c2c..97675eb762 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -88,7 +88,7 @@ void GCell::lock() } } -std::string GCell::name() const +std::string GCell::getName() const { if (insts_.empty()) { return "fill"; @@ -518,7 +518,7 @@ void GPin::print(utl::Logger* log) const } if (gCell_) { if (gCell_->isInstance()) { - log->report("GCell*: {}", gCell_->name()); + log->report("GCell*: {}", gCell_->getName()); } else { log->report("GCell of gpin is filler!"); } @@ -1246,7 +1246,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MinX updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->minExpSumX()); } } @@ -1262,7 +1262,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MaxX updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->maxExpSumX()); } } @@ -1278,7 +1278,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MinY updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->minExpSumY()); } } @@ -1294,7 +1294,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MaxY updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->maxExpSumY()); } } @@ -1334,7 +1334,7 @@ FloatPoint NesterovBaseCommon::getWireLengthGradientWA(const GCell* gCell, "getGradientWA", 1, "{}, gradient: {:g} {:g}", - gCell->name(), + gCell->getName(), gradientPair.x, gradientPair.y); } @@ -1858,22 +1858,20 @@ NesterovBase::~NesterovBase() = default; // gcell update void NesterovBase::updateGCellCenterLocation( - const std::vector& coordis) + const std::vector& coordis) { - for (auto& coordi : coordis) { - int idx = &coordi - &coordis[0]; - nb_gcells_[idx]->setCenterLocation(coordi.x, coordi.y); + for (int idx = 0; idx < coordis.size(); ++idx) { + nb_gcells_[idx]->setCenterLocation(coordis[idx].x, coordis[idx].y); } } void NesterovBase::updateGCellDensityCenterLocation( - const std::vector& coordis) + const std::vector& coordis) { - for (auto& coordi : coordis) { - int idx = &coordi - &coordis[0]; - nb_gcells_[idx]->setDensityCenterLocation(coordi.x, coordi.y); - } - bg_.updateBinsGCellDensityArea(nb_gcells_); +for (int idx = 0; idx < coordis.size(); ++idx) { + nb_gcells_[idx]->setDensityCenterLocation(coordis[idx].x, coordis[idx].y); +} +bg_.updateBinsGCellDensityArea(nb_gcells_); } void NesterovBase::setTargetDensity(float density) @@ -2904,7 +2902,7 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) "callbacks", 1, "warning: gcell {} found in db_inst_map_ as {}", - gcell->name(), + gcell->getName(), db_inst->getName()); } @@ -3031,7 +3029,8 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, nextCoordi_.emplace_back(); initCoordi_.emplace_back(); // check if snapshot has been saved already. - if (curSLPCoordi_.size() == snapshotCoordi_.size() + 1) { + if (curSLPCoordi_.size() == snapshotCoordi_.size() + 1) + { snapshotCoordi_.emplace_back(); snapshotSLPCoordi_.emplace_back(); snapshotSLPSumGrads_.emplace_back(); @@ -3144,7 +3143,7 @@ void NesterovBase::destroyCbkGCell(odb::dbInst* db_inst) "callbacks", 1, "warning: trying to destroy filler gcell!"); - destroyFillerGCell(handle.getIndex()); + destroyFillerGCell(handle.getStorageIndex()); } } else { @@ -3189,22 +3188,57 @@ std::pair NesterovBaseCommon::destroyCbkGCell( return replacement; } -// TODO to be implemented. -void NesterovBase::destroyFillerGCell(size_t index_remove) -{ - // size_t last_index = fillerStor_.size() - 1; - // if (index_remove > last_index) { - // log_->report("error: index {} out of bounds for fillerStor_ (max:{})", - // index_remove, - // last_index); - // return; - // } - // if (index_remove != last_index) { - // std::swap(fillerStor_[index_remove], fillerStor_[last_index]); - // } - // fillerStor_.pop_back(); +void NesterovBase::cutFillerCells(int64_t targetFillerArea) { + log_->report("totalFillerArea_: {}", totalFillerArea_); + log_->report("targetFillerArea: {}", targetFillerArea); + log_->report("number of fillers before removal: {}", fillerStor_.size()); + int removed_count = 0; + while (totalFillerArea_ > targetFillerArea && !fillerStor_.empty()) { + // TODO which filler to remove? closest to area change? how to do that? + for(int i = 0; i < nb_gcells_.size(); ++i) { + if(nb_gcells_[i]->isFiller()){ + destroyFillerGCell(i); + break; + } + } + + totalFillerArea_ -= fillerCellArea(); + ++removed_count; + } + log_->report("Filler cells removed to compansate for inflation: {}",removed_count); + log_->report("number of fillers after removal: {}", fillerStor_.size()); } +void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { + size_t stor_last_index = fillerStor_.size() - 1; + GCellHandle& gcell_remove = nb_gcells_[nb_index_remove]; + size_t stor_index_remove = gcell_remove.getStorageIndex(); + if(!gcell_remove->isFiller()){ + debugPrint(log_, GPL, "callbacks", 1,"trying to destroy filler, but gcell ({})is not filler!", + gcell_remove->getName()); + return; + } + if (stor_index_remove > stor_last_index) { + debugPrint(log_, GPL, "callbacks", 1,"destroy filler: index {} out of bounds for fillerStor_ (max:{})", + stor_index_remove, stor_last_index); + return; + } + + if (stor_index_remove != stor_last_index) { + std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); + } + fillerStor_.pop_back(); + + size_t nb_last_index = nb_gcells_.size() - 1; + if (nb_index_remove != nb_last_index) { + std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); + nb_gcells_[nb_index_remove].updateIndex(stor_index_remove); + } + swapAndPopParallelVectors(nb_index_remove, nb_last_index); + nb_gcells_.pop_back(); +} + + void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) { debugPrint(log_, GPL, "callbacks", 2, "NesterovBaseCommon::destroyGNet"); @@ -3328,7 +3362,8 @@ void NesterovBase::swapAndPopParallelVectors(size_t remove_index, swapAndPop(nextCoordi_, remove_index, last_index); swapAndPop(initCoordi_, remove_index, last_index); // Avoid modifying this if snapshot has not been saved yet. - if (curSLPCoordi_.size() == snapshotCoordi_.size()) { + // if (curSLPCoordi_.size() == snapshotCoordi_.size()) + { swapAndPop(snapshotCoordi_, remove_index, last_index); swapAndPop(snapshotSLPCoordi_, remove_index, last_index); swapAndPop(snapshotSLPSumGrads_, remove_index, last_index); diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 4b018b160f..fc687c99cf 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -57,7 +57,7 @@ class GCell const std::vector& insts() const { return insts_; } const std::vector& gPins() const { return gPins_; } - std::string name() const; + std::string getName() const; void addGPin(GPin* gPin); void clearGPins() { gPins_.clear(); } @@ -1206,10 +1206,10 @@ class biNormalParameters class GCellHandle { public: - GCellHandle(NesterovBaseCommon* nbc, size_t idx) : storage_(nbc), index_(idx) + GCellHandle(NesterovBaseCommon* nbc, size_t idx) : storage_(nbc), storage_index_(idx) { } - GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), index_(idx) {} + GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), storage_index_(idx) {} // Non-const versions GCell* operator->() { return &getGCell(); } @@ -1226,8 +1226,8 @@ class GCellHandle return std::holds_alternative(storage_); } - void updateIndex(size_t new_index) { index_ = new_index; } - size_t getIndex() const { return index_; } + void updateIndex(size_t new_index) { storage_index_ = new_index; } + size_t getStorageIndex() const { return storage_index_; } private: using StorageVariant = std::variant; @@ -1235,13 +1235,13 @@ class GCellHandle GCell& getGCell() const { if (std::holds_alternative(storage_)) { - return std::get(storage_)->getGCell(index_); + return std::get(storage_)->getGCell(storage_index_); } - return std::get(storage_)->getFillerGCell(index_); + return std::get(storage_)->getFillerGCell(storage_index_); } StorageVariant storage_; - size_t index_; + size_t storage_index_; }; inline bool isValidSigType(const odb::dbSigType& db_type) diff --git a/src/gpl/src/placerBase.cpp b/src/gpl/src/placerBase.cpp index 8afa793fdf..ed430e69bb 100644 --- a/src/gpl/src/placerBase.cpp +++ b/src/gpl/src/placerBase.cpp @@ -306,7 +306,7 @@ Pin::Pin(odb::dbBTerm* bTerm, utl::Logger* logger) : Pin() updateCoordi(bTerm, logger); } -std::string Pin::name() const +std::string Pin::getName() const { if (!term_) { return "DUMMY"; diff --git a/src/gpl/src/placerBase.h b/src/gpl/src/placerBase.h index 4c5081aa95..079d8222fe 100644 --- a/src/gpl/src/placerBase.h +++ b/src/gpl/src/placerBase.h @@ -155,7 +155,7 @@ class Pin Instance* instance() const { return inst_; } Net* net() const { return net_; } - std::string name() const; + std::string getName() const; void updateCoordi(odb::dbITerm* iTerm); diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 42b992bb0d..11062aaa87 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -674,10 +674,13 @@ std::pair RouteBase::routability() int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() + nbVec_[0]->totalFillerArea(); + nbVec_[0]->cutFillerCells(nbVec_[0]->totalFillerArea() - inflatedAreaDelta_); + + // newly set Density - nbVec_[0]->setTargetDensity( - static_cast(totalGCellArea) - / static_cast(nbVec_[0]->whiteSpaceArea())); + // nbVec_[0]->setTargetDensity( + // static_cast(totalGCellArea) + // / static_cast(nbVec_[0]->whiteSpaceArea())); // // max density detection or, From afc8b8ace6128ae18c16e60068ffd19407d9b520 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 5 May 2025 17:56:10 +0000 Subject: [PATCH 02/41] gpl: handle when inflation is larger than total filler area for filler removal Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 52 +++++++++++++++++++++++++---------- src/gpl/src/nesterovBase.h | 4 +-- src/gpl/src/nesterovPlace.cpp | 2 +- src/gpl/src/routeBase.cpp | 16 +++++------ 4 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 97675eb762..c99fb74f7a 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1829,7 +1829,7 @@ void NesterovBase::initFillerGCells() debugPrint( log_, GPL, "FillerInit", 1, "TotalFillerArea {}", totalFillerArea_); debugPrint(log_, GPL, "FillerInit", 1, "NumFillerCells {}", fillerCnt); - debugPrint(log_, GPL, "FillerInit", 1, "FillerCellArea {}", fillerCellArea()); + debugPrint(log_, GPL, "FillerInit", 1, "FillerCellArea {}", getFillerCellArea()); debugPrint( log_, GPL, "FillerInit", 1, "FillerCellSize {} {}", fillerDx_, fillerDy_); @@ -1933,7 +1933,7 @@ int NesterovBase::fillerCnt() const return static_cast(gCellFillers_.size()); } -int64_t NesterovBase::fillerCellArea() const +int64_t NesterovBase::getFillerCellArea() const { return static_cast(fillerDx_) * static_cast(fillerDy_); } @@ -1948,7 +1948,7 @@ int64_t NesterovBase::movableArea() const return movableArea_; } -int64_t NesterovBase::totalFillerArea() const +int64_t NesterovBase::getTotalFillerArea() const { return totalFillerArea_; } @@ -2040,7 +2040,7 @@ void NesterovBase::updateAreas() / static_cast(whiteSpaceArea_); if (totalFillerArea_ < 0) { - log_->error(GPL, + log_->warn(GPL, 303, "Consider increasing the target density or re-floorplanning " "with a larger core area.\n" @@ -2048,6 +2048,8 @@ void NesterovBase::updateAreas() "Suggested target density: {:.2f} (uniform density)", targetDensity_, uniformTargetDensity_); + log_->report("totalFillerArea_:{}", totalFillerArea_); + totalFillerArea_ = 0; } } @@ -3188,27 +3190,49 @@ std::pair NesterovBaseCommon::destroyCbkGCell( return replacement; } -void NesterovBase::cutFillerCells(int64_t targetFillerArea) { +void NesterovBase::cutFillerCells(int64_t inflationArea) { log_->report("totalFillerArea_: {}", totalFillerArea_); - log_->report("targetFillerArea: {}", targetFillerArea); + log_->report("inflationArea: {}", inflationArea); log_->report("number of fillers before removal: {}", fillerStor_.size()); + + int64_t availableFillerArea = totalFillerArea_; int removed_count = 0; - while (totalFillerArea_ > targetFillerArea && !fillerStor_.empty()) { - // TODO which filler to remove? closest to area change? how to do that? - for(int i = 0; i < nb_gcells_.size(); ++i) { - if(nb_gcells_[i]->isFiller()){ + + // Remove as many fillers as possible + while (availableFillerArea > 0 && inflationArea > 0 && !fillerStor_.empty()) { + for (int i = 0; i < nb_gcells_.size(); ++i) { + if (nb_gcells_[i]->isFiller()) { destroyFillerGCell(i); + availableFillerArea -= getFillerCellArea(); + inflationArea -= getFillerCellArea(); + ++removed_count; break; } } - - totalFillerArea_ -= fillerCellArea(); - ++removed_count; } - log_->report("Filler cells removed to compansate for inflation: {}",removed_count); + + totalFillerArea_ = availableFillerArea; + + log_->report("Filler cells removed to compensate for inflation: {}", removed_count); log_->report("number of fillers after removal: {}", fillerStor_.size()); + + if (getFillerCellArea() * fillerStor_.size() != totalFillerArea_) { + log_->warn(GPL, 312, + "Unexpected filler area! The value {}, and {}, should match.", + getFillerCellArea() * fillerStor_.size(), totalFillerArea_); + } + + // If inflation still remains, adjust density + if (inflationArea > 0) { + log_->report("No more fillers to remove, compensate area modification with more density."); + int64_t totalGCellArea = nesterovInstsArea() + totalFillerArea_ + inflationArea; + setTargetDensity(static_cast(totalGCellArea) / + static_cast(whiteSpaceArea())); + } } + + void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { size_t stor_last_index = fillerStor_.size() - 1; GCellHandle& gcell_remove = nb_gcells_[nb_index_remove]; diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index fc687c99cf..7ab4626877 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -937,10 +937,10 @@ class NesterovBase int fillerDx() const; int fillerDy() const; int fillerCnt() const; - int64_t fillerCellArea() const; + int64_t getFillerCellArea() const; int64_t whiteSpaceArea() const; int64_t movableArea() const; - int64_t totalFillerArea() const; + int64_t getTotalFillerArea() const; // update // fillerArea, whiteSpaceArea, movableArea diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index cbf0cd0b45..f118026577 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -470,7 +470,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) nesterov->setTargetDensity( static_cast(nbc_->getDeltaArea() + nesterov->nesterovInstsArea() - + nesterov->totalFillerArea()) + + nesterov->getTotalFillerArea()) / static_cast(nesterov->whiteSpaceArea())); float rsz_delta_area_microns diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 11062aaa87..149068a6a0 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -649,7 +649,7 @@ std::pair RouteBase::routability() if (inflatedAreaDelta_ > targetInflationDeltaAreaRatio * (nbVec_[0]->whiteSpaceArea() - (nbVec_[0]->nesterovInstsArea() - + nbVec_[0]->totalFillerArea()))) { + + nbVec_[0]->getTotalFillerArea()))) { // TODO dynamic inflation procedure? } @@ -672,9 +672,9 @@ std::pair RouteBase::routability() nbVec_[0]->targetDensity()); int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() - + nbVec_[0]->totalFillerArea(); + + nbVec_[0]->getTotalFillerArea(); - nbVec_[0]->cutFillerCells(nbVec_[0]->totalFillerArea() - inflatedAreaDelta_); + nbVec_[0]->cutFillerCells(inflatedAreaDelta_); // newly set Density @@ -729,9 +729,9 @@ std::pair RouteBase::routability() double prev_white_space_area = nbVec_[0]->whiteSpaceArea(); double prev_movable_area = nbVec_[0]->movableArea(); - double prev_total_filler_area = nbVec_[0]->totalFillerArea(); + double prev_total_filler_area = nbVec_[0]->getTotalFillerArea(); double prev_total_gcells_area - = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->totalFillerArea(); + = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->getTotalFillerArea(); double prev_expected_gcells_area = inflatedAreaDelta_ + prev_total_gcells_area; @@ -749,7 +749,7 @@ std::pair RouteBase::routability() nbVec_[0]->updateAreas(); double new_total_gcells_area - = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->totalFillerArea(); + = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->getTotalFillerArea(); double new_expected_gcells_area = inflatedAreaDelta_ + new_total_gcells_area; auto percentDiff = [](double old_value, double new_value) -> double { @@ -777,8 +777,8 @@ std::pair RouteBase::routability() 60, format_label_um2_with_delta, "Total filler area:", - block->dbuAreaToMicrons(nbVec_[0]->totalFillerArea()), - percentDiff(prev_total_filler_area, nbVec_[0]->totalFillerArea())); + block->dbuAreaToMicrons(nbVec_[0]->getTotalFillerArea()), + percentDiff(prev_total_filler_area, nbVec_[0]->getTotalFillerArea())); log_->info(GPL, 61, From 72b9c38bc350f56794e69e5ac8b1853228a3029b Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 6 May 2025 11:50:44 +0000 Subject: [PATCH 03/41] gpl: reduce max inflation from 6 to 4 Signed-off-by: Augusto Berndt --- src/gpl/include/gpl/Replace.h | 2 +- src/gpl/src/replace.cpp | 2 +- src/gpl/src/routeBase.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gpl/include/gpl/Replace.h b/src/gpl/include/gpl/Replace.h index cb73f8e250..22c5a36ea8 100644 --- a/src/gpl/include/gpl/Replace.h +++ b/src/gpl/include/gpl/Replace.h @@ -159,7 +159,7 @@ class Replace float routabilityMaxDensity_ = 0.99; float routabilityTargetRcMetric_ = 1.01; float routabilityInflationRatioCoef_ = 3; - float routabilityMaxInflationRatio_ = 6; + float routabilityMaxInflationRatio_ = 4; // routability RC metric coefficients float routabilityRcK1_ = 1.0; diff --git a/src/gpl/src/replace.cpp b/src/gpl/src/replace.cpp index 5e61283713..8d4b8e402b 100644 --- a/src/gpl/src/replace.cpp +++ b/src/gpl/src/replace.cpp @@ -80,7 +80,7 @@ void Replace::reset() routabilityMaxDensity_ = 0.99; routabilityTargetRcMetric_ = 1.01; routabilityInflationRatioCoef_ = 3; - routabilityMaxInflationRatio_ = 6; + routabilityMaxInflationRatio_ = 4; routabilityRcK1_ = routabilityRcK2_ = 1.0; routabilityRcK3_ = routabilityRcK4_ = 0.0; routabilityMaxInflationIter_ = 4; diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 149068a6a0..05315ec9e8 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -219,7 +219,7 @@ RouteBaseVars::RouteBaseVars() void RouteBaseVars::reset() { inflationRatioCoef = 3; - maxInflationRatio = 6; + maxInflationRatio = 4; maxDensity = 0.90; targetRC = 1.01; ignoreEdgeRatio = 0.8; From babcb241629ab3105e7767ecf90bb30229c895aa Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 6 May 2025 15:05:31 +0000 Subject: [PATCH 04/41] gpl: maintain previous max inflation Signed-off-by: Augusto Berndt --- src/gpl/include/gpl/Replace.h | 2 +- src/gpl/src/replace.cpp | 2 +- src/gpl/src/routeBase.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gpl/include/gpl/Replace.h b/src/gpl/include/gpl/Replace.h index 22c5a36ea8..cb73f8e250 100644 --- a/src/gpl/include/gpl/Replace.h +++ b/src/gpl/include/gpl/Replace.h @@ -159,7 +159,7 @@ class Replace float routabilityMaxDensity_ = 0.99; float routabilityTargetRcMetric_ = 1.01; float routabilityInflationRatioCoef_ = 3; - float routabilityMaxInflationRatio_ = 4; + float routabilityMaxInflationRatio_ = 6; // routability RC metric coefficients float routabilityRcK1_ = 1.0; diff --git a/src/gpl/src/replace.cpp b/src/gpl/src/replace.cpp index 8d4b8e402b..5e61283713 100644 --- a/src/gpl/src/replace.cpp +++ b/src/gpl/src/replace.cpp @@ -80,7 +80,7 @@ void Replace::reset() routabilityMaxDensity_ = 0.99; routabilityTargetRcMetric_ = 1.01; routabilityInflationRatioCoef_ = 3; - routabilityMaxInflationRatio_ = 4; + routabilityMaxInflationRatio_ = 6; routabilityRcK1_ = routabilityRcK2_ = 1.0; routabilityRcK3_ = routabilityRcK4_ = 0.0; routabilityMaxInflationIter_ = 4; diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 05315ec9e8..149068a6a0 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -219,7 +219,7 @@ RouteBaseVars::RouteBaseVars() void RouteBaseVars::reset() { inflationRatioCoef = 3; - maxInflationRatio = 4; + maxInflationRatio = 6; maxDensity = 0.90; targetRC = 1.01; ignoreEdgeRatio = 0.8; From 06d92fb615c80ea8a876e27c4174430c7c2c783c Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 14 May 2025 11:11:54 +0000 Subject: [PATCH 05/41] gpl: improve filler removal loop include more reports remove unecessary function Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 219 +++++++++++++++++++++-------------- src/gpl/src/nesterovBase.h | 8 +- src/gpl/src/routeBase.cpp | 14 +-- 3 files changed, 142 insertions(+), 99 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index c99fb74f7a..26df727c7d 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1688,6 +1688,7 @@ NesterovBase::NesterovBase(NesterovBaseVars nbVars, // virtual filler GCells void NesterovBase::initFillerGCells() { + dbBlock* block = pb_->db()->getChip()->getBlock(); // extract average dx/dy in range (10%, 90%) std::vector dxStor; std::vector dyStor; @@ -1821,17 +1822,50 @@ void NesterovBase::initFillerGCells() const int fillerCnt = static_cast( totalFillerArea_ / static_cast(fillerDx_ * fillerDy_)); - debugPrint(log_, GPL, "FillerInit", 1, "CoreArea {}", coreArea); - debugPrint( - log_, GPL, "FillerInit", 1, "nesterovInstsArea {}", nesterovInstanceArea); - debugPrint(log_, GPL, "FillerInit", 1, "WhiteSpaceArea {}", whiteSpaceArea_); - debugPrint(log_, GPL, "FillerInit", 1, "MovableArea {}", movableArea_); - debugPrint( - log_, GPL, "FillerInit", 1, "TotalFillerArea {}", totalFillerArea_); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "CoreArea {}", + block->dbuAreaToMicrons(coreArea)); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "nesterovInstsArea {}", + block->dbuAreaToMicrons(nesterovInstanceArea)); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "WhiteSpaceArea {}", + block->dbuAreaToMicrons(whiteSpaceArea_)); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "MovableArea {}", + block->dbuAreaToMicrons(movableArea_)); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "TotalFillerArea {}", + block->dbuAreaToMicrons(totalFillerArea_)); debugPrint(log_, GPL, "FillerInit", 1, "NumFillerCells {}", fillerCnt); - debugPrint(log_, GPL, "FillerInit", 1, "FillerCellArea {}", getFillerCellArea()); - debugPrint( - log_, GPL, "FillerInit", 1, "FillerCellSize {} {}", fillerDx_, fillerDy_); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "FillerCellArea {}", + block->dbuAreaToMicrons(getFillerCellArea())); + debugPrint(log_, + GPL, + "FillerInit", + 1, + "FillerCellSize {} {}", + block->dbuToMicrons(fillerDx_), + block->dbuToMicrons(fillerDy_)); // // mt19937 supports huge range of random values. @@ -1852,13 +1886,14 @@ void NesterovBase::initFillerGCells() fillerStor_.push_back(myGCell); } + totalFillerArea_ = fillerStor_.size() * getFillerCellArea(); } NesterovBase::~NesterovBase() = default; // gcell update void NesterovBase::updateGCellCenterLocation( - const std::vector& coordis) + const std::vector& coordis) { for (int idx = 0; idx < coordis.size(); ++idx) { nb_gcells_[idx]->setCenterLocation(coordis[idx].x, coordis[idx].y); @@ -1866,12 +1901,12 @@ void NesterovBase::updateGCellCenterLocation( } void NesterovBase::updateGCellDensityCenterLocation( - const std::vector& coordis) + const std::vector& coordis) { -for (int idx = 0; idx < coordis.size(); ++idx) { - nb_gcells_[idx]->setDensityCenterLocation(coordis[idx].x, coordis[idx].y); -} -bg_.updateBinsGCellDensityArea(nb_gcells_); + for (int idx = 0; idx < coordis.size(); ++idx) { + nb_gcells_[idx]->setDensityCenterLocation(coordis[idx].x, coordis[idx].y); + } + bg_.updateBinsGCellDensityArea(nb_gcells_); } void NesterovBase::setTargetDensity(float density) @@ -2041,15 +2076,15 @@ void NesterovBase::updateAreas() if (totalFillerArea_ < 0) { log_->warn(GPL, - 303, - "Consider increasing the target density or re-floorplanning " - "with a larger core area.\n" - "Given target density: {:.2f}\n" - "Suggested target density: {:.2f} (uniform density)", - targetDensity_, - uniformTargetDensity_); - log_->report("totalFillerArea_:{}", totalFillerArea_); - totalFillerArea_ = 0; + 303, + "Consider increasing the target density or re-floorplanning " + "with a larger core area.\n" + "Given target density: {:.2f}\n" + "Suggested target density: {:.2f} (uniform density)", + targetDensity_, + uniformTargetDensity_); + log_->report("totalFillerArea_:{}", totalFillerArea_); + totalFillerArea_ = 0; } } @@ -2711,27 +2746,6 @@ void NesterovBase::nesterovAdjustPhi() } } -void NesterovBase::cutFillerCoordinates() -{ - curSLPCoordi_.resize(fillerCnt()); - curSLPWireLengthGrads_.resize(fillerCnt()); - curSLPDensityGrads_.resize(fillerCnt()); - curSLPSumGrads_.resize(fillerCnt()); - - nextSLPCoordi_.resize(fillerCnt()); - nextSLPWireLengthGrads_.resize(fillerCnt()); - nextSLPDensityGrads_.resize(fillerCnt()); - nextSLPSumGrads_.resize(fillerCnt()); - - prevSLPCoordi_.resize(fillerCnt()); - prevSLPWireLengthGrads_.resize(fillerCnt()); - prevSLPDensityGrads_.resize(fillerCnt()); - prevSLPSumGrads_.resize(fillerCnt()); - - curCoordi_.resize(fillerCnt()); - nextCoordi_.resize(fillerCnt()); -} - void NesterovBase::snapshot() { if (isConverged_) { @@ -3031,8 +3045,7 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, nextCoordi_.emplace_back(); initCoordi_.emplace_back(); // check if snapshot has been saved already. - if (curSLPCoordi_.size() == snapshotCoordi_.size() + 1) - { + if (curSLPCoordi_.size() == snapshotCoordi_.size() + 1) { snapshotCoordi_.emplace_back(); snapshotSLPCoordi_.emplace_back(); snapshotSLPSumGrads_.emplace_back(); @@ -3190,67 +3203,96 @@ std::pair NesterovBaseCommon::destroyCbkGCell( return replacement; } -void NesterovBase::cutFillerCells(int64_t inflationArea) { - log_->report("totalFillerArea_: {}", totalFillerArea_); - log_->report("inflationArea: {}", inflationArea); - log_->report("number of fillers before removal: {}", fillerStor_.size()); - - int64_t availableFillerArea = totalFillerArea_; +void NesterovBase::cutFillerCells(int64_t inflationArea) +{ + dbBlock* block = pb_->db()->getChip()->getBlock(); int removed_count = 0; - - // Remove as many fillers as possible - while (availableFillerArea > 0 && inflationArea > 0 && !fillerStor_.empty()) { - for (int i = 0; i < nb_gcells_.size(); ++i) { - if (nb_gcells_[i]->isFiller()) { - destroyFillerGCell(i); - availableFillerArea -= getFillerCellArea(); - inflationArea -= getFillerCellArea(); - ++removed_count; - break; - } + const int64_t fillerArea = getFillerCellArea(); + const int64_t maxFillersToRemove = std::min( + inflationArea / fillerArea, static_cast(fillerStor_.size())); + log_->report("totalFillerArea_: {}", + block->dbuAreaToMicrons(totalFillerArea_)); + log_->report("inflationArea: {}", block->dbuAreaToMicrons(inflationArea)); + log_->report("number of fillers before removal: {}", fillerStor_.size()); + log_->report("filler area: {}", block->dbuAreaToMicrons(fillerArea)); + + int64_t availableFillerArea = fillerArea * fillerStor_.size(); + int64_t originalInflationArea = inflationArea; + + for (int i = 0; i < nb_gcells_.size() && removed_count < maxFillersToRemove; + ++i) { + if (nb_gcells_[i]->isFiller()) { + destroyFillerGCell(i); + availableFillerArea -= fillerArea; + inflationArea -= fillerArea; + ++removed_count; } } totalFillerArea_ = availableFillerArea; - log_->report("Filler cells removed to compensate for inflation: {}", removed_count); + if (fillerArea * fillerStor_.size() != totalFillerArea_) { + log_->warn(GPL, + 312, + "Unexpected filler area! The value {}, should be equal to " + "totalFillerArea_ {}.", + block->dbuAreaToMicrons(fillerArea * fillerStor_.size()), + block->dbuAreaToMicrons(totalFillerArea_)); + } + + log_->report("Filler cells removed to compensate for inflation: {}", + removed_count); log_->report("number of fillers after removal: {}", fillerStor_.size()); - if (getFillerCellArea() * fillerStor_.size() != totalFillerArea_) { - log_->warn(GPL, 312, - "Unexpected filler area! The value {}, and {}, should match.", - getFillerCellArea() * fillerStor_.size(), totalFillerArea_); - } + int64_t removedFillerArea = fillerArea * removed_count; + int64_t remainingInflationArea = originalInflationArea - removedFillerArea; + + log_->report("Area removed by fillers: {}", + block->dbuAreaToMicrons(removedFillerArea)); + log_->report( + "Remaining inflation area to be compensated by modifying density: {}", + block->dbuAreaToMicrons(remainingInflationArea)); - // If inflation still remains, adjust density - if (inflationArea > 0) { - log_->report("No more fillers to remove, compensate area modification with more density."); - int64_t totalGCellArea = nesterovInstsArea() + totalFillerArea_ + inflationArea; - setTargetDensity(static_cast(totalGCellArea) / - static_cast(whiteSpaceArea())); + if (remainingInflationArea > 0) { + if (fillerStor_.empty()) { + log_->report("Not enough fillers to fully compensate inflation."); + } + int64_t totalGCellArea + = nesterovInstsArea() + totalFillerArea_ + remainingInflationArea; + setTargetDensity(static_cast(totalGCellArea) + / static_cast(whiteSpaceArea())); } } - - -void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { +void NesterovBase::destroyFillerGCell(size_t nb_index_remove) +{ size_t stor_last_index = fillerStor_.size() - 1; GCellHandle& gcell_remove = nb_gcells_[nb_index_remove]; size_t stor_index_remove = gcell_remove.getStorageIndex(); - if(!gcell_remove->isFiller()){ - debugPrint(log_, GPL, "callbacks", 1,"trying to destroy filler, but gcell ({})is not filler!", - gcell_remove->getName()); + if (!gcell_remove->isFiller()) { + debugPrint(log_, + GPL, + "callbacks", + 1, + "trying to destroy filler, but gcell ({})is not filler!", + gcell_remove->getName()); return; } if (stor_index_remove > stor_last_index) { - debugPrint(log_, GPL, "callbacks", 1,"destroy filler: index {} out of bounds for fillerStor_ (max:{})", - stor_index_remove, stor_last_index); + debugPrint( + log_, + GPL, + "callbacks", + 1, + "destroy filler: index {} out of bounds for fillerStor_ (max:{})", + stor_index_remove, + stor_last_index); return; - } + } if (stor_index_remove != stor_last_index) { std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); - } + } fillerStor_.pop_back(); size_t nb_last_index = nb_gcells_.size() - 1; @@ -3262,7 +3304,6 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { nb_gcells_.pop_back(); } - void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) { debugPrint(log_, GPL, "callbacks", 2, "NesterovBaseCommon::destroyGNet"); @@ -3386,7 +3427,7 @@ void NesterovBase::swapAndPopParallelVectors(size_t remove_index, swapAndPop(nextCoordi_, remove_index, last_index); swapAndPop(initCoordi_, remove_index, last_index); // Avoid modifying this if snapshot has not been saved yet. - // if (curSLPCoordi_.size() == snapshotCoordi_.size()) + // if (curSLPCoordi_.size() == snapshotCoordi_.size()) { swapAndPop(snapshotCoordi_, remove_index, last_index); swapAndPop(snapshotSLPCoordi_, remove_index, last_index); diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 7ab4626877..1f86127982 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -1041,7 +1041,6 @@ class NesterovBase void updateNextIter(int iter); void setTrueReprintIterHeader() { reprint_iter_header = true; } float getPhiCoef(float scaledDiffHpwl) const; - void cutFillerCoordinates(); void snapshot(); @@ -1206,10 +1205,13 @@ class biNormalParameters class GCellHandle { public: - GCellHandle(NesterovBaseCommon* nbc, size_t idx) : storage_(nbc), storage_index_(idx) + GCellHandle(NesterovBaseCommon* nbc, size_t idx) + : storage_(nbc), storage_index_(idx) + { + } + GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), storage_index_(idx) { } - GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), storage_index_(idx) {} // Non-const versions GCell* operator->() { return &getGCell(); } diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 149068a6a0..defa6dee65 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -676,7 +676,6 @@ std::pair RouteBase::routability() nbVec_[0]->cutFillerCells(inflatedAreaDelta_); - // newly set Density // nbVec_[0]->setTargetDensity( // static_cast(totalGCellArea) @@ -773,12 +772,13 @@ std::pair RouteBase::routability() block->dbuAreaToMicrons(nbVec_[0]->movableArea()), percentDiff(prev_movable_area, nbVec_[0]->movableArea())); - log_->info(GPL, - 60, - format_label_um2_with_delta, - "Total filler area:", - block->dbuAreaToMicrons(nbVec_[0]->getTotalFillerArea()), - percentDiff(prev_total_filler_area, nbVec_[0]->getTotalFillerArea())); + log_->info( + GPL, + 60, + format_label_um2_with_delta, + "Total filler area:", + block->dbuAreaToMicrons(nbVec_[0]->getTotalFillerArea()), + percentDiff(prev_total_filler_area, nbVec_[0]->getTotalFillerArea())); log_->info(GPL, 61, From e3d359dc2375f5df4920849ec0c7cd7084640141 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 14 May 2025 12:00:17 +0000 Subject: [PATCH 06/41] gpl: loop backwards when removing fillers Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 26df727c7d..43c7d08c44 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3219,8 +3219,7 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) int64_t availableFillerArea = fillerArea * fillerStor_.size(); int64_t originalInflationArea = inflationArea; - for (int i = 0; i < nb_gcells_.size() && removed_count < maxFillersToRemove; - ++i) { + for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < maxFillersToRemove; --i) { if (nb_gcells_[i]->isFiller()) { destroyFillerGCell(i); availableFillerArea -= fillerArea; @@ -3228,6 +3227,7 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) ++removed_count; } } + totalFillerArea_ = availableFillerArea; @@ -3258,7 +3258,7 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) log_->report("Not enough fillers to fully compensate inflation."); } int64_t totalGCellArea - = nesterovInstsArea() + totalFillerArea_ + remainingInflationArea; + = nesterovInstsArea() + removedFillerArea + totalFillerArea_ + remainingInflationArea; setTargetDensity(static_cast(totalGCellArea) / static_cast(whiteSpaceArea())); } From 279799bde61baa8ab5e741a3dc7bfee76cc8fa26 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 14 May 2025 17:40:45 +0000 Subject: [PATCH 07/41] gpl: make timing driven also remove fillers Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 16 ++++++++++++++++ src/gpl/src/nesterovPlace.cpp | 31 ++++++++++++++++++++++++++----- src/gpl/src/routeBase.cpp | 20 ++++++++++---------- 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 43c7d08c44..def5275669 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3206,6 +3206,11 @@ std::pair NesterovBaseCommon::destroyCbkGCell( void NesterovBase::cutFillerCells(int64_t inflationArea) { dbBlock* block = pb_->db()->getChip()->getBlock(); + if(inflationArea < 0) { + log_->warn(GPL,313, "Negative area provided to remove fillers: {}. Expected positive value, ignoring.", block->dbuAreaToMicrons(inflationArea)); + return; + } + int removed_count = 0; const int64_t fillerArea = getFillerCellArea(); const int64_t maxFillersToRemove = std::min( @@ -3261,6 +3266,17 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) = nesterovInstsArea() + removedFillerArea + totalFillerArea_ + remainingInflationArea; setTargetDensity(static_cast(totalGCellArea) / static_cast(whiteSpaceArea())); + +float newTargetDensity = static_cast(totalGCellArea) + / static_cast(whiteSpaceArea()); +log_->report("Density update breakdown:"); +log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(nesterovInstsArea())); +log_->report(" removedFillerArea: {}", block->dbuAreaToMicrons(removedFillerArea)); +log_->report(" remaining fillers area (totalFillerArea_): {}", block->dbuAreaToMicrons(totalFillerArea_)); +log_->report(" remainingInflationArea: {}", block->dbuAreaToMicrons(remainingInflationArea)); +log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(whiteSpaceArea())); +log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); +log_->report(" New target density: {}", newTargetDensity); } } diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index f118026577..9dbcd7e9d5 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -467,11 +467,32 @@ int NesterovPlace::doNesterovPlace(int start_iter) // 3. updateareas // 4. updateDensitySize - nesterov->setTargetDensity( - static_cast(nbc_->getDeltaArea() - + nesterov->nesterovInstsArea() - + nesterov->getTotalFillerArea()) - / static_cast(nesterov->whiteSpaceArea())); + // nesterov->setTargetDensity( + // static_cast(nbc_->getDeltaArea() + // + nesterov->nesterovInstsArea() + // + nesterov->getTotalFillerArea()) + // / static_cast(nesterov->whiteSpaceArea())); + + +int64_t deltaArea = nbc_->getDeltaArea(); +int64_t instArea = nesterov->nesterovInstsArea(); +int64_t fillerArea = nesterov->getTotalFillerArea(); +int64_t wsArea = nesterov->whiteSpaceArea(); + +int64_t totalGCellArea = deltaArea + instArea + fillerArea; +float newTargetDensity = static_cast(totalGCellArea) + / static_cast(wsArea); + +log_->report("Density update breakdown (original method):"); +log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); +log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); +log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); +log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); +log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); +log_->report(" New target density: {}", newTargetDensity); + + + nesterov->cutFillerCells(nbc_->getDeltaArea()); float rsz_delta_area_microns = block->dbuAreaToMicrons(nbc_->getDeltaArea()); diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index defa6dee65..1f9595b815 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -671,11 +671,19 @@ std::pair RouteBase::routability() "Placement target density:", nbVec_[0]->targetDensity()); - int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() - + nbVec_[0]->getTotalFillerArea(); + double prev_white_space_area = nbVec_[0]->whiteSpaceArea(); + double prev_movable_area = nbVec_[0]->movableArea(); + double prev_total_filler_area = nbVec_[0]->getTotalFillerArea(); + double prev_total_gcells_area + = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->getTotalFillerArea(); + double prev_expected_gcells_area + = inflatedAreaDelta_ + prev_total_gcells_area; nbVec_[0]->cutFillerCells(inflatedAreaDelta_); + + // int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() + // + nbVec_[0]->getTotalFillerArea(); // newly set Density // nbVec_[0]->setTargetDensity( // static_cast(totalGCellArea) @@ -726,14 +734,6 @@ std::pair RouteBase::routability() return std::make_pair(false, true); } - double prev_white_space_area = nbVec_[0]->whiteSpaceArea(); - double prev_movable_area = nbVec_[0]->movableArea(); - double prev_total_filler_area = nbVec_[0]->getTotalFillerArea(); - double prev_total_gcells_area - = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->getTotalFillerArea(); - double prev_expected_gcells_area - = inflatedAreaDelta_ + prev_total_gcells_area; - // cut filler cells accordingly // if( nb_->totalFillerArea() > inflatedAreaDelta_ ) { // nb_->cutFillerCells( nb_->totalFillerArea() - inflatedAreaDelta_ ); From 9f0c4c06a479a2abe71e8da4e6b434dfca7069f4 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 20 May 2025 15:25:44 +0000 Subject: [PATCH 08/41] gpl: enable restoring filler gcells when reverting to minimal routing congestion observed during routability iterations Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 103 ++++++++++++++++++---------------- src/gpl/src/nesterovBase.h | 82 ++++++++++++++++++++++++--- src/gpl/src/nesterovPlace.cpp | 1 + src/gpl/src/routeBase.cpp | 5 +- 4 files changed, 136 insertions(+), 55 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 0226b9531a..f25d4ad6e2 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1494,14 +1494,24 @@ void NesterovBaseCommon::revertGCellSizeToMinRc() } } -GCell* NesterovBaseCommon::getGCellByIndex(size_t i) -{ - if (i >= gCellStor_.size()) { +// GCell* NesterovBaseCommon::getGCellByIndex(size_t i) +// { +// if (i >= gCellStor_.size()) { +// return nullptr; +// } +// return &gCellStor_[i]; +// } + +GCell* NesterovBaseCommon::getGCellByIndex(size_t idx) +{ + if (idx >= gCellStor_.size()) { + log_->error(GPL, 315, "getGCellByIndex out of bounds: idx = {}, size = {}", idx, gCellStor_.size()); return nullptr; } - return &gCellStor_[i]; + return &gCellStor_[idx]; } + // fixPointers() member functions assumes there was push_backs to storage // vectors, invalidating them. This function resets the pointers and maintain // consistency among parallel vectors. Most of the code here is based on @@ -2087,7 +2097,12 @@ void NesterovBase::updateAreas() // bloating can change the following : // stdInstsArea and macroInstsArea stdInstsArea_ = macroInstsArea_ = 0; + // int i =0; + // log_->report("updateAreas(), nb_gcells_.size(): {}", nb_gcells_.size()); + // log_->report("updateAreas(), fillerStor_.size(): {}", fillerStor_.size()); for (auto it = nb_gcells_.begin(); it < nb_gcells_.end(); ++it) { + // if(print) + // log_->report("{}",++i); auto& gCell = *it; // old-style loop for old OpenMP if (!gCell) { continue; @@ -2106,19 +2121,19 @@ void NesterovBase::updateAreas() movableArea_ = whiteSpaceArea_ * targetDensity_; totalFillerArea_ = movableArea_ - nesterovInstsArea(); - uniformTargetDensity_ = static_cast(nesterovInstsArea()) - / static_cast(whiteSpaceArea_); + // uniformTargetDensity_ = static_cast(nesterovInstsArea()) + // / static_cast(whiteSpaceArea_); if (totalFillerArea_ < 0) { - log_->warn(GPL, - 303, - "Consider increasing the target density or re-floorplanning " - "with a larger core area.\n" - "Given target density: {:.2f}\n" - "Suggested target density: {:.2f} (uniform density)", - targetDensity_, - uniformTargetDensity_); - log_->report("totalFillerArea_:{}", totalFillerArea_); + // log_->warn(GPL, + // 303, + // "Consider increasing the target density or re-floorplanning " + // "with a larger core area.\n" + // "Given target density: {:.2f}\n" + // "Suggested target density: {:.2f} (uniform density)", + // targetDensity_, + // uniformTargetDensity_); + log_->report("No more filler cells to remove (empty space), density is being modified to compensate for area modification. Desired filler area to be removed:{}", totalFillerArea_); totalFillerArea_ = 0; } } @@ -3059,30 +3074,11 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) if (gcell != nullptr) { new_instances.push_back(db_inst); nb_gcells_.emplace_back(nbc_.get(), stor_index); + log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); + log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); size_t gcells_index = nb_gcells_.size() - 1; db_inst_to_nb_index_map_[db_inst] = gcells_index; - - curSLPCoordi_.emplace_back(); - curSLPWireLengthGrads_.emplace_back(); - curSLPDensityGrads_.emplace_back(); - curSLPSumGrads_.emplace_back(); - nextSLPCoordi_.emplace_back(); - nextSLPWireLengthGrads_.emplace_back(); - nextSLPDensityGrads_.emplace_back(); - nextSLPSumGrads_.emplace_back(); - prevSLPCoordi_.emplace_back(); - prevSLPWireLengthGrads_.emplace_back(); - prevSLPDensityGrads_.emplace_back(); - prevSLPSumGrads_.emplace_back(); - curCoordi_.emplace_back(); - nextCoordi_.emplace_back(); - initCoordi_.emplace_back(); - // check if snapshot has been saved already. - if (curSLPCoordi_.size() == snapshotCoordi_.size() + 1) { - snapshotCoordi_.emplace_back(); - snapshotSLPCoordi_.emplace_back(); - snapshotSLPSumGrads_.emplace_back(); - } + appendParallelVectors(); } else { debugPrint(log_, @@ -3186,7 +3182,7 @@ void NesterovBase::destroyCbkGCell(odb::dbInst* db_inst) if (replacer.first != nullptr) { auto it = db_inst_to_nb_index_map_.find(replacer.first); if (it != db_inst_to_nb_index_map_.end()) { - nb_gcells_[it->second].updateIndex(replacer.second); + nb_gcells_[it->second].updateHandle(nbc_.get(), replacer.second); } else { debugPrint(log_, GPL, @@ -3266,6 +3262,8 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < maxFillersToRemove; --i) { if (nb_gcells_[i]->isFiller()) { + const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; + removed_fillers_.push_back(removed); destroyFillerGCell(i); availableFillerArea -= fillerArea; inflationArea -= fillerArea; @@ -3273,7 +3271,6 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) } } - totalFillerArea_ = availableFillerArea; if (fillerArea * fillerStor_.size() != totalFillerArea_) { @@ -3330,7 +3327,7 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) GPL, "callbacks", 1, - "trying to destroy filler, but gcell ({})is not filler!", + "trying to destroy filler, but gcell ({}) is not filler!", gcell_remove->getName()); return; } @@ -3353,8 +3350,19 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) size_t nb_last_index = nb_gcells_.size() - 1; if (nb_index_remove != nb_last_index) { + bool is_replacer_filler = nb_gcells_[nb_last_index]->isFiller(); + size_t replacer_stor_index = 0; + if (!is_replacer_filler) { + replacer_stor_index = nb_gcells_[nb_last_index].getStorageIndex(); + } + std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); - nb_gcells_[nb_index_remove].updateIndex(stor_index_remove); + + if(is_replacer_filler) { + nb_gcells_[nb_index_remove].updateHandle(this, stor_index_remove); + } else { + nb_gcells_[nb_index_remove].updateHandle(nbc_.get(), replacer_stor_index); + } } swapAndPopParallelVectors(nb_index_remove, nb_last_index); nb_gcells_.pop_back(); @@ -3467,6 +3475,13 @@ void NesterovBase::swapAndPopParallelVectors(size_t remove_index, "last_index {}", remove_index, last_index); + + // Avoid modifying this if snapshot has not been saved yet. + if (curSLPCoordi_.size() == snapshotCoordi_.size()) { + swapAndPop(snapshotCoordi_, remove_index, last_index); + swapAndPop(snapshotSLPCoordi_, remove_index, last_index); + swapAndPop(snapshotSLPSumGrads_, remove_index, last_index); + } swapAndPop(curSLPCoordi_, remove_index, last_index); swapAndPop(curSLPWireLengthGrads_, remove_index, last_index); swapAndPop(curSLPDensityGrads_, remove_index, last_index); @@ -3482,12 +3497,6 @@ void NesterovBase::swapAndPopParallelVectors(size_t remove_index, swapAndPop(curCoordi_, remove_index, last_index); swapAndPop(nextCoordi_, remove_index, last_index); swapAndPop(initCoordi_, remove_index, last_index); - // Avoid modifying this if snapshot has not been saved yet. - if (curSLPCoordi_.size() - 1 == snapshotCoordi_.size()) { - swapAndPop(snapshotCoordi_, remove_index, last_index); - swapAndPop(snapshotSLPCoordi_, remove_index, last_index); - swapAndPop(snapshotSLPSumGrads_, remove_index, last_index); - } } void NesterovBaseCommon::printGCells() diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 9a4ff609ea..3e70f726bc 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -843,7 +843,16 @@ class NesterovBaseCommon void updateMinRcCellSize(); void revertGCellSizeToMinRc(); - GCell& getGCell(size_t index) { return gCellStor_[index]; } + GCell& getGCell(size_t index) { + if (index >= gCellStor_.size()) { + log_->error(utl::GPL, + 316, + "getGCell: index {} out of bounds (gCellStor_.size() = {}).", + index, + gCellStor_.size()); + } + return gCellStor_[index]; + } size_t getGCellIndex(const GCell* gCell) const { @@ -911,7 +920,17 @@ class NesterovBase utl::Logger* log); ~NesterovBase(); - GCell& getFillerGCell(size_t index) { return fillerStor_[index]; } + GCell& getFillerGCell(size_t index) { + if (index >= fillerStor_.size()) { + log_->error(utl::GPL, + 314, + "getFillerGCell: index {} out of bounds (fillerStor_.size() = {}).", + index, + fillerStor_.size()); + } + return fillerStor_[index]; + } + const std::vector& getGCells() const { return nb_gcells_; } @@ -1070,15 +1089,31 @@ class NesterovBase bool isDiverged() const { return isDiverged_; } void createCbkGCell(odb::dbInst* db_inst, size_t stor_index); - void destroyCbkGCell(odb::dbInst* db_inst); - void destroyFillerGCell(size_t index_remove); + void destroyCbkGCell(odb::dbInst* db_inst); - // Resets all pointers to storages of gcells, gpins, and gnets. - void fixPointers(std::vector new_gcells); // Must be called after fixPointers() to initialize internal values of gcells, // including parallel vectors. void updateGCellState(float wlCoeffX, float wlCoeffY); + + void destroyFillerGCell(size_t index_remove); + void restoreRemovedFillers() { + log_->report("restoring removed fillers: {}", removed_fillers_.size()); + while (!removed_fillers_.empty()) { + GCell gcellCopy = removed_fillers_.back(); + removed_fillers_.pop_back(); + + fillerStor_.push_back(gcellCopy); + size_t new_index = fillerStor_.size() - 1; + nb_gcells_.emplace_back(this, new_index); + appendParallelVectors(); + totalFillerArea_ += getFillerCellArea(); + } + log_->report("fillerStor_.size(): {}", fillerStor_.size()); + } + void clearRemovedFillers() { removed_fillers_.clear(); + } + private: NesterovBaseVars nbVars_; std::shared_ptr pb_; @@ -1149,6 +1184,29 @@ class NesterovBase size_t remove_index, size_t last_index); void swapAndPopParallelVectors(size_t remove_index, size_t last_index); + void appendParallelVectors() { + // log_->report("curSLPCoordi_.size(): {}, snapshotCoordi_.size(): {}",curSLPCoordi_.size(), snapshotCoordi_.size()); + if (curSLPCoordi_.size() == snapshotCoordi_.size()) { + snapshotCoordi_.emplace_back(); + snapshotSLPCoordi_.emplace_back(); + snapshotSLPSumGrads_.emplace_back(); + } + curSLPCoordi_.emplace_back(); + curSLPWireLengthGrads_.emplace_back(); + curSLPDensityGrads_.emplace_back(); + curSLPSumGrads_.emplace_back(); + nextSLPCoordi_.emplace_back(); + nextSLPWireLengthGrads_.emplace_back(); + nextSLPDensityGrads_.emplace_back(); + nextSLPSumGrads_.emplace_back(); + prevSLPCoordi_.emplace_back(); + prevSLPWireLengthGrads_.emplace_back(); + prevSLPDensityGrads_.emplace_back(); + prevSLPSumGrads_.emplace_back(); + curCoordi_.emplace_back(); + nextCoordi_.emplace_back(); + initCoordi_.emplace_back(); + } float wireLengthGradSum_ = 0; float densityGradSum_ = 0; @@ -1183,6 +1241,7 @@ class NesterovBase bool reprint_iter_header; void initFillerGCells(); + std::vector removed_fillers_; }; inline std::vector& NesterovBase::bins() @@ -1229,7 +1288,16 @@ class GCellHandle return std::holds_alternative(storage_); } - void updateIndex(size_t new_index) { storage_index_ = new_index; } + void updateHandle(NesterovBaseCommon* nbc, size_t new_index) { + storage_ = nbc; + storage_index_ = new_index; + } + + void updateHandle(NesterovBase* nb, size_t new_index) { + storage_ = nb; + storage_index_ = new_index; + } + size_t getStorageIndex() const { return storage_index_; } private: diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index ba8223158f..9c6f4145f7 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -670,6 +670,7 @@ log_->report(" New target density: {}", newTargetDensity); // recover the densityPenalty values // if further routability-driven is needed std::pair result = rb_->routability(); + nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); is_routability_need_ = result.first; bool isRevertInitNeeded = result.second; diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 32924f0dcc..5daff4e68c 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -562,6 +562,7 @@ std::pair RouteBase::routability() minRc_ = curRc; minRcTargetDensity_ = nbVec_[0]->targetDensity(); minRcViolatedCnt_ = 0; + nbVec_[0]->clearRemovedFillers(); // save cell size info nbc_->updateMinRcCellSize(); @@ -677,7 +678,6 @@ std::pair RouteBase::routability() // int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() // + nbVec_[0]->getTotalFillerArea(); - // newly set Density // nbVec_[0]->setTargetDensity( // static_cast(totalGCellArea) // / static_cast(nbVec_[0]->whiteSpaceArea())); @@ -721,8 +721,11 @@ std::pair RouteBase::routability() nbVec_[0]->setTargetDensity(minRcTargetDensity_); nbc_->revertGCellSizeToMinRc(); + nbVec_[0]->restoreRemovedFillers(); nbVec_[0]->updateDensitySize(); resetRoutabilityResources(); + // nbc_->fixPointers(); + return std::make_pair(false, true); } From 02eea129d63df00757fe3c697bcfed2c3985ba41 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Thu, 22 May 2025 14:37:39 +0000 Subject: [PATCH 09/41] gpl: fix issue when restoring filler gcells the issue was that multiple filler gcells were restored to the origin and moving together as a cluster, making a whole of empty space Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 204 ++++++++++++++++++++++------------ src/gpl/src/nesterovBase.h | 88 +++++++++++++-- src/gpl/src/nesterovPlace.cpp | 6 +- src/gpl/src/routeBase.cpp | 3 + 4 files changed, 218 insertions(+), 83 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index f25d4ad6e2..b0bb1c9537 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -2982,84 +2982,92 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) delta_area_ += area_change; } -void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) -{ - for (auto& db_inst : new_instances) { + +void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { + for (auto* db_inst : new_instances) { auto db_it = db_inst_to_nb_index_map_.find(db_inst); if (db_it != db_inst_to_nb_index_map_.end()) { - size_t gcells_index = db_it->second; - GCellHandle& handle = nb_gcells_[gcells_index]; - GCell* gcell = handle; - - for (auto& gpin : gcell->gPins()) { - gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); - gpin->updateCoordi(); - } - - // analogous to NesterovBase::updateDensitySize() - float scaleX = 0, scaleY = 0; - float densitySizeX = 0, densitySizeY = 0; - if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { - scaleX = static_cast(gcell->dx()) - / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); - densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); - } else { - scaleX = 1.0; - densitySizeX = gcell->dx(); - } - - if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { - scaleY = static_cast(gcell->dy()) - / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); - densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); - } else { - scaleY = 1.0; - densitySizeY = gcell->dy(); - } - - gcell->setDensitySize(densitySizeX, densitySizeY); - gcell->setDensityScale(scaleX * scaleY); - - // analogous to NesterovBase::initDensity1() - updateDensityCoordiLayoutInside(gcell); - curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] - = curCoordi_[gcells_index] = initCoordi_[gcells_index] - = FloatPoint(gcell->dCx(), gcell->dCy()); - - // analogous to updateCurGradient() - updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); - - // analogous to NesterovBase::updateInitialPrevSLPCoordi() - GCell* curGCell = nb_gcells_[gcells_index]; - float prevCoordiX = curSLPCoordi_[gcells_index].x - - npVars_->initialPrevCoordiUpdateCoef - * curSLPSumGrads_[gcells_index].x; - float prevCoordiY = curSLPCoordi_[gcells_index].y - - npVars_->initialPrevCoordiUpdateCoef - * curSLPSumGrads_[gcells_index].y; - FloatPoint newCoordi( - getDensityCoordiLayoutInsideX(curGCell, prevCoordiX), - getDensityCoordiLayoutInsideY(curGCell, prevCoordiY)); - prevSLPCoordi_[gcells_index] = newCoordi; - - // analogous to - // NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) - nb_gcells_[gcells_index]->setDensityCenterLocation( - prevSLPCoordi_[gcells_index].x, prevSLPCoordi_[gcells_index].y); - - // analogous to updatePrevGradient() - updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); + updateSingleGCellState(db_it->second, wlCoeffX, wlCoeffY, /*update_pins=*/true); } else { debugPrint(log_, GPL, "callbacks", 1, - "warning: updateGCellState, db_inst not found in " - "db_inst_index_map_ for instance: {}", + "warning: updateGCellState, db_inst not found in map for: {}", db_inst->getName()); } } + + for (size_t idx : restored_filler_indexes_) { + updateSingleGCellState(idx, wlCoeffX, wlCoeffY, /*update_pins=*/false); + } + new_instances.clear(); + restored_filler_indexes_.clear(); +} + + +void NesterovBase::updateSingleGCellState(size_t gcells_index, + float wlCoeffX, + float wlCoeffY, + bool update_pins) { + GCell* gcell = nb_gcells_[gcells_index]; + + // analogous to NesterovBase::updatePinCoordi() + if (update_pins) { + for (auto& gpin : gcell->gPins()) { + gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); + gpin->updateCoordi(); + } + } + + // analogous to NesterovBase::updateDensitySize() + float scaleX = 0, scaleY = 0; + float densitySizeX = 0, densitySizeY = 0; + + if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { + scaleX = static_cast(gcell->dx()) / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); + densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); + } else { + scaleX = 1.0; + densitySizeX = gcell->dx(); + } + + if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { + scaleY = static_cast(gcell->dy()) / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); + densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); + } else { + scaleY = 1.0; + densitySizeY = gcell->dy(); + } + + gcell->setDensitySize(densitySizeX, densitySizeY); + gcell->setDensityScale(scaleX * scaleY); + + // analogous to NesterovBase::initDensity1() + updateDensityCoordiLayoutInside(gcell); + FloatPoint center(gcell->dCx(), gcell->dCy()); + + curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] + = curCoordi_[gcells_index] = initCoordi_[gcells_index] = center; + + // analogous to updateCurGradient() + updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); + + // analogous to NesterovBase::updateInitialPrevSLPCoordi() + float prevCoordiX = center.x - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].x; + float prevCoordiY = center.y - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].y; + + FloatPoint newCoordi( + getDensityCoordiLayoutInsideX(gcell, prevCoordiX), + getDensityCoordiLayoutInsideY(gcell, prevCoordiY)); + prevSLPCoordi_[gcells_index] = newCoordi; + + // analogous to NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) + gcell->setDensityCenterLocation(newCoordi.x, newCoordi.y); + + // analogous to updatePrevGradient() + updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); } void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) @@ -3074,8 +3082,8 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) if (gcell != nullptr) { new_instances.push_back(db_inst); nb_gcells_.emplace_back(nbc_.get(), stor_index); - log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); - log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); + // log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); + // log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); size_t gcells_index = nb_gcells_.size() - 1; db_inst_to_nb_index_map_[db_inst] = gcells_index; appendParallelVectors(); @@ -3263,7 +3271,33 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < maxFillersToRemove; --i) { if (nb_gcells_[i]->isFiller()) { const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; - removed_fillers_.push_back(removed); + // removed_fillers_.push_back(removed); + removed_fillers_.push_back(RemovedFillerState { + .gcell = removed, + .curSLPCoordi = curSLPCoordi_[i], + .curSLPWireLengthGrads = curSLPWireLengthGrads_[i], + .curSLPDensityGrads = curSLPDensityGrads_[i], + .curSLPSumGrads = curSLPSumGrads_[i], + + .nextSLPCoordi = nextSLPCoordi_[i], + .nextSLPWireLengthGrads = nextSLPWireLengthGrads_[i], + .nextSLPDensityGrads = nextSLPDensityGrads_[i], + .nextSLPSumGrads = nextSLPSumGrads_[i], + + .prevSLPCoordi = prevSLPCoordi_[i], + .prevSLPWireLengthGrads = prevSLPWireLengthGrads_[i], + .prevSLPDensityGrads = prevSLPDensityGrads_[i], + .prevSLPSumGrads = prevSLPSumGrads_[i], + + .curCoordi = curCoordi_[i], + .nextCoordi = nextCoordi_[i], + .initCoordi = initCoordi_[i], + + .snapshotCoordi = snapshotCoordi_[i], + .snapshotSLPCoordi = snapshotSLPCoordi_[i], + .snapshotSLPSumGrads = snapshotSLPSumGrads_[i] + }); + destroyFillerGCell(i); availableFillerArea -= fillerArea; inflationArea -= fillerArea; @@ -3437,6 +3471,34 @@ void NesterovBaseCommon::destroyCbkITerm(odb::dbITerm* db_iterm) } } +void NesterovBase::printGCellsToFile(const std::string& filename, + bool print_only_name) const +{ + std::ofstream out(filename); + if (!out.is_open()) { + return; + } + + out << "nb_gcells_.size(): " << nb_gcells_.size() << "\n"; + out.close(); + + std::ofstream out_append(filename, std::ios::app); + if (!out_append.is_open()) { + return; + } + + for (size_t i = 0; i < nb_gcells_.size(); ++i) { + const GCellHandle& handle = nb_gcells_[i]; + const GCell* gcell = handle.operator->(); + + out_append << fmt::format("idx:{} filler:{}\n", i, gcell->isFiller()); + gcell->printToFile(out_append, print_only_name); + } + + out_append.close(); +} + + void NesterovBase::swapAndPop(std::vector& vec, size_t remove_index, size_t last_index) @@ -3510,7 +3572,7 @@ void NesterovBaseCommon::printGCells() void NesterovBaseCommon::printGCellsToFile(const std::string& filename, bool print_only_name, - bool also_print_minRc) + bool also_print_minRc) const { std::ofstream out(filename); if (!out.is_open()) { diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 3e70f726bc..481841c199 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -861,8 +861,8 @@ class NesterovBaseCommon void printGCells(); void printGCellsToFile(const std::string& filename, - bool print_only_name = true, - bool also_print_minRc = false); + bool print_only_name, + bool also_print_minRc) const; void printGPins(); // TODO do this for each region? Also, manage this properly if other callbacks @@ -1095,24 +1095,62 @@ class NesterovBase // including parallel vectors. void updateGCellState(float wlCoeffX, float wlCoeffY); - void destroyFillerGCell(size_t index_remove); - void restoreRemovedFillers() { + + void restoreRemovedFillers() { log_->report("restoring removed fillers: {}", removed_fillers_.size()); - while (!removed_fillers_.empty()) { - GCell gcellCopy = removed_fillers_.back(); - removed_fillers_.pop_back(); + // for (auto& filler : removed_fillers_) { + // filler.gcell.print(log_, false); + // } + + log_->report("restoring!!!\n\n\n\n\n"); - fillerStor_.push_back(gcellCopy); + for (const auto& filler : removed_fillers_) { + filler.gcell.print(log_, false); + fillerStor_.push_back(filler.gcell); size_t new_index = fillerStor_.size() - 1; + nb_gcells_.emplace_back(this, new_index); appendParallelVectors(); + + size_t idx = nb_gcells_.size() - 1; + + // Restore parallel vector data + curSLPCoordi_[idx] = filler.curSLPCoordi; + curSLPWireLengthGrads_[idx] = filler.curSLPWireLengthGrads; + curSLPDensityGrads_[idx] = filler.curSLPDensityGrads; + curSLPSumGrads_[idx] = filler.curSLPSumGrads; + + nextSLPCoordi_[idx] = filler.nextSLPCoordi; + nextSLPWireLengthGrads_[idx] = filler.nextSLPWireLengthGrads; + nextSLPDensityGrads_[idx] = filler.nextSLPDensityGrads; + nextSLPSumGrads_[idx] = filler.nextSLPSumGrads; + + prevSLPCoordi_[idx] = filler.prevSLPCoordi; + prevSLPWireLengthGrads_[idx] = filler.prevSLPWireLengthGrads; + prevSLPDensityGrads_[idx] = filler.prevSLPDensityGrads; + prevSLPSumGrads_[idx] = filler.prevSLPSumGrads; + + curCoordi_[idx] = filler.curCoordi; + nextCoordi_[idx] = filler.nextCoordi; + initCoordi_[idx] = filler.initCoordi; + + snapshotCoordi_[idx] = filler.snapshotCoordi; + snapshotSLPCoordi_[idx] = filler.snapshotSLPCoordi; + snapshotSLPSumGrads_[idx] = filler.snapshotSLPSumGrads; + + restored_filler_indexes_.push_back(idx); totalFillerArea_ += getFillerCellArea(); } + log_->report("fillerStor_.size(): {}", fillerStor_.size()); + removed_fillers_.clear(); } - void clearRemovedFillers() { removed_fillers_.clear(); - } + + + + void clearRemovedFillers() { removed_fillers_.clear(); } + void printGCellsToFile(const std::string& filename, bool print_only_name) const; private: NesterovBaseVars nbVars_; @@ -1140,6 +1178,31 @@ class NesterovBase // used to update gcell states after fixPointers() is called std::vector new_instances; + struct RemovedFillerState { + GCell gcell; + FloatPoint curSLPCoordi; + FloatPoint curSLPWireLengthGrads; + FloatPoint curSLPDensityGrads; + FloatPoint curSLPSumGrads; + FloatPoint nextSLPCoordi; + FloatPoint nextSLPWireLengthGrads; + FloatPoint nextSLPDensityGrads; + FloatPoint nextSLPSumGrads; + FloatPoint prevSLPCoordi; + FloatPoint prevSLPWireLengthGrads; + FloatPoint prevSLPDensityGrads; + FloatPoint prevSLPSumGrads; + FloatPoint curCoordi; + FloatPoint nextCoordi; + FloatPoint initCoordi; + FloatPoint snapshotCoordi; + FloatPoint snapshotSLPCoordi; + FloatPoint snapshotSLPSumGrads; + }; + + std::vector removed_fillers_; + std::vector restored_filler_indexes_; + float sumPhi_ = 0; float targetDensity_ = 0; float uniformTargetDensity_ = 0; @@ -1241,7 +1304,10 @@ class NesterovBase bool reprint_iter_header; void initFillerGCells(); - std::vector removed_fillers_; + void updateSingleGCellState(size_t gcells_index, + float wlCoeffX, + float wlCoeffY, + bool update_pins); }; inline std::vector& NesterovBase::bins() diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 9c6f4145f7..880066e255 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -670,10 +670,14 @@ log_->report(" New target density: {}", newTargetDensity); // recover the densityPenalty values // if further routability-driven is needed std::pair result = rb_->routability(); - nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); is_routability_need_ = result.first; bool isRevertInitNeeded = result.second; + if(is_routability_need_==false && isRevertInitNeeded==true) { + nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); + } + // if routability is needed if (is_routability_need_ || isRevertInitNeeded) { // revert back the current density penality diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 5daff4e68c..a64fbeb73c 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -721,7 +721,10 @@ std::pair RouteBase::routability() nbVec_[0]->setTargetDensity(minRcTargetDensity_); nbc_->revertGCellSizeToMinRc(); + // nbVec_[0]->printGCellsToFile("before.txt",false); nbVec_[0]->restoreRemovedFillers(); + // nbVec_[0]->updateGCellState(); + // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); nbVec_[0]->updateDensitySize(); resetRoutabilityResources(); // nbc_->fixPointers(); From fb70083443ddfc536d49b8fd278c3c9f11b24e00 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Thu, 22 May 2025 14:39:34 +0000 Subject: [PATCH 10/41] gpl: remove log message for testing Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 481841c199..c67379f1de 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -1106,7 +1106,7 @@ class NesterovBase log_->report("restoring!!!\n\n\n\n\n"); for (const auto& filler : removed_fillers_) { - filler.gcell.print(log_, false); + // filler.gcell.print(log_, false); fillerStor_.push_back(filler.gcell); size_t new_index = fillerStor_.size() - 1; From 21daabc4dc831de591653f1015f7989b27b66a2b Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 27 May 2025 14:15:05 +0000 Subject: [PATCH 11/41] gpl: fix removal of fillers, properly update referenecs to gcells after swap and pop Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 106 +++++++++++++++++-------------- src/gpl/src/nesterovBase.h | 113 +++++++++++++++++++++++++++++++--- src/gpl/src/nesterovPlace.cpp | 37 ++++++----- src/gpl/src/routeBase.cpp | 2 + 4 files changed, 190 insertions(+), 68 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index b0bb1c9537..bded5159ca 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1676,14 +1676,17 @@ NesterovBase::NesterovBase(NesterovBaseVars nbVars, gCell->updateLocations(); nb_gcells_.emplace_back(nbc_.get(), nbc_->getGCellIndex(gCell)); size_t gcells_index = nb_gcells_.size() - 1; - db_inst_to_nb_index_map_[pb_inst->dbInst()] = gcells_index; + db_inst_to_nb_index_[pb_inst->dbInst()] = gcells_index; } // add filler cells to gCells_ for (size_t i = 0; i < fillerStor_.size(); ++i) { nb_gcells_.emplace_back(this, i); + filler_stor_index_to_nb_index_[i] = nb_gcells_.size() - 1; } + // last_filler_index_ = fillerStor_.empty() ? 0 : fillerStor_.size() - 1; + debugPrint(log_, GPL, "FillerInit", @@ -2984,9 +2987,11 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { + log_->report("new_instances.size():{}", new_instances.size()); + log_->report("restored_filler_indexes_.size: {}", restored_filler_indexes_.size()); for (auto* db_inst : new_instances) { - auto db_it = db_inst_to_nb_index_map_.find(db_inst); - if (db_it != db_inst_to_nb_index_map_.end()) { + auto db_it = db_inst_to_nb_index_.find(db_inst); + if (db_it != db_inst_to_nb_index_.end()) { updateSingleGCellState(db_it->second, wlCoeffX, wlCoeffY, /*update_pins=*/true); } else { debugPrint(log_, @@ -2997,7 +3002,7 @@ void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { db_inst->getName()); } } - + for (size_t idx : restored_filler_indexes_) { updateSingleGCellState(idx, wlCoeffX, wlCoeffY, /*update_pins=*/false); } @@ -3085,7 +3090,7 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) // log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); // log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); size_t gcells_index = nb_gcells_.size() - 1; - db_inst_to_nb_index_map_[db_inst] = gcells_index; + db_inst_to_nb_index_[db_inst] = gcells_index; appendParallelVectors(); } else { @@ -3118,6 +3123,7 @@ size_t NesterovBaseCommon::createCbkGCell(odb::dbInst* db_inst) * static_cast(gcell_ptr->dy()); delta_area_ += area_change; new_gcells_count_++; + // log_->report("createcbkgcell gCellStor_ index for NBC_gcells_: {}, nbc_gcells.size(): {}", gCellStor_.size() - 1, nbc_gcells_.size() -1); return gCellStor_.size() - 1; } @@ -3150,8 +3156,8 @@ void NesterovBaseCommon::createCbkITerm(odb::dbITerm* iTerm) void NesterovBase::destroyCbkGCell(odb::dbInst* db_inst) { debugPrint(log_, GPL, "callbacks", 2, "NesterovBase::destroyGCel"); - auto db_it = db_inst_to_nb_index_map_.find(db_inst); - if (db_it != db_inst_to_nb_index_map_.end()) { + auto db_it = db_inst_to_nb_index_.find(db_inst); + if (db_it != db_inst_to_nb_index_.end()) { size_t last_index = nb_gcells_.size() - 1; size_t gcell_index = db_it->second; @@ -3171,7 +3177,7 @@ void NesterovBase::destroyCbkGCell(odb::dbInst* db_inst) } swapAndPopParallelVectors(gcell_index, last_index); nb_gcells_.pop_back(); - db_inst_to_nb_index_map_.erase(db_it); + db_inst_to_nb_index_.erase(db_it); // From now on gcell_index is the index for the replacement (previous last // element) @@ -3181,15 +3187,15 @@ void NesterovBase::destroyCbkGCell(odb::dbInst* db_inst) odb::dbInst* replacer_inst = nb_gcells_[replacer_index]->insts()[0]->dbInst(); // Update new replacer reference on map - db_inst_to_nb_index_map_.erase(replacer_inst); - db_inst_to_nb_index_map_[replacer_inst] = replacer_index; + db_inst_to_nb_index_.erase(replacer_inst); + db_inst_to_nb_index_[replacer_inst] = replacer_index; } std::pair replacer = nbc_->destroyCbkGCell(db_inst); if (replacer.first != nullptr) { - auto it = db_inst_to_nb_index_map_.find(replacer.first); - if (it != db_inst_to_nb_index_map_.end()) { + auto it = db_inst_to_nb_index_.find(replacer.first); + if (it != db_inst_to_nb_index_.end()) { nb_gcells_[it->second].updateHandle(nbc_.get(), replacer.second); } else { debugPrint(log_, @@ -3247,29 +3253,30 @@ std::pair NesterovBaseCommon::destroyCbkGCell( return replacement; } -void NesterovBase::cutFillerCells(int64_t inflationArea) +void NesterovBase::cutFillerCells(int64_t inflation_area) { dbBlock* block = pb_->db()->getChip()->getBlock(); - if(inflationArea < 0) { - log_->warn(GPL,313, "Negative area provided to remove fillers: {}. Expected positive value, ignoring.", block->dbuAreaToMicrons(inflationArea)); + if(inflation_area < 0) { + log_->warn(GPL,313, "Negative area provided to remove fillers: {}. Expected positive value, ignoring.", block->dbuAreaToMicrons(inflation_area)); return; } int removed_count = 0; - const int64_t fillerArea = getFillerCellArea(); - const int64_t maxFillersToRemove = std::min( - inflationArea / fillerArea, static_cast(fillerStor_.size())); + const int64_t single_filler_area = getFillerCellArea(); + const int64_t max_fllers_to_remove = std::min( + inflation_area / single_filler_area, static_cast(fillerStor_.size())); log_->report("totalFillerArea_: {}", block->dbuAreaToMicrons(totalFillerArea_)); - log_->report("inflationArea: {}", block->dbuAreaToMicrons(inflationArea)); + log_->report("inflationArea: {}", block->dbuAreaToMicrons(inflation_area)); log_->report("number of fillers before removal: {}", fillerStor_.size()); - log_->report("filler area: {}", block->dbuAreaToMicrons(fillerArea)); + log_->report("filler area: {}", block->dbuAreaToMicrons(single_filler_area)); - int64_t availableFillerArea = fillerArea * fillerStor_.size(); - int64_t originalInflationArea = inflationArea; + int64_t availableFillerArea = single_filler_area * fillerStor_.size(); + int64_t originalInflationArea = inflation_area; - for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < maxFillersToRemove; --i) { + for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { if (nb_gcells_[i]->isFiller()) { + // log_->report("filler to be removed in nb_gcells_ index: {}, nb_gcells_.size(): {}", i, nb_gcells_.size()); const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; // removed_fillers_.push_back(removed); removed_fillers_.push_back(RemovedFillerState { @@ -3299,20 +3306,20 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) }); destroyFillerGCell(i); - availableFillerArea -= fillerArea; - inflationArea -= fillerArea; + availableFillerArea -= single_filler_area; + inflation_area -= single_filler_area; ++removed_count; } } totalFillerArea_ = availableFillerArea; - if (fillerArea * fillerStor_.size() != totalFillerArea_) { + if (single_filler_area * fillerStor_.size() != totalFillerArea_) { log_->warn(GPL, 312, "Unexpected filler area! The value {}, should be equal to " "totalFillerArea_ {}.", - block->dbuAreaToMicrons(fillerArea * fillerStor_.size()), + block->dbuAreaToMicrons(single_filler_area * fillerStor_.size()), block->dbuAreaToMicrons(totalFillerArea_)); } @@ -3320,7 +3327,7 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) removed_count); log_->report("number of fillers after removal: {}", fillerStor_.size()); - int64_t removedFillerArea = fillerArea * removed_count; + int64_t removedFillerArea = single_filler_area * removed_count; int64_t remainingInflationArea = originalInflationArea - removedFillerArea; log_->report("Area removed by fillers: {}", @@ -3329,7 +3336,7 @@ void NesterovBase::cutFillerCells(int64_t inflationArea) "Remaining inflation area to be compensated by modifying density: {}", block->dbuAreaToMicrons(remainingInflationArea)); - if (remainingInflationArea > 0) { + if (remainingInflationArea > single_filler_area && fillerStor_.empty()) { if (fillerStor_.empty()) { log_->report("Not enough fillers to fully compensate inflation."); } @@ -3377,29 +3384,36 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) return; } - if (stor_index_remove != stor_last_index) { - std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); - } - fillerStor_.pop_back(); - size_t nb_last_index = nb_gcells_.size() - 1; if (nb_index_remove != nb_last_index) { - bool is_replacer_filler = nb_gcells_[nb_last_index]->isFiller(); - size_t replacer_stor_index = 0; - if (!is_replacer_filler) { - replacer_stor_index = nb_gcells_[nb_last_index].getStorageIndex(); - } - - std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); - - if(is_replacer_filler) { - nb_gcells_[nb_index_remove].updateHandle(this, stor_index_remove); - } else { - nb_gcells_[nb_index_remove].updateHandle(nbc_.get(), replacer_stor_index); + GCellHandle& gcell_replace = nb_gcells_[nb_last_index]; + if(!gcell_replace->isFiller()) { + odb::dbInst* db_inst = gcell_replace->insts()[0]->dbInst(); + auto it = db_inst_to_nb_index_.find(db_inst); + if (it != db_inst_to_nb_index_.end()) { + it->second = nb_index_remove; + } else { + debugPrint(log_, + GPL, + "callbacks", + 1, + "Warning: gcell_replace dbInst {} not found in db_inst_to_nb_index_ map", + db_inst->getName()); + } } + std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); } swapAndPopParallelVectors(nb_index_remove, nb_last_index); nb_gcells_.pop_back(); + filler_stor_index_to_nb_index_.erase(stor_index_remove); + + if (stor_index_remove != stor_last_index) { + size_t replacer_index = filler_stor_index_to_nb_index_.find(stor_last_index)->second; + std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); + nb_gcells_[replacer_index].updateHandle(this, stor_index_remove); + filler_stor_index_to_nb_index_[stor_index_remove] = replacer_index; + } + fillerStor_.pop_back(); } void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index d3afac904c..295d4e35e2 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -859,6 +859,8 @@ class NesterovBaseCommon { return std::distance(gCellStor_.data(), gCell); } + + // const std::vector& getGCellStor() const { return gCellStor_; } void printGCells(); void printGCellsToFile(const std::string& filename, @@ -1100,6 +1102,7 @@ class NesterovBase void restoreRemovedFillers() { log_->report("restoring removed fillers: {}", removed_fillers_.size()); + log_->report("fillerStor_.size() before: {}", fillerStor_.size()); // for (auto& filler : removed_fillers_) { // filler.gcell.print(log_, false); // } @@ -1108,14 +1111,13 @@ class NesterovBase for (const auto& filler : removed_fillers_) { // filler.gcell.print(log_, false); - fillerStor_.push_back(filler.gcell); - size_t new_index = fillerStor_.size() - 1; - + fillerStor_.push_back(filler.gcell); + size_t new_index = fillerStor_.size() - 1; nb_gcells_.emplace_back(this, new_index); + filler_stor_index_to_nb_index_[new_index] = nb_gcells_.size() - 1; + appendParallelVectors(); - size_t idx = nb_gcells_.size() - 1; - // Restore parallel vector data curSLPCoordi_[idx] = filler.curSLPCoordi; curSLPWireLengthGrads_[idx] = filler.curSLPWireLengthGrads; @@ -1144,9 +1146,104 @@ class NesterovBase totalFillerArea_ += getFillerCellArea(); } - log_->report("fillerStor_.size(): {}", fillerStor_.size()); + log_->report("fillerStor_.size() after: {}", fillerStor_.size()); removed_fillers_.clear(); } + + void appendGCellCSVNote(const std::string& filename, + int iteration, + const std::string& message) const { + std::ofstream file(filename, std::ios::app); + if (!file.is_open()) { + log_->report("Could not open CSV file for appending message: {}", filename); + return; + } + + file << "# NOTE @ iteration " << iteration << ": " << message << "\n"; + file.close(); + } + + void writeGCellVectorsToCSV(const std::string& filename, + int iteration, + bool write_header) const { + std::ofstream file(filename, std::ios::app); + if (!file.is_open()) { + log_->report("Could not open file: {}", filename); + return; + } + + // Write header only on first call + if (write_header) { + file << "iteration,index"; + auto add_header = [&](const std::string& name) { + file << "," << name << "_x" << "," << name << "_y"; + }; + + add_header("curSLPCoordi"); + add_header("curSLPWireLengthGrads"); + add_header("curSLPDensityGrads"); + add_header("curSLPSumGrads"); + + add_header("nextSLPCoordi"); + add_header("nextSLPWireLengthGrads"); + add_header("nextSLPDensityGrads"); + add_header("nextSLPSumGrads"); + + add_header("prevSLPCoordi"); + add_header("prevSLPWireLengthGrads"); + add_header("prevSLPDensityGrads"); + add_header("prevSLPSumGrads"); + + add_header("curCoordi"); + add_header("nextCoordi"); + add_header("initCoordi"); + + add_header("snapshotCoordi"); + add_header("snapshotSLPCoordi"); + add_header("snapshotSLPSumGrads"); + + file << "\n"; + } + + size_t num_rows = curSLPCoordi_.size(); + + for (size_t i = 0; i < num_rows; i += 5) { + file << iteration << "," << i; + + auto add_value = [&](const std::vector& vec) { + file << "," << vec[i].x << "," << vec[i].y; + }; + + add_value(curSLPCoordi_); + add_value(curSLPWireLengthGrads_); + add_value(curSLPDensityGrads_); + add_value(curSLPSumGrads_); + + add_value(nextSLPCoordi_); + add_value(nextSLPWireLengthGrads_); + add_value(nextSLPDensityGrads_); + add_value(nextSLPSumGrads_); + + add_value(prevSLPCoordi_); + add_value(prevSLPWireLengthGrads_); + add_value(prevSLPDensityGrads_); + add_value(prevSLPSumGrads_); + + add_value(curCoordi_); + add_value(nextCoordi_); + add_value(initCoordi_); + + if(snapshotCoordi_.size() == curSLPCoordi_.size()){ + add_value(snapshotCoordi_); + add_value(snapshotSLPCoordi_); + add_value(snapshotSLPSumGrads_); + } + + file << "\n"; + } + + file.close(); +} @@ -1174,7 +1271,8 @@ class NesterovBase std::vector fillerStor_; std::vector nb_gcells_; - std::unordered_map db_inst_to_nb_index_map_; + std::unordered_map db_inst_to_nb_index_; + std::unordered_map filler_stor_index_to_nb_index_; // used to update gcell states after fixPointers() is called std::vector new_instances; @@ -1203,6 +1301,7 @@ class NesterovBase std::vector removed_fillers_; std::vector restored_filler_indexes_; + // size_t last_filler_index_; float sumPhi_ = 0; float targetDensity_ = 0; diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 9cf14747e1..2016dcfeaf 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -407,6 +407,9 @@ int NesterovPlace::doNesterovPlace(int start_iter) updateNextIter(iter); + if(iter==0 || iter % 100 == 0) + // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); + // For JPEG Saving // graphics_ is only true if debug mode is active if (graphics_) { @@ -557,6 +560,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) } bool shouldTdProceed = tb_->executeTimingDriven(virtual_td_iter); + nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"timing-driven iteration"); nbVec_[0]->setTrueReprintIterHeader(); ++timing_driven_count; @@ -588,7 +592,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) } if (!virtual_td_iter) { for (auto& nesterov : nbVec_) { - nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); // updates order in routability: // 1. change areas // 2. set target density with delta area @@ -602,25 +606,27 @@ int NesterovPlace::doNesterovPlace(int start_iter) // / static_cast(nesterov->whiteSpaceArea())); -int64_t deltaArea = nbc_->getDeltaArea(); -int64_t instArea = nesterov->nesterovInstsArea(); -int64_t fillerArea = nesterov->getTotalFillerArea(); -int64_t wsArea = nesterov->whiteSpaceArea(); +// int64_t deltaArea = nbc_->getDeltaArea(); +// int64_t instArea = nesterov->nesterovInstsArea(); +// int64_t fillerArea = nesterov->getTotalFillerArea(); +// int64_t wsArea = nesterov->whiteSpaceArea(); -int64_t totalGCellArea = deltaArea + instArea + fillerArea; -float newTargetDensity = static_cast(totalGCellArea) - / static_cast(wsArea); +// int64_t totalGCellArea = deltaArea + instArea + fillerArea; +// float newTargetDensity = static_cast(totalGCellArea) +// / static_cast(wsArea); -log_->report("Density update breakdown (original method):"); -log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); -log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); -log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); -log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); -log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); -log_->report(" New target density: {}", newTargetDensity); +// log_->report("Density update breakdown (original method):"); +// log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); +// log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); +// log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); +// log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); +// log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); +// log_->report(" New target density: {}", newTargetDensity); nesterov->cutFillerCells(nbc_->getDeltaArea()); + nbc_->fixPointers(); + nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); float rsz_delta_area_microns = block->dbuAreaToMicrons(nbc_->getDeltaArea()); @@ -832,6 +838,7 @@ log_->report(" New target density: {}", newTargetDensity); // recover the densityPenalty values // if further routability-driven is needed std::pair result = rb_->routability(); + nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"routability iteration"); is_routability_need_ = result.first; bool isRevertInitNeeded = result.second; diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index a64fbeb73c..23c3d0c14c 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -674,6 +674,8 @@ std::pair RouteBase::routability() = inflatedAreaDelta_ + prev_total_gcells_area; nbVec_[0]->cutFillerCells(inflatedAreaDelta_); + nbc_->fixPointers(); + // nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); // int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() From 3da6aacaa03e0f3057f3733170ea304bab267368 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Thu, 29 May 2025 14:09:05 +0000 Subject: [PATCH 12/41] gpl: remove fillers only in routability mode Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 316 +++++++++++++++++++++++++++------- src/gpl/src/nesterovBase.h | 92 ++-------- src/gpl/src/nesterovPlace.cpp | 72 ++++---- src/gpl/src/routeBase.cpp | 5 +- 4 files changed, 307 insertions(+), 178 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index bded5159ca..94df818ede 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -2628,6 +2628,9 @@ void NesterovBase::updateNextIter(const int iter) nextSLPDensityGrads_[k] = curSLPDensityGrads_[k]; nextSLPSumGrads_[k] = curSLPSumGrads_[k]; nextCoordi_[k] = curCoordi_[k]; + } else { + if(nb_gcells_[k]->isLocked()) + log_->report("locked instance in updateNextIter, index {}!", k); } } @@ -2985,95 +2988,186 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) delta_area_ += area_change; } - -void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { - log_->report("new_instances.size():{}", new_instances.size()); - log_->report("restored_filler_indexes_.size: {}", restored_filler_indexes_.size()); - for (auto* db_inst : new_instances) { +void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) +{ + for (auto& db_inst : new_instances) { auto db_it = db_inst_to_nb_index_.find(db_inst); if (db_it != db_inst_to_nb_index_.end()) { - updateSingleGCellState(db_it->second, wlCoeffX, wlCoeffY, /*update_pins=*/true); + size_t gcells_index = db_it->second; + GCellHandle& handle = nb_gcells_[gcells_index]; + GCell* gcell = handle; + + for (auto& gpin : gcell->gPins()) { + gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); + gpin->updateCoordi(); + } + + // analogous to NesterovBase::updateDensitySize() + float scaleX = 0, scaleY = 0; + float densitySizeX = 0, densitySizeY = 0; + if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { + scaleX = static_cast(gcell->dx()) + / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); + densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); + } else { + scaleX = 1.0; + densitySizeX = gcell->dx(); + } + + if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { + scaleY = static_cast(gcell->dy()) + / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); + densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); + } else { + scaleY = 1.0; + densitySizeY = gcell->dy(); + } + + gcell->setDensitySize(densitySizeX, densitySizeY); + gcell->setDensityScale(scaleX * scaleY); + + // analogous to NesterovBase::initDensity1() + updateDensityCoordiLayoutInside(gcell); + curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] + = curCoordi_[gcells_index] = initCoordi_[gcells_index] + = FloatPoint(gcell->dCx(), gcell->dCy()); + + // analogous to updateCurGradient() + updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); + + // analogous to NesterovBase::updateInitialPrevSLPCoordi() + GCell* curGCell = nb_gcells_[gcells_index]; + float prevCoordiX = curSLPCoordi_[gcells_index].x + - npVars_->initialPrevCoordiUpdateCoef + * curSLPSumGrads_[gcells_index].x; + float prevCoordiY = curSLPCoordi_[gcells_index].y + - npVars_->initialPrevCoordiUpdateCoef + * curSLPSumGrads_[gcells_index].y; + FloatPoint newCoordi( + getDensityCoordiLayoutInsideX(curGCell, prevCoordiX), + getDensityCoordiLayoutInsideY(curGCell, prevCoordiY)); + prevSLPCoordi_[gcells_index] = newCoordi; + + // analogous to + // NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) + nb_gcells_[gcells_index]->setDensityCenterLocation( + prevSLPCoordi_[gcells_index].x, prevSLPCoordi_[gcells_index].y); + + // analogous to updatePrevGradient() + updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); } else { debugPrint(log_, GPL, "callbacks", 1, - "warning: updateGCellState, db_inst not found in map for: {}", + "warning: updateGCellState, db_inst not found in " + "db_inst_index_map_ for instance: {}", db_inst->getName()); } } - - for (size_t idx : restored_filler_indexes_) { - updateSingleGCellState(idx, wlCoeffX, wlCoeffY, /*update_pins=*/false); - } - new_instances.clear(); - restored_filler_indexes_.clear(); } -void NesterovBase::updateSingleGCellState(size_t gcells_index, - float wlCoeffX, - float wlCoeffY, - bool update_pins) { - GCell* gcell = nb_gcells_[gcells_index]; +// void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { +// log_->report("new_instances.size():{}", new_instances.size()); +// // log_->report("restored_filler_indexes_.size: {}", restored_filler_indexes_.size()); - // analogous to NesterovBase::updatePinCoordi() - if (update_pins) { - for (auto& gpin : gcell->gPins()) { - gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); - gpin->updateCoordi(); - } - } +// nbc_->updateWireLengthForceWA(wlCoeffX, wlCoeffY); - // analogous to NesterovBase::updateDensitySize() - float scaleX = 0, scaleY = 0; - float densitySizeX = 0, densitySizeY = 0; +// for (auto* db_inst : new_instances) { +// auto db_it = db_inst_to_nb_index_.find(db_inst); +// if (db_it != db_inst_to_nb_index_.end()) { +// updateSingleGCellState(db_it->second, wlCoeffX, wlCoeffY, /*update_pins=*/true); +// } else { +// debugPrint(log_, +// GPL, +// "callbacks", +// 1, +// "warning: updateGCellState, db_inst not found in map for: {}", +// db_inst->getName()); +// } +// } +// new_instances.clear(); + +// // for (size_t idx : restored_filler_indexes_) { +// // updateSingleGCellState(idx, wlCoeffX, wlCoeffY, /*update_pins=*/false); +// // } +// // restored_filler_indexes_.clear(); + +// // updateDensityForceBin(); +// // // initDensity2(wlCoeffX, wlCoeffY); // this is likely not the issue, it resets the density penalty +// // nbc_->updateWireLengthForceWA(wlCoeffX, wlCoeffY); +// } - if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { - scaleX = static_cast(gcell->dx()) / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); - densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); - } else { - scaleX = 1.0; - densitySizeX = gcell->dx(); - } - if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { - scaleY = static_cast(gcell->dy()) / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); - densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); - } else { - scaleY = 1.0; - densitySizeY = gcell->dy(); - } +// void NesterovBase::updateSingleGCellState(size_t gcells_index, +// float wlCoeffX, +// float wlCoeffY, +// bool update_pins) { +// GCell* gcell = nb_gcells_[gcells_index]; - gcell->setDensitySize(densitySizeX, densitySizeY); - gcell->setDensityScale(scaleX * scaleY); +// // analogous to NesterovBase::updatePinCoordi() +// if (update_pins) { - // analogous to NesterovBase::initDensity1() - updateDensityCoordiLayoutInside(gcell); - FloatPoint center(gcell->dCx(), gcell->dCy()); +// if (gcell->gPins().empty()) { +// log_->report("GCell[{}] has no pins!", gcells_index); +// } - curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] - = curCoordi_[gcells_index] = initCoordi_[gcells_index] = center; +// for (auto& gpin : gcell->gPins()) { +// gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); +// gpin->updateCoordi(); +// } +// } - // analogous to updateCurGradient() - updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); +// // analogous to NesterovBase::updateDensitySize() +// float scaleX = 0, scaleY = 0; +// float densitySizeX = 0, densitySizeY = 0; - // analogous to NesterovBase::updateInitialPrevSLPCoordi() - float prevCoordiX = center.x - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].x; - float prevCoordiY = center.y - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].y; +// if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { +// scaleX = static_cast(gcell->dx()) / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); +// densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); +// } else { +// scaleX = 1.0; +// densitySizeX = gcell->dx(); +// } - FloatPoint newCoordi( - getDensityCoordiLayoutInsideX(gcell, prevCoordiX), - getDensityCoordiLayoutInsideY(gcell, prevCoordiY)); - prevSLPCoordi_[gcells_index] = newCoordi; +// if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { +// scaleY = static_cast(gcell->dy()) / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); +// densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); +// } else { +// scaleY = 1.0; +// densitySizeY = gcell->dy(); +// } - // analogous to NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) - gcell->setDensityCenterLocation(newCoordi.x, newCoordi.y); +// gcell->setDensitySize(densitySizeX, densitySizeY); +// gcell->setDensityScale(scaleX * scaleY); - // analogous to updatePrevGradient() - updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); -} +// // analogous to NesterovBase::initDensity1() +// updateDensityCoordiLayoutInside(gcell); +// FloatPoint center(gcell->dCx(), gcell->dCy()); + +// curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] +// = curCoordi_[gcells_index] = initCoordi_[gcells_index] = center; + +// // analogous to updateCurGradient() +// updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); + +// // analogous to NesterovBase::updateInitialPrevSLPCoordi() +// float prevCoordiX = center.x - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].x; +// float prevCoordiY = center.y - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].y; + +// FloatPoint newCoordi( +// getDensityCoordiLayoutInsideX(gcell, prevCoordiX), +// getDensityCoordiLayoutInsideY(gcell, prevCoordiY)); +// prevSLPCoordi_[gcells_index] = newCoordi; + +// // analogous to NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) +// gcell->setDensityCenterLocation(newCoordi.x, newCoordi.y); + +// // analogous to updatePrevGradient() +// updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); +// } void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) { @@ -3086,10 +3180,11 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) auto gcell = nbc_->getGCellByIndex(stor_index); if (gcell != nullptr) { new_instances.push_back(db_inst); - nb_gcells_.emplace_back(nbc_.get(), stor_index); + nb_gcells_.emplace_back(nbc_.get(), stor_index); // log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); // log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); size_t gcells_index = nb_gcells_.size() - 1; + // log_->report("create gcell nb index: {}", gcells_index); db_inst_to_nb_index_[db_inst] = gcells_index; appendParallelVectors(); @@ -3360,6 +3455,7 @@ log_->report(" New target density: {}", newTargetDensity); void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { + // log_->report("destroy filler nb index: {}", nb_index_remove); size_t stor_last_index = fillerStor_.size() - 1; GCellHandle& gcell_remove = nb_gcells_[nb_index_remove]; size_t stor_index_remove = gcell_remove.getStorageIndex(); @@ -3632,6 +3728,98 @@ void NesterovBaseCommon::printGPins() } } + void NesterovBase::writeGCellVectorsToCSV(const std::string& filename, + int iteration, + bool write_header) const { + std::ofstream file(filename, std::ios::app); + if (!file.is_open()) { + log_->report("Could not open file: {}", filename); + return; + } + + // Write header only on first call + if (write_header) { + file << "iteration,index,name"; + file << ",insts_size,gPins_size"; + file << ",lx,ly,ux,uy"; + file << ",dLx,dLy,dUx,dUy"; + file << ",densityScale,gradientX,gradientY"; + + auto add_header = [&](const std::string& name) { + file << "," << name << "_x" << "," << name << "_y"; + }; + + add_header("curSLPCoordi"); + add_header("curSLPWireLengthGrads"); + add_header("curSLPDensityGrads"); + add_header("curSLPSumGrads"); + + add_header("nextSLPCoordi"); + add_header("nextSLPWireLengthGrads"); + add_header("nextSLPDensityGrads"); + add_header("nextSLPSumGrads"); + + add_header("prevSLPCoordi"); + add_header("prevSLPWireLengthGrads"); + add_header("prevSLPDensityGrads"); + add_header("prevSLPSumGrads"); + + add_header("curCoordi"); + add_header("nextCoordi"); + add_header("initCoordi"); + + add_header("snapshotCoordi"); + add_header("snapshotSLPCoordi"); + add_header("snapshotSLPSumGrads"); + + file << "\n"; + } + + size_t num_rows = curSLPCoordi_.size(); + + for (size_t i = 0; i < num_rows; i += 10) { + file << iteration << "," << i; + file << "," << nb_gcells_[i]->getName(); + nb_gcells_[i]->writeAttributesToCSV(file); + // file << "," << nb_gcells_[i]->insts().size() << "," << nb_gcells_[i]->gPins().size(); + + auto add_value = [&](const std::vector& vec) { + file << "," << vec[i].x << "," << vec[i].y; + }; + + add_value(curSLPCoordi_); + add_value(curSLPWireLengthGrads_); + add_value(curSLPDensityGrads_); + add_value(curSLPSumGrads_); + + add_value(nextSLPCoordi_); + add_value(nextSLPWireLengthGrads_); + add_value(nextSLPDensityGrads_); + add_value(nextSLPSumGrads_); + + add_value(prevSLPCoordi_); + add_value(prevSLPWireLengthGrads_); + add_value(prevSLPDensityGrads_); + add_value(prevSLPSumGrads_); + + add_value(curCoordi_); + add_value(nextCoordi_); + add_value(initCoordi_); + + if(snapshotCoordi_.size() == curSLPCoordi_.size()){ + add_value(snapshotCoordi_); + add_value(snapshotSLPCoordi_); + add_value(snapshotSLPSumGrads_); + } + + file << "\n"; + } + + file.close(); +} + + + static float getOverlapDensityArea(const Bin& bin, const GCell* cell) { const int rectLx = std::max(bin.lx(), cell->dLx()); diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 295d4e35e2..c6988b80f5 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -113,6 +113,13 @@ class GCell void print(utl::Logger* logger, bool print_only_name) const; void printToFile(std::ostream& out, bool print_only_name = true) const; + void writeAttributesToCSV(std::ostream& out) const { + out << "," << insts_.size() << "," << gPins_.size(); + out << "," << lx_ << "," << ly_ << "," << ux_ << "," << uy_; + out << "," << dLx_ << "," << dLy_ << "," << dUx_ << "," << dUy_; + out << "," << densityScale_ << "," << gradientX_ << "," << gradientY_; + } + private: std::vector insts_; std::vector gPins_; @@ -1118,6 +1125,7 @@ class NesterovBase appendParallelVectors(); size_t idx = nb_gcells_.size() - 1; + log_->report("retore filler nb index: {}", idx); // Restore parallel vector data curSLPCoordi_[idx] = filler.curSLPCoordi; curSLPWireLengthGrads_[idx] = filler.curSLPWireLengthGrads; @@ -1142,7 +1150,7 @@ class NesterovBase snapshotSLPCoordi_[idx] = filler.snapshotSLPCoordi; snapshotSLPSumGrads_[idx] = filler.snapshotSLPSumGrads; - restored_filler_indexes_.push_back(idx); + // restored_filler_indexes_.push_back(idx); totalFillerArea_ += getFillerCellArea(); } @@ -1165,85 +1173,7 @@ class NesterovBase void writeGCellVectorsToCSV(const std::string& filename, int iteration, - bool write_header) const { - std::ofstream file(filename, std::ios::app); - if (!file.is_open()) { - log_->report("Could not open file: {}", filename); - return; - } - - // Write header only on first call - if (write_header) { - file << "iteration,index"; - auto add_header = [&](const std::string& name) { - file << "," << name << "_x" << "," << name << "_y"; - }; - - add_header("curSLPCoordi"); - add_header("curSLPWireLengthGrads"); - add_header("curSLPDensityGrads"); - add_header("curSLPSumGrads"); - - add_header("nextSLPCoordi"); - add_header("nextSLPWireLengthGrads"); - add_header("nextSLPDensityGrads"); - add_header("nextSLPSumGrads"); - - add_header("prevSLPCoordi"); - add_header("prevSLPWireLengthGrads"); - add_header("prevSLPDensityGrads"); - add_header("prevSLPSumGrads"); - - add_header("curCoordi"); - add_header("nextCoordi"); - add_header("initCoordi"); - - add_header("snapshotCoordi"); - add_header("snapshotSLPCoordi"); - add_header("snapshotSLPSumGrads"); - - file << "\n"; - } - - size_t num_rows = curSLPCoordi_.size(); - - for (size_t i = 0; i < num_rows; i += 5) { - file << iteration << "," << i; - - auto add_value = [&](const std::vector& vec) { - file << "," << vec[i].x << "," << vec[i].y; - }; - - add_value(curSLPCoordi_); - add_value(curSLPWireLengthGrads_); - add_value(curSLPDensityGrads_); - add_value(curSLPSumGrads_); - - add_value(nextSLPCoordi_); - add_value(nextSLPWireLengthGrads_); - add_value(nextSLPDensityGrads_); - add_value(nextSLPSumGrads_); - - add_value(prevSLPCoordi_); - add_value(prevSLPWireLengthGrads_); - add_value(prevSLPDensityGrads_); - add_value(prevSLPSumGrads_); - - add_value(curCoordi_); - add_value(nextCoordi_); - add_value(initCoordi_); - - if(snapshotCoordi_.size() == curSLPCoordi_.size()){ - add_value(snapshotCoordi_); - add_value(snapshotSLPCoordi_); - add_value(snapshotSLPSumGrads_); - } - - file << "\n"; - } - - file.close(); -} + bool write_header) const; @@ -1300,7 +1230,7 @@ class NesterovBase }; std::vector removed_fillers_; - std::vector restored_filler_indexes_; + // std::vector restored_filler_indexes_; // size_t last_filler_index_; float sumPhi_ = 0; diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 2016dcfeaf..f497bb0dd7 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -407,8 +407,10 @@ int NesterovPlace::doNesterovPlace(int start_iter) updateNextIter(iter); - if(iter==0 || iter % 100 == 0) - // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); + // // if(iter==0 || iter % 100 == 0) + // if(iter==0 || iter==1 || iter==711 || iter==801 || iter==899 || iter==901) + // // if(iter==899 || iter==901) + // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); // For JPEG Saving // graphics_ is only true if debug mode is active @@ -560,7 +562,9 @@ int NesterovPlace::doNesterovPlace(int start_iter) } bool shouldTdProceed = tb_->executeTimingDriven(virtual_td_iter); - nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"timing-driven iteration"); + // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"timing-driven iteration"); + // if(!virtual_td_iter) + // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); nbVec_[0]->setTrueReprintIterHeader(); ++timing_driven_count; @@ -592,41 +596,41 @@ int NesterovPlace::doNesterovPlace(int start_iter) } if (!virtual_td_iter) { for (auto& nesterov : nbVec_) { - // nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); // updates order in routability: // 1. change areas // 2. set target density with delta area // 3. updateareas // 4. updateDensitySize - // nesterov->setTargetDensity( - // static_cast(nbc_->getDeltaArea() - // + nesterov->nesterovInstsArea() - // + nesterov->getTotalFillerArea()) - // / static_cast(nesterov->whiteSpaceArea())); + nesterov->setTargetDensity( + static_cast(nbc_->getDeltaArea() + + nesterov->nesterovInstsArea() + + nesterov->getTotalFillerArea()) + / static_cast(nesterov->whiteSpaceArea())); -// int64_t deltaArea = nbc_->getDeltaArea(); -// int64_t instArea = nesterov->nesterovInstsArea(); -// int64_t fillerArea = nesterov->getTotalFillerArea(); -// int64_t wsArea = nesterov->whiteSpaceArea(); + // int64_t deltaArea = nbc_->getDeltaArea(); + // int64_t instArea = nesterov->nesterovInstsArea(); + // int64_t fillerArea = nesterov->getTotalFillerArea(); + // int64_t wsArea = nesterov->whiteSpaceArea(); -// int64_t totalGCellArea = deltaArea + instArea + fillerArea; -// float newTargetDensity = static_cast(totalGCellArea) -// / static_cast(wsArea); + // int64_t totalGCellArea = deltaArea + instArea + fillerArea; + // float newTargetDensity = static_cast(totalGCellArea) + // / static_cast(wsArea); -// log_->report("Density update breakdown (original method):"); -// log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); -// log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); -// log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); -// log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); -// log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); -// log_->report(" New target density: {}", newTargetDensity); + // log_->report("Density update breakdown (original method):"); + // log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); + // log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); + // log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); + // log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); + // log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); + // log_->report(" New target density: {}", newTargetDensity); - nesterov->cutFillerCells(nbc_->getDeltaArea()); - nbc_->fixPointers(); - nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // nesterov->cutFillerCells(nbc_->getDeltaArea()); + // nbc_->fixPointers(); + // nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); float rsz_delta_area_microns = block->dbuAreaToMicrons(nbc_->getDeltaArea()); @@ -676,6 +680,12 @@ int NesterovPlace::doNesterovPlace(int start_iter) nbc_->resetNewGcellsCount(); nesterov->updateAreas(); nesterov->updateDensitySize(); + + + // if(!virtual_td_iter){ + // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"repeat after every udpates!"); + // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); + // } } // update snapshot after non-virtual TD @@ -842,10 +852,12 @@ int NesterovPlace::doNesterovPlace(int start_iter) is_routability_need_ = result.first; bool isRevertInitNeeded = result.second; - if(is_routability_need_==false && isRevertInitNeeded==true) { - nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); - // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); - } + // if(is_routability_need_==false && isRevertInitNeeded==true) { + // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"restoring fillers"); + // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); + // // nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); + // } // if routability is needed if (is_routability_need_ || isRevertInitNeeded) { diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 23c3d0c14c..87d02e07f9 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -674,8 +674,7 @@ std::pair RouteBase::routability() = inflatedAreaDelta_ + prev_total_gcells_area; nbVec_[0]->cutFillerCells(inflatedAreaDelta_); - nbc_->fixPointers(); - // nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // nbc_->fixPointers(); // int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() @@ -723,7 +722,7 @@ std::pair RouteBase::routability() nbVec_[0]->setTargetDensity(minRcTargetDensity_); nbc_->revertGCellSizeToMinRc(); - // nbVec_[0]->printGCellsToFile("before.txt",false); + // nbVec_[0]->printGCellsToFile("before.txt",false); nbVec_[0]->restoreRemovedFillers(); // nbVec_[0]->updateGCellState(); // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); From f17326bc73b475de0f2b9dffa10d4942215b2f83 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 30 May 2025 15:42:46 +0000 Subject: [PATCH 13/41] gpl: code cleanup, remove debuging code and comments Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 340 +++++++++++++++++----------------- src/gpl/src/nesterovBase.h | 144 ++++---------- src/gpl/src/nesterovPlace.cpp | 45 ----- src/gpl/src/routeBase.cpp | 23 --- 4 files changed, 206 insertions(+), 346 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 94df818ede..d037691e56 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1505,13 +1505,16 @@ void NesterovBaseCommon::revertGCellSizeToMinRc() GCell* NesterovBaseCommon::getGCellByIndex(size_t idx) { if (idx >= gCellStor_.size()) { - log_->error(GPL, 315, "getGCellByIndex out of bounds: idx = {}, size = {}", idx, gCellStor_.size()); + log_->error(GPL, + 315, + "getGCellByIndex out of bounds: idx = {}, size = {}", + idx, + gCellStor_.size()); return nullptr; } return &gCellStor_[idx]; } - // fixPointers() member functions assumes there was push_backs to storage // vectors, invalidating them. This function resets the pointers and maintain // consistency among parallel vectors. Most of the code here is based on @@ -2136,7 +2139,11 @@ void NesterovBase::updateAreas() // "Suggested target density: {:.2f} (uniform density)", // targetDensity_, // uniformTargetDensity_); - log_->report("No more filler cells to remove (empty space), density is being modified to compensate for area modification. Desired filler area to be removed:{}", totalFillerArea_); + log_->report( + "No more filler cells to remove (empty space), density is being " + "modified to compensate for area modification. Desired filler area to " + "be removed:{}", + totalFillerArea_); totalFillerArea_ = 0; } } @@ -2629,7 +2636,7 @@ void NesterovBase::updateNextIter(const int iter) nextSLPSumGrads_[k] = curSLPSumGrads_[k]; nextCoordi_[k] = curCoordi_[k]; } else { - if(nb_gcells_[k]->isLocked()) + if (nb_gcells_[k]->isLocked()) log_->report("locked instance in updateNextIter, index {}!", k); } } @@ -3068,107 +3075,6 @@ void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) new_instances.clear(); } - -// void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) { -// log_->report("new_instances.size():{}", new_instances.size()); -// // log_->report("restored_filler_indexes_.size: {}", restored_filler_indexes_.size()); - -// nbc_->updateWireLengthForceWA(wlCoeffX, wlCoeffY); - -// for (auto* db_inst : new_instances) { -// auto db_it = db_inst_to_nb_index_.find(db_inst); -// if (db_it != db_inst_to_nb_index_.end()) { -// updateSingleGCellState(db_it->second, wlCoeffX, wlCoeffY, /*update_pins=*/true); -// } else { -// debugPrint(log_, -// GPL, -// "callbacks", -// 1, -// "warning: updateGCellState, db_inst not found in map for: {}", -// db_inst->getName()); -// } -// } -// new_instances.clear(); - -// // for (size_t idx : restored_filler_indexes_) { -// // updateSingleGCellState(idx, wlCoeffX, wlCoeffY, /*update_pins=*/false); -// // } -// // restored_filler_indexes_.clear(); - -// // updateDensityForceBin(); -// // // initDensity2(wlCoeffX, wlCoeffY); // this is likely not the issue, it resets the density penalty -// // nbc_->updateWireLengthForceWA(wlCoeffX, wlCoeffY); -// } - - -// void NesterovBase::updateSingleGCellState(size_t gcells_index, -// float wlCoeffX, -// float wlCoeffY, -// bool update_pins) { -// GCell* gcell = nb_gcells_[gcells_index]; - -// // analogous to NesterovBase::updatePinCoordi() -// if (update_pins) { - -// if (gcell->gPins().empty()) { -// log_->report("GCell[{}] has no pins!", gcells_index); -// } - -// for (auto& gpin : gcell->gPins()) { -// gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); -// gpin->updateCoordi(); -// } -// } - -// // analogous to NesterovBase::updateDensitySize() -// float scaleX = 0, scaleY = 0; -// float densitySizeX = 0, densitySizeY = 0; - -// if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { -// scaleX = static_cast(gcell->dx()) / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); -// densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); -// } else { -// scaleX = 1.0; -// densitySizeX = gcell->dx(); -// } - -// if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { -// scaleY = static_cast(gcell->dy()) / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); -// densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); -// } else { -// scaleY = 1.0; -// densitySizeY = gcell->dy(); -// } - -// gcell->setDensitySize(densitySizeX, densitySizeY); -// gcell->setDensityScale(scaleX * scaleY); - -// // analogous to NesterovBase::initDensity1() -// updateDensityCoordiLayoutInside(gcell); -// FloatPoint center(gcell->dCx(), gcell->dCy()); - -// curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] -// = curCoordi_[gcells_index] = initCoordi_[gcells_index] = center; - -// // analogous to updateCurGradient() -// updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); - -// // analogous to NesterovBase::updateInitialPrevSLPCoordi() -// float prevCoordiX = center.x - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].x; -// float prevCoordiY = center.y - npVars_->initialPrevCoordiUpdateCoef * curSLPSumGrads_[gcells_index].y; - -// FloatPoint newCoordi( -// getDensityCoordiLayoutInsideX(gcell, prevCoordiX), -// getDensityCoordiLayoutInsideY(gcell, prevCoordiY)); -// prevSLPCoordi_[gcells_index] = newCoordi; - -// // analogous to NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) -// gcell->setDensityCenterLocation(newCoordi.x, newCoordi.y); - -// // analogous to updatePrevGradient() -// updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); -// } - void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) { debugPrint(log_, @@ -3180,9 +3086,7 @@ void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) auto gcell = nbc_->getGCellByIndex(stor_index); if (gcell != nullptr) { new_instances.push_back(db_inst); - nb_gcells_.emplace_back(nbc_.get(), stor_index); - // log_->report("createcbkgcell index for nbc_gcells_: {}, nbc_gcells.size(): {}", stor_index, nbc_->getGCells().size()); - // log_->report("createcbkgcell index for nb_gcells_: {}, nb_gcells_.size(): {}", stor_index, nb_gcells_.size()); + nb_gcells_.emplace_back(nbc_.get(), stor_index); size_t gcells_index = nb_gcells_.size() - 1; // log_->report("create gcell nb index: {}", gcells_index); db_inst_to_nb_index_[db_inst] = gcells_index; @@ -3218,7 +3122,8 @@ size_t NesterovBaseCommon::createCbkGCell(odb::dbInst* db_inst) * static_cast(gcell_ptr->dy()); delta_area_ += area_change; new_gcells_count_++; - // log_->report("createcbkgcell gCellStor_ index for NBC_gcells_: {}, nbc_gcells.size(): {}", gCellStor_.size() - 1, nbc_gcells_.size() -1); + // log_->report("createcbkgcell gCellStor_ index for NBC_gcells_: {}, + // nbc_gcells.size(): {}", gCellStor_.size() - 1, nbc_gcells_.size() -1); return gCellStor_.size() - 1; } @@ -3351,15 +3256,20 @@ std::pair NesterovBaseCommon::destroyCbkGCell( void NesterovBase::cutFillerCells(int64_t inflation_area) { dbBlock* block = pb_->db()->getChip()->getBlock(); - if(inflation_area < 0) { - log_->warn(GPL,313, "Negative area provided to remove fillers: {}. Expected positive value, ignoring.", block->dbuAreaToMicrons(inflation_area)); + if (inflation_area < 0) { + log_->warn(GPL, + 313, + "Negative area provided to remove fillers: {}. Expected " + "positive value, ignoring.", + block->dbuAreaToMicrons(inflation_area)); return; } - + int removed_count = 0; const int64_t single_filler_area = getFillerCellArea(); - const int64_t max_fllers_to_remove = std::min( - inflation_area / single_filler_area, static_cast(fillerStor_.size())); + const int64_t max_fllers_to_remove + = std::min(inflation_area / single_filler_area, + static_cast(fillerStor_.size())); log_->report("totalFillerArea_: {}", block->dbuAreaToMicrons(totalFillerArea_)); log_->report("inflationArea: {}", block->dbuAreaToMicrons(inflation_area)); @@ -3369,36 +3279,38 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { + for (int i = nb_gcells_.size() - 1; + i >= 0 && removed_count < max_fllers_to_remove; + --i) { if (nb_gcells_[i]->isFiller()) { - // log_->report("filler to be removed in nb_gcells_ index: {}, nb_gcells_.size(): {}", i, nb_gcells_.size()); + // log_->report("filler to be removed in nb_gcells_ index: {}, + // nb_gcells_.size(): {}", i, nb_gcells_.size()); const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; // removed_fillers_.push_back(removed); - removed_fillers_.push_back(RemovedFillerState { - .gcell = removed, - .curSLPCoordi = curSLPCoordi_[i], - .curSLPWireLengthGrads = curSLPWireLengthGrads_[i], - .curSLPDensityGrads = curSLPDensityGrads_[i], - .curSLPSumGrads = curSLPSumGrads_[i], - - .nextSLPCoordi = nextSLPCoordi_[i], - .nextSLPWireLengthGrads = nextSLPWireLengthGrads_[i], - .nextSLPDensityGrads = nextSLPDensityGrads_[i], - .nextSLPSumGrads = nextSLPSumGrads_[i], - - .prevSLPCoordi = prevSLPCoordi_[i], - .prevSLPWireLengthGrads = prevSLPWireLengthGrads_[i], - .prevSLPDensityGrads = prevSLPDensityGrads_[i], - .prevSLPSumGrads = prevSLPSumGrads_[i], - - .curCoordi = curCoordi_[i], - .nextCoordi = nextCoordi_[i], - .initCoordi = initCoordi_[i], - - .snapshotCoordi = snapshotCoordi_[i], - .snapshotSLPCoordi = snapshotSLPCoordi_[i], - .snapshotSLPSumGrads = snapshotSLPSumGrads_[i] - }); + removed_fillers_.push_back(RemovedFillerState{ + .gcell = removed, + .curSLPCoordi = curSLPCoordi_[i], + .curSLPWireLengthGrads = curSLPWireLengthGrads_[i], + .curSLPDensityGrads = curSLPDensityGrads_[i], + .curSLPSumGrads = curSLPSumGrads_[i], + + .nextSLPCoordi = nextSLPCoordi_[i], + .nextSLPWireLengthGrads = nextSLPWireLengthGrads_[i], + .nextSLPDensityGrads = nextSLPDensityGrads_[i], + .nextSLPSumGrads = nextSLPSumGrads_[i], + + .prevSLPCoordi = prevSLPCoordi_[i], + .prevSLPWireLengthGrads = prevSLPWireLengthGrads_[i], + .prevSLPDensityGrads = prevSLPDensityGrads_[i], + .prevSLPSumGrads = prevSLPSumGrads_[i], + + .curCoordi = curCoordi_[i], + .nextCoordi = nextCoordi_[i], + .initCoordi = initCoordi_[i], + + .snapshotCoordi = snapshotCoordi_[i], + .snapshotSLPCoordi = snapshotSLPCoordi_[i], + .snapshotSLPSumGrads = snapshotSLPSumGrads_[i]}); destroyFillerGCell(i); availableFillerArea -= single_filler_area; @@ -3406,7 +3318,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) ++removed_count; } } - + totalFillerArea_ = availableFillerArea; if (single_filler_area * fillerStor_.size() != totalFillerArea_) { @@ -3435,21 +3347,27 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) if (fillerStor_.empty()) { log_->report("Not enough fillers to fully compensate inflation."); } - int64_t totalGCellArea - = nesterovInstsArea() + removedFillerArea + totalFillerArea_ + remainingInflationArea; + int64_t totalGCellArea = nesterovInstsArea() + removedFillerArea + + totalFillerArea_ + remainingInflationArea; setTargetDensity(static_cast(totalGCellArea) / static_cast(whiteSpaceArea())); -float newTargetDensity = static_cast(totalGCellArea) - / static_cast(whiteSpaceArea()); -log_->report("Density update breakdown:"); -log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(nesterovInstsArea())); -log_->report(" removedFillerArea: {}", block->dbuAreaToMicrons(removedFillerArea)); -log_->report(" remaining fillers area (totalFillerArea_): {}", block->dbuAreaToMicrons(totalFillerArea_)); -log_->report(" remainingInflationArea: {}", block->dbuAreaToMicrons(remainingInflationArea)); -log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(whiteSpaceArea())); -log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); -log_->report(" New target density: {}", newTargetDensity); + float newTargetDensity = static_cast(totalGCellArea) + / static_cast(whiteSpaceArea()); + log_->report("Density update breakdown:"); + log_->report(" nesterovInstsArea: {}", + block->dbuAreaToMicrons(nesterovInstsArea())); + log_->report(" removedFillerArea: {}", + block->dbuAreaToMicrons(removedFillerArea)); + log_->report(" remaining fillers area (totalFillerArea_): {}", + block->dbuAreaToMicrons(totalFillerArea_)); + log_->report(" remainingInflationArea: {}", + block->dbuAreaToMicrons(remainingInflationArea)); + log_->report(" whiteSpaceArea: {}", + block->dbuAreaToMicrons(whiteSpaceArea())); + log_->report(" totalGCellArea: {}", + block->dbuAreaToMicrons(totalGCellArea)); + log_->report(" New target density: {}", newTargetDensity); } } @@ -3483,7 +3401,7 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) size_t nb_last_index = nb_gcells_.size() - 1; if (nb_index_remove != nb_last_index) { GCellHandle& gcell_replace = nb_gcells_[nb_last_index]; - if(!gcell_replace->isFiller()) { + if (!gcell_replace->isFiller()) { odb::dbInst* db_inst = gcell_replace->insts()[0]->dbInst(); auto it = db_inst_to_nb_index_.find(db_inst); if (it != db_inst_to_nb_index_.end()) { @@ -3493,25 +3411,84 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) GPL, "callbacks", 1, - "Warning: gcell_replace dbInst {} not found in db_inst_to_nb_index_ map", + "Warning: gcell_replace dbInst {} not found in " + "db_inst_to_nb_index_ map", db_inst->getName()); - } + } } - std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); + std::swap(nb_gcells_[nb_index_remove], nb_gcells_[nb_last_index]); } swapAndPopParallelVectors(nb_index_remove, nb_last_index); nb_gcells_.pop_back(); filler_stor_index_to_nb_index_.erase(stor_index_remove); if (stor_index_remove != stor_last_index) { - size_t replacer_index = filler_stor_index_to_nb_index_.find(stor_last_index)->second; - std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); + size_t replacer_index + = filler_stor_index_to_nb_index_.find(stor_last_index)->second; + std::swap(fillerStor_[stor_index_remove], fillerStor_[stor_last_index]); nb_gcells_[replacer_index].updateHandle(this, stor_index_remove); filler_stor_index_to_nb_index_[stor_index_remove] = replacer_index; - } + } fillerStor_.pop_back(); } +void NesterovBase::restoreRemovedFillers() +{ + log_->info(GPL, + 76, + "Restoring {} previously removed fillers.", + removed_fillers_.size()); + size_t num_fill_before = fillerStor_.size(); + + for (const auto& filler : removed_fillers_) { + fillerStor_.push_back(filler.gcell); + size_t new_index = fillerStor_.size() - 1; + nb_gcells_.emplace_back(this, new_index); + filler_stor_index_to_nb_index_[new_index] = nb_gcells_.size() - 1; + + appendParallelVectors(); + size_t idx = nb_gcells_.size() - 1; + debugPrint(log_, GPL, "callbacks", 2, "restore filler nb index: {}", idx); + // Restore parallel vector data + curSLPCoordi_[idx] = filler.curSLPCoordi; + curSLPWireLengthGrads_[idx] = filler.curSLPWireLengthGrads; + curSLPDensityGrads_[idx] = filler.curSLPDensityGrads; + curSLPSumGrads_[idx] = filler.curSLPSumGrads; + + nextSLPCoordi_[idx] = filler.nextSLPCoordi; + nextSLPWireLengthGrads_[idx] = filler.nextSLPWireLengthGrads; + nextSLPDensityGrads_[idx] = filler.nextSLPDensityGrads; + nextSLPSumGrads_[idx] = filler.nextSLPSumGrads; + + prevSLPCoordi_[idx] = filler.prevSLPCoordi; + prevSLPWireLengthGrads_[idx] = filler.prevSLPWireLengthGrads; + prevSLPDensityGrads_[idx] = filler.prevSLPDensityGrads; + prevSLPSumGrads_[idx] = filler.prevSLPSumGrads; + + curCoordi_[idx] = filler.curCoordi; + nextCoordi_[idx] = filler.nextCoordi; + initCoordi_[idx] = filler.initCoordi; + + snapshotCoordi_[idx] = filler.snapshotCoordi; + snapshotSLPCoordi_[idx] = filler.snapshotSLPCoordi; + snapshotSLPSumGrads_[idx] = filler.snapshotSLPSumGrads; + + totalFillerArea_ += getFillerCellArea(); + } + + log_->info(GPL, + 77, + "Number of fillers before {} and after {} removal. Relative " + "reduction: {:.2f}%%", + num_fill_before, + fillerStor_.size(), + (num_fill_before > 0) + ? (static_cast(num_fill_before - fillerStor_.size()) + / num_fill_before * 100.0) + : 0.0); + removed_fillers_.clear(); +} + void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) { debugPrint(log_, GPL, "callbacks", 2, "NesterovBaseCommon::destroyGNet"); @@ -3608,7 +3585,6 @@ void NesterovBase::printGCellsToFile(const std::string& filename, out_append.close(); } - void NesterovBase::swapAndPop(std::vector& vec, size_t remove_index, size_t last_index) @@ -3671,6 +3647,30 @@ void NesterovBase::swapAndPopParallelVectors(size_t remove_index, swapAndPop(initCoordi_, remove_index, last_index); } +void NesterovBase::appendParallelVectors() +{ + if (curSLPCoordi_.size() == snapshotCoordi_.size()) { + snapshotCoordi_.emplace_back(); + snapshotSLPCoordi_.emplace_back(); + snapshotSLPSumGrads_.emplace_back(); + } + curSLPCoordi_.emplace_back(); + curSLPWireLengthGrads_.emplace_back(); + curSLPDensityGrads_.emplace_back(); + curSLPSumGrads_.emplace_back(); + nextSLPCoordi_.emplace_back(); + nextSLPWireLengthGrads_.emplace_back(); + nextSLPDensityGrads_.emplace_back(); + nextSLPSumGrads_.emplace_back(); + prevSLPCoordi_.emplace_back(); + prevSLPWireLengthGrads_.emplace_back(); + prevSLPDensityGrads_.emplace_back(); + prevSLPSumGrads_.emplace_back(); + curCoordi_.emplace_back(); + nextCoordi_.emplace_back(); + initCoordi_.emplace_back(); +} + void NesterovBaseCommon::printGCells() { log_->report("gCellStor_.size():{}", gCellStor_.size()); @@ -3728,9 +3728,10 @@ void NesterovBaseCommon::printGPins() } } - void NesterovBase::writeGCellVectorsToCSV(const std::string& filename, +void NesterovBase::writeGCellVectorsToCSV(const std::string& filename, int iteration, - bool write_header) const { + bool write_header) const +{ std::ofstream file(filename, std::ios::app); if (!file.is_open()) { log_->report("Could not open file: {}", filename); @@ -3743,11 +3744,11 @@ void NesterovBaseCommon::printGPins() file << ",insts_size,gPins_size"; file << ",lx,ly,ux,uy"; file << ",dLx,dLy,dUx,dUy"; - file << ",densityScale,gradientX,gradientY"; + file << ",densityScale,gradientX,gradientY"; auto add_header = [&](const std::string& name) { file << "," << name << "_x" << "," << name << "_y"; - }; + }; add_header("curSLPCoordi"); add_header("curSLPWireLengthGrads"); @@ -3781,7 +3782,8 @@ void NesterovBaseCommon::printGPins() file << iteration << "," << i; file << "," << nb_gcells_[i]->getName(); nb_gcells_[i]->writeAttributesToCSV(file); - // file << "," << nb_gcells_[i]->insts().size() << "," << nb_gcells_[i]->gPins().size(); + // file << "," << nb_gcells_[i]->insts().size() << "," << + // nb_gcells_[i]->gPins().size(); auto add_value = [&](const std::vector& vec) { file << "," << vec[i].x << "," << vec[i].y; @@ -3806,7 +3808,7 @@ void NesterovBaseCommon::printGPins() add_value(nextCoordi_); add_value(initCoordi_); - if(snapshotCoordi_.size() == curSLPCoordi_.size()){ + if (snapshotCoordi_.size() == curSLPCoordi_.size()) { add_value(snapshotCoordi_); add_value(snapshotSLPCoordi_); add_value(snapshotSLPSumGrads_); @@ -3818,8 +3820,6 @@ void NesterovBaseCommon::printGPins() file.close(); } - - static float getOverlapDensityArea(const Bin& bin, const GCell* cell) { const int rectLx = std::max(bin.lx(), cell->dLx()); diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index c6988b80f5..6af7f92e3a 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -113,7 +113,8 @@ class GCell void print(utl::Logger* logger, bool print_only_name) const; void printToFile(std::ostream& out, bool print_only_name = true) const; - void writeAttributesToCSV(std::ostream& out) const { + void writeAttributesToCSV(std::ostream& out) const + { out << "," << insts_.size() << "," << gPins_.size(); out << "," << lx_ << "," << ly_ << "," << ux_ << "," << uy_; out << "," << dLx_ << "," << dLy_ << "," << dUx_ << "," << dUy_; @@ -851,7 +852,8 @@ class NesterovBaseCommon void updateMinRcCellSize(); void revertGCellSizeToMinRc(); - GCell& getGCell(size_t index) { + GCell& getGCell(size_t index) + { if (index >= gCellStor_.size()) { log_->error(utl::GPL, 316, @@ -866,13 +868,11 @@ class NesterovBaseCommon { return std::distance(gCellStor_.data(), gCell); } - - // const std::vector& getGCellStor() const { return gCellStor_; } void printGCells(); void printGCellsToFile(const std::string& filename, - bool print_only_name, - bool also_print_minRc) const; + bool print_only_name, + bool also_print_minRc) const; void printGPins(); // TODO do this for each region? Also, manage this properly if other callbacks @@ -930,17 +930,18 @@ class NesterovBase utl::Logger* log); ~NesterovBase(); - GCell& getFillerGCell(size_t index) { + GCell& getFillerGCell(size_t index) + { if (index >= fillerStor_.size()) { - log_->error(utl::GPL, - 314, - "getFillerGCell: index {} out of bounds (fillerStor_.size() = {}).", - index, - fillerStor_.size()); + log_->error( + utl::GPL, + 314, + "getFillerGCell: index {} out of bounds (fillerStor_.size() = {}).", + index, + fillerStor_.size()); } return fillerStor_[index]; } - const std::vector& getGCells() const { return nb_gcells_; } @@ -1099,71 +1100,24 @@ class NesterovBase bool isDiverged() const { return isDiverged_; } void createCbkGCell(odb::dbInst* db_inst, size_t stor_index); - void destroyCbkGCell(odb::dbInst* db_inst); + void destroyCbkGCell(odb::dbInst* db_inst); // Must be called after fixPointers() to initialize internal values of gcells, // including parallel vectors. void updateGCellState(float wlCoeffX, float wlCoeffY); void destroyFillerGCell(size_t index_remove); - - void restoreRemovedFillers() { - log_->report("restoring removed fillers: {}", removed_fillers_.size()); - log_->report("fillerStor_.size() before: {}", fillerStor_.size()); - // for (auto& filler : removed_fillers_) { - // filler.gcell.print(log_, false); - // } - - log_->report("restoring!!!\n\n\n\n\n"); - - for (const auto& filler : removed_fillers_) { - // filler.gcell.print(log_, false); - fillerStor_.push_back(filler.gcell); - size_t new_index = fillerStor_.size() - 1; - nb_gcells_.emplace_back(this, new_index); - filler_stor_index_to_nb_index_[new_index] = nb_gcells_.size() - 1; - - appendParallelVectors(); - size_t idx = nb_gcells_.size() - 1; - log_->report("retore filler nb index: {}", idx); - // Restore parallel vector data - curSLPCoordi_[idx] = filler.curSLPCoordi; - curSLPWireLengthGrads_[idx] = filler.curSLPWireLengthGrads; - curSLPDensityGrads_[idx] = filler.curSLPDensityGrads; - curSLPSumGrads_[idx] = filler.curSLPSumGrads; - - nextSLPCoordi_[idx] = filler.nextSLPCoordi; - nextSLPWireLengthGrads_[idx] = filler.nextSLPWireLengthGrads; - nextSLPDensityGrads_[idx] = filler.nextSLPDensityGrads; - nextSLPSumGrads_[idx] = filler.nextSLPSumGrads; - - prevSLPCoordi_[idx] = filler.prevSLPCoordi; - prevSLPWireLengthGrads_[idx] = filler.prevSLPWireLengthGrads; - prevSLPDensityGrads_[idx] = filler.prevSLPDensityGrads; - prevSLPSumGrads_[idx] = filler.prevSLPSumGrads; - - curCoordi_[idx] = filler.curCoordi; - nextCoordi_[idx] = filler.nextCoordi; - initCoordi_[idx] = filler.initCoordi; - - snapshotCoordi_[idx] = filler.snapshotCoordi; - snapshotSLPCoordi_[idx] = filler.snapshotSLPCoordi; - snapshotSLPSumGrads_[idx] = filler.snapshotSLPSumGrads; - - // restored_filler_indexes_.push_back(idx); - totalFillerArea_ += getFillerCellArea(); - } - - log_->report("fillerStor_.size() after: {}", fillerStor_.size()); - removed_fillers_.clear(); - } + void restoreRemovedFillers(); + void clearRemovedFillers() { removed_fillers_.clear(); } void appendGCellCSVNote(const std::string& filename, - int iteration, - const std::string& message) const { + int iteration, + const std::string& message) const + { std::ofstream file(filename, std::ios::app); if (!file.is_open()) { - log_->report("Could not open CSV file for appending message: {}", filename); + log_->report("Could not open CSV file for appending message: {}", + filename); return; } @@ -1172,13 +1126,11 @@ class NesterovBase } void writeGCellVectorsToCSV(const std::string& filename, - int iteration, - bool write_header) const; - - + int iteration, + bool write_header) const; - void clearRemovedFillers() { removed_fillers_.clear(); } - void printGCellsToFile(const std::string& filename, bool print_only_name) const; + void printGCellsToFile(const std::string& filename, + bool print_only_name) const; private: NesterovBaseVars nbVars_; @@ -1207,7 +1159,8 @@ class NesterovBase // used to update gcell states after fixPointers() is called std::vector new_instances; - struct RemovedFillerState { + struct RemovedFillerState + { GCell gcell; FloatPoint curSLPCoordi; FloatPoint curSLPWireLengthGrads; @@ -1227,11 +1180,9 @@ class NesterovBase FloatPoint snapshotCoordi; FloatPoint snapshotSLPCoordi; FloatPoint snapshotSLPSumGrads; - }; + }; std::vector removed_fillers_; - // std::vector restored_filler_indexes_; - // size_t last_filler_index_; float sumPhi_ = 0; float targetDensity_ = 0; @@ -1277,29 +1228,7 @@ class NesterovBase size_t remove_index, size_t last_index); void swapAndPopParallelVectors(size_t remove_index, size_t last_index); - void appendParallelVectors() { - // log_->report("curSLPCoordi_.size(): {}, snapshotCoordi_.size(): {}",curSLPCoordi_.size(), snapshotCoordi_.size()); - if (curSLPCoordi_.size() == snapshotCoordi_.size()) { - snapshotCoordi_.emplace_back(); - snapshotSLPCoordi_.emplace_back(); - snapshotSLPSumGrads_.emplace_back(); - } - curSLPCoordi_.emplace_back(); - curSLPWireLengthGrads_.emplace_back(); - curSLPDensityGrads_.emplace_back(); - curSLPSumGrads_.emplace_back(); - nextSLPCoordi_.emplace_back(); - nextSLPWireLengthGrads_.emplace_back(); - nextSLPDensityGrads_.emplace_back(); - nextSLPSumGrads_.emplace_back(); - prevSLPCoordi_.emplace_back(); - prevSLPWireLengthGrads_.emplace_back(); - prevSLPDensityGrads_.emplace_back(); - prevSLPSumGrads_.emplace_back(); - curCoordi_.emplace_back(); - nextCoordi_.emplace_back(); - initCoordi_.emplace_back(); - } + void appendParallelVectors(); float wireLengthGradSum_ = 0; float densityGradSum_ = 0; @@ -1334,10 +1263,6 @@ class NesterovBase bool reprint_iter_header; void initFillerGCells(); - void updateSingleGCellState(size_t gcells_index, - float wlCoeffX, - float wlCoeffY, - bool update_pins); }; inline std::vector& NesterovBase::bins() @@ -1365,6 +1290,7 @@ class GCellHandle : storage_(nbc), storage_index_(idx) { } + GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), storage_index_(idx) { } @@ -1384,12 +1310,14 @@ class GCellHandle return std::holds_alternative(storage_); } - void updateHandle(NesterovBaseCommon* nbc, size_t new_index) { + void updateHandle(NesterovBaseCommon* nbc, size_t new_index) + { storage_ = nbc; storage_index_ = new_index; } - - void updateHandle(NesterovBase* nb, size_t new_index) { + + void updateHandle(NesterovBase* nb, size_t new_index) + { storage_ = nb; storage_index_ = new_index; } diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index f497bb0dd7..387e010bb9 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -407,11 +407,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) updateNextIter(iter); - // // if(iter==0 || iter % 100 == 0) - // if(iter==0 || iter==1 || iter==711 || iter==801 || iter==899 || iter==901) - // // if(iter==899 || iter==901) - // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); - // For JPEG Saving // graphics_ is only true if debug mode is active if (graphics_) { @@ -562,9 +557,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) } bool shouldTdProceed = tb_->executeTimingDriven(virtual_td_iter); - // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"timing-driven iteration"); - // if(!virtual_td_iter) - // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); nbVec_[0]->setTrueReprintIterHeader(); ++timing_driven_count; @@ -609,29 +601,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) + nesterov->getTotalFillerArea()) / static_cast(nesterov->whiteSpaceArea())); - - // int64_t deltaArea = nbc_->getDeltaArea(); - // int64_t instArea = nesterov->nesterovInstsArea(); - // int64_t fillerArea = nesterov->getTotalFillerArea(); - // int64_t wsArea = nesterov->whiteSpaceArea(); - - // int64_t totalGCellArea = deltaArea + instArea + fillerArea; - // float newTargetDensity = static_cast(totalGCellArea) - // / static_cast(wsArea); - - // log_->report("Density update breakdown (original method):"); - // log_->report(" deltaArea (inflatedAreaDelta_): {}", block->dbuAreaToMicrons(deltaArea)); - // log_->report(" nesterovInstsArea: {}", block->dbuAreaToMicrons(instArea)); - // log_->report(" totalFillerArea: {}", block->dbuAreaToMicrons(fillerArea)); - // log_->report(" whiteSpaceArea: {}", block->dbuAreaToMicrons(wsArea)); - // log_->report(" totalGCellArea: {}", block->dbuAreaToMicrons(totalGCellArea)); - // log_->report(" New target density: {}", newTargetDensity); - - - // nesterov->cutFillerCells(nbc_->getDeltaArea()); - // nbc_->fixPointers(); - // nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); - float rsz_delta_area_microns = block->dbuAreaToMicrons(nbc_->getDeltaArea()); float rsz_delta_area_percentage @@ -680,12 +649,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) nbc_->resetNewGcellsCount(); nesterov->updateAreas(); nesterov->updateDensitySize(); - - - // if(!virtual_td_iter){ - // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"repeat after every udpates!"); - // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); - // } } // update snapshot after non-virtual TD @@ -848,17 +811,9 @@ int NesterovPlace::doNesterovPlace(int start_iter) // recover the densityPenalty values // if further routability-driven is needed std::pair result = rb_->routability(); - nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"routability iteration"); is_routability_need_ = result.first; bool isRevertInitNeeded = result.second; - // if(is_routability_need_==false && isRevertInitNeeded==true) { - // nbVec_[0]->appendGCellCSVNote("gcell_vectors.csv",iter,"restoring fillers"); - // nbVec_[0]->writeGCellVectorsToCSV("gcell_vectors.csv", iter, iter==0); - // // nbVec_[0]->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); - // // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); - // } - // if routability is needed if (is_routability_need_ || isRevertInitNeeded) { // revert back the current density penality diff --git a/src/gpl/src/routeBase.cpp b/src/gpl/src/routeBase.cpp index 87d02e07f9..863461c4f3 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -674,14 +674,6 @@ std::pair RouteBase::routability() = inflatedAreaDelta_ + prev_total_gcells_area; nbVec_[0]->cutFillerCells(inflatedAreaDelta_); - // nbc_->fixPointers(); - - - // int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() - // + nbVec_[0]->getTotalFillerArea(); - // nbVec_[0]->setTargetDensity( - // static_cast(totalGCellArea) - // / static_cast(nbVec_[0]->whiteSpaceArea())); // // max density detection or, @@ -722,28 +714,13 @@ std::pair RouteBase::routability() nbVec_[0]->setTargetDensity(minRcTargetDensity_); nbc_->revertGCellSizeToMinRc(); - // nbVec_[0]->printGCellsToFile("before.txt",false); nbVec_[0]->restoreRemovedFillers(); - // nbVec_[0]->updateGCellState(); - // nbVec_[0]->printGCellsToFile("afterRestore.txt",false); nbVec_[0]->updateDensitySize(); resetRoutabilityResources(); - // nbc_->fixPointers(); - return std::make_pair(false, true); } - // cut filler cells accordingly - // if( nb_->totalFillerArea() > inflatedAreaDelta_ ) { - // nb_->cutFillerCells( nb_->totalFillerArea() - inflatedAreaDelta_ ); - // } - // routability-driven cannot solve this problem with the given density... - // return false - // else { - // return false; - // } - // updateArea nbVec_[0]->updateAreas(); From 6046a54a5b39e7c09e83b5c5b24ffda32b9ad290 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 30 May 2025 16:15:47 +0000 Subject: [PATCH 14/41] gpl: code cleanup, remove debuging code and comments Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 117 +++++++++++++++-------------------- 1 file changed, 49 insertions(+), 68 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index d037691e56..01d65f7c81 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1494,14 +1494,6 @@ void NesterovBaseCommon::revertGCellSizeToMinRc() } } -// GCell* NesterovBaseCommon::getGCellByIndex(size_t i) -// { -// if (i >= gCellStor_.size()) { -// return nullptr; -// } -// return &gCellStor_[i]; -// } - GCell* NesterovBaseCommon::getGCellByIndex(size_t idx) { if (idx >= gCellStor_.size()) { @@ -1688,8 +1680,6 @@ NesterovBase::NesterovBase(NesterovBaseVars nbVars, filler_stor_index_to_nb_index_[i] = nb_gcells_.size() - 1; } - // last_filler_index_ = fillerStor_.empty() ? 0 : fillerStor_.size() - 1; - debugPrint(log_, GPL, "FillerInit", @@ -2103,12 +2093,7 @@ void NesterovBase::updateAreas() // bloating can change the following : // stdInstsArea and macroInstsArea stdInstsArea_ = macroInstsArea_ = 0; - // int i =0; - // log_->report("updateAreas(), nb_gcells_.size(): {}", nb_gcells_.size()); - // log_->report("updateAreas(), fillerStor_.size(): {}", fillerStor_.size()); for (auto it = nb_gcells_.begin(); it < nb_gcells_.end(); ++it) { - // if(print) - // log_->report("{}",++i); auto& gCell = *it; // old-style loop for old OpenMP if (!gCell) { continue; @@ -2131,14 +2116,6 @@ void NesterovBase::updateAreas() // / static_cast(whiteSpaceArea_); if (totalFillerArea_ < 0) { - // log_->warn(GPL, - // 303, - // "Consider increasing the target density or re-floorplanning " - // "with a larger core area.\n" - // "Given target density: {:.2f}\n" - // "Suggested target density: {:.2f} (uniform density)", - // targetDensity_, - // uniformTargetDensity_); log_->report( "No more filler cells to remove (empty space), density is being " "modified to compensate for area modification. Desired filler area to " @@ -2635,9 +2612,6 @@ void NesterovBase::updateNextIter(const int iter) nextSLPDensityGrads_[k] = curSLPDensityGrads_[k]; nextSLPSumGrads_[k] = curSLPSumGrads_[k]; nextCoordi_[k] = curCoordi_[k]; - } else { - if (nb_gcells_[k]->isLocked()) - log_->report("locked instance in updateNextIter, index {}!", k); } } @@ -3077,18 +3051,18 @@ void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) void NesterovBase::createCbkGCell(odb::dbInst* db_inst, size_t stor_index) { - debugPrint(log_, - GPL, - "callbacks", - 1, - "NesterovBase: creatGCell {}", - db_inst->getName()); auto gcell = nbc_->getGCellByIndex(stor_index); if (gcell != nullptr) { new_instances.push_back(db_inst); nb_gcells_.emplace_back(nbc_.get(), stor_index); size_t gcells_index = nb_gcells_.size() - 1; - // log_->report("create gcell nb index: {}", gcells_index); + debugPrint(log_, + GPL, + "callbacks", + 1, + "NesterovBase: creatGCell {}, index: {}", + db_inst->getName(), + gcells_index); db_inst_to_nb_index_[db_inst] = gcells_index; appendParallelVectors(); @@ -3270,12 +3244,9 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) const int64_t max_fllers_to_remove = std::min(inflation_area / single_filler_area, static_cast(fillerStor_.size())); - log_->report("totalFillerArea_: {}", - block->dbuAreaToMicrons(totalFillerArea_)); - log_->report("inflationArea: {}", block->dbuAreaToMicrons(inflation_area)); - log_->report("number of fillers before removal: {}", fillerStor_.size()); - log_->report("filler area: {}", block->dbuAreaToMicrons(single_filler_area)); + int64_t filler_area_before_removal = totalFillerArea_; + size_t num_filler_before_removal = fillerStor_.size(); int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; @@ -3284,9 +3255,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) --i) { if (nb_gcells_[i]->isFiller()) { // log_->report("filler to be removed in nb_gcells_ index: {}, - // nb_gcells_.size(): {}", i, nb_gcells_.size()); const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; - // removed_fillers_.push_back(removed); removed_fillers_.push_back(RemovedFillerState{ .gcell = removed, .curSLPCoordi = curSLPCoordi_[i], @@ -3330,23 +3299,39 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) block->dbuAreaToMicrons(totalFillerArea_)); } - log_->report("Filler cells removed to compensate for inflation: {}", - removed_count); - log_->report("number of fillers after removal: {}", fillerStor_.size()); + log_->info( + GPL, + 76, + "Fillers (count): Before - {}, After - {} ({:.2f}% reduction)", + num_filler_before_removal, + fillerStor_.size(), + (num_filler_before_removal > 0) + ? (static_cast(num_filler_before_removal - fillerStor_.size()) + / num_filler_before_removal * 100.0) + : 0.0); + + log_->info( + GPL, + 77, + "Filler area (um^2): Before - {:.3f}, After - {:.3f} ({:.2f}% reduction)", + block->dbuAreaToMicrons(filler_area_before_removal), + block->dbuAreaToMicrons(totalFillerArea_), + (filler_area_before_removal > 0) + ? (static_cast(filler_area_before_removal - totalFillerArea_) + / filler_area_before_removal * 100.0) + : 0.0); int64_t removedFillerArea = single_filler_area * removed_count; int64_t remainingInflationArea = originalInflationArea - removedFillerArea; - log_->report("Area removed by fillers: {}", - block->dbuAreaToMicrons(removedFillerArea)); - log_->report( - "Remaining inflation area to be compensated by modifying density: {}", - block->dbuAreaToMicrons(remainingInflationArea)); + log_->info(GPL, + 78, + "Area removed by fillers: {:.3f} um^2. Remaining area to be " + "compensated by modifying density: {:.3f} um^2", + block->dbuAreaToMicrons(removedFillerArea), + block->dbuAreaToMicrons(remainingInflationArea)); if (remainingInflationArea > single_filler_area && fillerStor_.empty()) { - if (fillerStor_.empty()) { - log_->report("Not enough fillers to fully compensate inflation."); - } int64_t totalGCellArea = nesterovInstsArea() + removedFillerArea + totalFillerArea_ + remainingInflationArea; setTargetDensity(static_cast(totalGCellArea) @@ -3354,26 +3339,22 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) float newTargetDensity = static_cast(totalGCellArea) / static_cast(whiteSpaceArea()); - log_->report("Density update breakdown:"); - log_->report(" nesterovInstsArea: {}", - block->dbuAreaToMicrons(nesterovInstsArea())); - log_->report(" removedFillerArea: {}", - block->dbuAreaToMicrons(removedFillerArea)); - log_->report(" remaining fillers area (totalFillerArea_): {}", - block->dbuAreaToMicrons(totalFillerArea_)); - log_->report(" remainingInflationArea: {}", - block->dbuAreaToMicrons(remainingInflationArea)); - log_->report(" whiteSpaceArea: {}", - block->dbuAreaToMicrons(whiteSpaceArea())); - log_->report(" totalGCellArea: {}", - block->dbuAreaToMicrons(totalGCellArea)); - log_->report(" New target density: {}", newTargetDensity); + log_->info(GPL, + 79, + "Not enough fillers to fully compensate inflation.\n\t\tNew " + "target density: {}", + newTargetDensity); } } void NesterovBase::destroyFillerGCell(size_t nb_index_remove) { - // log_->report("destroy filler nb index: {}", nb_index_remove); + debugPrint(log_, + GPL, + "callbacks", + 2, + "destroy filler nb index: {}", + nb_index_remove); size_t stor_last_index = fillerStor_.size() - 1; GCellHandle& gcell_remove = nb_gcells_[nb_index_remove]; size_t stor_index_remove = gcell_remove.getStorageIndex(); @@ -3435,7 +3416,7 @@ void NesterovBase::destroyFillerGCell(size_t nb_index_remove) void NesterovBase::restoreRemovedFillers() { log_->info(GPL, - 76, + 80, "Restoring {} previously removed fillers.", removed_fillers_.size()); size_t num_fill_before = fillerStor_.size(); @@ -3477,7 +3458,7 @@ void NesterovBase::restoreRemovedFillers() } log_->info(GPL, - 77, + 81, "Number of fillers before {} and after {} removal. Relative " "reduction: {:.2f}%%", num_fill_before, From 3b1a8c560ef2e569ffea50f2109fd3cc19ad8be6 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 30 May 2025 16:48:06 +0000 Subject: [PATCH 15/41] gpl: fix filler removal log messages Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 50 ++++++++++++------------------------ 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 01d65f7c81..ac21204541 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -2106,23 +2106,6 @@ void NesterovBase::updateAreas() * static_cast(gCell->dy()); } } - - int64_t coreArea = pb_->die().coreArea(); - whiteSpaceArea_ = coreArea - static_cast(pb_->nonPlaceInstsArea()); - - movableArea_ = whiteSpaceArea_ * targetDensity_; - totalFillerArea_ = movableArea_ - nesterovInstsArea(); - // uniformTargetDensity_ = static_cast(nesterovInstsArea()) - // / static_cast(whiteSpaceArea_); - - if (totalFillerArea_ < 0) { - log_->report( - "No more filler cells to remove (empty space), density is being " - "modified to compensate for area modification. Desired filler area to " - "be removed:{}", - totalFillerArea_); - totalFillerArea_ = 0; - } } void NesterovBase::updateDensityCoordiLayoutInside(GCell* gCell) @@ -3096,8 +3079,6 @@ size_t NesterovBaseCommon::createCbkGCell(odb::dbInst* db_inst) * static_cast(gcell_ptr->dy()); delta_area_ += area_change; new_gcells_count_++; - // log_->report("createcbkgcell gCellStor_ index for NBC_gcells_: {}, - // nbc_gcells.size(): {}", gCellStor_.size() - 1, nbc_gcells_.size() -1); return gCellStor_.size() - 1; } @@ -3299,25 +3280,26 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) block->dbuAreaToMicrons(totalFillerArea_)); } - log_->info( - GPL, - 76, - "Fillers (count): Before - {}, After - {} ({:.2f}% reduction)", - num_filler_before_removal, - fillerStor_.size(), - (num_filler_before_removal > 0) - ? (static_cast(num_filler_before_removal - fillerStor_.size()) - / num_filler_before_removal * 100.0) - : 0.0); + log_->info(GPL, + 76, + "Removing fillers, count: Before: {}, After: {} ({:+.2f}%)", + num_filler_before_removal, + fillerStor_.size(), + (num_filler_before_removal != 0) + ? (static_cast( + static_cast(fillerStor_.size()) + - static_cast(num_filler_before_removal)) + / num_filler_before_removal * 100.0) + : 0.0); log_->info( GPL, 77, - "Filler area (um^2): Before - {:.3f}, After - {:.3f} ({:.2f}% reduction)", + "Filler area (um^2) : Before: {:.3f}, After: {:.3f} ({:+.2f}%)", block->dbuAreaToMicrons(filler_area_before_removal), block->dbuAreaToMicrons(totalFillerArea_), - (filler_area_before_removal > 0) - ? (static_cast(filler_area_before_removal - totalFillerArea_) + (filler_area_before_removal != 0) + ? (static_cast(totalFillerArea_ - filler_area_before_removal) / filler_area_before_removal * 100.0) : 0.0); @@ -3326,8 +3308,10 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) log_->info(GPL, 78, - "Area removed by fillers: {:.3f} um^2. Remaining area to be " + "Removed fillers count: {}, area removed: {:.3f} um^2. Remaining " + "area to be " "compensated by modifying density: {:.3f} um^2", + removed_count, block->dbuAreaToMicrons(removedFillerArea), block->dbuAreaToMicrons(remainingInflationArea)); From c05d73e4bb318768e3d3b23aaa1d02e78dc9d305 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 30 May 2025 17:01:42 +0000 Subject: [PATCH 16/41] gpl: include messages for total delta area for final routability and final placement Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovPlace.cpp | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 387e010bb9..5aed78e7a8 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -328,6 +328,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) int routability_driven_count = 0; int timing_driven_count = 0; bool final_routability_image_saved = false; + int64_t original_area = 0; // Core Nesterov Loop int iter = start_iter; @@ -762,6 +763,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) for (auto& nb : nbVec_) { nb->snapshot(); + original_area += nb->nesterovInstsArea(); } log_->info(GPL, 88, "Routability snapshot saved at iter = {}", iter); @@ -830,6 +832,25 @@ int NesterovPlace::doNesterovPlace(int start_iter) log_->info( GPL, 89, "Routability end iteration: revert back to snapshot"); } + + if (!is_routability_need_) { + auto block = pbc_->db()->getChip()->getBlock(); + int64_t end_routability_area = 0; + for (auto& nb : nbVec_) { + end_routability_area += nb->nesterovInstsArea(); + } + double percent_diff + = 100.0 * (end_routability_area - original_area) / original_area; + log_->info( + GPL, + 82, + "End routability - original area um^2: {:.2f}, new area: {:.2f}, " + "change: {:.2f}%. Change in area due to total routability " + "inflations.", + block->dbuAreaToMicrons(original_area), + block->dbuAreaToMicrons(end_routability_area), + percent_diff); + } } // check each for converge and if all are converged then stop @@ -845,6 +866,21 @@ int NesterovPlace::doNesterovPlace(int start_iter) break; } } + auto block = pbc_->db()->getChip()->getBlock(); + int64_t new_area = 0; + for (auto& nb : nbVec_) { + new_area += nb->nesterovInstsArea(); + } + double percent_diff = 100.0 * (new_area - original_area) / original_area; + log_->info(GPL, + 83, + "Original area um^2: {:.2f}, new area: {:.2f}, change: {:.2f}%, " + "New area due " + "to routability inflation and/or timing-driven otimizations.", + block->dbuAreaToMicrons(original_area), + block->dbuAreaToMicrons(new_area), + percent_diff); + // in all case including diverge, // db should be updated. updateDb(); From b24e28b3e070cf59c2341aa24f8ca06da7c32e75 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 30 May 2025 17:09:36 +0000 Subject: [PATCH 17/41] gpl: update tests after removal of fillers Signed-off-by: Augusto Berndt --- src/gpl/test/ar01.ok | 1 + src/gpl/test/ar02.ok | 1 + src/gpl/test/cluster_place01.ok | 1 + src/gpl/test/convergence01.ok | 7 +- src/gpl/test/core01.ok | 1 + src/gpl/test/density01.ok | 1 + src/gpl/test/diverge01.ok | 1 + src/gpl/test/incremental01.ok | 1 + src/gpl/test/incremental02.ok | 2 + src/gpl/test/nograd01.ok | 1 + src/gpl/test/simple01-obs.ok | 1 + src/gpl/test/simple01-rd.ok | 2 + src/gpl/test/simple01-ref.ok | 1 + src/gpl/test/simple01-skip-io.ok | 1 + src/gpl/test/simple01-td-tune.defok | 584 ++++++++++++++-------------- src/gpl/test/simple01-td-tune.ok | 27 +- src/gpl/test/simple01-td.defok | 578 +++++++++++++-------------- src/gpl/test/simple01-td.ok | 33 +- src/gpl/test/simple01-uniform.ok | 1 + src/gpl/test/simple01.ok | 1 + src/gpl/test/simple02-rd.ok | 2 + src/gpl/test/simple02.ok | 1 + src/gpl/test/simple03-rd.ok | 2 + src/gpl/test/simple03.ok | 1 + src/gpl/test/simple04-rd.ok | 2 + src/gpl/test/simple04.ok | 1 + src/gpl/test/simple05.ok | 1 + src/gpl/test/simple07.ok | 1 + src/gpl/test/simple08.ok | 1 + src/gpl/test/simple09.ok | 1 + src/gpl/test/simple10.ok | 1 + 31 files changed, 647 insertions(+), 613 deletions(-) diff --git a/src/gpl/test/ar01.ok b/src/gpl/test/ar01.ok index 8959dda2b7..82334cfe17 100644 --- a/src/gpl/test/ar01.ok +++ b/src/gpl/test/ar01.ok @@ -64,4 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5545 [INFO GPL-1008] - For 80% usage of free space: 0.6238 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/ar02.ok b/src/gpl/test/ar02.ok index 77a37f56cc..4dfcda6d56 100644 --- a/src/gpl/test/ar02.ok +++ b/src/gpl/test/ar02.ok @@ -64,4 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5543 [INFO GPL-1008] - For 80% usage of free space: 0.6235 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/cluster_place01.ok b/src/gpl/test/cluster_place01.ok index 3b4431a88e..8edefac261 100644 --- a/src/gpl/test/cluster_place01.ok +++ b/src/gpl/test/cluster_place01.ok @@ -65,4 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index eb38286b3f..a46661e39b 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -61,12 +61,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -2.799 um^2 (-18.03%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.476 -[INFO GPL-1001] Finished with Overflow: 0.093288 +[INFO GPL-0110] Timing-driven: new target density: 0.47454166 +[INFO GPL-1001] Finished with Overflow: 0.094762 [INFO GPL-1002] Placed Cell Area 12.7283 [INFO GPL-1003] Available Free Area 116.6400 -[INFO GPL-1004] Minimum Feasible Density 0.1091 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.1400 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.1212 [INFO GPL-1008] - For 80% usage of free space: 0.1364 +[INFO GPL-0083] Original area um^2: 0.00, new area: 12.73, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/core01.ok b/src/gpl/test/core01.ok index ffbd86156b..2c4333acfd 100644 --- a/src/gpl/test/core01.ok +++ b/src/gpl/test/core01.ok @@ -64,4 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/density01.ok b/src/gpl/test/density01.ok index 9ee3e20fc0..0503f1b180 100644 --- a/src/gpl/test/density01.ok +++ b/src/gpl/test/density01.ok @@ -143,4 +143,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/diverge01.ok b/src/gpl/test/diverge01.ok index fd6f7926bb..43e845c4ea 100644 --- a/src/gpl/test/diverge01.ok +++ b/src/gpl/test/diverge01.ok @@ -45,4 +45,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. diff --git a/src/gpl/test/incremental01.ok b/src/gpl/test/incremental01.ok index 5bfcb86dfa..05bae05440 100644 --- a/src/gpl/test/incremental01.ok +++ b/src/gpl/test/incremental01.ok @@ -49,4 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/incremental02.ok b/src/gpl/test/incremental02.ok index 4551e99c64..bb09a62634 100644 --- a/src/gpl/test/incremental02.ok +++ b/src/gpl/test/incremental02.ok @@ -84,6 +84,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 280 | 0.2922 | 1.292884e+09 | +0.45% | 3.84e-09 | 290 | 0.2840 | 1.298895e+09 | +0.46% | 5.65e-09 | 300 | 0.2706 | 1.303666e+09 | +0.37% | 8.31e-09 | +[INFO GPL-0083] Original area um^2: 0.00, new area: 44590.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. [INFO GPL-0133] Unlocked instances 310 | 0.4793 | 1.157110e+09 | -11.24% | 1.09e-08 | 320 | 0.4447 | 1.155177e+09 | -0.17% | 1.45e-08 | @@ -106,4 +107,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0553 [INFO GPL-1008] - For 80% usage of free space: 0.0622 +[INFO GPL-0083] Original area um^2: 0.00, new area: 44590.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/nograd01.ok b/src/gpl/test/nograd01.ok index fe42f0f0c9..b1333c1531 100644 --- a/src/gpl/test/nograd01.ok +++ b/src/gpl/test/nograd01.ok @@ -40,4 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0001 +[INFO GPL-0083] Original area um^2: 0.00, new area: 0.44, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-obs.ok b/src/gpl/test/simple01-obs.ok index d8b57c127e..e25416f9b4 100644 --- a/src/gpl/test/simple01-obs.ok +++ b/src/gpl/test/simple01-obs.ok @@ -64,4 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.8611 [INFO GPL-1008] - For 80% usage of free space: 0.9687 [INFO GPL-1009] - For 50% usage of free space: 1.5499 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-rd.ok b/src/gpl/test/simple01-rd.ok index 81115703eb..98943d3c0f 100644 --- a/src/gpl/test/simple01-rd.ok +++ b/src/gpl/test/simple01-rd.ok @@ -82,6 +82,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. +[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -99,4 +100,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-ref.ok b/src/gpl/test/simple01-ref.ok index 6cc73a5ded..71c29743b6 100644 --- a/src/gpl/test/simple01-ref.ok +++ b/src/gpl/test/simple01-ref.ok @@ -65,4 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-skip-io.ok b/src/gpl/test/simple01-skip-io.ok index 70c41f0adc..94fde94d11 100644 --- a/src/gpl/test/simple01-skip-io.ok +++ b/src/gpl/test/simple01-skip-io.ok @@ -76,4 +76,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-td-tune.defok b/src/gpl/test/simple01-td-tune.defok index d3b7dc0cbe..ecbb75cbee 100644 --- a/src/gpl/test/simple01-td-tune.defok +++ b/src/gpl/test/simple01-td-tune.defok @@ -60,293 +60,293 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 287 ; - - _276_ NOR2_X4 + PLACED ( 8992 31218 ) N ; - - _278_ INV_X1 + PLACED ( 15328 38130 ) N ; - - _279_ NOR2_X1 + PLACED ( 17931 36954 ) N ; - - _280_ INV_X1 + PLACED ( 20221 34729 ) N ; - - _281_ INV_X1 + PLACED ( 38783 51464 ) N ; - - _282_ NOR2_X1 + PLACED ( 37734 52342 ) N ; - - _283_ INV_X1 + PLACED ( 39859 41363 ) N ; - - _284_ NOR2_X1 + PLACED ( 38857 48320 ) N ; - - _285_ NOR2_X1 + PLACED ( 36842 50361 ) N ; - - _286_ INV_X1 + PLACED ( 27020 47627 ) N ; - - _287_ NOR2_X1 + PLACED ( 26286 49112 ) N ; - - _288_ INV_X1 + PLACED ( 26736 48924 ) N ; - - _289_ AND2_X1 + PLACED ( 26565 32924 ) N ; - - _290_ INV_X1 + PLACED ( 15971 15003 ) N ; - - _291_ NOR2_X1 + PLACED ( 14295 17669 ) N ; - - _292_ INV_X2 + PLACED ( 6986 19538 ) N ; - - _293_ AOI21_X2 + PLACED ( 13051 20857 ) N ; - - _294_ INV_X1 + PLACED ( 25923 14664 ) N ; - - _295_ NOR2_X1 + PLACED ( 24916 16245 ) N ; - - _296_ INV_X1 + PLACED ( 20389 15718 ) N ; - - _297_ NOR2_X2 + PLACED ( 20814 15746 ) N ; - - _298_ NOR2_X1 + PLACED ( 24687 19130 ) N ; - - _299_ AND2_X2 + PLACED ( 29214 30198 ) N ; - - _300_ INV_X1 + PLACED ( 45737 17443 ) N ; - - _301_ NOR2_X1 + PLACED ( 45709 18362 ) N ; - - _302_ INV_X1 + PLACED ( 46403 23253 ) N ; - - _303_ NOR3_X1 + PLACED ( 47654 21162 ) N ; - - _304_ AOI21_X1 + PLACED ( 46519 18797 ) N ; - - _305_ INV_X1 + PLACED ( 43200 20218 ) N ; - - _306_ INV_X1 + PLACED ( 42796 32296 ) N ; - - _307_ AND2_X1 + PLACED ( 44515 30630 ) N ; - - _308_ INV_X1 + PLACED ( 47154 30671 ) N ; - - _309_ INV_X1 + PLACED ( 39773 38786 ) N ; - - _310_ OAI211_X1 + PLACED ( 42259 31094 ) N ; - - _311_ NAND2_X1 + PLACED ( 42780 28001 ) N ; - - _312_ INV_X1 + PLACED ( 48789 23401 ) N ; - - _313_ NOR2_X1 + PLACED ( 45993 24195 ) N ; - - _314_ NOR3_X1 + PLACED ( 41714 24689 ) N ; - - _315_ NOR2_X2 + PLACED ( 39907 23465 ) N ; - - _316_ INV_X1 + PLACED ( 36040 18131 ) N ; - - _317_ NOR2_X1 + PLACED ( 34856 18948 ) N ; - - _318_ INV_X1 + PLACED ( 31731 18154 ) N ; - - _319_ NOR2_X1 + PLACED ( 34224 23724 ) N ; - - _320_ INV_X2 + PLACED ( 17793 49790 ) N ; - - _321_ NAND2_X1 + PLACED ( 18507 43598 ) N ; - - _322_ INV_X1 + PLACED ( 21577 42654 ) N ; - - _323_ OAI21_X1 + PLACED ( 18534 42574 ) N ; - - _324_ NOR4_X2 + PLACED ( 30322 23559 ) N ; - - _325_ NOR2_X1 + PLACED ( 18966 44469 ) N ; - - _326_ OAI21_X1 + PLACED ( 20352 42877 ) N ; - - _327_ INV_X1 + PLACED ( 12687 43030 ) N ; - - _328_ INV_X1 + PLACED ( 31250 15712 ) N ; - - _329_ NOR3_X1 + PLACED ( 34492 23333 ) N ; - - _330_ AOI21_X1 + PLACED ( 33327 24673 ) N ; - - _331_ OAI221_X4 + PLACED ( 21242 42088 ) N ; - - _332_ OAI211_X1 + PLACED ( 27822 25785 ) N ; - - _333_ AND2_X1 + PLACED ( 17548 37382 ) N ; - - _334_ INV_X2 + PLACED ( 19406 36390 ) N ; - - _335_ NAND2_X1 + PLACED ( 37678 52495 ) N ; - - _336_ NAND2_X1 + PLACED ( 38520 47164 ) N ; - - _337_ NAND2_X1 + PLACED ( 35499 49389 ) N ; - - _338_ INV_X1 + PLACED ( 37146 51538 ) N ; - - _339_ NAND3_X1 + PLACED ( 28509 49423 ) N ; - - _340_ NAND2_X1 + PLACED ( 26423 49073 ) N ; - - _341_ NAND2_X1 + PLACED ( 26794 48816 ) N ; - - _342_ INV_X1 + PLACED ( 14814 17217 ) N ; - - _343_ OAI211_X1 + PLACED ( 15018 16904 ) N ; - - _344_ NAND2_X1 + PLACED ( 16201 16614 ) N ; - - _345_ AOI211_X1 + PLACED ( 21557 18325 ) N ; - - _346_ NAND2_X1 + PLACED ( 24697 16278 ) N ; - - _347_ NAND2_X1 + PLACED ( 20068 17498 ) N ; - - _348_ OAI21_X1 + PLACED ( 23091 18501 ) N ; - - _349_ OR2_X2 + PLACED ( 23390 25487 ) N ; - - _350_ AOI21_X1 + PLACED ( 24824 33739 ) N ; - - _351_ AND4_X1 + PLACED ( 20523 34161 ) N ; - - _352_ AOI22_X1 + PLACED ( 20511 34292 ) N ; - - _353_ OR2_X1 + PLACED ( 20360 34929 ) N ; - - _355_ INV_X8 + PLACED ( 4392 31640 ) N ; - - _357_ AND3_X2 + PLACED ( 25384 32790 ) N ; - - _358_ OAI211_X1 + PLACED ( 25250 25405 ) N ; - - _359_ OAI21_X2 + PLACED ( 24580 34449 ) N ; - - _360_ OAI21_X2 + PLACED ( 23857 25465 ) N ; - - _361_ NAND3_X4 + PLACED ( 25840 26312 ) N ; - - _362_ NOR2_X4 + PLACED ( 34534 29956 ) N ; - - _363_ INV_X4 + PLACED ( 35879 31483 ) N ; - - _364_ NOR2_X4 + PLACED ( 34557 36119 ) N ; - - _365_ AOI221_X4 + PLACED ( 26489 39440 ) N ; - - _366_ AND2_X4 + PLACED ( 36823 30312 ) N ; - - _368_ OAI21_X1 + PLACED ( 19847 35459 ) N ; - - _370_ AOI22_X1 + PLACED ( 17951 37916 ) N ; - - _371_ NOR2_X2 + PLACED ( 29542 24615 ) N ; - - _372_ NAND3_X1 + PLACED ( 29326 31695 ) N ; - - _373_ OR2_X1 + PLACED ( 30100 46082 ) N ; - - _374_ AOI22_X1 + PLACED ( 30465 49620 ) N ; - - _375_ NAND2_X1 + PLACED ( 30541 50008 ) N ; - - _376_ XOR2_X1 + PLACED ( 27908 54822 ) N ; - - _377_ XNOR2_X1 + PLACED ( 29497 53606 ) N ; - - _378_ INV_X4 + PLACED ( 8329 25427 ) N ; - - _380_ NOR2_X1 + PLACED ( 32468 55095 ) N ; - - _381_ NAND2_X1 + PLACED ( 31011 54271 ) N ; - - _382_ AOI221_X4 + PLACED ( 27254 45739 ) N ; - - _383_ AOI21_X1 + PLACED ( 31571 55441 ) N ; - - _384_ INV_X1 + PLACED ( 33809 45702 ) N ; - - _385_ INV_X1 + PLACED ( 32367 42611 ) N ; - - _386_ OAI211_X1 + PLACED ( 34626 46284 ) N ; - - _387_ INV_X1 + PLACED ( 37920 50885 ) N ; - - _388_ AND4_X1 + PLACED ( 36904 51863 ) N ; - - _389_ AOI22_X1 + PLACED ( 36707 51948 ) N ; - - _390_ NOR2_X1 + PLACED ( 38811 52763 ) N ; - - _391_ NOR2_X1 + PLACED ( 42046 54557 ) N ; - - _392_ NAND2_X1 + PLACED ( 40256 53758 ) N ; - - _393_ AOI221_X4 + PLACED ( 37701 45730 ) N ; - - _394_ AOI21_X1 + PLACED ( 40913 54781 ) N ; - - _395_ OAI21_X1 + PLACED ( 34571 45319 ) N ; - - _396_ XOR2_X1 + PLACED ( 43973 46136 ) N ; - - _397_ XNOR2_X1 + PLACED ( 43961 46083 ) N ; - - _398_ NOR2_X1 + PLACED ( 46077 47983 ) N ; - - _399_ AOI221_X1 + PLACED ( 44268 47144 ) N ; - - _401_ OR3_X1 + PLACED ( 41442 37578 ) N ; - - _402_ AOI21_X1 + PLACED ( 45215 47866 ) N ; - - _403_ INV_X1 + PLACED ( 22807 20175 ) N ; - - _404_ OAI211_X1 + PLACED ( 27817 23355 ) N ; - - _405_ AOI21_X1 + PLACED ( 20802 16551 ) N ; - - _406_ AOI21_X1 + PLACED ( 21149 14291 ) N ; - - _407_ AND2_X1 + PLACED ( 26978 12516 ) N ; - - _408_ XNOR2_X1 + PLACED ( 26463 10243 ) N ; - - _409_ XNOR2_X1 + PLACED ( 27713 10893 ) N ; - - _410_ NOR2_X1 + PLACED ( 29848 11427 ) N ; - - _411_ AOI221_X1 + PLACED ( 28479 11783 ) N ; - - _412_ OR3_X1 + PLACED ( 28588 16914 ) N ; - - _413_ AOI21_X1 + PLACED ( 29159 11328 ) N ; - - _414_ OAI21_X1 + PLACED ( 28367 23756 ) N ; - - _415_ AND2_X1 + PLACED ( 18638 18810 ) N ; - - _416_ AND4_X1 + PLACED ( 19325 21880 ) N ; - - _417_ AOI22_X1 + PLACED ( 19404 21974 ) N ; - - _418_ OR2_X1 + PLACED ( 19269 22720 ) N ; - - _419_ NOR2_X1 + PLACED ( 18657 25364 ) N ; - - _420_ AOI221_X4 + PLACED ( 26670 34847 ) N ; - - _421_ OAI21_X1 + PLACED ( 18818 23323 ) N ; - - _422_ AOI21_X1 + PLACED ( 18545 25416 ) N ; - - _423_ AOI21_X1 + PLACED ( 9823 20056 ) N ; - - _424_ NOR2_X1 + PLACED ( 9147 18677 ) N ; - - _425_ NOR2_X1 + PLACED ( 9711 18084 ) N ; - - _426_ XNOR2_X1 + PLACED ( 12320 13810 ) N ; - - _427_ XNOR2_X1 + PLACED ( 10129 14521 ) N ; - - _428_ NOR2_X1 + PLACED ( 9513 13729 ) N ; - - _429_ AOI221_X1 + PLACED ( 7770 14228 ) N ; - - _430_ OR3_X1 + PLACED ( 28499 17060 ) N ; - - _431_ AOI21_X1 + PLACED ( 8448 14227 ) N ; - - _432_ XNOR2_X1 + PLACED ( 8675 21426 ) N ; - - _433_ XNOR2_X1 + PLACED ( 9357 22595 ) N ; - - _434_ AOI221_X1 + PLACED ( 7439 22321 ) N ; - - _435_ OR3_X1 + PLACED ( 28764 18427 ) N ; - - _436_ AOI22_X1 + PLACED ( 7981 20348 ) N ; - - _437_ NAND2_X1 + PLACED ( 37146 22468 ) N ; - - _438_ OAI221_X1 + PLACED ( 39084 23991 ) N ; - - _439_ NAND2_X1 + PLACED ( 21488 43442 ) N ; - - _440_ XOR2_X1 + PLACED ( 17804 50289 ) N ; - - _441_ XNOR2_X1 + PLACED ( 20359 48875 ) N ; - - _442_ AOI221_X1 + PLACED ( 19281 48559 ) N ; - - _443_ NAND2_X1 + PLACED ( 26348 45316 ) N ; - - _444_ AOI22_X1 + PLACED ( 20187 48791 ) N ; - - _445_ OAI21_X1 + PLACED ( 36597 22733 ) N ; - - _446_ NAND2_X1 + PLACED ( 36451 22236 ) N ; - - _447_ XNOR2_X1 + PLACED ( 34561 9117 ) N ; - - _448_ XNOR2_X1 + PLACED ( 35000 10657 ) N ; - - _449_ NOR2_X1 + PLACED ( 35664 11908 ) N ; - - _450_ AOI221_X1 + PLACED ( 34604 11951 ) N ; - - _451_ OR3_X1 + PLACED ( 33359 17334 ) N ; - - _452_ AOI21_X1 + PLACED ( 34650 11923 ) N ; - - _453_ XNOR2_X1 + PLACED ( 39405 18045 ) N ; - - _454_ XNOR2_X1 + PLACED ( 38904 22528 ) N ; - - _455_ AOI221_X1 + PLACED ( 37864 15624 ) N ; - - _456_ OR3_X1 + PLACED ( 36922 17395 ) N ; - - _457_ AOI22_X1 + PLACED ( 38547 15447 ) N ; - - _458_ AOI22_X1 + PLACED ( 44430 28821 ) N ; - - _459_ NOR2_X1 + PLACED ( 46150 23794 ) N ; - - _460_ XOR2_X1 + PLACED ( 48640 15695 ) N ; - - _461_ XNOR2_X1 + PLACED ( 47189 15435 ) N ; - - _462_ NOR2_X1 + PLACED ( 47074 11443 ) N ; - - _463_ AOI221_X1 + PLACED ( 46153 13520 ) N ; - - _464_ OR3_X1 + PLACED ( 43778 17214 ) N ; - - _465_ AOI21_X1 + PLACED ( 46655 12026 ) N ; - - _466_ XNOR2_X1 + PLACED ( 51023 24946 ) N ; - - _467_ XNOR2_X1 + PLACED ( 43520 25723 ) N ; - - _468_ AOI221_X4 + PLACED ( 46128 24058 ) N ; - - _469_ OR3_X1 + PLACED ( 43519 23415 ) N ; - - _470_ AOI22_X1 + PLACED ( 48926 24076 ) N ; - - _471_ XNOR2_X1 + PLACED ( 49895 32668 ) N ; - - _472_ INV_X1 + PLACED ( 53273 37350 ) N ; - - _473_ NOR2_X1 + PLACED ( 51693 38422 ) N ; - - _474_ XNOR2_X1 + PLACED ( 50869 35471 ) N ; - - _475_ AOI221_X4 + PLACED ( 38226 34402 ) N ; - - _476_ NAND3_X1 + PLACED ( 42761 34243 ) N ; - - _477_ AOI22_X1 + PLACED ( 45093 32401 ) N ; - - _478_ XOR2_X1 + PLACED ( 45614 39303 ) N ; - - _479_ AOI221_X4 + PLACED ( 38329 39992 ) N ; - - _480_ NAND3_X1 + PLACED ( 42951 37143 ) N ; - - _481_ AOI22_X1 + PLACED ( 43924 39127 ) N ; - - _482_ NOR2_X1 + PLACED ( 10244 32064 ) N ; - - _483_ NOR2_X1 + PLACED ( 53737 32355 ) N ; - - _484_ AND3_X1 + PLACED ( 52508 35338 ) N ; - - _485_ NAND3_X1 + PLACED ( 34654 36686 ) N ; - - _486_ NOR3_X1 + PLACED ( 25520 15143 ) N ; - - _487_ NAND2_X1 + PLACED ( 29177 17316 ) N ; - - _488_ NOR4_X1 + PLACED ( 32645 38561 ) N ; - - _489_ NAND3_X1 + PLACED ( 32407 42041 ) N ; - - _490_ NOR3_X1 + PLACED ( 31951 41324 ) N ; - - _491_ NAND3_X1 + PLACED ( 33017 32715 ) N ; - - _492_ AOI221_X4 + PLACED ( 9650 32102 ) N ; - - _493_ NAND3_X1 + PLACED ( 7979 33383 ) N ; - - _494_ AOI221_X1 + PLACED ( 9097 33586 ) N ; - - _495_ MUX2_X1 + PLACED ( 45295 53892 ) N ; - - _496_ NOR2_X4 + PLACED ( 35044 41828 ) N ; - - _498_ MUX2_X1 + PLACED ( 49693 52999 ) N ; - - _499_ MUX2_X1 + PLACED ( 6640 38737 ) N ; - - _500_ MUX2_X1 + PLACED ( 9310 38512 ) N ; - - _501_ MUX2_X1 + PLACED ( 21824 55760 ) N ; - - _502_ MUX2_X1 + PLACED ( 23180 54988 ) N ; - - _503_ MUX2_X1 + PLACED ( 51047 46381 ) N ; - - _504_ MUX2_X1 + PLACED ( 53575 45782 ) N ; - - _505_ MUX2_X1 + PLACED ( 22409 5647 ) N ; - - _506_ MUX2_X1 + PLACED ( 21940 5996 ) N ; - - _507_ MUX2_X1 + PLACED ( 13425 25635 ) N ; - - _508_ MUX2_X1 + PLACED ( 14705 28298 ) N ; - - _509_ MUX2_X1 + PLACED ( 12136 8150 ) N ; - - _510_ MUX2_X1 + PLACED ( 14164 6722 ) N ; - - _511_ MUX2_X1 + PLACED ( 5604 8342 ) N ; - - _512_ MUX2_X1 + PLACED ( 7980 7278 ) N ; - - _513_ MUX2_X1 + PLACED ( 6405 45131 ) N ; - - _514_ MUX2_X1 + PLACED ( 8102 46615 ) N ; - - _515_ MUX2_X1 + PLACED ( 11471 53079 ) N ; - - _516_ MUX2_X1 + PLACED ( 14056 53666 ) N ; - - _517_ MUX2_X1 + PLACED ( 37647 6146 ) N ; - - _518_ MUX2_X1 + PLACED ( 39772 6588 ) N ; - - _519_ MUX2_X1 + PLACED ( 51143 16519 ) N ; - - _520_ MUX2_X1 + PLACED ( 54021 16852 ) N ; - - _521_ MUX2_X1 + PLACED ( 51354 10302 ) N ; - - _522_ MUX2_X1 + PLACED ( 53486 10883 ) N ; - - _523_ MUX2_X1 + PLACED ( 53023 23360 ) N ; - - _524_ MUX2_X1 + PLACED ( 54721 22640 ) N ; - - _525_ MUX2_X1 + PLACED ( 51030 32653 ) N ; - - _526_ MUX2_X1 + PLACED ( 54804 33408 ) N ; - - _527_ MUX2_X1 + PLACED ( 51636 40622 ) N ; - - _528_ MUX2_X1 + PLACED ( 54654 40351 ) N ; - - _529_ AOI22_X1 + PLACED ( 19889 43594 ) N ; - - _530_ NOR2_X1 + PLACED ( 18942 44130 ) N ; - - _531_ XNOR2_X1 + PLACED ( 12425 44628 ) N ; - - _532_ XNOR2_X1 + PLACED ( 13682 44968 ) N ; - - _533_ AOI221_X1 + PLACED ( 11695 45093 ) N ; - - _534_ OR3_X1 + PLACED ( 28799 37304 ) N ; - - _535_ AOI22_X1 + PLACED ( 13043 43134 ) N ; - - _536_ DFF_X1 + PLACED ( 0 39033 ) N ; - - _537_ DFF_X1 + PLACED ( 31164 57478 ) N ; - - _538_ DFF_X1 + PLACED ( 38991 57478 ) N ; - - _539_ DFF_X1 + PLACED ( 45481 49537 ) N ; - - _540_ DFF_X1 + PLACED ( 26763 3793 ) N ; - - _541_ DFF_X1 + PLACED ( 15634 11741 ) N ; - - _542_ DFF_X1 + PLACED ( 2663 12870 ) N ; - - _543_ DFF_X1 + PLACED ( 0 19746 ) N ; - - _544_ DFF_X1 + PLACED ( 3894 52266 ) N ; - - _545_ DFF_X1 + PLACED ( 32532 4298 ) N ; - - _546_ DFF_X1 + PLACED ( 40129 12306 ) N ; - - _547_ DFF_X1 + PLACED ( 46236 8620 ) N ; - - _548_ DFF_X1 + PLACED ( 53927 26923 ) N ; - - _549_ DFF_X1 + PLACED ( 44761 32607 ) N ; - - _550_ DFF_X1 + PLACED ( 45588 41195 ) N ; - - _551_ DFF_X1 + PLACED ( 971 27955 ) N ; - - _552_ DFF_X1 + PLACED ( 0 34126 ) N ; - - _553_ DFF_X1 + PLACED ( 50587 53032 ) N ; - - _554_ DFF_X1 + PLACED ( 9849 38543 ) N ; - - _555_ DFF_X1 + PLACED ( 23568 56095 ) N ; - - _556_ DFF_X1 + PLACED ( 54419 45795 ) N ; - - _557_ DFF_X1 + PLACED ( 22085 5565 ) N ; - - _558_ DFF_X1 + PLACED ( 15134 28837 ) N ; - - _559_ DFF_X1 + PLACED ( 14893 6450 ) N ; - - _560_ DFF_X1 + PLACED ( 8135 7144 ) N ; - - _561_ DFF_X1 + PLACED ( 8133 47101 ) N ; - - _562_ DFF_X1 + PLACED ( 14728 54209 ) N ; - - _563_ DFF_X1 + PLACED ( 40337 6453 ) N ; - - _564_ DFF_X1 + PLACED ( 54975 17015 ) N ; - - _565_ DFF_X1 + PLACED ( 54237 11074 ) N ; - - _566_ DFF_X1 + PLACED ( 55480 22739 ) N ; - - _567_ DFF_X1 + PLACED ( 55480 33752 ) N ; - - _568_ DFF_X1 + PLACED ( 55480 40409 ) N ; - - _569_ DFF_X1 + PLACED ( 1494 43143 ) N ; - - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 11339 28324 ) N ; + - _276_ NOR2_X4 + PLACED ( 5661 28030 ) N ; + - _278_ INV_X1 + PLACED ( 7954 38529 ) N ; + - _279_ NOR2_X1 + PLACED ( 18489 37236 ) N ; + - _280_ INV_X1 + PLACED ( 20314 34873 ) N ; + - _281_ INV_X1 + PLACED ( 38623 50997 ) N ; + - _282_ NOR2_X1 + PLACED ( 37327 52112 ) N ; + - _283_ INV_X1 + PLACED ( 38501 41460 ) N ; + - _284_ NOR2_X1 + PLACED ( 37814 48540 ) N ; + - _285_ NOR2_X1 + PLACED ( 36227 50252 ) N ; + - _286_ INV_X1 + PLACED ( 27023 47359 ) N ; + - _287_ NOR2_X1 + PLACED ( 26191 49150 ) N ; + - _288_ INV_X1 + PLACED ( 26554 48954 ) N ; + - _289_ AND2_X1 + PLACED ( 26046 33447 ) N ; + - _290_ INV_X1 + PLACED ( 16386 14826 ) N ; + - _291_ NOR2_X1 + PLACED ( 14760 17617 ) N ; + - _292_ INV_X2 + PLACED ( 6828 19475 ) N ; + - _293_ AOI21_X2 + PLACED ( 13687 20649 ) N ; + - _294_ INV_X1 + PLACED ( 25923 14484 ) N ; + - _295_ NOR2_X1 + PLACED ( 25052 16116 ) N ; + - _296_ INV_X1 + PLACED ( 20461 15301 ) N ; + - _297_ NOR2_X2 + PLACED ( 20863 15220 ) N ; + - _298_ NOR2_X1 + PLACED ( 24858 18842 ) N ; + - _299_ AND2_X2 + PLACED ( 29140 30234 ) N ; + - _300_ INV_X1 + PLACED ( 46111 17184 ) N ; + - _301_ NOR2_X1 + PLACED ( 46181 18006 ) N ; + - _302_ INV_X1 + PLACED ( 46750 23560 ) N ; + - _303_ NOR3_X1 + PLACED ( 48100 21644 ) N ; + - _304_ AOI21_X1 + PLACED ( 46925 18490 ) N ; + - _305_ INV_X1 + PLACED ( 43098 19886 ) N ; + - _306_ INV_X1 + PLACED ( 42987 32272 ) N ; + - _307_ AND2_X1 + PLACED ( 44510 30703 ) N ; + - _308_ INV_X1 + PLACED ( 47090 30839 ) N ; + - _309_ INV_X1 + PLACED ( 40164 38547 ) N ; + - _310_ OAI211_X1 + PLACED ( 42321 31306 ) N ; + - _311_ NAND2_X1 + PLACED ( 42843 28084 ) N ; + - _312_ INV_X1 + PLACED ( 50210 24268 ) N ; + - _313_ NOR2_X1 + PLACED ( 46220 25178 ) N ; + - _314_ NOR3_X1 + PLACED ( 41604 24848 ) N ; + - _315_ NOR2_X2 + PLACED ( 39964 23308 ) N ; + - _316_ INV_X1 + PLACED ( 36196 18236 ) N ; + - _317_ NOR2_X1 + PLACED ( 34965 18653 ) N ; + - _318_ INV_X1 + PLACED ( 31495 18087 ) N ; + - _319_ NOR2_X1 + PLACED ( 33995 22823 ) N ; + - _320_ INV_X2 + PLACED ( 17580 49752 ) N ; + - _321_ NAND2_X1 + PLACED ( 18552 43538 ) N ; + - _322_ INV_X1 + PLACED ( 21913 43278 ) N ; + - _323_ OAI21_X1 + PLACED ( 18672 42937 ) N ; + - _324_ NOR4_X2 + PLACED ( 30406 23275 ) N ; + - _325_ NOR2_X1 + PLACED ( 19014 43967 ) N ; + - _326_ OAI21_X1 + PLACED ( 20562 43162 ) N ; + - _327_ INV_X1 + PLACED ( 13154 43704 ) N ; + - _328_ INV_X1 + PLACED ( 31319 15619 ) N ; + - _329_ NOR3_X1 + PLACED ( 34392 22491 ) N ; + - _330_ AOI21_X1 + PLACED ( 33142 23903 ) N ; + - _331_ OAI221_X4 + PLACED ( 21442 42574 ) N ; + - _332_ OAI211_X1 + PLACED ( 27557 25692 ) N ; + - _333_ AND2_X1 + PLACED ( 17537 37603 ) N ; + - _334_ INV_X2 + PLACED ( 19378 36466 ) N ; + - _335_ NAND2_X1 + PLACED ( 37305 52285 ) N ; + - _336_ NAND2_X1 + PLACED ( 37469 47192 ) N ; + - _337_ NAND2_X1 + PLACED ( 35186 49311 ) N ; + - _338_ INV_X1 + PLACED ( 36672 51364 ) N ; + - _339_ NAND3_X1 + PLACED ( 28220 49363 ) N ; + - _340_ NAND2_X1 + PLACED ( 26220 49097 ) N ; + - _341_ NAND2_X1 + PLACED ( 26500 48818 ) N ; + - _342_ INV_X1 + PLACED ( 15145 17188 ) N ; + - _343_ OAI211_X1 + PLACED ( 15361 16768 ) N ; + - _344_ NAND2_X1 + PLACED ( 16665 16369 ) N ; + - _345_ AOI211_X1 + PLACED ( 21476 17951 ) N ; + - _346_ NAND2_X1 + PLACED ( 24816 16181 ) N ; + - _347_ NAND2_X1 + PLACED ( 20208 17082 ) N ; + - _348_ OAI21_X1 + PLACED ( 23113 18253 ) N ; + - _349_ OR2_X2 + PLACED ( 23291 26047 ) N ; + - _350_ AOI21_X1 + PLACED ( 24510 34160 ) N ; + - _351_ AND4_X1 + PLACED ( 20455 34186 ) N ; + - _352_ AOI22_X1 + PLACED ( 20464 34326 ) N ; + - _353_ OR2_X1 + PLACED ( 20359 34867 ) N ; + - _355_ INV_X8 + PLACED ( 7286 27053 ) N ; + - _357_ AND3_X2 + PLACED ( 24907 33231 ) N ; + - _358_ OAI211_X1 + PLACED ( 25223 25408 ) N ; + - _359_ OAI21_X2 + PLACED ( 24043 34972 ) N ; + - _360_ OAI21_X2 + PLACED ( 23784 25817 ) N ; + - _361_ NAND3_X4 + PLACED ( 25887 26380 ) N ; + - _362_ NOR2_X4 + PLACED ( 34840 29416 ) N ; + - _363_ INV_X4 + PLACED ( 35908 30950 ) N ; + - _364_ NOR2_X4 + PLACED ( 34736 35825 ) N ; + - _365_ AOI221_X4 + PLACED ( 26735 39627 ) N ; + - _366_ AND2_X4 + PLACED ( 35585 29834 ) N ; + - _368_ OAI21_X1 + PLACED ( 19951 35573 ) N ; + - _370_ AOI22_X1 + PLACED ( 18320 38658 ) N ; + - _371_ NOR2_X2 + PLACED ( 29541 24525 ) N ; + - _372_ NAND3_X1 + PLACED ( 28982 31765 ) N ; + - _373_ OR2_X1 + PLACED ( 29655 46144 ) N ; + - _374_ AOI22_X1 + PLACED ( 30022 49501 ) N ; + - _375_ NAND2_X1 + PLACED ( 30142 49868 ) N ; + - _376_ XOR2_X1 + PLACED ( 27775 54824 ) N ; + - _377_ XNOR2_X1 + PLACED ( 29361 53698 ) N ; + - _378_ INV_X4 + PLACED ( 10534 25220 ) N ; + - _380_ NOR2_X1 + PLACED ( 32527 55264 ) N ; + - _381_ NAND2_X1 + PLACED ( 30986 54423 ) N ; + - _382_ AOI221_X4 + PLACED ( 27565 45179 ) N ; + - _383_ AOI21_X1 + PLACED ( 31645 55567 ) N ; + - _384_ INV_X1 + PLACED ( 33721 45482 ) N ; + - _385_ INV_X1 + PLACED ( 32374 42322 ) N ; + - _386_ OAI211_X1 + PLACED ( 34499 46102 ) N ; + - _387_ INV_X1 + PLACED ( 37267 50863 ) N ; + - _388_ AND4_X1 + PLACED ( 36469 51838 ) N ; + - _389_ AOI22_X1 + PLACED ( 36273 51907 ) N ; + - _390_ NOR2_X1 + PLACED ( 38401 52834 ) N ; + - _391_ NOR2_X1 + PLACED ( 41739 54849 ) N ; + - _392_ NAND2_X1 + PLACED ( 39981 53987 ) N ; + - _393_ AOI221_X4 + PLACED ( 37700 45345 ) N ; + - _394_ AOI21_X1 + PLACED ( 40756 55061 ) N ; + - _395_ OAI21_X1 + PLACED ( 34543 45095 ) N ; + - _396_ XOR2_X1 + PLACED ( 43917 46065 ) N ; + - _397_ XNOR2_X1 + PLACED ( 43706 45941 ) N ; + - _398_ NOR2_X1 + PLACED ( 45508 48489 ) N ; + - _399_ AOI221_X1 + PLACED ( 43824 47188 ) N ; + - _401_ OR3_X1 + PLACED ( 40232 37377 ) N ; + - _402_ AOI21_X1 + PLACED ( 44449 48304 ) N ; + - _403_ INV_X1 + PLACED ( 23070 19817 ) N ; + - _404_ OAI211_X1 + PLACED ( 27574 23148 ) N ; + - _405_ AOI21_X1 + PLACED ( 20778 16108 ) N ; + - _406_ AOI21_X1 + PLACED ( 21238 13644 ) N ; + - _407_ AND2_X1 + PLACED ( 26776 11869 ) N ; + - _408_ XNOR2_X1 + PLACED ( 26521 9586 ) N ; + - _409_ XNOR2_X1 + PLACED ( 27605 10403 ) N ; + - _410_ NOR2_X1 + PLACED ( 29872 11602 ) N ; + - _411_ AOI221_X1 + PLACED ( 28275 11685 ) N ; + - _412_ OR3_X1 + PLACED ( 28595 16799 ) N ; + - _413_ AOI21_X1 + PLACED ( 29095 11317 ) N ; + - _414_ OAI21_X1 + PLACED ( 28105 23563 ) N ; + - _415_ AND2_X1 + PLACED ( 19128 18405 ) N ; + - _416_ AND4_X1 + PLACED ( 19883 21559 ) N ; + - _417_ AOI22_X1 + PLACED ( 19977 21657 ) N ; + - _418_ OR2_X1 + PLACED ( 19958 22401 ) N ; + - _419_ NOR2_X1 + PLACED ( 19203 25117 ) N ; + - _420_ AOI221_X4 + PLACED ( 27144 33872 ) N ; + - _421_ OAI21_X1 + PLACED ( 19470 23020 ) N ; + - _422_ AOI21_X1 + PLACED ( 19111 25103 ) N ; + - _423_ AOI21_X1 + PLACED ( 9739 20068 ) N ; + - _424_ NOR2_X1 + PLACED ( 8891 18953 ) N ; + - _425_ NOR2_X1 + PLACED ( 9684 18460 ) N ; + - _426_ XNOR2_X1 + PLACED ( 13034 13584 ) N ; + - _427_ XNOR2_X1 + PLACED ( 10497 14082 ) N ; + - _428_ NOR2_X1 + PLACED ( 10501 13442 ) N ; + - _429_ AOI221_X1 + PLACED ( 8754 13771 ) N ; + - _430_ OR3_X1 + PLACED ( 28499 16960 ) N ; + - _431_ AOI21_X1 + PLACED ( 9505 14105 ) N ; + - _432_ XNOR2_X1 + PLACED ( 7710 20542 ) N ; + - _433_ XNOR2_X1 + PLACED ( 9253 21612 ) N ; + - _434_ AOI221_X1 + PLACED ( 8176 21380 ) N ; + - _435_ OR3_X1 + PLACED ( 28737 18193 ) N ; + - _436_ AOI22_X1 + PLACED ( 8488 19733 ) N ; + - _437_ NAND2_X1 + PLACED ( 37129 21610 ) N ; + - _438_ OAI221_X1 + PLACED ( 38909 23838 ) N ; + - _439_ NAND2_X1 + PLACED ( 21366 42753 ) N ; + - _440_ XOR2_X1 + PLACED ( 17512 50197 ) N ; + - _441_ XNOR2_X1 + PLACED ( 20184 48891 ) N ; + - _442_ AOI221_X1 + PLACED ( 19188 48600 ) N ; + - _443_ NAND2_X1 + PLACED ( 26811 44722 ) N ; + - _444_ AOI22_X1 + PLACED ( 20113 48823 ) N ; + - _445_ OAI21_X1 + PLACED ( 36361 22265 ) N ; + - _446_ NAND2_X1 + PLACED ( 36285 21533 ) N ; + - _447_ XNOR2_X1 + PLACED ( 34600 9640 ) N ; + - _448_ XNOR2_X1 + PLACED ( 34997 11106 ) N ; + - _449_ NOR2_X1 + PLACED ( 35379 12440 ) N ; + - _450_ AOI221_X1 + PLACED ( 34536 12238 ) N ; + - _451_ OR3_X1 + PLACED ( 33128 17239 ) N ; + - _452_ AOI21_X1 + PLACED ( 34320 12431 ) N ; + - _453_ XNOR2_X1 + PLACED ( 40814 17873 ) N ; + - _454_ XNOR2_X1 + PLACED ( 39386 22156 ) N ; + - _455_ AOI221_X1 + PLACED ( 38772 15679 ) N ; + - _456_ OR3_X1 + PLACED ( 37573 17332 ) N ; + - _457_ AOI22_X1 + PLACED ( 39176 15447 ) N ; + - _458_ AOI22_X1 + PLACED ( 44401 28914 ) N ; + - _459_ NOR2_X1 + PLACED ( 46361 25703 ) N ; + - _460_ XOR2_X1 + PLACED ( 48845 14933 ) N ; + - _461_ XNOR2_X1 + PLACED ( 47358 14910 ) N ; + - _462_ NOR2_X1 + PLACED ( 46739 12167 ) N ; + - _463_ AOI221_X1 + PLACED ( 45598 13633 ) N ; + - _464_ OR3_X1 + PLACED ( 43457 17128 ) N ; + - _465_ AOI21_X1 + PLACED ( 46079 12689 ) N ; + - _466_ XNOR2_X1 + PLACED ( 50630 24835 ) N ; + - _467_ XNOR2_X1 + PLACED ( 43269 25788 ) N ; + - _468_ AOI221_X4 + PLACED ( 45471 23207 ) N ; + - _469_ OR3_X1 + PLACED ( 43175 24566 ) N ; + - _470_ AOI22_X1 + PLACED ( 48774 24316 ) N ; + - _471_ XNOR2_X1 + PLACED ( 50044 32370 ) N ; + - _472_ INV_X1 + PLACED ( 53633 37190 ) N ; + - _473_ NOR2_X1 + PLACED ( 51528 38394 ) N ; + - _474_ XNOR2_X1 + PLACED ( 50852 35846 ) N ; + - _475_ AOI221_X4 + PLACED ( 38540 33617 ) N ; + - _476_ NAND3_X1 + PLACED ( 42518 34481 ) N ; + - _477_ AOI22_X1 + PLACED ( 45165 32393 ) N ; + - _478_ XOR2_X1 + PLACED ( 46344 39183 ) N ; + - _479_ AOI221_X4 + PLACED ( 38518 40163 ) N ; + - _480_ NAND3_X1 + PLACED ( 42685 36987 ) N ; + - _481_ AOI22_X1 + PLACED ( 43955 38836 ) N ; + - _482_ NOR2_X1 + PLACED ( 10141 32030 ) N ; + - _483_ NOR2_X1 + PLACED ( 54792 32323 ) N ; + - _484_ AND3_X1 + PLACED ( 53461 35277 ) N ; + - _485_ NAND3_X1 + PLACED ( 34663 36361 ) N ; + - _486_ NOR3_X1 + PLACED ( 25739 14858 ) N ; + - _487_ NAND2_X1 + PLACED ( 29065 17169 ) N ; + - _488_ NOR4_X1 + PLACED ( 32413 38411 ) N ; + - _489_ NAND3_X1 + PLACED ( 32187 42140 ) N ; + - _490_ NOR3_X1 + PLACED ( 31738 40758 ) N ; + - _491_ NAND3_X1 + PLACED ( 32827 33328 ) N ; + - _492_ AOI221_X4 + PLACED ( 10309 33103 ) N ; + - _493_ NAND3_X1 + PLACED ( 10504 31822 ) N ; + - _494_ AOI221_X1 + PLACED ( 10969 32471 ) N ; + - _495_ MUX2_X1 + PLACED ( 46201 53657 ) N ; + - _496_ NOR2_X4 + PLACED ( 35036 40682 ) N ; + - _498_ MUX2_X1 + PLACED ( 50492 52617 ) N ; + - _499_ MUX2_X1 + PLACED ( 6741 38466 ) N ; + - _500_ MUX2_X1 + PLACED ( 9559 38128 ) N ; + - _501_ MUX2_X1 + PLACED ( 21596 55742 ) N ; + - _502_ MUX2_X1 + PLACED ( 22822 54905 ) N ; + - _503_ MUX2_X1 + PLACED ( 50079 46410 ) N ; + - _504_ MUX2_X1 + PLACED ( 52629 46172 ) N ; + - _505_ MUX2_X1 + PLACED ( 22637 4378 ) N ; + - _506_ MUX2_X1 + PLACED ( 21953 5332 ) N ; + - _507_ MUX2_X1 + PLACED ( 14203 25452 ) N ; + - _508_ MUX2_X1 + PLACED ( 14555 28013 ) N ; + - _509_ MUX2_X1 + PLACED ( 11594 6378 ) N ; + - _510_ MUX2_X1 + PLACED ( 13875 5938 ) N ; + - _511_ MUX2_X1 + PLACED ( 5403 7929 ) N ; + - _512_ MUX2_X1 + PLACED ( 7824 7165 ) N ; + - _513_ MUX2_X1 + PLACED ( 6106 44910 ) N ; + - _514_ MUX2_X1 + PLACED ( 7946 45903 ) N ; + - _515_ MUX2_X1 + PLACED ( 11450 53032 ) N ; + - _516_ MUX2_X1 + PLACED ( 13876 53566 ) N ; + - _517_ MUX2_X1 + PLACED ( 36700 5071 ) N ; + - _518_ MUX2_X1 + PLACED ( 38733 5476 ) N ; + - _519_ MUX2_X1 + PLACED ( 51034 16697 ) N ; + - _520_ MUX2_X1 + PLACED ( 53645 16821 ) N ; + - _521_ MUX2_X1 + PLACED ( 49755 8893 ) N ; + - _522_ MUX2_X1 + PLACED ( 51799 9309 ) N ; + - _523_ MUX2_X1 + PLACED ( 52709 23354 ) N ; + - _524_ MUX2_X1 + PLACED ( 54540 23308 ) N ; + - _525_ MUX2_X1 + PLACED ( 51204 32160 ) N ; + - _526_ MUX2_X1 + PLACED ( 54742 32294 ) N ; + - _527_ MUX2_X1 + PLACED ( 51177 40577 ) N ; + - _528_ MUX2_X1 + PLACED ( 54362 40607 ) N ; + - _529_ AOI22_X1 + PLACED ( 19845 42991 ) N ; + - _530_ NOR2_X1 + PLACED ( 18958 43716 ) N ; + - _531_ XNOR2_X1 + PLACED ( 12394 44413 ) N ; + - _532_ XNOR2_X1 + PLACED ( 13679 44817 ) N ; + - _533_ AOI221_X1 + PLACED ( 11433 45388 ) N ; + - _534_ OR3_X1 + PLACED ( 28802 37004 ) N ; + - _535_ AOI22_X1 + PLACED ( 12836 44027 ) N ; + - _536_ DFF_X1 + PLACED ( 404 39003 ) N ; + - _537_ DFF_X1 + PLACED ( 31114 57478 ) N ; + - _538_ DFF_X1 + PLACED ( 39099 57454 ) N ; + - _539_ DFF_X1 + PLACED ( 44387 50480 ) N ; + - _540_ DFF_X1 + PLACED ( 26622 2996 ) N ; + - _541_ DFF_X1 + PLACED ( 16134 10803 ) N ; + - _542_ DFF_X1 + PLACED ( 3094 13777 ) N ; + - _543_ DFF_X1 + PLACED ( 0 19035 ) N ; + - _544_ DFF_X1 + PLACED ( 5224 52684 ) N ; + - _545_ DFF_X1 + PLACED ( 31718 4690 ) N ; + - _546_ DFF_X1 + PLACED ( 39840 11410 ) N ; + - _547_ DFF_X1 + PLACED ( 45270 8018 ) N ; + - _548_ DFF_X1 + PLACED ( 54491 26994 ) N ; + - _549_ DFF_X1 + PLACED ( 45142 32283 ) N ; + - _550_ DFF_X1 + PLACED ( 45069 41063 ) N ; + - _551_ DFF_X1 + PLACED ( 59 34835 ) N ; + - _552_ DFF_X1 + PLACED ( 1292 31322 ) N ; + - _553_ DFF_X1 + PLACED ( 51245 52653 ) N ; + - _554_ DFF_X1 + PLACED ( 10163 38164 ) N ; + - _555_ DFF_X1 + PLACED ( 23224 56003 ) N ; + - _556_ DFF_X1 + PLACED ( 53427 46315 ) N ; + - _557_ DFF_X1 + PLACED ( 22103 5026 ) N ; + - _558_ DFF_X1 + PLACED ( 14841 28564 ) N ; + - _559_ DFF_X1 + PLACED ( 14601 5775 ) N ; + - _560_ DFF_X1 + PLACED ( 8046 7177 ) N ; + - _561_ DFF_X1 + PLACED ( 7974 46300 ) N ; + - _562_ DFF_X1 + PLACED ( 14495 54112 ) N ; + - _563_ DFF_X1 + PLACED ( 39379 5211 ) N ; + - _564_ DFF_X1 + PLACED ( 54490 16952 ) N ; + - _565_ DFF_X1 + PLACED ( 52439 9484 ) N ; + - _566_ DFF_X1 + PLACED ( 55480 23494 ) N ; + - _567_ DFF_X1 + PLACED ( 55480 32527 ) N ; + - _568_ DFF_X1 + PLACED ( 55406 40702 ) N ; + - _569_ DFF_X1 + PLACED ( 1009 44641 ) N ; + - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 8306 27687 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL @@ -851,8 +851,9 @@ NETS 357 ; ( _558_ CK ) ( _559_ CK ) ( _560_ CK ) ( _561_ CK ) ( _562_ CK ) ( _563_ CK ) ( _564_ CK ) ( _565_ CK ) ( _566_ CK ) ( _567_ CK ) ( _568_ CK ) ( _569_ CK ) + USE SIGNAL ; - ctrl.state.out_reg\[0\].qi ( _276_ A2 ) ( _355_ A ) ( _482_ A2 ) ( _552_ Q ) + USE SIGNAL ; - - ctrl.state.out_reg\[1\].qi ( max_cap1 A ) ( _468_ A ) ( _463_ A ) ( _455_ A ) ( _450_ A ) ( _434_ A ) ( _429_ A ) - ( _470_ B1 ) ( _457_ B1 ) ( _436_ B1 ) ( _411_ A ) ( _362_ A2 ) ( _378_ A ) ( _551_ Q ) + USE SIGNAL ; + - ctrl.state.out_reg\[1\].qi ( max_cap1 A ) ( _475_ A ) ( _442_ A ) ( _420_ A ) ( _365_ A ) ( _535_ B1 ) ( _481_ B1 ) + ( _477_ B1 ) ( _444_ B1 ) ( _399_ A ) ( _370_ B1 ) ( _276_ A1 ) ( _382_ A ) ( _393_ A ) ( _479_ A ) + ( _533_ A ) ( _551_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[0\].qi ( _309_ A ) ( _473_ A2 ) ( _478_ B ) ( _527_ A ) ( _550_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[10\].qi ( _297_ A2 ) ( _347_ A2 ) ( _406_ B1 ) ( _419_ A2 ) ( _507_ A ) ( _541_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[11\].qi ( _295_ A2 ) ( _346_ A2 ) ( _408_ B ) ( _410_ A2 ) ( _505_ A ) ( _540_ Q ) + USE SIGNAL ; @@ -886,9 +887,8 @@ NETS 357 ; - dpath.b_reg.out_reg\[7\].qi ( _322_ A ) ( _331_ B1 ) ( _514_ B ) ( _531_ A ) ( _561_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[8\].qi ( _293_ B1 ) ( _342_ A ) ( _423_ B1 ) ( _424_ A2 ) ( _432_ A ) ( _512_ B ) ( _560_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[9\].qi ( _290_ A ) ( _426_ A ) ( _486_ A1 ) ( _510_ B ) ( _559_ Q ) + USE SIGNAL ; - - net1 ( max_cap1 Z ) ( _365_ A ) ( _420_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _475_ A ) ( _479_ A ) - ( _399_ A ) ( _393_ A ) ( _382_ A ) ( _444_ B1 ) ( _442_ A ) ( _535_ B1 ) ( _533_ A ) ( _370_ B1 ) - ( _276_ A1 ) + USE SIGNAL ; + - net1 ( max_cap1 Z ) ( _470_ B1 ) ( _468_ A ) ( _463_ A ) ( _450_ A ) ( _362_ A2 ) ( _455_ A ) + ( _457_ B1 ) ( _411_ A ) ( _429_ A ) ( _436_ B1 ) ( _378_ A ) ( _434_ A ) + USE SIGNAL ; - req_msg\[0\] ( PIN req_msg[0] ) ( _527_ B ) + USE SIGNAL ; - req_msg\[10\] ( PIN req_msg[10] ) ( _507_ B ) + USE SIGNAL ; - req_msg\[11\] ( PIN req_msg[11] ) ( _505_ B ) + USE SIGNAL ; diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index 7702333d44..f4189f3845 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -132,14 +132,14 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -69.426 um^2 (-12.55%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.62721694 +[INFO GPL-0110] Timing-driven: new target density: 0.62560546 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 290 | 0.2995 | 2.899455e+06 | -38.18% | 9.03e-08 | - 300 | 0.2895 | 3.011288e+06 | +3.86% | 1.33e-07 | - 310 | 0.2277 | 2.951256e+06 | -1.99% | 1.96e-07 | + 290 | 0.2999 | 2.902161e+06 | -38.12% | 9.03e-08 | + 300 | 0.2903 | 3.013160e+06 | +3.82% | 1.33e-07 | + 310 | 0.2293 | 2.952557e+06 | -2.01% | 1.96e-07 | [INFO GPL-0100] Timing-driven iteration 7/7, virtual: false. -[INFO GPL-0101] Iter: 319, overflow: 0.191, keep resizer changes at: 0.3, HPWL: 2978322 +[INFO GPL-0101] Iter: 318, overflow: 0.194, keep resizer changes at: 0.3, HPWL: 2976831 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -152,21 +152,22 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: 4.522 um^2 (+0.93%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 1 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 1 -[INFO GPL-0110] Timing-driven: new target density: 0.6319576 +[INFO GPL-0110] Timing-driven: new target density: 0.6303461 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 320 | 0.1887 | 3.025629e+06 | +2.52% | 2.89e-07 | - 330 | 0.1691 | 3.032583e+06 | +0.23% | 4.25e-07 | - 340 | 0.1519 | 3.084623e+06 | +1.72% | 6.26e-07 | - 350 | 0.1251 | 3.105705e+06 | +0.68% | 9.23e-07 | - 360 | 0.1074 | 3.102328e+06 | -0.11% | 1.36e-06 | -[INFO GPL-1001] Finished with Overflow: 0.099825 + 320 | 0.1921 | 3.024696e+06 | +2.44% | 2.89e-07 | + 330 | 0.1792 | 3.033382e+06 | +0.29% | 4.25e-07 | + 340 | 0.1475 | 3.093358e+06 | +1.98% | 6.26e-07 | + 350 | 0.1229 | 3.111051e+06 | +0.57% | 9.23e-07 | + 360 | 0.1058 | 3.097440e+06 | -0.44% | 1.36e-06 | +[INFO GPL-1001] Finished with Overflow: 0.099549 [INFO GPL-1002] Placed Cell Area 488.3760 [INFO GPL-1003] Available Free Area 953.8760 -[INFO GPL-1004] Minimum Feasible Density 0.5120 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5689 [INFO GPL-1008] - For 80% usage of free space: 0.6400 [INFO GPL-1009] - For 50% usage of free space: 1.0240 +[INFO GPL-0083] Original area um^2: 0.00, new area: 488.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-td.defok b/src/gpl/test/simple01-td.defok index 2595053f03..fff8e42f9f 100644 --- a/src/gpl/test/simple01-td.defok +++ b/src/gpl/test/simple01-td.defok @@ -60,293 +60,293 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 287 ; - - _276_ NOR2_X4 + PLACED ( 9098 31400 ) N ; - - _278_ INV_X1 + PLACED ( 19167 44098 ) N ; - - _279_ NOR2_X1 + PLACED ( 22001 42502 ) N ; - - _280_ INV_X1 + PLACED ( 22726 36416 ) N ; - - _281_ INV_X1 + PLACED ( 39361 52047 ) N ; - - _282_ NOR2_X1 + PLACED ( 38128 52469 ) N ; - - _283_ INV_X1 + PLACED ( 41331 45551 ) N ; - - _284_ NOR2_X1 + PLACED ( 40698 49117 ) N ; - - _285_ NOR2_X1 + PLACED ( 37459 50849 ) N ; - - _286_ INV_X1 + PLACED ( 27879 50569 ) N ; - - _287_ NOR2_X1 + PLACED ( 28030 51782 ) N ; - - _288_ INV_X1 + PLACED ( 28303 51284 ) N ; - - _289_ AND2_X1 + PLACED ( 27302 33971 ) N ; - - _290_ INV_X1 + PLACED ( 17285 15785 ) N ; - - _291_ NOR2_X1 + PLACED ( 15942 17031 ) N ; - - _292_ INV_X2 + PLACED ( 9734 17328 ) N ; - - _293_ AOI21_X2 + PLACED ( 14444 17926 ) N ; - - _294_ INV_X1 + PLACED ( 28702 16441 ) N ; - - _295_ NOR2_X1 + PLACED ( 26130 18546 ) N ; - - _296_ INV_X1 + PLACED ( 20852 17727 ) N ; - - _297_ NOR2_X2 + PLACED ( 20978 17965 ) N ; - - _298_ NOR2_X1 + PLACED ( 23373 22943 ) N ; - - _299_ AND2_X2 + PLACED ( 23856 30494 ) N ; - - _300_ INV_X1 + PLACED ( 46674 17931 ) N ; - - _301_ NOR2_X1 + PLACED ( 45977 18319 ) N ; - - _302_ INV_X1 + PLACED ( 46419 22480 ) N ; - - _303_ NOR3_X1 + PLACED ( 47829 20393 ) N ; - - _304_ AOI21_X1 + PLACED ( 46384 18648 ) N ; - - _305_ INV_X1 + PLACED ( 43114 19966 ) N ; - - _306_ INV_X1 + PLACED ( 42774 31512 ) N ; - - _307_ AND2_X1 + PLACED ( 44844 29457 ) N ; - - _308_ INV_X1 + PLACED ( 47629 29419 ) N ; - - _309_ INV_X1 + PLACED ( 41024 38145 ) N ; - - _310_ OAI211_X1 + PLACED ( 42576 29688 ) N ; - - _311_ NAND2_X1 + PLACED ( 43567 26892 ) N ; - - _312_ INV_X1 + PLACED ( 52648 23194 ) N ; - - _313_ NOR2_X1 + PLACED ( 47536 24942 ) N ; - - _314_ NOR3_X1 + PLACED ( 42556 25038 ) N ; - - _315_ NOR2_X2 + PLACED ( 39916 24335 ) N ; - - _316_ INV_X1 + PLACED ( 35919 18007 ) N ; - - _317_ NOR2_X1 + PLACED ( 34763 18690 ) N ; - - _318_ INV_X1 + PLACED ( 33684 18377 ) N ; - - _319_ NOR2_X1 + PLACED ( 36272 23626 ) N ; - - _320_ INV_X1 + PLACED ( 12805 45888 ) N ; - - _321_ NAND2_X1 + PLACED ( 14464 37407 ) N ; - - _322_ INV_X1 + PLACED ( 18884 38586 ) N ; - - _323_ OAI21_X1 + PLACED ( 14896 37449 ) N ; - - _324_ NOR4_X2 + PLACED ( 31613 25362 ) N ; - - _325_ NOR2_X1 + PLACED ( 13900 37745 ) N ; - - _326_ OAI21_X1 + PLACED ( 16809 37952 ) N ; - - _327_ INV_X1 + PLACED ( 9008 39024 ) N ; - - _328_ INV_X1 + PLACED ( 30645 16240 ) N ; - - _329_ NOR3_X1 + PLACED ( 35142 23416 ) N ; - - _330_ AOI21_X1 + PLACED ( 34814 24353 ) N ; - - _331_ OAI221_X4 + PLACED ( 17571 38149 ) N ; - - _332_ OAI211_X1 + PLACED ( 26408 28696 ) N ; - - _333_ AND2_X1 + PLACED ( 21749 43282 ) N ; - - _334_ INV_X2 + PLACED ( 23093 42625 ) N ; - - _335_ NAND2_X1 + PLACED ( 37685 52800 ) N ; - - _336_ NAND2_X1 + PLACED ( 40663 48308 ) N ; - - _337_ NAND2_X1 + PLACED ( 34635 50761 ) N ; - - _338_ INV_X1 + PLACED ( 37288 51949 ) N ; - - _339_ NAND3_X1 + PLACED ( 29244 51056 ) N ; - - _340_ NAND2_X1 + PLACED ( 28165 51682 ) N ; - - _341_ NAND2_X1 + PLACED ( 28458 50989 ) N ; - - _342_ INV_X1 + PLACED ( 17644 17126 ) N ; - - _343_ OAI211_X1 + PLACED ( 17713 17357 ) N ; - - _344_ NAND2_X1 + PLACED ( 18965 17282 ) N ; - - _345_ AOI211_X1 + PLACED ( 21899 21261 ) N ; - - _346_ NAND2_X1 + PLACED ( 26508 18546 ) N ; - - _347_ NAND2_X1 + PLACED ( 20639 19579 ) N ; - - _348_ OAI21_X1 + PLACED ( 25206 21076 ) N ; - - _349_ OR2_X2 + PLACED ( 27576 23076 ) N ; - - _350_ AOI21_X1 + PLACED ( 27296 35295 ) N ; - - _351_ AND4_X1 + PLACED ( 22363 35988 ) N ; - - _352_ AOI22_X1 + PLACED ( 22509 36140 ) N ; - - _353_ OR2_X1 + PLACED ( 22505 37410 ) N ; - - _355_ INV_X8 + PLACED ( 4644 34381 ) N ; - - _357_ AND3_X2 + PLACED ( 27010 33819 ) N ; - - _358_ OAI211_X1 + PLACED ( 26928 28091 ) N ; - - _359_ OAI21_X2 + PLACED ( 26701 35869 ) N ; - - _360_ OAI21_X2 + PLACED ( 27736 23858 ) N ; - - _361_ NAND3_X4 + PLACED ( 27765 28945 ) N ; - - _362_ NOR2_X4 + PLACED ( 35999 31377 ) N ; - - _363_ INV_X4 + PLACED ( 37354 32162 ) N ; - - _364_ NOR2_X4 + PLACED ( 34140 37540 ) N ; - - _365_ AOI221_X4 + PLACED ( 27537 42584 ) N ; - - _366_ AND2_X4 + PLACED ( 37278 30601 ) N ; - - _368_ OAI21_X1 + PLACED ( 22572 38532 ) N ; - - _370_ AOI22_X1 + PLACED ( 21578 42698 ) N ; - - _371_ NOR2_X2 + PLACED ( 30801 27399 ) N ; - - _372_ NAND3_X1 + PLACED ( 24591 32066 ) N ; - - _373_ OR2_X1 + PLACED ( 25520 46693 ) N ; - - _374_ AOI22_X1 + PLACED ( 29298 50415 ) N ; - - _375_ NAND2_X1 + PLACED ( 27593 50357 ) N ; - - _376_ XOR2_X1 + PLACED ( 26853 56912 ) N ; - - _377_ XNOR2_X1 + PLACED ( 27852 56129 ) N ; - - _378_ INV_X4 + PLACED ( 9782 24148 ) N ; - - _380_ NOR2_X1 + PLACED ( 32305 55254 ) N ; - - _381_ NAND2_X1 + PLACED ( 30194 55834 ) N ; - - _382_ AOI221_X4 + PLACED ( 27344 45951 ) N ; - - _383_ AOI21_X1 + PLACED ( 31484 55949 ) N ; - - _384_ INV_X1 + PLACED ( 32656 47235 ) N ; - - _385_ INV_X1 + PLACED ( 31314 42512 ) N ; - - _386_ OAI211_X1 + PLACED ( 33896 47671 ) N ; - - _387_ INV_X1 + PLACED ( 38251 51532 ) N ; - - _388_ AND4_X1 + PLACED ( 36534 52647 ) N ; - - _389_ AOI22_X1 + PLACED ( 36314 52708 ) N ; - - _390_ NOR2_X1 + PLACED ( 38604 53642 ) N ; - - _391_ NOR2_X1 + PLACED ( 42535 54874 ) N ; - - _392_ NAND2_X1 + PLACED ( 40519 54752 ) N ; - - _393_ AOI221_X4 + PLACED ( 38210 45663 ) N ; - - _394_ AOI21_X1 + PLACED ( 41547 55396 ) N ; - - _395_ OAI21_X1 + PLACED ( 33908 46166 ) N ; - - _396_ XOR2_X1 + PLACED ( 45269 46380 ) N ; - - _397_ XNOR2_X1 + PLACED ( 44694 46073 ) N ; - - _398_ NOR2_X1 + PLACED ( 45394 47095 ) N ; - - _399_ AOI221_X1 + PLACED ( 44382 45933 ) N ; - - _401_ OR3_X1 + PLACED ( 41783 37311 ) N ; - - _402_ AOI21_X1 + PLACED ( 45177 46740 ) N ; - - _403_ INV_X1 + PLACED ( 22218 24103 ) N ; - - _404_ OAI211_X1 + PLACED ( 25983 26419 ) N ; - - _405_ AOI21_X1 + PLACED ( 21205 18230 ) N ; - - _406_ AOI21_X1 + PLACED ( 21562 17064 ) N ; - - _407_ AND2_X1 + PLACED ( 26312 16180 ) N ; - - _408_ XNOR2_X1 + PLACED ( 27026 11273 ) N ; - - _409_ XNOR2_X1 + PLACED ( 27241 12066 ) N ; - - _410_ NOR2_X1 + PLACED ( 26300 11467 ) N ; - - _411_ AOI221_X1 + PLACED ( 26199 12122 ) N ; - - _412_ OR3_X1 + PLACED ( 29582 17527 ) N ; - - _413_ AOI21_X1 + PLACED ( 26018 11797 ) N ; - - _414_ OAI21_X1 + PLACED ( 26076 26843 ) N ; - - _415_ AND2_X1 + PLACED ( 20347 21705 ) N ; - - _416_ AND4_X1 + PLACED ( 20861 25500 ) N ; - - _417_ AOI22_X1 + PLACED ( 20709 25550 ) N ; - - _418_ OR2_X1 + PLACED ( 19293 25860 ) N ; - - _419_ NOR2_X1 + PLACED ( 15675 24770 ) N ; - - _420_ AOI221_X4 + PLACED ( 28028 38171 ) N ; - - _421_ OAI21_X1 + PLACED ( 18091 25548 ) N ; - - _422_ AOI21_X1 + PLACED ( 16770 25340 ) N ; - - _423_ AOI21_X1 + PLACED ( 12198 17093 ) N ; - - _424_ NOR2_X1 + PLACED ( 11574 16111 ) N ; - - _425_ NOR2_X1 + PLACED ( 11970 15394 ) N ; - - _426_ XNOR2_X1 + PLACED ( 14183 10976 ) N ; - - _427_ XNOR2_X1 + PLACED ( 12010 11872 ) N ; - - _428_ NOR2_X1 + PLACED ( 9866 11035 ) N ; - - _429_ AOI221_X1 + PLACED ( 8868 12014 ) N ; - - _430_ OR3_X1 + PLACED ( 29568 17256 ) N ; - - _431_ AOI21_X1 + PLACED ( 8960 11614 ) N ; - - _432_ XNOR2_X1 + PLACED ( 11110 18401 ) N ; - - _433_ XNOR2_X1 + PLACED ( 11980 20523 ) N ; - - _434_ AOI221_X1 + PLACED ( 9683 20625 ) N ; - - _435_ OR3_X1 + PLACED ( 29723 18033 ) N ; - - _436_ AOI22_X1 + PLACED ( 9934 18350 ) N ; - - _437_ NAND2_X1 + PLACED ( 36993 22733 ) N ; - - _438_ OAI221_X1 + PLACED ( 39784 24409 ) N ; - - _439_ NAND2_X1 + PLACED ( 14763 37109 ) N ; - - _440_ XOR2_X1 + PLACED ( 12411 45755 ) N ; - - _441_ XNOR2_X1 + PLACED ( 13218 44703 ) N ; - - _442_ AOI221_X1 + PLACED ( 11458 45225 ) N ; - - _443_ NAND2_X1 + PLACED ( 26985 44493 ) N ; - - _444_ AOI22_X1 + PLACED ( 12872 45633 ) N ; - - _445_ OAI21_X1 + PLACED ( 36748 23819 ) N ; - - _446_ NAND2_X1 + PLACED ( 36687 22970 ) N ; - - _447_ XNOR2_X1 + PLACED ( 35649 9476 ) N ; - - _448_ XNOR2_X1 + PLACED ( 35453 10397 ) N ; - - _449_ NOR2_X1 + PLACED ( 35937 10176 ) N ; - - _450_ AOI221_X1 + PLACED ( 34800 11101 ) N ; - - _451_ OR3_X1 + PLACED ( 37999 17685 ) N ; - - _452_ AOI21_X1 + PLACED ( 35255 10301 ) N ; - - _453_ XNOR2_X1 + PLACED ( 34814 17639 ) N ; - - _454_ XNOR2_X1 + PLACED ( 34731 23882 ) N ; - - _455_ AOI221_X1 + PLACED ( 34028 15151 ) N ; - - _456_ OR3_X1 + PLACED ( 36274 17570 ) N ; - - _457_ AOI22_X1 + PLACED ( 36887 15527 ) N ; - - _458_ AOI22_X1 + PLACED ( 45060 27740 ) N ; - - _459_ NOR2_X1 + PLACED ( 47491 25020 ) N ; - - _460_ XOR2_X1 + PLACED ( 49563 13535 ) N ; - - _461_ XNOR2_X1 + PLACED ( 48220 13280 ) N ; - - _462_ NOR2_X1 + PLACED ( 45778 11014 ) N ; - - _463_ AOI221_X1 + PLACED ( 44889 12151 ) N ; - - _464_ OR3_X1 + PLACED ( 42545 17519 ) N ; - - _465_ AOI21_X1 + PLACED ( 45312 11363 ) N ; - - _466_ XNOR2_X1 + PLACED ( 49832 24604 ) N ; - - _467_ XNOR2_X1 + PLACED ( 44128 25516 ) N ; - - _468_ AOI221_X4 + PLACED ( 45320 19160 ) N ; - - _469_ OR3_X1 + PLACED ( 42628 21922 ) N ; - - _470_ AOI22_X1 + PLACED ( 48555 22033 ) N ; - - _471_ XNOR2_X1 + PLACED ( 49794 32328 ) N ; - - _472_ INV_X1 + PLACED ( 56048 33219 ) N ; - - _473_ NOR2_X1 + PLACED ( 53224 36180 ) N ; - - _474_ XNOR2_X1 + PLACED ( 51588 34108 ) N ; - - _475_ AOI221_X4 + PLACED ( 38920 37151 ) N ; - - _476_ NAND3_X1 + PLACED ( 41796 32972 ) N ; - - _477_ AOI22_X1 + PLACED ( 45095 31744 ) N ; - - _478_ XOR2_X1 + PLACED ( 47268 38544 ) N ; - - _479_ AOI221_X4 + PLACED ( 38752 40106 ) N ; - - _480_ NAND3_X1 + PLACED ( 42001 36540 ) N ; - - _481_ AOI22_X1 + PLACED ( 44182 39033 ) N ; - - _482_ NOR2_X1 + PLACED ( 8925 32322 ) N ; - - _483_ NOR2_X1 + PLACED ( 56690 30036 ) N ; - - _484_ AND3_X1 + PLACED ( 55507 31788 ) N ; - - _485_ NAND3_X1 + PLACED ( 35034 34557 ) N ; - - _486_ NOR3_X1 + PLACED ( 27580 16367 ) N ; - - _487_ NAND2_X1 + PLACED ( 29435 17739 ) N ; - - _488_ NOR4_X1 + PLACED ( 33794 43342 ) N ; - - _489_ NAND3_X1 + PLACED ( 34424 45294 ) N ; - - _490_ NOR3_X1 + PLACED ( 33990 35782 ) N ; - - _491_ NAND3_X1 + PLACED ( 33902 33260 ) N ; - - _492_ AOI221_X4 + PLACED ( 8256 32258 ) N ; - - _493_ NAND3_X1 + PLACED ( 7567 33362 ) N ; - - _494_ AOI221_X1 + PLACED ( 8537 33002 ) N ; - - _495_ MUX2_X1 + PLACED ( 44635 54089 ) N ; - - _496_ NOR2_X4 + PLACED ( 35028 43921 ) N ; - - _498_ MUX2_X1 + PLACED ( 46755 54486 ) N ; - - _499_ MUX2_X1 + PLACED ( 16430 46293 ) N ; - - _500_ MUX2_X1 + PLACED ( 18837 47252 ) N ; - - _501_ MUX2_X1 + PLACED ( 21224 54477 ) N ; - - _502_ MUX2_X1 + PLACED ( 21716 55639 ) N ; - - _503_ MUX2_X1 + PLACED ( 51000 46700 ) N ; - - _504_ MUX2_X1 + PLACED ( 52893 46545 ) N ; - - _505_ MUX2_X1 + PLACED ( 24738 5494 ) N ; - - _506_ MUX2_X1 + PLACED ( 26833 6236 ) N ; - - _507_ MUX2_X1 + PLACED ( 13247 25959 ) N ; - - _508_ MUX2_X1 + PLACED ( 14667 29901 ) N ; - - _509_ MUX2_X1 + PLACED ( 16919 8440 ) N ; - - _510_ MUX2_X1 + PLACED ( 18262 6641 ) N ; - - _511_ MUX2_X1 + PLACED ( 9147 5271 ) N ; - - _512_ MUX2_X1 + PLACED ( 11811 5214 ) N ; - - _513_ MUX2_X1 + PLACED ( 9870 52368 ) N ; - - _514_ MUX2_X1 + PLACED ( 13317 55837 ) N ; - - _515_ MUX2_X1 + PLACED ( 11376 50949 ) N ; - - _516_ MUX2_X1 + PLACED ( 13520 52392 ) N ; - - _517_ MUX2_X1 + PLACED ( 39813 5900 ) N ; - - _518_ MUX2_X1 + PLACED ( 41877 5503 ) N ; - - _519_ MUX2_X1 + PLACED ( 51100 15766 ) N ; - - _520_ MUX2_X1 + PLACED ( 54314 16204 ) N ; - - _521_ MUX2_X1 + PLACED ( 51336 8984 ) N ; - - _522_ MUX2_X1 + PLACED ( 53913 8785 ) N ; - - _523_ MUX2_X1 + PLACED ( 52486 22637 ) N ; - - _524_ MUX2_X1 + PLACED ( 54558 21430 ) N ; - - _525_ MUX2_X1 + PLACED ( 50678 32020 ) N ; - - _526_ MUX2_X1 + PLACED ( 54517 31236 ) N ; - - _527_ MUX2_X1 + PLACED ( 52172 39711 ) N ; - - _528_ MUX2_X1 + PLACED ( 54484 39464 ) N ; - - _529_ AOI22_X1 + PLACED ( 13944 37044 ) N ; - - _530_ NOR2_X1 + PLACED ( 13313 37889 ) N ; - - _531_ XNOR2_X1 + PLACED ( 12716 40489 ) N ; - - _532_ XNOR2_X1 + PLACED ( 11095 39606 ) N ; - - _533_ AOI221_X1 + PLACED ( 8026 39752 ) N ; - - _534_ OR3_X1 + PLACED ( 31988 36637 ) N ; - - _535_ AOI22_X1 + PLACED ( 8669 39204 ) N ; - - _536_ DFF_X1 + PLACED ( 1938 43894 ) N ; - - _537_ DFF_X1 + PLACED ( 31692 57478 ) N ; - - _538_ DFF_X1 + PLACED ( 40317 57478 ) N ; - - _539_ DFF_X1 + PLACED ( 46206 49900 ) N ; - - _540_ DFF_X1 + PLACED ( 21391 1322 ) N ; - - _541_ DFF_X1 + PLACED ( 15997 12277 ) N ; - - _542_ DFF_X1 + PLACED ( 4197 10382 ) N ; - - _543_ DFF_X1 + PLACED ( 1890 17674 ) N ; - - _544_ DFF_X1 + PLACED ( 5386 47589 ) N ; - - _545_ DFF_X1 + PLACED ( 33253 4494 ) N ; - - _546_ DFF_X1 + PLACED ( 39331 12814 ) N ; - - _547_ DFF_X1 + PLACED ( 46116 9425 ) N ; - - _548_ DFF_X1 + PLACED ( 53853 25776 ) N ; - - _549_ DFF_X1 + PLACED ( 44441 32570 ) N ; - - _550_ DFF_X1 + PLACED ( 46658 40536 ) N ; - - _551_ DFF_X1 + PLACED ( 4196 24941 ) N ; - - _552_ DFF_X1 + PLACED ( 0 32131 ) N ; - - _553_ DFF_X1 + PLACED ( 47444 54741 ) N ; - - _554_ DFF_X1 + PLACED ( 19359 47630 ) N ; - - _555_ DFF_X1 + PLACED ( 21865 56619 ) N ; - - _556_ DFF_X1 + PLACED ( 53521 46735 ) N ; - - _557_ DFF_X1 + PLACED ( 27459 6271 ) N ; - - _558_ DFF_X1 + PLACED ( 15005 30497 ) N ; - - _559_ DFF_X1 + PLACED ( 18820 6468 ) N ; - - _560_ DFF_X1 + PLACED ( 11575 4595 ) N ; - - _561_ DFF_X1 + PLACED ( 14015 57183 ) N ; - - _562_ DFF_X1 + PLACED ( 14225 52722 ) N ; - - _563_ DFF_X1 + PLACED ( 42627 4998 ) N ; - - _564_ DFF_X1 + PLACED ( 55283 16364 ) N ; - - _565_ DFF_X1 + PLACED ( 54717 8863 ) N ; - - _566_ DFF_X1 + PLACED ( 55480 21454 ) N ; - - _567_ DFF_X1 + PLACED ( 55480 31323 ) N ; - - _568_ DFF_X1 + PLACED ( 55425 39536 ) N ; - - _569_ DFF_X1 + PLACED ( 1247 39775 ) N ; - - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 9469 26250 ) N ; + - _276_ NOR2_X4 + PLACED ( 9573 29954 ) N ; + - _278_ INV_X1 + PLACED ( 19422 44139 ) N ; + - _279_ NOR2_X1 + PLACED ( 22000 42577 ) N ; + - _280_ INV_X1 + PLACED ( 22820 36266 ) N ; + - _281_ INV_X1 + PLACED ( 39070 52406 ) N ; + - _282_ NOR2_X1 + PLACED ( 37786 52535 ) N ; + - _283_ INV_X1 + PLACED ( 40907 45866 ) N ; + - _284_ NOR2_X1 + PLACED ( 40229 49019 ) N ; + - _285_ NOR2_X1 + PLACED ( 37167 50727 ) N ; + - _286_ INV_X1 + PLACED ( 27911 50386 ) N ; + - _287_ NOR2_X1 + PLACED ( 28179 51532 ) N ; + - _288_ INV_X1 + PLACED ( 28515 51059 ) N ; + - _289_ AND2_X1 + PLACED ( 27859 33767 ) N ; + - _290_ INV_X1 + PLACED ( 17252 15766 ) N ; + - _291_ NOR2_X1 + PLACED ( 16029 17259 ) N ; + - _292_ INV_X2 + PLACED ( 10641 17381 ) N ; + - _293_ AOI21_X2 + PLACED ( 14596 18369 ) N ; + - _294_ INV_X1 + PLACED ( 28302 16337 ) N ; + - _295_ NOR2_X1 + PLACED ( 25973 18413 ) N ; + - _296_ INV_X1 + PLACED ( 20632 17742 ) N ; + - _297_ NOR2_X2 + PLACED ( 20884 18129 ) N ; + - _298_ NOR2_X1 + PLACED ( 23659 22948 ) N ; + - _299_ AND2_X2 + PLACED ( 24432 30935 ) N ; + - _300_ INV_X1 + PLACED ( 46062 17359 ) N ; + - _301_ NOR2_X1 + PLACED ( 45331 17748 ) N ; + - _302_ INV_X1 + PLACED ( 46063 21895 ) N ; + - _303_ NOR3_X1 + PLACED ( 47211 20040 ) N ; + - _304_ AOI21_X1 + PLACED ( 45518 18012 ) N ; + - _305_ INV_X1 + PLACED ( 43195 19030 ) N ; + - _306_ INV_X1 + PLACED ( 43057 31630 ) N ; + - _307_ AND2_X1 + PLACED ( 45256 29678 ) N ; + - _308_ INV_X1 + PLACED ( 48064 29728 ) N ; + - _309_ INV_X1 + PLACED ( 41121 38237 ) N ; + - _310_ OAI211_X1 + PLACED ( 42946 29913 ) N ; + - _311_ NAND2_X1 + PLACED ( 43808 27031 ) N ; + - _312_ INV_X1 + PLACED ( 52848 22775 ) N ; + - _313_ NOR2_X1 + PLACED ( 47991 25161 ) N ; + - _314_ NOR3_X1 + PLACED ( 42840 25159 ) N ; + - _315_ NOR2_X2 + PLACED ( 40329 24360 ) N ; + - _316_ INV_X1 + PLACED ( 36019 18091 ) N ; + - _317_ NOR2_X1 + PLACED ( 34935 18644 ) N ; + - _318_ INV_X1 + PLACED ( 33778 17591 ) N ; + - _319_ NOR2_X1 + PLACED ( 36286 23613 ) N ; + - _320_ INV_X1 + PLACED ( 12589 46001 ) N ; + - _321_ NAND2_X1 + PLACED ( 14383 37640 ) N ; + - _322_ INV_X1 + PLACED ( 19023 38598 ) N ; + - _323_ OAI21_X1 + PLACED ( 14905 37607 ) N ; + - _324_ NOR4_X2 + PLACED ( 31512 25078 ) N ; + - _325_ NOR2_X1 + PLACED ( 13837 38109 ) N ; + - _326_ OAI21_X1 + PLACED ( 16797 38104 ) N ; + - _327_ INV_X1 + PLACED ( 9295 39003 ) N ; + - _328_ INV_X1 + PLACED ( 31484 16587 ) N ; + - _329_ NOR3_X1 + PLACED ( 34981 23390 ) N ; + - _330_ AOI21_X1 + PLACED ( 34766 24393 ) N ; + - _331_ OAI221_X4 + PLACED ( 17378 38201 ) N ; + - _332_ OAI211_X1 + PLACED ( 27133 28229 ) N ; + - _333_ AND2_X1 + PLACED ( 21806 42977 ) N ; + - _334_ INV_X2 + PLACED ( 23156 42201 ) N ; + - _335_ NAND2_X1 + PLACED ( 37437 52873 ) N ; + - _336_ NAND2_X1 + PLACED ( 40166 48189 ) N ; + - _337_ NAND2_X1 + PLACED ( 34633 50574 ) N ; + - _338_ INV_X1 + PLACED ( 37148 51844 ) N ; + - _339_ NAND3_X1 + PLACED ( 29442 50896 ) N ; + - _340_ NAND2_X1 + PLACED ( 28301 51447 ) N ; + - _341_ NAND2_X1 + PLACED ( 28719 50795 ) N ; + - _342_ INV_X1 + PLACED ( 18118 16988 ) N ; + - _343_ OAI211_X1 + PLACED ( 17621 17456 ) N ; + - _344_ NAND2_X1 + PLACED ( 18701 17477 ) N ; + - _345_ AOI211_X1 + PLACED ( 22027 21561 ) N ; + - _346_ NAND2_X1 + PLACED ( 26293 18386 ) N ; + - _347_ NAND2_X1 + PLACED ( 20424 19382 ) N ; + - _348_ OAI21_X1 + PLACED ( 25039 20939 ) N ; + - _349_ OR2_X2 + PLACED ( 27427 23422 ) N ; + - _350_ AOI21_X1 + PLACED ( 27738 34963 ) N ; + - _351_ AND4_X1 + PLACED ( 22544 35756 ) N ; + - _352_ AOI22_X1 + PLACED ( 22715 35903 ) N ; + - _353_ OR2_X1 + PLACED ( 22764 36903 ) N ; + - _355_ INV_X8 + PLACED ( 4565 32970 ) N ; + - _357_ AND3_X2 + PLACED ( 27457 33663 ) N ; + - _358_ OAI211_X1 + PLACED ( 26986 27755 ) N ; + - _359_ OAI21_X2 + PLACED ( 27474 35586 ) N ; + - _360_ OAI21_X2 + PLACED ( 27546 24346 ) N ; + - _361_ NAND3_X4 + PLACED ( 27821 28700 ) N ; + - _362_ NOR2_X4 + PLACED ( 36685 31505 ) N ; + - _363_ INV_X4 + PLACED ( 37803 32002 ) N ; + - _364_ NOR2_X4 + PLACED ( 33866 37456 ) N ; + - _365_ AOI221_X4 + PLACED ( 27435 42503 ) N ; + - _366_ AND2_X4 + PLACED ( 36536 30287 ) N ; + - _368_ OAI21_X1 + PLACED ( 22817 37850 ) N ; + - _370_ AOI22_X1 + PLACED ( 21834 42718 ) N ; + - _371_ NOR2_X2 + PLACED ( 31035 26892 ) N ; + - _372_ NAND3_X1 + PLACED ( 25032 32198 ) N ; + - _373_ OR2_X1 + PLACED ( 25601 46917 ) N ; + - _374_ AOI22_X1 + PLACED ( 29528 50394 ) N ; + - _375_ NAND2_X1 + PLACED ( 27515 50469 ) N ; + - _376_ XOR2_X1 + PLACED ( 26652 56766 ) N ; + - _377_ XNOR2_X1 + PLACED ( 27638 55930 ) N ; + - _378_ INV_X4 + PLACED ( 8824 24203 ) N ; + - _380_ NOR2_X1 + PLACED ( 32262 55268 ) N ; + - _381_ NAND2_X1 + PLACED ( 30078 55722 ) N ; + - _382_ AOI221_X4 + PLACED ( 27203 46136 ) N ; + - _383_ AOI21_X1 + PLACED ( 31307 55884 ) N ; + - _384_ INV_X1 + PLACED ( 32724 46740 ) N ; + - _385_ INV_X1 + PLACED ( 31421 42263 ) N ; + - _386_ OAI211_X1 + PLACED ( 33823 47359 ) N ; + - _387_ INV_X1 + PLACED ( 38051 51352 ) N ; + - _388_ AND4_X1 + PLACED ( 36518 52493 ) N ; + - _389_ AOI22_X1 + PLACED ( 36307 52567 ) N ; + - _390_ NOR2_X1 + PLACED ( 38546 53539 ) N ; + - _391_ NOR2_X1 + PLACED ( 42071 55002 ) N ; + - _392_ NAND2_X1 + PLACED ( 40229 54769 ) N ; + - _393_ AOI221_X4 + PLACED ( 38250 45750 ) N ; + - _394_ AOI21_X1 + PLACED ( 41234 55506 ) N ; + - _395_ OAI21_X1 + PLACED ( 33792 45899 ) N ; + - _396_ XOR2_X1 + PLACED ( 45734 46474 ) N ; + - _397_ XNOR2_X1 + PLACED ( 45045 45937 ) N ; + - _398_ NOR2_X1 + PLACED ( 44879 47277 ) N ; + - _399_ AOI221_X1 + PLACED ( 44410 45909 ) N ; + - _401_ OR3_X1 + PLACED ( 41467 37275 ) N ; + - _402_ AOI21_X1 + PLACED ( 44901 46841 ) N ; + - _403_ INV_X1 + PLACED ( 22223 24045 ) N ; + - _404_ OAI211_X1 + PLACED ( 26669 25973 ) N ; + - _405_ AOI21_X1 + PLACED ( 21227 18458 ) N ; + - _406_ AOI21_X1 + PLACED ( 21538 17229 ) N ; + - _407_ AND2_X1 + PLACED ( 26282 16342 ) N ; + - _408_ XNOR2_X1 + PLACED ( 26320 10984 ) N ; + - _409_ XNOR2_X1 + PLACED ( 26687 11808 ) N ; + - _410_ NOR2_X1 + PLACED ( 25931 11791 ) N ; + - _411_ AOI221_X1 + PLACED ( 25709 12189 ) N ; + - _412_ OR3_X1 + PLACED ( 29563 17173 ) N ; + - _413_ AOI21_X1 + PLACED ( 25575 11886 ) N ; + - _414_ OAI21_X1 + PLACED ( 26952 26409 ) N ; + - _415_ AND2_X1 + PLACED ( 20152 21954 ) N ; + - _416_ AND4_X1 + PLACED ( 20574 25425 ) N ; + - _417_ AOI22_X1 + PLACED ( 20460 25480 ) N ; + - _418_ OR2_X1 + PLACED ( 19283 26007 ) N ; + - _419_ NOR2_X1 + PLACED ( 16179 25307 ) N ; + - _420_ AOI221_X4 + PLACED ( 27584 38446 ) N ; + - _421_ OAI21_X1 + PLACED ( 18284 25806 ) N ; + - _422_ AOI21_X1 + PLACED ( 17138 25811 ) N ; + - _423_ AOI21_X1 + PLACED ( 12368 17538 ) N ; + - _424_ NOR2_X1 + PLACED ( 11946 16351 ) N ; + - _425_ NOR2_X1 + PLACED ( 12168 15707 ) N ; + - _426_ XNOR2_X1 + PLACED ( 14241 11926 ) N ; + - _427_ XNOR2_X1 + PLACED ( 11933 12758 ) N ; + - _428_ NOR2_X1 + PLACED ( 9980 12178 ) N ; + - _429_ AOI221_X1 + PLACED ( 8384 12838 ) N ; + - _430_ OR3_X1 + PLACED ( 29588 16961 ) N ; + - _431_ AOI21_X1 + PLACED ( 8682 12445 ) N ; + - _432_ XNOR2_X1 + PLACED ( 11528 19885 ) N ; + - _433_ XNOR2_X1 + PLACED ( 11953 22350 ) N ; + - _434_ AOI221_X1 + PLACED ( 9309 22498 ) N ; + - _435_ OR3_X1 + PLACED ( 29739 17956 ) N ; + - _436_ AOI22_X1 + PLACED ( 9749 18393 ) N ; + - _437_ NAND2_X1 + PLACED ( 37778 22900 ) N ; + - _438_ OAI221_X1 + PLACED ( 40197 24524 ) N ; + - _439_ NAND2_X1 + PLACED ( 14451 37171 ) N ; + - _440_ XOR2_X1 + PLACED ( 12211 45785 ) N ; + - _441_ XNOR2_X1 + PLACED ( 12940 44667 ) N ; + - _442_ AOI221_X1 + PLACED ( 11225 45194 ) N ; + - _443_ NAND2_X1 + PLACED ( 26881 44690 ) N ; + - _444_ AOI22_X1 + PLACED ( 12640 45713 ) N ; + - _445_ OAI21_X1 + PLACED ( 37611 23787 ) N ; + - _446_ NAND2_X1 + PLACED ( 38271 23113 ) N ; + - _447_ XNOR2_X1 + PLACED ( 36565 7591 ) N ; + - _448_ XNOR2_X1 + PLACED ( 37806 9912 ) N ; + - _449_ NOR2_X1 + PLACED ( 40354 12020 ) N ; + - _450_ AOI221_X1 + PLACED ( 38810 11790 ) N ; + - _451_ OR3_X1 + PLACED ( 39312 17137 ) N ; + - _452_ AOI21_X1 + PLACED ( 39437 11930 ) N ; + - _453_ XNOR2_X1 + PLACED ( 36428 17640 ) N ; + - _454_ XNOR2_X1 + PLACED ( 35438 23828 ) N ; + - _455_ AOI221_X1 + PLACED ( 33592 16222 ) N ; + - _456_ OR3_X1 + PLACED ( 34688 17415 ) N ; + - _457_ AOI22_X1 + PLACED ( 34418 15997 ) N ; + - _458_ AOI22_X1 + PLACED ( 45394 27927 ) N ; + - _459_ NOR2_X1 + PLACED ( 47760 25181 ) N ; + - _460_ XOR2_X1 + PLACED ( 49116 14147 ) N ; + - _461_ XNOR2_X1 + PLACED ( 48160 13911 ) N ; + - _462_ NOR2_X1 + PLACED ( 44837 12017 ) N ; + - _463_ AOI221_X1 + PLACED ( 43891 12803 ) N ; + - _464_ OR3_X1 + PLACED ( 42176 16979 ) N ; + - _465_ AOI21_X1 + PLACED ( 44282 12265 ) N ; + - _466_ XNOR2_X1 + PLACED ( 49561 24292 ) N ; + - _467_ XNOR2_X1 + PLACED ( 44366 25601 ) N ; + - _468_ AOI221_X4 + PLACED ( 45269 19608 ) N ; + - _469_ OR3_X1 + PLACED ( 42418 21651 ) N ; + - _470_ AOI22_X1 + PLACED ( 48312 21735 ) N ; + - _471_ XNOR2_X1 + PLACED ( 50016 32356 ) N ; + - _472_ INV_X1 + PLACED ( 56194 33946 ) N ; + - _473_ NOR2_X1 + PLACED ( 53289 36590 ) N ; + - _474_ XNOR2_X1 + PLACED ( 51734 34511 ) N ; + - _475_ AOI221_X4 + PLACED ( 39109 37092 ) N ; + - _476_ NAND3_X1 + PLACED ( 41626 33294 ) N ; + - _477_ AOI22_X1 + PLACED ( 45472 31875 ) N ; + - _478_ XOR2_X1 + PLACED ( 47277 38683 ) N ; + - _479_ AOI221_X4 + PLACED ( 39065 39965 ) N ; + - _480_ NAND3_X1 + PLACED ( 41795 36641 ) N ; + - _481_ AOI22_X1 + PLACED ( 44533 39001 ) N ; + - _482_ NOR2_X1 + PLACED ( 9190 31916 ) N ; + - _483_ NOR2_X1 + PLACED ( 56614 30079 ) N ; + - _484_ AND3_X1 + PLACED ( 55630 31767 ) N ; + - _485_ NAND3_X1 + PLACED ( 34870 34218 ) N ; + - _486_ NOR3_X1 + PLACED ( 27284 16440 ) N ; + - _487_ NAND2_X1 + PLACED ( 29326 17776 ) N ; + - _488_ NOR4_X1 + PLACED ( 33864 43011 ) N ; + - _489_ NAND3_X1 + PLACED ( 34577 44584 ) N ; + - _490_ NOR3_X1 + PLACED ( 34214 36180 ) N ; + - _491_ NAND3_X1 + PLACED ( 34139 33974 ) N ; + - _492_ AOI221_X4 + PLACED ( 8177 32519 ) N ; + - _493_ NAND3_X1 + PLACED ( 7659 34246 ) N ; + - _494_ AOI221_X1 + PLACED ( 8481 33675 ) N ; + - _495_ MUX2_X1 + PLACED ( 44500 54312 ) N ; + - _496_ NOR2_X4 + PLACED ( 35237 43616 ) N ; + - _498_ MUX2_X1 + PLACED ( 46427 54720 ) N ; + - _499_ MUX2_X1 + PLACED ( 16719 46416 ) N ; + - _500_ MUX2_X1 + PLACED ( 18731 47068 ) N ; + - _501_ MUX2_X1 + PLACED ( 20821 54852 ) N ; + - _502_ MUX2_X1 + PLACED ( 21605 55603 ) N ; + - _503_ MUX2_X1 + PLACED ( 50989 47350 ) N ; + - _504_ MUX2_X1 + PLACED ( 52698 47438 ) N ; + - _505_ MUX2_X1 + PLACED ( 25032 5621 ) N ; + - _506_ MUX2_X1 + PLACED ( 26865 6211 ) N ; + - _507_ MUX2_X1 + PLACED ( 13620 26961 ) N ; + - _508_ MUX2_X1 + PLACED ( 15092 30359 ) N ; + - _509_ MUX2_X1 + PLACED ( 16941 7043 ) N ; + - _510_ MUX2_X1 + PLACED ( 18398 6031 ) N ; + - _511_ MUX2_X1 + PLACED ( 9934 6523 ) N ; + - _512_ MUX2_X1 + PLACED ( 12313 5777 ) N ; + - _513_ MUX2_X1 + PLACED ( 10116 52927 ) N ; + - _514_ MUX2_X1 + PLACED ( 13497 55778 ) N ; + - _515_ MUX2_X1 + PLACED ( 11267 50721 ) N ; + - _516_ MUX2_X1 + PLACED ( 13631 52157 ) N ; + - _517_ MUX2_X1 + PLACED ( 41443 5811 ) N ; + - _518_ MUX2_X1 + PLACED ( 43766 5512 ) N ; + - _519_ MUX2_X1 + PLACED ( 51195 15658 ) N ; + - _520_ MUX2_X1 + PLACED ( 54292 16023 ) N ; + - _521_ MUX2_X1 + PLACED ( 50854 9275 ) N ; + - _522_ MUX2_X1 + PLACED ( 53191 9084 ) N ; + - _523_ MUX2_X1 + PLACED ( 52372 22122 ) N ; + - _524_ MUX2_X1 + PLACED ( 54504 21473 ) N ; + - _525_ MUX2_X1 + PLACED ( 50928 31976 ) N ; + - _526_ MUX2_X1 + PLACED ( 54529 31154 ) N ; + - _527_ MUX2_X1 + PLACED ( 52146 39892 ) N ; + - _528_ MUX2_X1 + PLACED ( 54288 39597 ) N ; + - _529_ AOI22_X1 + PLACED ( 13776 37321 ) N ; + - _530_ NOR2_X1 + PLACED ( 13382 38142 ) N ; + - _531_ XNOR2_X1 + PLACED ( 13053 40616 ) N ; + - _532_ XNOR2_X1 + PLACED ( 11375 39785 ) N ; + - _533_ AOI221_X1 + PLACED ( 8026 39881 ) N ; + - _534_ OR3_X1 + PLACED ( 31886 36480 ) N ; + - _535_ AOI22_X1 + PLACED ( 8781 39075 ) N ; + - _536_ DFF_X1 + PLACED ( 1423 44005 ) N ; + - _537_ DFF_X1 + PLACED ( 31170 57478 ) N ; + - _538_ DFF_X1 + PLACED ( 39892 57478 ) N ; + - _539_ DFF_X1 + PLACED ( 45737 49817 ) N ; + - _540_ DFF_X1 + PLACED ( 21129 1322 ) N ; + - _541_ DFF_X1 + PLACED ( 16083 12250 ) N ; + - _542_ DFF_X1 + PLACED ( 5268 9076 ) N ; + - _543_ DFF_X1 + PLACED ( 2521 17604 ) N ; + - _544_ DFF_X1 + PLACED ( 5220 47670 ) N ; + - _545_ DFF_X1 + PLACED ( 35244 4077 ) N ; + - _546_ DFF_X1 + PLACED ( 31416 10515 ) N ; + - _547_ DFF_X1 + PLACED ( 44531 10413 ) N ; + - _548_ DFF_X1 + PLACED ( 53728 25526 ) N ; + - _549_ DFF_X1 + PLACED ( 44611 32549 ) N ; + - _550_ DFF_X1 + PLACED ( 46844 40504 ) N ; + - _551_ DFF_X1 + PLACED ( 3100 24658 ) N ; + - _552_ DFF_X1 + PLACED ( 0 32362 ) N ; + - _553_ DFF_X1 + PLACED ( 47044 55051 ) N ; + - _554_ DFF_X1 + PLACED ( 19200 47403 ) N ; + - _555_ DFF_X1 + PLACED ( 21803 56472 ) N ; + - _556_ DFF_X1 + PLACED ( 53239 47711 ) N ; + - _557_ DFF_X1 + PLACED ( 27447 6166 ) N ; + - _558_ DFF_X1 + PLACED ( 15594 30819 ) N ; + - _559_ DFF_X1 + PLACED ( 19019 5764 ) N ; + - _560_ DFF_X1 + PLACED ( 12146 5410 ) N ; + - _561_ DFF_X1 + PLACED ( 14077 56997 ) N ; + - _562_ DFF_X1 + PLACED ( 14316 52468 ) N ; + - _563_ DFF_X1 + PLACED ( 44521 5085 ) N ; + - _564_ DFF_X1 + PLACED ( 55304 16183 ) N ; + - _565_ DFF_X1 + PLACED ( 53926 9176 ) N ; + - _566_ DFF_X1 + PLACED ( 55480 21583 ) N ; + - _567_ DFF_X1 + PLACED ( 55480 31231 ) N ; + - _568_ DFF_X1 + PLACED ( 55168 39614 ) N ; + - _569_ DFF_X1 + PLACED ( 1482 39421 ) N ; + - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 8961 26601 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL @@ -886,8 +886,8 @@ NETS 357 ; - dpath.b_reg.out_reg\[7\].qi ( _322_ A ) ( _331_ B1 ) ( _514_ B ) ( _531_ A ) ( _561_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[8\].qi ( _293_ B1 ) ( _342_ A ) ( _423_ B1 ) ( _424_ A2 ) ( _432_ A ) ( _512_ B ) ( _560_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[9\].qi ( _290_ A ) ( _426_ A ) ( _486_ A1 ) ( _510_ B ) ( _559_ Q ) + USE SIGNAL ; - - net1 ( max_cap1 Z ) ( _535_ B1 ) ( _399_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _362_ A2 ) ( _475_ A ) - ( _479_ A ) ( _393_ A ) ( _382_ A ) ( _420_ A ) ( _365_ A ) ( _442_ A ) ( _444_ B1 ) ( _533_ A ) + - net1 ( max_cap1 Z ) ( _535_ B1 ) ( _420_ A ) ( _399_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _362_ A2 ) + ( _475_ A ) ( _479_ A ) ( _393_ A ) ( _382_ A ) ( _365_ A ) ( _442_ A ) ( _444_ B1 ) ( _533_ A ) ( _370_ B1 ) ( _276_ A1 ) + USE SIGNAL ; - req_msg\[0\] ( PIN req_msg[0] ) ( _527_ B ) + USE SIGNAL ; - req_msg\[10\] ( PIN req_msg[10] ) ( _507_ B ) + USE SIGNAL ; diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index 8fa1e5145a..bc05674082 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -99,15 +99,15 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -69.958 um^2 (-12.64%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.62665915 +[INFO GPL-0110] Timing-driven: new target density: 0.6250477 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 290 | 0.3018 | 2.935351e+06 | -37.18% | 8.94e-08 | - 300 | 0.2878 | 3.003750e+06 | +2.33% | 1.32e-07 | - 310 | 0.2264 | 2.944366e+06 | -1.98% | 1.94e-07 | - 320 | 0.2042 | 2.963868e+06 | +0.66% | 2.86e-07 | + 290 | 0.3024 | 2.937726e+06 | -37.13% | 8.94e-08 | + 300 | 0.2887 | 3.005554e+06 | +2.31% | 1.32e-07 | + 310 | 0.2273 | 2.945601e+06 | -1.99% | 1.94e-07 | + 320 | 0.2049 | 2.965581e+06 | +0.68% | 2.86e-07 | [INFO GPL-0100] Timing-driven iteration 4/5, virtual: false. -[INFO GPL-0101] Iter: 320, overflow: 0.204, keep resizer changes at: 0.3, HPWL: 2963868 +[INFO GPL-0101] Iter: 320, overflow: 0.205, keep resizer changes at: 0.3, HPWL: 2965581 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -120,13 +120,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: 5.054 um^2 (+1.05%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 1 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 1 -[INFO GPL-0110] Timing-driven: new target density: 0.6319576 +[INFO GPL-0110] Timing-driven: new target density: 0.6303461 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 330 | 0.1866 | 3.007993e+06 | +1.49% | 4.21e-07 | - 340 | 0.1537 | 3.055958e+06 | +1.59% | 6.20e-07 | + 330 | 0.1867 | 3.010591e+06 | +1.52% | 4.21e-07 | + 340 | 0.1527 | 3.057074e+06 | +1.54% | 6.20e-07 | [INFO GPL-0100] Timing-driven iteration 5/5, virtual: false. -[INFO GPL-0101] Iter: 343, overflow: 0.144, keep resizer changes at: 0.3, HPWL: 3060785 +[INFO GPL-0101] Iter: 343, overflow: 0.144, keep resizer changes at: 0.3, HPWL: 3061567 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -137,19 +137,20 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -0.266 um^2 (-0.05%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.63167876 +[INFO GPL-0110] Timing-driven: new target density: 0.6300672 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 350 | 0.1389 | 3.073624e+06 | +0.58% | 9.14e-07 | - 360 | 0.1079 | 3.109495e+06 | +1.17% | 1.35e-06 | - 370 | 0.1051 | 3.139810e+06 | +0.97% | 1.98e-06 | -[INFO GPL-1001] Finished with Overflow: 0.099742 + 350 | 0.1395 | 3.076320e+06 | +0.63% | 9.14e-07 | + 360 | 0.1096 | 3.110143e+06 | +1.10% | 1.35e-06 | + 370 | 0.0985 | 3.140686e+06 | +0.98% | 1.98e-06 | +[INFO GPL-1001] Finished with Overflow: 0.098474 [INFO GPL-1002] Placed Cell Area 488.1100 [INFO GPL-1003] Available Free Area 953.8760 -[INFO GPL-1004] Minimum Feasible Density 0.5117 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5686 [INFO GPL-1008] - For 80% usage of free space: 0.6396 [INFO GPL-1009] - For 50% usage of free space: 1.0234 +[INFO GPL-0083] Original area um^2: 0.00, new area: 488.11, change: inf%, New area due to routability inflation and/or timing-driven otimizations. worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-uniform.ok b/src/gpl/test/simple01-uniform.ok index a08cd51aec..8073beb272 100644 --- a/src/gpl/test/simple01-uniform.ok +++ b/src/gpl/test/simple01-uniform.ok @@ -65,4 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01.ok b/src/gpl/test/simple01.ok index 3a724caebb..a20442fac0 100644 --- a/src/gpl/test/simple01.ok +++ b/src/gpl/test/simple01.ok @@ -65,4 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple02-rd.ok b/src/gpl/test/simple02-rd.ok index cf544408a6..5587c6c88e 100644 --- a/src/gpl/test/simple02-rd.ok +++ b/src/gpl/test/simple02-rd.ok @@ -82,6 +82,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.0000), end routability optimization. +[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -99,4 +100,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple02.ok b/src/gpl/test/simple02.ok index 73d9c32d91..9e0774cced 100644 --- a/src/gpl/test/simple02.ok +++ b/src/gpl/test/simple02.ok @@ -65,4 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6639 [INFO GPL-1008] - For 80% usage of free space: 0.7469 [INFO GPL-1009] - For 50% usage of free space: 1.1950 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple03-rd.ok b/src/gpl/test/simple03-rd.ok index ee005d7e91..1e6becde7d 100644 --- a/src/gpl/test/simple03-rd.ok +++ b/src/gpl/test/simple03-rd.ok @@ -75,6 +75,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. +[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -92,4 +93,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple03.ok b/src/gpl/test/simple03.ok index 09997377c2..ed86207f92 100644 --- a/src/gpl/test/simple03.ok +++ b/src/gpl/test/simple03.ok @@ -80,4 +80,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple04-rd.ok b/src/gpl/test/simple04-rd.ok index 06622b096b..d9563a66a8 100644 --- a/src/gpl/test/simple04-rd.ok +++ b/src/gpl/test/simple04-rd.ok @@ -75,6 +75,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(0.6700), end routability optimization. +[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -92,4 +93,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple04.ok b/src/gpl/test/simple04.ok index faf910e7b0..31d81c33e0 100644 --- a/src/gpl/test/simple04.ok +++ b/src/gpl/test/simple04.ok @@ -90,4 +90,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple05.ok b/src/gpl/test/simple05.ok index 5ae7a223dd..4ddf42a525 100644 --- a/src/gpl/test/simple05.ok +++ b/src/gpl/test/simple05.ok @@ -40,4 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0608 [INFO GPL-1008] - For 80% usage of free space: 0.0684 +[INFO GPL-0083] Original area um^2: 0.00, new area: 1.86, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple07.ok b/src/gpl/test/simple07.ok index 4c22379925..eb041b2aec 100644 --- a/src/gpl/test/simple07.ok +++ b/src/gpl/test/simple07.ok @@ -49,4 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 +[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple08.ok b/src/gpl/test/simple08.ok index c628877446..042c1d781f 100644 --- a/src/gpl/test/simple08.ok +++ b/src/gpl/test/simple08.ok @@ -49,4 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 +[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple09.ok b/src/gpl/test/simple09.ok index 92c2b991b7..531230028a 100644 --- a/src/gpl/test/simple09.ok +++ b/src/gpl/test/simple09.ok @@ -40,4 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0022 [INFO GPL-1008] - For 80% usage of free space: 0.0024 +[INFO GPL-0083] Original area um^2: 0.00, new area: 1.86, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple10.ok b/src/gpl/test/simple10.ok index 75ea435b58..4b2edba420 100644 --- a/src/gpl/test/simple10.ok +++ b/src/gpl/test/simple10.ok @@ -49,4 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0000 +[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. No differences found. From 68f84a25af0c1e99ac0b6be07e7f489d616e279d Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 2 Jun 2025 09:06:36 +0000 Subject: [PATCH 18/41] gpl: fix original design area for reporting Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovPlace.cpp | 12 ++++++------ src/gpl/test/ar01.ok | 2 +- src/gpl/test/ar02.ok | 2 +- src/gpl/test/cluster_place01.ok | 2 +- src/gpl/test/convergence01.ok | 2 +- src/gpl/test/core01.ok | 2 +- src/gpl/test/density01.ok | 2 +- src/gpl/test/diverge01.ok | 2 +- src/gpl/test/incremental01.ok | 2 +- src/gpl/test/incremental02.ok | 4 ++-- src/gpl/test/nograd01.ok | 2 +- src/gpl/test/simple01-obs.ok | 2 +- src/gpl/test/simple01-ref.ok | 2 +- src/gpl/test/simple01-skip-io.ok | 2 +- src/gpl/test/simple01-td-tune.ok | 2 +- src/gpl/test/simple01-td.ok | 2 +- src/gpl/test/simple01-uniform.ok | 2 +- src/gpl/test/simple01.ok | 2 +- src/gpl/test/simple02.ok | 2 +- src/gpl/test/simple03.ok | 2 +- src/gpl/test/simple04.ok | 2 +- src/gpl/test/simple05.ok | 2 +- src/gpl/test/simple07.ok | 2 +- src/gpl/test/simple08.ok | 2 +- src/gpl/test/simple09.ok | 2 +- src/gpl/test/simple10.ok | 2 +- 26 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 5aed78e7a8..d6c285e80e 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -289,10 +289,16 @@ int NesterovPlace::doNesterovPlace(int start_iter) // backTracking variable. float curA = 1.0; + int routability_driven_count = 0; + int timing_driven_count = 0; + bool final_routability_image_saved = false; + int64_t original_area = 0; + for (auto& nb : nbVec_) { nb->setIter(start_iter); nb->setMaxPhiCoefChanged(false); nb->resetMinSumOverflow(); + original_area += nb->nesterovInstsArea(); } namespace fs = std::filesystem; @@ -325,11 +331,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) clean_directory(routability_driven_dir); } - int routability_driven_count = 0; - int timing_driven_count = 0; - bool final_routability_image_saved = false; - int64_t original_area = 0; - // Core Nesterov Loop int iter = start_iter; for (; iter < npVars_.maxNesterovIter; iter++) { @@ -763,7 +764,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) for (auto& nb : nbVec_) { nb->snapshot(); - original_area += nb->nesterovInstsArea(); } log_->info(GPL, 88, "Routability snapshot saved at iter = {}", iter); diff --git a/src/gpl/test/ar01.ok b/src/gpl/test/ar01.ok index 82334cfe17..85051c8595 100644 --- a/src/gpl/test/ar01.ok +++ b/src/gpl/test/ar01.ok @@ -64,5 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5545 [INFO GPL-1008] - For 80% usage of free space: 0.6238 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/ar02.ok b/src/gpl/test/ar02.ok index 4dfcda6d56..2de64cc715 100644 --- a/src/gpl/test/ar02.ok +++ b/src/gpl/test/ar02.ok @@ -64,5 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5543 [INFO GPL-1008] - For 80% usage of free space: 0.6235 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/cluster_place01.ok b/src/gpl/test/cluster_place01.ok index 8edefac261..524afd53fe 100644 --- a/src/gpl/test/cluster_place01.ok +++ b/src/gpl/test/cluster_place01.ok @@ -65,5 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index a46661e39b..ed3fb9fba6 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -69,5 +69,5 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.1212 [INFO GPL-1008] - For 80% usage of free space: 0.1364 -[INFO GPL-0083] Original area um^2: 0.00, new area: 12.73, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 15.53, new area: 12.73, change: -18.03%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/core01.ok b/src/gpl/test/core01.ok index 2c4333acfd..e26905052a 100644 --- a/src/gpl/test/core01.ok +++ b/src/gpl/test/core01.ok @@ -64,5 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/density01.ok b/src/gpl/test/density01.ok index 0503f1b180..0176fef717 100644 --- a/src/gpl/test/density01.ok +++ b/src/gpl/test/density01.ok @@ -143,5 +143,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/diverge01.ok b/src/gpl/test/diverge01.ok index 43e845c4ea..3690144e0a 100644 --- a/src/gpl/test/diverge01.ok +++ b/src/gpl/test/diverge01.ok @@ -45,5 +45,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. diff --git a/src/gpl/test/incremental01.ok b/src/gpl/test/incremental01.ok index 05bae05440..840b3db5e4 100644 --- a/src/gpl/test/incremental01.ok +++ b/src/gpl/test/incremental01.ok @@ -49,5 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/incremental02.ok b/src/gpl/test/incremental02.ok index bb09a62634..d535ba8dce 100644 --- a/src/gpl/test/incremental02.ok +++ b/src/gpl/test/incremental02.ok @@ -84,7 +84,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 280 | 0.2922 | 1.292884e+09 | +0.45% | 3.84e-09 | 290 | 0.2840 | 1.298895e+09 | +0.46% | 5.65e-09 | 300 | 0.2706 | 1.303666e+09 | +0.37% | 8.31e-09 | -[INFO GPL-0083] Original area um^2: 0.00, new area: 44590.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 44590.38, new area: 44590.38, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. [INFO GPL-0133] Unlocked instances 310 | 0.4793 | 1.157110e+09 | -11.24% | 1.09e-08 | 320 | 0.4447 | 1.155177e+09 | -0.17% | 1.45e-08 | @@ -107,5 +107,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0553 [INFO GPL-1008] - For 80% usage of free space: 0.0622 -[INFO GPL-0083] Original area um^2: 0.00, new area: 44590.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 44590.38, new area: 44590.38, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/nograd01.ok b/src/gpl/test/nograd01.ok index b1333c1531..9d66233638 100644 --- a/src/gpl/test/nograd01.ok +++ b/src/gpl/test/nograd01.ok @@ -40,5 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0001 -[INFO GPL-0083] Original area um^2: 0.00, new area: 0.44, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 0.44, new area: 0.44, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-obs.ok b/src/gpl/test/simple01-obs.ok index e25416f9b4..68f328f699 100644 --- a/src/gpl/test/simple01-obs.ok +++ b/src/gpl/test/simple01-obs.ok @@ -64,5 +64,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.8611 [INFO GPL-1008] - For 80% usage of free space: 0.9687 [INFO GPL-1009] - For 50% usage of free space: 1.5499 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-ref.ok b/src/gpl/test/simple01-ref.ok index 71c29743b6..dbe5f93e17 100644 --- a/src/gpl/test/simple01-ref.ok +++ b/src/gpl/test/simple01-ref.ok @@ -65,5 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-skip-io.ok b/src/gpl/test/simple01-skip-io.ok index 94fde94d11..a2f5bdee5a 100644 --- a/src/gpl/test/simple01-skip-io.ok +++ b/src/gpl/test/simple01-skip-io.ok @@ -76,5 +76,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index f4189f3845..dd133033e2 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -168,6 +168,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5689 [INFO GPL-1008] - For 80% usage of free space: 0.6400 [INFO GPL-1009] - For 50% usage of free space: 1.0240 -[INFO GPL-0083] Original area um^2: 0.00, new area: 488.38, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 553.28, new area: 488.38, change: -11.73%, New area due to routability inflation and/or timing-driven otimizations. worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index bc05674082..720f1f54d5 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -151,6 +151,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5686 [INFO GPL-1008] - For 80% usage of free space: 0.6396 [INFO GPL-1009] - For 50% usage of free space: 1.0234 -[INFO GPL-0083] Original area um^2: 0.00, new area: 488.11, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 553.28, new area: 488.11, change: -11.78%, New area due to routability inflation and/or timing-driven otimizations. worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-uniform.ok b/src/gpl/test/simple01-uniform.ok index 8073beb272..8646ca012b 100644 --- a/src/gpl/test/simple01-uniform.ok +++ b/src/gpl/test/simple01-uniform.ok @@ -65,5 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple01.ok b/src/gpl/test/simple01.ok index a20442fac0..e9e1cdeb98 100644 --- a/src/gpl/test/simple01.ok +++ b/src/gpl/test/simple01.ok @@ -65,5 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple02.ok b/src/gpl/test/simple02.ok index 9e0774cced..0b18bc803e 100644 --- a/src/gpl/test/simple02.ok +++ b/src/gpl/test/simple02.ok @@ -65,5 +65,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6639 [INFO GPL-1008] - For 80% usage of free space: 0.7469 [INFO GPL-1009] - For 50% usage of free space: 1.1950 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple03.ok b/src/gpl/test/simple03.ok index ed86207f92..7df32448b7 100644 --- a/src/gpl/test/simple03.ok +++ b/src/gpl/test/simple03.ok @@ -80,5 +80,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple04.ok b/src/gpl/test/simple04.ok index 31d81c33e0..3770f8bdee 100644 --- a/src/gpl/test/simple04.ok +++ b/src/gpl/test/simple04.ok @@ -90,5 +90,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 [INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 0.00, new area: 569.77, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple05.ok b/src/gpl/test/simple05.ok index 4ddf42a525..a17d61e033 100644 --- a/src/gpl/test/simple05.ok +++ b/src/gpl/test/simple05.ok @@ -40,5 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0608 [INFO GPL-1008] - For 80% usage of free space: 0.0684 -[INFO GPL-0083] Original area um^2: 0.00, new area: 1.86, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 1.86, new area: 1.86, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple07.ok b/src/gpl/test/simple07.ok index eb041b2aec..2fd3fbd3df 100644 --- a/src/gpl/test/simple07.ok +++ b/src/gpl/test/simple07.ok @@ -49,5 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 -[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple08.ok b/src/gpl/test/simple08.ok index 042c1d781f..92014cd08c 100644 --- a/src/gpl/test/simple08.ok +++ b/src/gpl/test/simple08.ok @@ -49,5 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 -[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple09.ok b/src/gpl/test/simple09.ok index 531230028a..5464f4a513 100644 --- a/src/gpl/test/simple09.ok +++ b/src/gpl/test/simple09.ok @@ -40,5 +40,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0022 [INFO GPL-1008] - For 80% usage of free space: 0.0024 -[INFO GPL-0083] Original area um^2: 0.00, new area: 1.86, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 1.86, new area: 1.86, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. diff --git a/src/gpl/test/simple10.ok b/src/gpl/test/simple10.ok index 4b2edba420..e33ae8f866 100644 --- a/src/gpl/test/simple10.ok +++ b/src/gpl/test/simple10.ok @@ -49,5 +49,5 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0000 -[INFO GPL-0083] Original area um^2: 0.00, new area: 3.75, change: inf%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. No differences found. From e532dabc6a18540caa9b73beb0a09f08140756c3 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 3 Jun 2025 13:03:28 +0000 Subject: [PATCH 19/41] gpl: address code review, show changes in area separatedely for routabilit and timing driven modes remove unecessary returns when using log_->error() Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 5 +- src/gpl/src/nesterovPlace.cpp | 88 ++++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index ac21204541..e4f20da50d 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1502,7 +1502,6 @@ GCell* NesterovBaseCommon::getGCellByIndex(size_t idx) "getGCellByIndex out of bounds: idx = {}, size = {}", idx, gCellStor_.size()); - return nullptr; } return &gCellStor_[idx]; } @@ -2836,7 +2835,7 @@ bool NesterovBase::checkConvergence() static_cast(nesterovInstsArea()) / (whiteSpaceArea_ * 0.80)); if (static_cast(nesterovInstsArea()) / (whiteSpaceArea_ * 0.50) - >= 1.0) { + <= 1.0) { log_->info( GPL, 1009, @@ -3475,7 +3474,6 @@ void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) "index {} out of bounds for gNetStor_ (max: {})", index_remove, last_index); - return; } if (index_remove != last_index) { @@ -3505,7 +3503,6 @@ void NesterovBaseCommon::destroyCbkITerm(odb::dbITerm* db_iterm) "index {} out of bounds for gPinStor_ (max:{})", index_remove, last_index); - return; } if (index_remove != last_index) { std::swap(gPinStor_[index_remove], gPinStor_[last_index]); diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index d6c285e80e..048c55495e 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -292,7 +292,9 @@ int NesterovPlace::doNesterovPlace(int start_iter) int routability_driven_count = 0; int timing_driven_count = 0; bool final_routability_image_saved = false; - int64_t original_area = 0; + int64_t original_area = 0, td_accumulated_delta_area = 0, + end_routability_area = 0; + ; for (auto& nb : nbVec_) { nb->setIter(start_iter); @@ -301,6 +303,10 @@ int NesterovPlace::doNesterovPlace(int start_iter) original_area += nb->nesterovInstsArea(); } + if (!npVars_.routability_driven_mode) { + end_routability_area = original_area; + } + namespace fs = std::filesystem; std::string reports_dir; if (npVars_.debug_images_path == "REPORTS_DIR") { @@ -553,7 +559,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) int nb_gcells_before_td = 0; int nb_gcells_after_td = 0; int nbc_total_gcells_before_td = nbc_->getNewGcellsCount(); - for (auto& nb : nbVec_) { nb_gcells_before_td += nb->getGCells().size(); } @@ -562,6 +567,20 @@ int NesterovPlace::doNesterovPlace(int start_iter) nbVec_[0]->setTrueReprintIterHeader(); ++timing_driven_count; + td_accumulated_delta_area += nbc_->getDeltaArea(); + for (auto& nb : nbVec_) { + nb_gcells_after_td += nb->getGCells().size(); + } + nb_total_gcells_delta = nb_gcells_after_td - nb_gcells_before_td; + if (nb_total_gcells_delta != nbc_->getNewGcellsCount()) { + log_->warn(GPL, + 92, + "Mismatch in #cells between central object and all regions. " + "NesterovBaseCommon: {}, Summing all regions: {}", + nbc_->getNewGcellsCount(), + nb_total_gcells_delta); + } + if (graphics_ && npVars_.debug_generate_images) { updateDb(); bool select_buffers @@ -575,19 +594,6 @@ int NesterovPlace::doNesterovPlace(int start_iter) select_buffers); } - for (auto& nb : nbVec_) { - nb_gcells_after_td += nb->getGCells().size(); - } - - nb_total_gcells_delta = nb_gcells_after_td - nb_gcells_before_td; - if (nb_total_gcells_delta != nbc_->getNewGcellsCount()) { - log_->warn(GPL, - 92, - "Mismatch in #cells between central object and all regions. " - "NesterovBaseCommon: {}, Summing all regions: {}", - nbc_->getNewGcellsCount(), - nb_total_gcells_delta); - } if (!virtual_td_iter) { for (auto& nesterov : nbVec_) { nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); @@ -834,52 +840,58 @@ int NesterovPlace::doNesterovPlace(int start_iter) } if (!is_routability_need_) { - auto block = pbc_->db()->getChip()->getBlock(); - int64_t end_routability_area = 0; for (auto& nb : nbVec_) { end_routability_area += nb->nesterovInstsArea(); } - double percent_diff - = 100.0 * (end_routability_area - original_area) / original_area; - log_->info( - GPL, - 82, - "End routability - original area um^2: {:.2f}, new area: {:.2f}, " - "change: {:.2f}%. Change in area due to total routability " - "inflations.", - block->dbuAreaToMicrons(original_area), - block->dbuAreaToMicrons(end_routability_area), - percent_diff); } } // check each for converge and if all are converged then stop - int numConverge = 0; + int num_region_converge = 0; for (auto& nb : nbVec_) { - numConverge += nb->checkConvergence(); + num_region_converge += nb->checkConvergence(); } - if (numConverge == nbVec_.size()) { + if (num_region_converge == nbVec_.size()) { if (graphics_ && npVars_.debug_generate_images) { graphics_->getGuiObjectFromGraphics()->gifEnd(); } break; } } + auto block = pbc_->db()->getChip()->getBlock(); + log_->info(GPL, + 83, + "Original area (um^2): {:.2f}", + block->dbuAreaToMicrons(original_area)); + int64_t new_area = 0; for (auto& nb : nbVec_) { new_area += nb->nesterovInstsArea(); } - double percent_diff = 100.0 * (new_area - original_area) / original_area; + + float routability_diff + = 100.0 * (end_routability_area - original_area) / original_area; log_->info(GPL, - 83, - "Original area um^2: {:.2f}, new area: {:.2f}, change: {:.2f}%, " - "New area due " - "to routability inflation and/or timing-driven otimizations.", - block->dbuAreaToMicrons(original_area), + 85, + "Total routability artificial inflation: {:.2f} ({:+.2f}%)", + block->dbuAreaToMicrons(end_routability_area - original_area), + routability_diff); + + float td_diff = 100.0 * td_accumulated_delta_area / original_area; + log_->info(GPL, + 86, + "Total timing-driven delta area: {:.2f} ({:+.2f}%)", + block->dbuAreaToMicrons(td_accumulated_delta_area), + td_diff); + + float placement_diff = 100.0 * (new_area - original_area) / original_area; + log_->info(GPL, + 84, + "Final placement area: {:.2f} ({:+.2f}%)", block->dbuAreaToMicrons(new_area), - percent_diff); + placement_diff); // in all case including diverge, // db should be updated. From 4eeb83667d210103698a4025acddf919782dc1a7 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 3 Jun 2025 13:03:43 +0000 Subject: [PATCH 20/41] gpl: update tests with new area report Signed-off-by: Augusto Berndt --- src/gpl/test/ar01.ok | 6 +++++- src/gpl/test/ar02.ok | 6 +++++- src/gpl/test/cluster_place01.ok | 6 +++++- src/gpl/test/convergence01.ok | 6 +++++- src/gpl/test/core01.ok | 6 +++++- src/gpl/test/density01.ok | 6 ++++-- src/gpl/test/diverge01.ok | 6 ++++-- src/gpl/test/incremental01.ok | 6 ++++-- src/gpl/test/incremental02.ok | 11 +++++++++-- src/gpl/test/nograd01.ok | 6 +++++- src/gpl/test/simple01-obs.ok | 6 ++++-- src/gpl/test/simple01-rd.ok | 7 ++++--- src/gpl/test/simple01-ref.ok | 6 ++++-- src/gpl/test/simple01-skip-io.ok | 6 ++++-- src/gpl/test/simple01-td-tune.ok | 6 ++++-- src/gpl/test/simple01-td.ok | 6 ++++-- src/gpl/test/simple01-uniform.ok | 6 ++++-- src/gpl/test/simple01.ok | 6 ++++-- src/gpl/test/simple02-rd.ok | 7 ++++--- src/gpl/test/simple02.ok | 6 ++++-- src/gpl/test/simple03-rd.ok | 7 ++++--- src/gpl/test/simple03.ok | 6 ++++-- src/gpl/test/simple04-rd.ok | 7 ++++--- src/gpl/test/simple04.ok | 6 ++++-- src/gpl/test/simple05.ok | 6 +++++- src/gpl/test/simple07.ok | 6 +++++- src/gpl/test/simple08.ok | 6 +++++- src/gpl/test/simple09.ok | 6 +++++- src/gpl/test/simple10.ok | 6 +++++- 29 files changed, 132 insertions(+), 51 deletions(-) diff --git a/src/gpl/test/ar01.ok b/src/gpl/test/ar01.ok index 85051c8595..0311fd6b0f 100644 --- a/src/gpl/test/ar01.ok +++ b/src/gpl/test/ar01.ok @@ -64,5 +64,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5545 [INFO GPL-1008] - For 80% usage of free space: 0.6238 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.9981 +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/ar02.ok b/src/gpl/test/ar02.ok index 2de64cc715..b3d3dfa22a 100644 --- a/src/gpl/test/ar02.ok +++ b/src/gpl/test/ar02.ok @@ -64,5 +64,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5543 [INFO GPL-1008] - For 80% usage of free space: 0.6235 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.9977 +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/cluster_place01.ok b/src/gpl/test/cluster_place01.ok index 524afd53fe..e63125cbd5 100644 --- a/src/gpl/test/cluster_place01.ok +++ b/src/gpl/test/cluster_place01.ok @@ -65,5 +65,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.9972 +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index ed3fb9fba6..7127bd3730 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -69,5 +69,9 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.1212 [INFO GPL-1008] - For 80% usage of free space: 0.1364 -[INFO GPL-0083] Original area um^2: 15.53, new area: 12.73, change: -18.03%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.2182 +[INFO GPL-0083] Original area (um^2): 15.53 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: -2.80 (-18.03%) +[INFO GPL-0084] Final placement area: 12.73 (-18.03%) No differences found. diff --git a/src/gpl/test/core01.ok b/src/gpl/test/core01.ok index e26905052a..7a25f25d40 100644 --- a/src/gpl/test/core01.ok +++ b/src/gpl/test/core01.ok @@ -64,5 +64,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.9972 +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/density01.ok b/src/gpl/test/density01.ok index 0176fef717..dc600bacc9 100644 --- a/src/gpl/test/density01.ok +++ b/src/gpl/test/density01.ok @@ -142,6 +142,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/diverge01.ok b/src/gpl/test/diverge01.ok index 3690144e0a..f0b0f04ad0 100644 --- a/src/gpl/test/diverge01.ok +++ b/src/gpl/test/diverge01.ok @@ -44,6 +44,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) diff --git a/src/gpl/test/incremental01.ok b/src/gpl/test/incremental01.ok index 840b3db5e4..801652b4f5 100644 --- a/src/gpl/test/incremental01.ok +++ b/src/gpl/test/incremental01.ok @@ -48,6 +48,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/incremental02.ok b/src/gpl/test/incremental02.ok index d535ba8dce..4864fa6bdc 100644 --- a/src/gpl/test/incremental02.ok +++ b/src/gpl/test/incremental02.ok @@ -84,7 +84,10 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 280 | 0.2922 | 1.292884e+09 | +0.45% | 3.84e-09 | 290 | 0.2840 | 1.298895e+09 | +0.46% | 5.65e-09 | 300 | 0.2706 | 1.303666e+09 | +0.37% | 8.31e-09 | -[INFO GPL-0083] Original area um^2: 44590.38, new area: 44590.38, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 44590.38 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 44590.38 (+0.00%) [INFO GPL-0133] Unlocked instances 310 | 0.4793 | 1.157110e+09 | -11.24% | 1.09e-08 | 320 | 0.4447 | 1.155177e+09 | -0.17% | 1.45e-08 | @@ -107,5 +110,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0553 [INFO GPL-1008] - For 80% usage of free space: 0.0622 -[INFO GPL-0083] Original area um^2: 44590.38, new area: 44590.38, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0995 +[INFO GPL-0083] Original area (um^2): 44590.38 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 44590.38 (+0.00%) No differences found. diff --git a/src/gpl/test/nograd01.ok b/src/gpl/test/nograd01.ok index 9d66233638..7aa716d6e7 100644 --- a/src/gpl/test/nograd01.ok +++ b/src/gpl/test/nograd01.ok @@ -40,5 +40,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0001 -[INFO GPL-0083] Original area um^2: 0.44, new area: 0.44, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0001 +[INFO GPL-0083] Original area (um^2): 0.44 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 0.44 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-obs.ok b/src/gpl/test/simple01-obs.ok index 68f328f699..5739e91c18 100644 --- a/src/gpl/test/simple01-obs.ok +++ b/src/gpl/test/simple01-obs.ok @@ -63,6 +63,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.8611 [INFO GPL-1008] - For 80% usage of free space: 0.9687 -[INFO GPL-1009] - For 50% usage of free space: 1.5499 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-rd.ok b/src/gpl/test/simple01-rd.ok index 98943d3c0f..bc4797c71e 100644 --- a/src/gpl/test/simple01-rd.ok +++ b/src/gpl/test/simple01-rd.ok @@ -82,7 +82,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. -[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -99,6 +98,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-ref.ok b/src/gpl/test/simple01-ref.ok index dbe5f93e17..04abe92c35 100644 --- a/src/gpl/test/simple01-ref.ok +++ b/src/gpl/test/simple01-ref.ok @@ -64,6 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-skip-io.ok b/src/gpl/test/simple01-skip-io.ok index a2f5bdee5a..22df05de67 100644 --- a/src/gpl/test/simple01-skip-io.ok +++ b/src/gpl/test/simple01-skip-io.ok @@ -75,6 +75,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index dd133033e2..f89271e364 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -167,7 +167,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5689 [INFO GPL-1008] - For 80% usage of free space: 0.6400 -[INFO GPL-1009] - For 50% usage of free space: 1.0240 -[INFO GPL-0083] Original area um^2: 553.28, new area: 488.38, change: -11.73%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 553.28 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: -64.90 (-11.73%) +[INFO GPL-0084] Final placement area: 488.38 (-11.73%) worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index 720f1f54d5..a5e932a157 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -150,7 +150,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5686 [INFO GPL-1008] - For 80% usage of free space: 0.6396 -[INFO GPL-1009] - For 50% usage of free space: 1.0234 -[INFO GPL-0083] Original area um^2: 553.28, new area: 488.11, change: -11.78%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 553.28 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: -65.17 (-11.78%) +[INFO GPL-0084] Final placement area: 488.11 (-11.78%) worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-uniform.ok b/src/gpl/test/simple01-uniform.ok index 8646ca012b..1ef0b794fb 100644 --- a/src/gpl/test/simple01-uniform.ok +++ b/src/gpl/test/simple01-uniform.ok @@ -64,6 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01.ok b/src/gpl/test/simple01.ok index e9e1cdeb98..a02168e2ef 100644 --- a/src/gpl/test/simple01.ok +++ b/src/gpl/test/simple01.ok @@ -64,6 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple02-rd.ok b/src/gpl/test/simple02-rd.ok index 5587c6c88e..c768eb0ad9 100644 --- a/src/gpl/test/simple02-rd.ok +++ b/src/gpl/test/simple02-rd.ok @@ -82,7 +82,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.0000), end routability optimization. -[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -99,6 +98,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple02.ok b/src/gpl/test/simple02.ok index 0b18bc803e..08f26110a0 100644 --- a/src/gpl/test/simple02.ok +++ b/src/gpl/test/simple02.ok @@ -64,6 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6639 [INFO GPL-1008] - For 80% usage of free space: 0.7469 -[INFO GPL-1009] - For 50% usage of free space: 1.1950 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple03-rd.ok b/src/gpl/test/simple03-rd.ok index 1e6becde7d..bc95b8ed6e 100644 --- a/src/gpl/test/simple03-rd.ok +++ b/src/gpl/test/simple03-rd.ok @@ -75,7 +75,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. -[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -92,6 +91,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple03.ok b/src/gpl/test/simple03.ok index 7df32448b7..1658b8d253 100644 --- a/src/gpl/test/simple03.ok +++ b/src/gpl/test/simple03.ok @@ -79,6 +79,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple04-rd.ok b/src/gpl/test/simple04-rd.ok index d9563a66a8..699572ae09 100644 --- a/src/gpl/test/simple04-rd.ok +++ b/src/gpl/test/simple04-rd.ok @@ -75,7 +75,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(0.6700), end routability optimization. -[INFO GPL-0082] End routability - original area um^2: 569.77, new area: 569.77, change: 0.00%. Change in area due to total routability inflations. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -92,6 +91,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple04.ok b/src/gpl/test/simple04.ok index 3770f8bdee..7652fb113c 100644 --- a/src/gpl/test/simple04.ok +++ b/src/gpl/test/simple04.ok @@ -89,6 +89,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 -[INFO GPL-0083] Original area um^2: 569.77, new area: 569.77, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-0083] Original area (um^2): 569.77 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple05.ok b/src/gpl/test/simple05.ok index a17d61e033..d5bf031432 100644 --- a/src/gpl/test/simple05.ok +++ b/src/gpl/test/simple05.ok @@ -40,5 +40,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0608 [INFO GPL-1008] - For 80% usage of free space: 0.0684 -[INFO GPL-0083] Original area um^2: 1.86, new area: 1.86, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.1094 +[INFO GPL-0083] Original area (um^2): 1.86 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 1.86 (+0.00%) No differences found. diff --git a/src/gpl/test/simple07.ok b/src/gpl/test/simple07.ok index 2fd3fbd3df..d546324ef5 100644 --- a/src/gpl/test/simple07.ok +++ b/src/gpl/test/simple07.ok @@ -49,5 +49,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 -[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0115 +[INFO GPL-0083] Original area (um^2): 3.75 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 3.75 (+0.00%) No differences found. diff --git a/src/gpl/test/simple08.ok b/src/gpl/test/simple08.ok index 92014cd08c..6b8940011f 100644 --- a/src/gpl/test/simple08.ok +++ b/src/gpl/test/simple08.ok @@ -49,5 +49,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 -[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0115 +[INFO GPL-0083] Original area (um^2): 3.75 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 3.75 (+0.00%) No differences found. diff --git a/src/gpl/test/simple09.ok b/src/gpl/test/simple09.ok index 5464f4a513..2fc9bb69ff 100644 --- a/src/gpl/test/simple09.ok +++ b/src/gpl/test/simple09.ok @@ -40,5 +40,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0022 [INFO GPL-1008] - For 80% usage of free space: 0.0024 -[INFO GPL-0083] Original area um^2: 1.86, new area: 1.86, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0039 +[INFO GPL-0083] Original area (um^2): 1.86 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 1.86 (+0.00%) No differences found. diff --git a/src/gpl/test/simple10.ok b/src/gpl/test/simple10.ok index e33ae8f866..307dbbb5d6 100644 --- a/src/gpl/test/simple10.ok +++ b/src/gpl/test/simple10.ok @@ -49,5 +49,9 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0000 -[INFO GPL-0083] Original area um^2: 3.75, new area: 3.75, change: 0.00%, New area due to routability inflation and/or timing-driven otimizations. +[INFO GPL-1009] - For 50% usage of free space: 0.0000 +[INFO GPL-0083] Original area (um^2): 3.75 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 3.75 (+0.00%) No differences found. From c1bb0f47938fce24bf0036c66b2d8444a707a32d Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 4 Jun 2025 17:00:23 +0000 Subject: [PATCH 21/41] test: update tests after gpl change in log Signed-off-by: Augusto Berndt --- src/odb/test/replace_hier_mod1.ok | 27 +++++++++++++++++++++++++++ src/rsz/test/buffer_ports8.ok | 5 +++++ test/upf_aes.ok | 7 +++++-- test/upf_test.ok | 7 +++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/odb/test/replace_hier_mod1.ok b/src/odb/test/replace_hier_mod1.ok index 143671df33..6693db0849 100644 --- a/src/odb/test/replace_hier_mod1.ok +++ b/src/odb/test/replace_hier_mod1.ok @@ -145,7 +145,16 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 +[INFO GPL-1009] - For 50% usage of free space: 0.0025 +[INFO GPL-0083] Original area (um^2): 59.85 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 59.85 (+0.00%) [INFO GPL-0133] Unlocked instances +[INFO GPL-0083] Original area (um^2): 59.85 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 59.85 (+0.00%) Placement Analysis --------------------------------- total displacement 52.6 u @@ -266,7 +275,16 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 +[INFO GPL-1009] - For 50% usage of free space: 0.0025 +[INFO GPL-0083] Original area (um^2): 60.38 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 60.38 (+0.00%) [INFO GPL-0133] Unlocked instances +[INFO GPL-0083] Original area (um^2): 60.38 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 60.38 (+0.00%) Placement Analysis --------------------------------- total displacement 39.4 u @@ -387,7 +405,16 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 +[INFO GPL-1009] - For 50% usage of free space: 0.0025 +[INFO GPL-0083] Original area (um^2): 59.85 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 59.85 (+0.00%) [INFO GPL-0133] Unlocked instances +[INFO GPL-0083] Original area (um^2): 59.85 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 59.85 (+0.00%) Placement Analysis --------------------------------- total displacement 34.4 u diff --git a/src/rsz/test/buffer_ports8.ok b/src/rsz/test/buffer_ports8.ok index b87691a9bd..344110fa88 100644 --- a/src/rsz/test/buffer_ports8.ok +++ b/src/rsz/test/buffer_ports8.ok @@ -45,6 +45,11 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0008 [INFO GPL-1008] - For 80% usage of free space: 0.0009 +[INFO GPL-1009] - For 50% usage of free space: 0.0014 +[INFO GPL-0083] Original area (um^2): 4.52 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 4.52 (+0.00%) [INFO RSZ-0027] Inserted 2 input buffers. [INFO RSZ-0028] Inserted 2 output buffers. No differences found. diff --git a/test/upf_aes.ok b/test/upf_aes.ok index aa1a10de60..610849aec4 100644 --- a/test/upf_aes.ok +++ b/test/upf_aes.ok @@ -222,7 +222,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.8956 [INFO GPL-1008] - For 80% usage of free space: 1.0075 -[INFO GPL-1009] - For 50% usage of free space: 1.6120 440 | 0.1675 | 1.840219e+09 | +0.34% | 2.38e-07 | 440 | 0.1283 | 1.840219e+09 | +0.34% | 3.91e-07 | (PD_AES_2) 450 | 0.1497 | 1.845615e+09 | +0.29% | 2.87e-07 | @@ -236,7 +235,6 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.8956 [INFO GPL-1008] - For 80% usage of free space: 1.0075 -[INFO GPL-1009] - For 50% usage of free space: 1.6120 470 | 0.1199 | 1.853808e+09 | +0.18% | 4.16e-07 | 480 | 0.1092 | 1.855957e+09 | +0.12% | 5.01e-07 | [INFO GPL-1001] Finished with Overflow: 0.099566 @@ -246,6 +244,11 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0943 [INFO GPL-1008] - For 80% usage of free space: 0.1061 +[INFO GPL-1009] - For 50% usage of free space: 0.1697 +[INFO GPL-0083] Original area (um^2): 368817.48 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 368817.48 (+0.00%) Placement Analysis --------------------------------- total displacement 130979.1 u diff --git a/test/upf_test.ok b/test/upf_test.ok index c8cdad2c6a..619d1d8506 100644 --- a/test/upf_test.ok +++ b/test/upf_test.ok @@ -93,6 +93,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0153 [INFO GPL-1008] - For 80% usage of free space: 0.0172 +[INFO GPL-1009] - For 50% usage of free space: 0.0275 10 | 0.9997 | 4.500290e+05 | -60.10% | 8.07e-13 | (PD_D1) 10 | 0.9997 | 4.500290e+05 | -60.10% | 1.07e-12 | (PD_D2) 20 | 0.9997 | 4.310720e+05 | -4.21% | 9.72e-13 | (PD_D1) @@ -266,6 +267,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0540 [INFO GPL-1008] - For 80% usage of free space: 0.0608 +[INFO GPL-1009] - For 50% usage of free space: 0.0972 840 | 0.2399 | 7.598050e+05 | +5.09% | 4.22e-06 | (PD_D1) 850 | 0.2370 | 7.806420e+05 | +2.74% | 5.09e-06 | (PD_D1) 860 | 0.1516 | 8.453790e+05 | +8.29% | 6.13e-06 | (PD_D1) @@ -280,6 +282,11 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.0262 [INFO GPL-1008] - For 80% usage of free space: 0.0295 +[INFO GPL-1009] - For 50% usage of free space: 0.0472 +[INFO GPL-0083] Original area (um^2): 158.90 +[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-0084] Final placement area: 158.90 (+0.00%) Placement Analysis --------------------------------- total displacement 79.5 u From 69ae6763aeddfca726d2fe051822b91d57c29b2b Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Fri, 6 Jun 2025 12:06:30 +0000 Subject: [PATCH 22/41] gpl: set max cap for filler removal: Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 119 +++++++++++++++++++++------------- src/gpl/src/nesterovBase.h | 1 + src/gpl/src/nesterovPlace.cpp | 34 +++++++--- 3 files changed, 98 insertions(+), 56 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index e4f20da50d..8ffe70843d 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1927,6 +1927,7 @@ void NesterovBase::initFillerGCells() fillerStor_.push_back(myGCell); } totalFillerArea_ = fillerStor_.size() * getFillerCellArea(); + initial_filler_area_ = totalFillerArea_; } NesterovBase::~NesterovBase() = default; @@ -3230,41 +3231,43 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - for (int i = nb_gcells_.size() - 1; - i >= 0 && removed_count < max_fllers_to_remove; - --i) { - if (nb_gcells_[i]->isFiller()) { - // log_->report("filler to be removed in nb_gcells_ index: {}, - const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; - removed_fillers_.push_back(RemovedFillerState{ - .gcell = removed, - .curSLPCoordi = curSLPCoordi_[i], - .curSLPWireLengthGrads = curSLPWireLengthGrads_[i], - .curSLPDensityGrads = curSLPDensityGrads_[i], - .curSLPSumGrads = curSLPSumGrads_[i], - - .nextSLPCoordi = nextSLPCoordi_[i], - .nextSLPWireLengthGrads = nextSLPWireLengthGrads_[i], - .nextSLPDensityGrads = nextSLPDensityGrads_[i], - .nextSLPSumGrads = nextSLPSumGrads_[i], - - .prevSLPCoordi = prevSLPCoordi_[i], - .prevSLPWireLengthGrads = prevSLPWireLengthGrads_[i], - .prevSLPDensityGrads = prevSLPDensityGrads_[i], - .prevSLPSumGrads = prevSLPSumGrads_[i], - - .curCoordi = curCoordi_[i], - .nextCoordi = nextCoordi_[i], - .initCoordi = initCoordi_[i], - - .snapshotCoordi = snapshotCoordi_[i], - .snapshotSLPCoordi = snapshotSLPCoordi_[i], - .snapshotSLPSumGrads = snapshotSLPSumGrads_[i]}); - - destroyFillerGCell(i); - availableFillerArea -= single_filler_area; - inflation_area -= single_filler_area; - ++removed_count; + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.5)) { + for (int i = nb_gcells_.size() - 1; + i >= 0 && removed_count < max_fllers_to_remove; + --i) { + if (nb_gcells_[i]->isFiller()) { + // log_->report("filler to be removed in nb_gcells_ index: {}, + const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; + removed_fillers_.push_back(RemovedFillerState{ + .gcell = removed, + .curSLPCoordi = curSLPCoordi_[i], + .curSLPWireLengthGrads = curSLPWireLengthGrads_[i], + .curSLPDensityGrads = curSLPDensityGrads_[i], + .curSLPSumGrads = curSLPSumGrads_[i], + + .nextSLPCoordi = nextSLPCoordi_[i], + .nextSLPWireLengthGrads = nextSLPWireLengthGrads_[i], + .nextSLPDensityGrads = nextSLPDensityGrads_[i], + .nextSLPSumGrads = nextSLPSumGrads_[i], + + .prevSLPCoordi = prevSLPCoordi_[i], + .prevSLPWireLengthGrads = prevSLPWireLengthGrads_[i], + .prevSLPDensityGrads = prevSLPDensityGrads_[i], + .prevSLPSumGrads = prevSLPSumGrads_[i], + + .curCoordi = curCoordi_[i], + .nextCoordi = nextCoordi_[i], + .initCoordi = initCoordi_[i], + + .snapshotCoordi = snapshotCoordi_[i], + .snapshotSLPCoordi = snapshotSLPCoordi_[i], + .snapshotSLPSumGrads = snapshotSLPSumGrads_[i]}); + + destroyFillerGCell(i); + availableFillerArea -= single_filler_area; + inflation_area -= single_filler_area; + ++removed_count; + } } } @@ -3314,7 +3317,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) block->dbuAreaToMicrons(removedFillerArea), block->dbuAreaToMicrons(remainingInflationArea)); - if (remainingInflationArea > single_filler_area && fillerStor_.empty()) { + if (remainingInflationArea > single_filler_area) { int64_t totalGCellArea = nesterovInstsArea() + removedFillerArea + totalFillerArea_ + remainingInflationArea; setTargetDensity(static_cast(totalGCellArea) @@ -3324,9 +3327,8 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) / static_cast(whiteSpaceArea()); log_->info(GPL, 79, - "Not enough fillers to fully compensate inflation.\n\t\tNew " - "target density: {}", - newTargetDensity); + "New target density: {}", + newTargetDensity); } } @@ -3402,7 +3404,13 @@ void NesterovBase::restoreRemovedFillers() 80, "Restoring {} previously removed fillers.", removed_fillers_.size()); + + if(removed_fillers_.size() == 0){ + return; + } + size_t num_fill_before = fillerStor_.size(); + int64_t area_before = totalFillerArea_; for (const auto& filler : removed_fillers_) { fillerStor_.push_back(filler.gcell); @@ -3440,16 +3448,35 @@ void NesterovBase::restoreRemovedFillers() totalFillerArea_ += getFillerCellArea(); } + size_t num_fill_after = fillerStor_.size(); + int64_t area_after = totalFillerArea_; + + double rel_count_change = (num_fill_before > 0) + ? (static_cast(num_fill_after - num_fill_before) / num_fill_before) * 100.0 + : 0.0; + + double rel_area_change = (area_before > 0) + ? (static_cast(area_after - area_before) / static_cast(area_before)) * 100.0 + : 0.0; + + dbBlock* block = pb_->db()->getChip()->getBlock(); + double area_before_um = block->dbuAreaToMicrons(area_before); + double area_after_um = block->dbuAreaToMicrons(area_after); + log_->info(GPL, 81, - "Number of fillers before {} and after {} removal. Relative " - "reduction: {:.2f}%%", + "Number of fillers before restoration {} and after {} . Relative change: {:+.2f}%%", num_fill_before, - fillerStor_.size(), - (num_fill_before > 0) - ? (static_cast(num_fill_before - fillerStor_.size()) - / num_fill_before * 100.0) - : 0.0); + num_fill_after, + rel_count_change); + + log_->info(GPL, + 82, + "Total filler area before restoration {:.2f} and after {:.2f} (um^2). Relative change: {:+.2f}%%", + area_before_um, + area_after_um, + rel_area_change); + removed_fillers_.clear(); } diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 6af7f92e3a..6d8fc7fea9 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -1146,6 +1146,7 @@ class NesterovBase int64_t whiteSpaceArea_ = 0; int64_t movableArea_ = 0; int64_t totalFillerArea_ = 0; + int64_t initial_filler_area_ = 0; int64_t stdInstsArea_ = 0; int64_t macroInstsArea_ = 0; diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 048c55495e..928cdbaaa7 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -734,10 +734,10 @@ int NesterovPlace::doNesterovPlace(int start_iter) // In case diverged and not in routability mode, finish with min hpwl // stored since overflow below 0.25 log_->warn(GPL, - 90, + 998, "Divergence detected, reverting to snapshot with min hpwl."); log_->warn(GPL, - 91, + 999, "Revert to iter: {:4d} overflow: {:.3f} HPWL: {}", diverge_snapshot_iter_, diverge_snapshot_average_overflow_unscaled_, @@ -772,7 +772,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) nb->snapshot(); } - log_->info(GPL, 88, "Routability snapshot saved at iter = {}", iter); + log_->info(GPL, 38, "Routability snapshot saved at iter = {}", iter); // Save image of routability snapshot if (graphics_ && npVars_.debug_generate_images) { @@ -834,9 +834,23 @@ int NesterovPlace::doNesterovPlace(int start_iter) for (auto& nb : nbVec_) { nb->revertToSnapshot(); nb->resetMinSumOverflow(); - } - log_->info( - GPL, 89, "Routability end iteration: revert back to snapshot"); + } + } + + if(is_routability_need_ && isRevertInitNeeded) { + log_->info(GPL, 87, "Routability end iteration: reverting from divergence."); + } + + if(is_routability_need_ && !isRevertInitNeeded) { + log_->info(GPL, 88, "Routability end iteration: increase inflation and revert back to snapshot."); + } + + if(!is_routability_need_ && isRevertInitNeeded) { + log_->info(GPL, 89, "Routability finished. Reverting to minimal observed routing congestion, could not reach target."); + } + + if(!is_routability_need_ && !isRevertInitNeeded) { + log_->info(GPL, 90, "Routability finished. Target routing congestion achieved succesfully."); } if (!is_routability_need_) { @@ -862,7 +876,7 @@ int NesterovPlace::doNesterovPlace(int start_iter) auto block = pbc_->db()->getChip()->getBlock(); log_->info(GPL, - 83, + 1010, "Original area (um^2): {:.2f}", block->dbuAreaToMicrons(original_area)); @@ -874,21 +888,21 @@ int NesterovPlace::doNesterovPlace(int start_iter) float routability_diff = 100.0 * (end_routability_area - original_area) / original_area; log_->info(GPL, - 85, + 1011, "Total routability artificial inflation: {:.2f} ({:+.2f}%)", block->dbuAreaToMicrons(end_routability_area - original_area), routability_diff); float td_diff = 100.0 * td_accumulated_delta_area / original_area; log_->info(GPL, - 86, + 1012, "Total timing-driven delta area: {:.2f} ({:+.2f}%)", block->dbuAreaToMicrons(td_accumulated_delta_area), td_diff); float placement_diff = 100.0 * (new_area - original_area) / original_area; log_->info(GPL, - 84, + 1013, "Final placement area: {:.2f} ({:+.2f}%)", block->dbuAreaToMicrons(new_area), placement_diff); From 81ea9a12cb37db1fb9baa96a5d9f3b6bf6729161 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 9 Jun 2025 16:56:03 +0000 Subject: [PATCH 23/41] gpl: comment small change triggering unrelated error Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 7c9920cdf2..cd7b698a56 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1926,7 +1926,7 @@ void NesterovBase::initFillerGCells() fillerStor_.push_back(myGCell); } - totalFillerArea_ = fillerStor_.size() * getFillerCellArea(); + // totalFillerArea_ = fillerStor_.size() * getFillerCellArea(); initial_filler_area_ = totalFillerArea_; } From 8d59300f9ef0b676b03ad44ebdb8155213ec7a33 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 9 Jun 2025 22:14:01 +0000 Subject: [PATCH 24/41] gpl: allow only 10% filler removal Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index cd7b698a56..fb5fb7aaed 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,7 +3232,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.5)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.9)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { From 3d8d2630834c4864c8084fe52b50914aff8a8591 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 9 Jun 2025 22:15:09 +0000 Subject: [PATCH 25/41] gpl: allow only 25% filler removal Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index fb5fb7aaed..7a80a79740 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,7 +3232,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.9)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.75)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { From 299fbf9505480862b35eae72e6fde9ba11c1bbe1 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Mon, 9 Jun 2025 22:15:37 +0000 Subject: [PATCH 26/41] gpl: allow only 33% filler removal Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 7a80a79740..277dff01bf 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,7 +3232,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.75)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.66)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { From 335b2acf41a4f313b793ee19d923091e1cbcd38f Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 09:44:49 +0000 Subject: [PATCH 27/41] gpl: allow only 50% filler removal Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 277dff01bf..cd7b698a56 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,7 +3232,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.66)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.5)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { From 19ba0badf8a99df5742d7529ce4e2e65247bedef Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 14:10:24 +0000 Subject: [PATCH 28/41] gpl: allow 10% filler removal at most, least amount of violations observed when experimenting with 10%, 25%, 33%, and 50% Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index cd7b698a56..b886bf454a 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,12 +3232,11 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.5)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.1)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { if (nb_gcells_[i]->isFiller()) { - // log_->report("filler to be removed in nb_gcells_ index: {}, const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; removed_fillers_.push_back(RemovedFillerState{ .gcell = removed, From 04c29ff9f114938b72f4a1bd66da80c0ac85b025 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 16:05:16 +0000 Subject: [PATCH 29/41] gpl: allow 10% filler removal at most, least amount of violations observed when experimenting with 10%, 25%, 33%, and 50% Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index b886bf454a..d33e6de1e5 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,7 +3232,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.1)) { + if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.9)) { for (int i = nb_gcells_.size() - 1; i >= 0 && removed_count < max_fllers_to_remove; --i) { From 2bf44131fe8c1eeb5596ff1820c12331bbb5e384 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 18:47:35 +0000 Subject: [PATCH 30/41] gpl: update tests Signed-off-by: Augusto Berndt --- src/gpl/test/ar01.ok | 8 +++--- src/gpl/test/ar02.ok | 8 +++--- src/gpl/test/cluster_place01.ok | 8 +++--- src/gpl/test/convergence01.ok | 12 ++++----- src/gpl/test/core01.ok | 8 +++--- src/gpl/test/density01.ok | 8 +++--- src/gpl/test/diverge01.ok | 8 +++--- src/gpl/test/incremental01.ok | 8 +++--- src/gpl/test/incremental02.ok | 16 ++++++------ src/gpl/test/nograd01.ok | 8 +++--- src/gpl/test/simple01-obs.ok | 8 +++--- src/gpl/test/simple01-rd.ok | 11 +++++---- src/gpl/test/simple01-ref.ok | 8 +++--- src/gpl/test/simple01-skip-io.ok | 8 +++--- src/gpl/test/simple01-td-tune.ok | 36 ++++++++++++++------------- src/gpl/test/simple01-td.ok | 42 +++++++++++++++++--------------- src/gpl/test/simple01-uniform.ok | 8 +++--- src/gpl/test/simple01.ok | 8 +++--- src/gpl/test/simple02-rd.ok | 11 +++++---- src/gpl/test/simple02.ok | 8 +++--- src/gpl/test/simple03-rd.ok | 11 +++++---- src/gpl/test/simple03.ok | 8 +++--- src/gpl/test/simple04-rd.ok | 11 +++++---- src/gpl/test/simple04.ok | 8 +++--- src/gpl/test/simple05.ok | 8 +++--- src/gpl/test/simple07.ok | 8 +++--- src/gpl/test/simple08.ok | 8 +++--- src/gpl/test/simple09.ok | 8 +++--- src/gpl/test/simple10.ok | 8 +++--- 29 files changed, 163 insertions(+), 155 deletions(-) diff --git a/src/gpl/test/ar01.ok b/src/gpl/test/ar01.ok index 0311fd6b0f..ef778eddf1 100644 --- a/src/gpl/test/ar01.ok +++ b/src/gpl/test/ar01.ok @@ -65,8 +65,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5545 [INFO GPL-1008] - For 80% usage of free space: 0.6238 [INFO GPL-1009] - For 50% usage of free space: 0.9981 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/ar02.ok b/src/gpl/test/ar02.ok index b3d3dfa22a..5cac1f1b75 100644 --- a/src/gpl/test/ar02.ok +++ b/src/gpl/test/ar02.ok @@ -65,8 +65,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5543 [INFO GPL-1008] - For 80% usage of free space: 0.6235 [INFO GPL-1009] - For 50% usage of free space: 0.9977 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/cluster_place01.ok b/src/gpl/test/cluster_place01.ok index e63125cbd5..e659e16736 100644 --- a/src/gpl/test/cluster_place01.ok +++ b/src/gpl/test/cluster_place01.ok @@ -66,8 +66,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 [INFO GPL-1009] - For 50% usage of free space: 0.9972 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index 7127bd3730..e96b9d37e6 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -61,8 +61,8 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -2.799 um^2 (-18.03%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.47454166 -[INFO GPL-1001] Finished with Overflow: 0.094762 +[INFO GPL-0110] Timing-driven: new target density: 0.476 +[INFO GPL-1001] Finished with Overflow: 0.093288 [INFO GPL-1002] Placed Cell Area 12.7283 [INFO GPL-1003] Available Free Area 116.6400 [INFO GPL-1004] Minimum Feasible Density 0.1400 (cell_area / free_area) @@ -70,8 +70,8 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-1007] - For 90% usage of free space: 0.1212 [INFO GPL-1008] - For 80% usage of free space: 0.1364 [INFO GPL-1009] - For 50% usage of free space: 0.2182 -[INFO GPL-0083] Original area (um^2): 15.53 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: -2.80 (-18.03%) -[INFO GPL-0084] Final placement area: 12.73 (-18.03%) +[INFO GPL-1010] Original area (um^2): 15.53 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -2.80 (-18.03%) +[INFO GPL-1013] Final placement area: 12.73 (-18.03%) No differences found. diff --git a/src/gpl/test/core01.ok b/src/gpl/test/core01.ok index 7a25f25d40..7fd08bd450 100644 --- a/src/gpl/test/core01.ok +++ b/src/gpl/test/core01.ok @@ -65,8 +65,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.5540 [INFO GPL-1008] - For 80% usage of free space: 0.6233 [INFO GPL-1009] - For 50% usage of free space: 0.9972 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/density01.ok b/src/gpl/test/density01.ok index dc600bacc9..7579d36a85 100644 --- a/src/gpl/test/density01.ok +++ b/src/gpl/test/density01.ok @@ -142,8 +142,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/diverge01.ok b/src/gpl/test/diverge01.ok index f0b0f04ad0..8580663fac 100644 --- a/src/gpl/test/diverge01.ok +++ b/src/gpl/test/diverge01.ok @@ -44,8 +44,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) diff --git a/src/gpl/test/incremental01.ok b/src/gpl/test/incremental01.ok index 801652b4f5..f25ae6cf73 100644 --- a/src/gpl/test/incremental01.ok +++ b/src/gpl/test/incremental01.ok @@ -48,8 +48,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/incremental02.ok b/src/gpl/test/incremental02.ok index 4864fa6bdc..35c97169c5 100644 --- a/src/gpl/test/incremental02.ok +++ b/src/gpl/test/incremental02.ok @@ -84,10 +84,10 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 280 | 0.2922 | 1.292884e+09 | +0.45% | 3.84e-09 | 290 | 0.2840 | 1.298895e+09 | +0.46% | 5.65e-09 | 300 | 0.2706 | 1.303666e+09 | +0.37% | 8.31e-09 | -[INFO GPL-0083] Original area (um^2): 44590.38 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 44590.38 (+0.00%) +[INFO GPL-1010] Original area (um^2): 44590.38 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 44590.38 (+0.00%) [INFO GPL-0133] Unlocked instances 310 | 0.4793 | 1.157110e+09 | -11.24% | 1.09e-08 | 320 | 0.4447 | 1.155177e+09 | -0.17% | 1.45e-08 | @@ -111,8 +111,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0553 [INFO GPL-1008] - For 80% usage of free space: 0.0622 [INFO GPL-1009] - For 50% usage of free space: 0.0995 -[INFO GPL-0083] Original area (um^2): 44590.38 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 44590.38 (+0.00%) +[INFO GPL-1010] Original area (um^2): 44590.38 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 44590.38 (+0.00%) No differences found. diff --git a/src/gpl/test/nograd01.ok b/src/gpl/test/nograd01.ok index 7aa716d6e7..562bdc3a20 100644 --- a/src/gpl/test/nograd01.ok +++ b/src/gpl/test/nograd01.ok @@ -41,8 +41,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0001 [INFO GPL-1009] - For 50% usage of free space: 0.0001 -[INFO GPL-0083] Original area (um^2): 0.44 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 0.44 (+0.00%) +[INFO GPL-1010] Original area (um^2): 0.44 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 0.44 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-obs.ok b/src/gpl/test/simple01-obs.ok index 5739e91c18..5c42d5f9dc 100644 --- a/src/gpl/test/simple01-obs.ok +++ b/src/gpl/test/simple01-obs.ok @@ -63,8 +63,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.8611 [INFO GPL-1008] - For 80% usage of free space: 0.9687 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-rd.ok b/src/gpl/test/simple01-rd.ok index bc4797c71e..d4be751d52 100644 --- a/src/gpl/test/simple01-rd.ok +++ b/src/gpl/test/simple01-rd.ok @@ -59,7 +59,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 190 | 0.6826 | 4.375246e+06 | +1.25% | 8.06e-10 | 200 | 0.6606 | 4.447333e+06 | +1.65% | 1.31e-09 | 210 | 0.6252 | 4.516619e+06 | +1.56% | 2.14e-09 | -[INFO GPL-0088] Routability snapshot saved at iter = 216 +[INFO GPL-0038] Routability snapshot saved at iter = 216 220 | 0.5861 | 4.589898e+06 | +1.62% | 3.48e-09 | 230 | 0.5467 | 4.672054e+06 | +1.79% | 5.67e-09 | 240 | 0.4940 | 4.711391e+06 | +0.84% | 9.24e-09 | @@ -82,6 +82,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. +[INFO GPL-0090] Routability finished. Target routing congestion achieved succesfully. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -98,8 +99,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-ref.ok b/src/gpl/test/simple01-ref.ok index 04abe92c35..6389470d0c 100644 --- a/src/gpl/test/simple01-ref.ok +++ b/src/gpl/test/simple01-ref.ok @@ -64,8 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-skip-io.ok b/src/gpl/test/simple01-skip-io.ok index 22df05de67..e84297bab2 100644 --- a/src/gpl/test/simple01-skip-io.ok +++ b/src/gpl/test/simple01-skip-io.ok @@ -75,8 +75,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index f89271e364..0146b28491 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -132,14 +132,14 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -69.426 um^2 (-12.55%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.62560546 +[INFO GPL-0110] Timing-driven: new target density: 0.62721694 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 290 | 0.2999 | 2.902161e+06 | -38.12% | 9.03e-08 | - 300 | 0.2903 | 3.013160e+06 | +3.82% | 1.33e-07 | - 310 | 0.2293 | 2.952557e+06 | -2.01% | 1.96e-07 | + 290 | 0.2995 | 2.899455e+06 | -38.18% | 9.03e-08 | + 300 | 0.2895 | 3.011288e+06 | +3.86% | 1.33e-07 | + 310 | 0.2277 | 2.951256e+06 | -1.99% | 1.96e-07 | [INFO GPL-0100] Timing-driven iteration 7/7, virtual: false. -[INFO GPL-0101] Iter: 318, overflow: 0.194, keep resizer changes at: 0.3, HPWL: 2976831 +[INFO GPL-0101] Iter: 319, overflow: 0.191, keep resizer changes at: 0.3, HPWL: 2978322 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -152,24 +152,26 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: 4.522 um^2 (+0.93%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 1 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 1 -[INFO GPL-0110] Timing-driven: new target density: 0.6303461 +[INFO GPL-0110] Timing-driven: new target density: 0.6319576 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 320 | 0.1921 | 3.024696e+06 | +2.44% | 2.89e-07 | - 330 | 0.1792 | 3.033382e+06 | +0.29% | 4.25e-07 | - 340 | 0.1475 | 3.093358e+06 | +1.98% | 6.26e-07 | - 350 | 0.1229 | 3.111051e+06 | +0.57% | 9.23e-07 | - 360 | 0.1058 | 3.097440e+06 | -0.44% | 1.36e-06 | -[INFO GPL-1001] Finished with Overflow: 0.099549 + 320 | 0.1887 | 3.025629e+06 | +2.52% | 2.89e-07 | + 330 | 0.1691 | 3.032583e+06 | +0.23% | 4.25e-07 | + 340 | 0.1519 | 3.084623e+06 | +1.72% | 6.26e-07 | + 350 | 0.1251 | 3.105705e+06 | +0.68% | 9.23e-07 | + 360 | 0.1074 | 3.102328e+06 | -0.11% | 1.36e-06 | +[INFO GPL-1001] Finished with Overflow: 0.099825 [INFO GPL-1002] Placed Cell Area 488.3760 [INFO GPL-1003] Available Free Area 953.8760 [INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5689 [INFO GPL-1008] - For 80% usage of free space: 0.6400 -[INFO GPL-0083] Original area (um^2): 553.28 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: -64.90 (-11.73%) -[INFO GPL-0084] Final placement area: 488.38 (-11.73%) +[INFO GPL-1010] Original area (um^2): 553.28 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -64.90 (-11.73%) +[INFO GPL-1013] Final placement area: 488.38 (-11.73%) worst slack max 1.40 -No differences found. +Differences found at line 63. + - _276_ NOR2_X4 + PLACED ( 8992 31218 ) N ; + - _276_ NOR2_X4 + PLACED ( 5661 28030 ) N ; diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index a5e932a157..b41c8879a2 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -99,15 +99,15 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -69.958 um^2 (-12.64%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.6250477 +[INFO GPL-0110] Timing-driven: new target density: 0.62665915 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 290 | 0.3024 | 2.937726e+06 | -37.13% | 8.94e-08 | - 300 | 0.2887 | 3.005554e+06 | +2.31% | 1.32e-07 | - 310 | 0.2273 | 2.945601e+06 | -1.99% | 1.94e-07 | - 320 | 0.2049 | 2.965581e+06 | +0.68% | 2.86e-07 | + 290 | 0.3018 | 2.935351e+06 | -37.18% | 8.94e-08 | + 300 | 0.2878 | 3.003750e+06 | +2.33% | 1.32e-07 | + 310 | 0.2264 | 2.944366e+06 | -1.98% | 1.94e-07 | + 320 | 0.2042 | 2.963868e+06 | +0.66% | 2.86e-07 | [INFO GPL-0100] Timing-driven iteration 4/5, virtual: false. -[INFO GPL-0101] Iter: 320, overflow: 0.205, keep resizer changes at: 0.3, HPWL: 2965581 +[INFO GPL-0101] Iter: 320, overflow: 0.204, keep resizer changes at: 0.3, HPWL: 2963868 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -120,13 +120,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: 5.054 um^2 (+1.05%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 1 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 1 -[INFO GPL-0110] Timing-driven: new target density: 0.6303461 +[INFO GPL-0110] Timing-driven: new target density: 0.6319576 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 330 | 0.1867 | 3.010591e+06 | +1.52% | 4.21e-07 | - 340 | 0.1527 | 3.057074e+06 | +1.54% | 6.20e-07 | + 330 | 0.1866 | 3.007993e+06 | +1.49% | 4.21e-07 | + 340 | 0.1537 | 3.055958e+06 | +1.59% | 6.20e-07 | [INFO GPL-0100] Timing-driven iteration 5/5, virtual: false. -[INFO GPL-0101] Iter: 343, overflow: 0.144, keep resizer changes at: 0.3, HPWL: 3061567 +[INFO GPL-0101] Iter: 343, overflow: 0.144, keep resizer changes at: 0.3, HPWL: 3060785 Iteration | Area | Resized | Buffers | Nets repaired | Remaining --------------------------------------------------------------------- 0 | +0.0% | 0 | 0 | 0 | 356 @@ -137,22 +137,24 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining [INFO GPL-0107] Timing-driven: repair_design delta area: -0.266 um^2 (-0.05%) [INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%) [INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0 -[INFO GPL-0110] Timing-driven: new target density: 0.6300672 +[INFO GPL-0110] Timing-driven: new target density: 0.63167876 Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- - 350 | 0.1395 | 3.076320e+06 | +0.63% | 9.14e-07 | - 360 | 0.1096 | 3.110143e+06 | +1.10% | 1.35e-06 | - 370 | 0.0985 | 3.140686e+06 | +0.98% | 1.98e-06 | -[INFO GPL-1001] Finished with Overflow: 0.098474 + 350 | 0.1389 | 3.073624e+06 | +0.58% | 9.14e-07 | + 360 | 0.1079 | 3.109495e+06 | +1.17% | 1.35e-06 | + 370 | 0.1051 | 3.139810e+06 | +0.97% | 1.98e-06 | +[INFO GPL-1001] Finished with Overflow: 0.099742 [INFO GPL-1002] Placed Cell Area 488.1100 [INFO GPL-1003] Available Free Area 953.8760 [INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5686 [INFO GPL-1008] - For 80% usage of free space: 0.6396 -[INFO GPL-0083] Original area (um^2): 553.28 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: -65.17 (-11.78%) -[INFO GPL-0084] Final placement area: 488.11 (-11.78%) +[INFO GPL-1010] Original area (um^2): 553.28 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -65.17 (-11.78%) +[INFO GPL-1013] Final placement area: 488.11 (-11.78%) worst slack max 1.40 -No differences found. +Differences found at line 63. + - _276_ NOR2_X4 + PLACED ( 9098 31400 ) N ; + - _276_ NOR2_X4 + PLACED ( 9573 29954 ) N ; diff --git a/src/gpl/test/simple01-uniform.ok b/src/gpl/test/simple01-uniform.ok index 1ef0b794fb..3826be58bf 100644 --- a/src/gpl/test/simple01-uniform.ok +++ b/src/gpl/test/simple01-uniform.ok @@ -64,8 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple01.ok b/src/gpl/test/simple01.ok index a02168e2ef..3adce95653 100644 --- a/src/gpl/test/simple01.ok +++ b/src/gpl/test/simple01.ok @@ -64,8 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple02-rd.ok b/src/gpl/test/simple02-rd.ok index c768eb0ad9..dee143c410 100644 --- a/src/gpl/test/simple02-rd.ok +++ b/src/gpl/test/simple02-rd.ok @@ -59,7 +59,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 190 | 0.6826 | 4.375246e+06 | +1.25% | 8.06e-10 | 200 | 0.6606 | 4.447333e+06 | +1.65% | 1.31e-09 | 210 | 0.6252 | 4.516619e+06 | +1.56% | 2.14e-09 | -[INFO GPL-0088] Routability snapshot saved at iter = 216 +[INFO GPL-0038] Routability snapshot saved at iter = 216 220 | 0.5861 | 4.589898e+06 | +1.62% | 3.48e-09 | 230 | 0.5467 | 4.672054e+06 | +1.79% | 5.67e-09 | 240 | 0.4940 | 4.711391e+06 | +0.84% | 9.24e-09 | @@ -82,6 +82,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0074] 5.0rcK: 0.00 [INFO GPL-0075] Final routing congestion: 0.97407407 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.0000), end routability optimization. +[INFO GPL-0090] Routability finished. Target routing congestion achieved succesfully. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -98,8 +99,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple02.ok b/src/gpl/test/simple02.ok index 08f26110a0..c07ae96290 100644 --- a/src/gpl/test/simple02.ok +++ b/src/gpl/test/simple02.ok @@ -64,8 +64,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6639 [INFO GPL-1008] - For 80% usage of free space: 0.7469 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple03-rd.ok b/src/gpl/test/simple03-rd.ok index bc95b8ed6e..d10cfe6153 100644 --- a/src/gpl/test/simple03-rd.ok +++ b/src/gpl/test/simple03-rd.ok @@ -58,7 +58,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 190 | 0.6826 | 4.375246e+06 | +1.25% | 8.06e-10 | 200 | 0.6606 | 4.447333e+06 | +1.65% | 1.31e-09 | 210 | 0.6252 | 4.516619e+06 | +1.56% | 2.14e-09 | -[INFO GPL-0088] Routability snapshot saved at iter = 216 +[INFO GPL-0038] Routability snapshot saved at iter = 216 220 | 0.5861 | 4.589898e+06 | +1.62% | 3.48e-09 | 230 | 0.5467 | 4.672054e+06 | +1.79% | 5.67e-09 | 240 | 0.4940 | 4.711391e+06 | +0.84% | 9.24e-09 | @@ -75,6 +75,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(1.2500), end routability optimization. +[INFO GPL-0090] Routability finished. Target routing congestion achieved succesfully. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -91,8 +92,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple03.ok b/src/gpl/test/simple03.ok index 1658b8d253..a77bcdc6a3 100644 --- a/src/gpl/test/simple03.ok +++ b/src/gpl/test/simple03.ok @@ -79,8 +79,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple04-rd.ok b/src/gpl/test/simple04-rd.ok index 699572ae09..53586bdb41 100644 --- a/src/gpl/test/simple04-rd.ok +++ b/src/gpl/test/simple04-rd.ok @@ -58,7 +58,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group 190 | 0.6826 | 4.375246e+06 | +1.25% | 8.06e-10 | 200 | 0.6606 | 4.447333e+06 | +1.65% | 1.31e-09 | 210 | 0.6252 | 4.516619e+06 | +1.56% | 2.14e-09 | -[INFO GPL-0088] Routability snapshot saved at iter = 216 +[INFO GPL-0038] Routability snapshot saved at iter = 216 220 | 0.5861 | 4.589898e+06 | +1.62% | 3.48e-09 | 230 | 0.5467 | 4.672054e+06 | +1.79% | 5.67e-09 | 240 | 0.4940 | 4.711391e+06 | +0.84% | 9.24e-09 | @@ -75,6 +75,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-0046] Average top 5.0% routing congestion: 0.4777 [INFO GPL-0047] Routability iteration weighted routing congestion: 0.5491 [INFO GPL-0050] Weighted routing congestion is lower than target routing congestion(0.6700), end routability optimization. +[INFO GPL-0090] Routability finished. Target routing congestion achieved succesfully. Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group --------------------------------------------------------------- 290 | 0.2677 | 4.777239e+06 | +0.83% | 8.41e-08 | @@ -91,8 +92,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple04.ok b/src/gpl/test/simple04.ok index 7652fb113c..87830ec996 100644 --- a/src/gpl/test/simple04.ok +++ b/src/gpl/test/simple04.ok @@ -89,8 +89,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-0083] Original area (um^2): 569.77 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 569.77 (+0.00%) +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) No differences found. diff --git a/src/gpl/test/simple05.ok b/src/gpl/test/simple05.ok index d5bf031432..d6911fc7d0 100644 --- a/src/gpl/test/simple05.ok +++ b/src/gpl/test/simple05.ok @@ -41,8 +41,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0608 [INFO GPL-1008] - For 80% usage of free space: 0.0684 [INFO GPL-1009] - For 50% usage of free space: 0.1094 -[INFO GPL-0083] Original area (um^2): 1.86 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 1.86 (+0.00%) +[INFO GPL-1010] Original area (um^2): 1.86 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 1.86 (+0.00%) No differences found. diff --git a/src/gpl/test/simple07.ok b/src/gpl/test/simple07.ok index d546324ef5..4562942491 100644 --- a/src/gpl/test/simple07.ok +++ b/src/gpl/test/simple07.ok @@ -50,8 +50,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 [INFO GPL-1009] - For 50% usage of free space: 0.0115 -[INFO GPL-0083] Original area (um^2): 3.75 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 3.75 (+0.00%) +[INFO GPL-1010] Original area (um^2): 3.75 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 3.75 (+0.00%) No differences found. diff --git a/src/gpl/test/simple08.ok b/src/gpl/test/simple08.ok index 6b8940011f..a28ce1d37d 100644 --- a/src/gpl/test/simple08.ok +++ b/src/gpl/test/simple08.ok @@ -50,8 +50,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0064 [INFO GPL-1008] - For 80% usage of free space: 0.0072 [INFO GPL-1009] - For 50% usage of free space: 0.0115 -[INFO GPL-0083] Original area (um^2): 3.75 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 3.75 (+0.00%) +[INFO GPL-1010] Original area (um^2): 3.75 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 3.75 (+0.00%) No differences found. diff --git a/src/gpl/test/simple09.ok b/src/gpl/test/simple09.ok index 2fc9bb69ff..399a170c48 100644 --- a/src/gpl/test/simple09.ok +++ b/src/gpl/test/simple09.ok @@ -41,8 +41,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0022 [INFO GPL-1008] - For 80% usage of free space: 0.0024 [INFO GPL-1009] - For 50% usage of free space: 0.0039 -[INFO GPL-0083] Original area (um^2): 1.86 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 1.86 (+0.00%) +[INFO GPL-1010] Original area (um^2): 1.86 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 1.86 (+0.00%) No differences found. diff --git a/src/gpl/test/simple10.ok b/src/gpl/test/simple10.ok index 307dbbb5d6..74147e3e2a 100644 --- a/src/gpl/test/simple10.ok +++ b/src/gpl/test/simple10.ok @@ -50,8 +50,8 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0000 [INFO GPL-1008] - For 80% usage of free space: 0.0000 [INFO GPL-1009] - For 50% usage of free space: 0.0000 -[INFO GPL-0083] Original area (um^2): 3.75 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 3.75 (+0.00%) +[INFO GPL-1010] Original area (um^2): 3.75 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 3.75 (+0.00%) No differences found. From a31d6a111151e76b2ff10b249765f4fdbad54d9c Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 18:52:19 +0000 Subject: [PATCH 31/41] gpl: clang-format Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 34 +++++++++++++++++++--------------- src/gpl/src/nesterovPlace.cpp | 32 +++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index d33e6de1e5..6cd93898b4 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3232,10 +3232,10 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) int64_t availableFillerArea = single_filler_area * fillerStor_.size(); int64_t originalInflationArea = inflation_area; - if(totalFillerArea_ >= static_cast(initial_filler_area_ * 0.9)) { + if (totalFillerArea_ >= static_cast(initial_filler_area_ * 0.9)) { for (int i = nb_gcells_.size() - 1; - i >= 0 && removed_count < max_fllers_to_remove; - --i) { + i >= 0 && removed_count < max_fllers_to_remove; + --i) { if (nb_gcells_[i]->isFiller()) { const GCell& removed = fillerStor_[nb_gcells_[i].getStorageIndex()]; removed_fillers_.push_back(RemovedFillerState{ @@ -3325,10 +3325,7 @@ void NesterovBase::cutFillerCells(int64_t inflation_area) float newTargetDensity = static_cast(totalGCellArea) / static_cast(whiteSpaceArea()); - log_->info(GPL, - 79, - "New target density: {}", - newTargetDensity); + log_->info(GPL, 79, "New target density: {}", newTargetDensity); } } @@ -3405,10 +3402,10 @@ void NesterovBase::restoreRemovedFillers() "Restoring {} previously removed fillers.", removed_fillers_.size()); - if(removed_fillers_.size() == 0){ + if (removed_fillers_.size() == 0) { return; } - + size_t num_fill_before = fillerStor_.size(); int64_t area_before = totalFillerArea_; @@ -3451,12 +3448,17 @@ void NesterovBase::restoreRemovedFillers() size_t num_fill_after = fillerStor_.size(); int64_t area_after = totalFillerArea_; - double rel_count_change = (num_fill_before > 0) - ? (static_cast(num_fill_after - num_fill_before) / num_fill_before) * 100.0 - : 0.0; + double rel_count_change + = (num_fill_before > 0) + ? (static_cast(num_fill_after - num_fill_before) + / num_fill_before) + * 100.0 + : 0.0; double rel_area_change = (area_before > 0) - ? (static_cast(area_after - area_before) / static_cast(area_before)) * 100.0 + ? (static_cast(area_after - area_before) + / static_cast(area_before)) + * 100.0 : 0.0; dbBlock* block = pb_->db()->getChip()->getBlock(); @@ -3465,14 +3467,16 @@ void NesterovBase::restoreRemovedFillers() log_->info(GPL, 81, - "Number of fillers before restoration {} and after {} . Relative change: {:+.2f}%%", + "Number of fillers before restoration {} and after {} . Relative " + "change: {:+.2f}%%", num_fill_before, num_fill_after, rel_count_change); log_->info(GPL, 82, - "Total filler area before restoration {:.2f} and after {:.2f} (um^2). Relative change: {:+.2f}%%", + "Total filler area before restoration {:.2f} and after {:.2f} " + "(um^2). Relative change: {:+.2f}%%", area_before_um, area_after_um, rel_area_change); diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 8bc9fad876..657ae52ba0 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -842,23 +842,33 @@ int NesterovPlace::doNesterovPlace(int start_iter) for (auto& nb : nbVec_) { nb->revertToSnapshot(); nb->resetMinSumOverflow(); - } + } } - if(is_routability_need_ && isRevertInitNeeded) { - log_->info(GPL, 87, "Routability end iteration: reverting from divergence."); - } + if (is_routability_need_ && isRevertInitNeeded) { + log_->info( + GPL, 87, "Routability end iteration: reverting from divergence."); + } - if(is_routability_need_ && !isRevertInitNeeded) { - log_->info(GPL, 88, "Routability end iteration: increase inflation and revert back to snapshot."); + if (is_routability_need_ && !isRevertInitNeeded) { + log_->info(GPL, + 88, + "Routability end iteration: increase inflation and revert " + "back to snapshot."); } - if(!is_routability_need_ && isRevertInitNeeded) { - log_->info(GPL, 89, "Routability finished. Reverting to minimal observed routing congestion, could not reach target."); + if (!is_routability_need_ && isRevertInitNeeded) { + log_->info(GPL, + 89, + "Routability finished. Reverting to minimal observed " + "routing congestion, could not reach target."); } - - if(!is_routability_need_ && !isRevertInitNeeded) { - log_->info(GPL, 90, "Routability finished. Target routing congestion achieved succesfully."); + + if (!is_routability_need_ && !isRevertInitNeeded) { + log_->info(GPL, + 90, + "Routability finished. Target routing congestion achieved " + "succesfully."); } if (!is_routability_need_) { From 1c28d6b5695413e9dd29d5766370a8536104a6da Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 18:56:29 +0000 Subject: [PATCH 32/41] gpl: update test Signed-off-by: Augusto Berndt --- src/gpl/test/simple01-td.defok | 578 ++++++++++++++++----------------- src/gpl/test/simple01-td.ok | 4 +- 2 files changed, 290 insertions(+), 292 deletions(-) diff --git a/src/gpl/test/simple01-td.defok b/src/gpl/test/simple01-td.defok index fff8e42f9f..2595053f03 100644 --- a/src/gpl/test/simple01-td.defok +++ b/src/gpl/test/simple01-td.defok @@ -60,293 +60,293 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 287 ; - - _276_ NOR2_X4 + PLACED ( 9573 29954 ) N ; - - _278_ INV_X1 + PLACED ( 19422 44139 ) N ; - - _279_ NOR2_X1 + PLACED ( 22000 42577 ) N ; - - _280_ INV_X1 + PLACED ( 22820 36266 ) N ; - - _281_ INV_X1 + PLACED ( 39070 52406 ) N ; - - _282_ NOR2_X1 + PLACED ( 37786 52535 ) N ; - - _283_ INV_X1 + PLACED ( 40907 45866 ) N ; - - _284_ NOR2_X1 + PLACED ( 40229 49019 ) N ; - - _285_ NOR2_X1 + PLACED ( 37167 50727 ) N ; - - _286_ INV_X1 + PLACED ( 27911 50386 ) N ; - - _287_ NOR2_X1 + PLACED ( 28179 51532 ) N ; - - _288_ INV_X1 + PLACED ( 28515 51059 ) N ; - - _289_ AND2_X1 + PLACED ( 27859 33767 ) N ; - - _290_ INV_X1 + PLACED ( 17252 15766 ) N ; - - _291_ NOR2_X1 + PLACED ( 16029 17259 ) N ; - - _292_ INV_X2 + PLACED ( 10641 17381 ) N ; - - _293_ AOI21_X2 + PLACED ( 14596 18369 ) N ; - - _294_ INV_X1 + PLACED ( 28302 16337 ) N ; - - _295_ NOR2_X1 + PLACED ( 25973 18413 ) N ; - - _296_ INV_X1 + PLACED ( 20632 17742 ) N ; - - _297_ NOR2_X2 + PLACED ( 20884 18129 ) N ; - - _298_ NOR2_X1 + PLACED ( 23659 22948 ) N ; - - _299_ AND2_X2 + PLACED ( 24432 30935 ) N ; - - _300_ INV_X1 + PLACED ( 46062 17359 ) N ; - - _301_ NOR2_X1 + PLACED ( 45331 17748 ) N ; - - _302_ INV_X1 + PLACED ( 46063 21895 ) N ; - - _303_ NOR3_X1 + PLACED ( 47211 20040 ) N ; - - _304_ AOI21_X1 + PLACED ( 45518 18012 ) N ; - - _305_ INV_X1 + PLACED ( 43195 19030 ) N ; - - _306_ INV_X1 + PLACED ( 43057 31630 ) N ; - - _307_ AND2_X1 + PLACED ( 45256 29678 ) N ; - - _308_ INV_X1 + PLACED ( 48064 29728 ) N ; - - _309_ INV_X1 + PLACED ( 41121 38237 ) N ; - - _310_ OAI211_X1 + PLACED ( 42946 29913 ) N ; - - _311_ NAND2_X1 + PLACED ( 43808 27031 ) N ; - - _312_ INV_X1 + PLACED ( 52848 22775 ) N ; - - _313_ NOR2_X1 + PLACED ( 47991 25161 ) N ; - - _314_ NOR3_X1 + PLACED ( 42840 25159 ) N ; - - _315_ NOR2_X2 + PLACED ( 40329 24360 ) N ; - - _316_ INV_X1 + PLACED ( 36019 18091 ) N ; - - _317_ NOR2_X1 + PLACED ( 34935 18644 ) N ; - - _318_ INV_X1 + PLACED ( 33778 17591 ) N ; - - _319_ NOR2_X1 + PLACED ( 36286 23613 ) N ; - - _320_ INV_X1 + PLACED ( 12589 46001 ) N ; - - _321_ NAND2_X1 + PLACED ( 14383 37640 ) N ; - - _322_ INV_X1 + PLACED ( 19023 38598 ) N ; - - _323_ OAI21_X1 + PLACED ( 14905 37607 ) N ; - - _324_ NOR4_X2 + PLACED ( 31512 25078 ) N ; - - _325_ NOR2_X1 + PLACED ( 13837 38109 ) N ; - - _326_ OAI21_X1 + PLACED ( 16797 38104 ) N ; - - _327_ INV_X1 + PLACED ( 9295 39003 ) N ; - - _328_ INV_X1 + PLACED ( 31484 16587 ) N ; - - _329_ NOR3_X1 + PLACED ( 34981 23390 ) N ; - - _330_ AOI21_X1 + PLACED ( 34766 24393 ) N ; - - _331_ OAI221_X4 + PLACED ( 17378 38201 ) N ; - - _332_ OAI211_X1 + PLACED ( 27133 28229 ) N ; - - _333_ AND2_X1 + PLACED ( 21806 42977 ) N ; - - _334_ INV_X2 + PLACED ( 23156 42201 ) N ; - - _335_ NAND2_X1 + PLACED ( 37437 52873 ) N ; - - _336_ NAND2_X1 + PLACED ( 40166 48189 ) N ; - - _337_ NAND2_X1 + PLACED ( 34633 50574 ) N ; - - _338_ INV_X1 + PLACED ( 37148 51844 ) N ; - - _339_ NAND3_X1 + PLACED ( 29442 50896 ) N ; - - _340_ NAND2_X1 + PLACED ( 28301 51447 ) N ; - - _341_ NAND2_X1 + PLACED ( 28719 50795 ) N ; - - _342_ INV_X1 + PLACED ( 18118 16988 ) N ; - - _343_ OAI211_X1 + PLACED ( 17621 17456 ) N ; - - _344_ NAND2_X1 + PLACED ( 18701 17477 ) N ; - - _345_ AOI211_X1 + PLACED ( 22027 21561 ) N ; - - _346_ NAND2_X1 + PLACED ( 26293 18386 ) N ; - - _347_ NAND2_X1 + PLACED ( 20424 19382 ) N ; - - _348_ OAI21_X1 + PLACED ( 25039 20939 ) N ; - - _349_ OR2_X2 + PLACED ( 27427 23422 ) N ; - - _350_ AOI21_X1 + PLACED ( 27738 34963 ) N ; - - _351_ AND4_X1 + PLACED ( 22544 35756 ) N ; - - _352_ AOI22_X1 + PLACED ( 22715 35903 ) N ; - - _353_ OR2_X1 + PLACED ( 22764 36903 ) N ; - - _355_ INV_X8 + PLACED ( 4565 32970 ) N ; - - _357_ AND3_X2 + PLACED ( 27457 33663 ) N ; - - _358_ OAI211_X1 + PLACED ( 26986 27755 ) N ; - - _359_ OAI21_X2 + PLACED ( 27474 35586 ) N ; - - _360_ OAI21_X2 + PLACED ( 27546 24346 ) N ; - - _361_ NAND3_X4 + PLACED ( 27821 28700 ) N ; - - _362_ NOR2_X4 + PLACED ( 36685 31505 ) N ; - - _363_ INV_X4 + PLACED ( 37803 32002 ) N ; - - _364_ NOR2_X4 + PLACED ( 33866 37456 ) N ; - - _365_ AOI221_X4 + PLACED ( 27435 42503 ) N ; - - _366_ AND2_X4 + PLACED ( 36536 30287 ) N ; - - _368_ OAI21_X1 + PLACED ( 22817 37850 ) N ; - - _370_ AOI22_X1 + PLACED ( 21834 42718 ) N ; - - _371_ NOR2_X2 + PLACED ( 31035 26892 ) N ; - - _372_ NAND3_X1 + PLACED ( 25032 32198 ) N ; - - _373_ OR2_X1 + PLACED ( 25601 46917 ) N ; - - _374_ AOI22_X1 + PLACED ( 29528 50394 ) N ; - - _375_ NAND2_X1 + PLACED ( 27515 50469 ) N ; - - _376_ XOR2_X1 + PLACED ( 26652 56766 ) N ; - - _377_ XNOR2_X1 + PLACED ( 27638 55930 ) N ; - - _378_ INV_X4 + PLACED ( 8824 24203 ) N ; - - _380_ NOR2_X1 + PLACED ( 32262 55268 ) N ; - - _381_ NAND2_X1 + PLACED ( 30078 55722 ) N ; - - _382_ AOI221_X4 + PLACED ( 27203 46136 ) N ; - - _383_ AOI21_X1 + PLACED ( 31307 55884 ) N ; - - _384_ INV_X1 + PLACED ( 32724 46740 ) N ; - - _385_ INV_X1 + PLACED ( 31421 42263 ) N ; - - _386_ OAI211_X1 + PLACED ( 33823 47359 ) N ; - - _387_ INV_X1 + PLACED ( 38051 51352 ) N ; - - _388_ AND4_X1 + PLACED ( 36518 52493 ) N ; - - _389_ AOI22_X1 + PLACED ( 36307 52567 ) N ; - - _390_ NOR2_X1 + PLACED ( 38546 53539 ) N ; - - _391_ NOR2_X1 + PLACED ( 42071 55002 ) N ; - - _392_ NAND2_X1 + PLACED ( 40229 54769 ) N ; - - _393_ AOI221_X4 + PLACED ( 38250 45750 ) N ; - - _394_ AOI21_X1 + PLACED ( 41234 55506 ) N ; - - _395_ OAI21_X1 + PLACED ( 33792 45899 ) N ; - - _396_ XOR2_X1 + PLACED ( 45734 46474 ) N ; - - _397_ XNOR2_X1 + PLACED ( 45045 45937 ) N ; - - _398_ NOR2_X1 + PLACED ( 44879 47277 ) N ; - - _399_ AOI221_X1 + PLACED ( 44410 45909 ) N ; - - _401_ OR3_X1 + PLACED ( 41467 37275 ) N ; - - _402_ AOI21_X1 + PLACED ( 44901 46841 ) N ; - - _403_ INV_X1 + PLACED ( 22223 24045 ) N ; - - _404_ OAI211_X1 + PLACED ( 26669 25973 ) N ; - - _405_ AOI21_X1 + PLACED ( 21227 18458 ) N ; - - _406_ AOI21_X1 + PLACED ( 21538 17229 ) N ; - - _407_ AND2_X1 + PLACED ( 26282 16342 ) N ; - - _408_ XNOR2_X1 + PLACED ( 26320 10984 ) N ; - - _409_ XNOR2_X1 + PLACED ( 26687 11808 ) N ; - - _410_ NOR2_X1 + PLACED ( 25931 11791 ) N ; - - _411_ AOI221_X1 + PLACED ( 25709 12189 ) N ; - - _412_ OR3_X1 + PLACED ( 29563 17173 ) N ; - - _413_ AOI21_X1 + PLACED ( 25575 11886 ) N ; - - _414_ OAI21_X1 + PLACED ( 26952 26409 ) N ; - - _415_ AND2_X1 + PLACED ( 20152 21954 ) N ; - - _416_ AND4_X1 + PLACED ( 20574 25425 ) N ; - - _417_ AOI22_X1 + PLACED ( 20460 25480 ) N ; - - _418_ OR2_X1 + PLACED ( 19283 26007 ) N ; - - _419_ NOR2_X1 + PLACED ( 16179 25307 ) N ; - - _420_ AOI221_X4 + PLACED ( 27584 38446 ) N ; - - _421_ OAI21_X1 + PLACED ( 18284 25806 ) N ; - - _422_ AOI21_X1 + PLACED ( 17138 25811 ) N ; - - _423_ AOI21_X1 + PLACED ( 12368 17538 ) N ; - - _424_ NOR2_X1 + PLACED ( 11946 16351 ) N ; - - _425_ NOR2_X1 + PLACED ( 12168 15707 ) N ; - - _426_ XNOR2_X1 + PLACED ( 14241 11926 ) N ; - - _427_ XNOR2_X1 + PLACED ( 11933 12758 ) N ; - - _428_ NOR2_X1 + PLACED ( 9980 12178 ) N ; - - _429_ AOI221_X1 + PLACED ( 8384 12838 ) N ; - - _430_ OR3_X1 + PLACED ( 29588 16961 ) N ; - - _431_ AOI21_X1 + PLACED ( 8682 12445 ) N ; - - _432_ XNOR2_X1 + PLACED ( 11528 19885 ) N ; - - _433_ XNOR2_X1 + PLACED ( 11953 22350 ) N ; - - _434_ AOI221_X1 + PLACED ( 9309 22498 ) N ; - - _435_ OR3_X1 + PLACED ( 29739 17956 ) N ; - - _436_ AOI22_X1 + PLACED ( 9749 18393 ) N ; - - _437_ NAND2_X1 + PLACED ( 37778 22900 ) N ; - - _438_ OAI221_X1 + PLACED ( 40197 24524 ) N ; - - _439_ NAND2_X1 + PLACED ( 14451 37171 ) N ; - - _440_ XOR2_X1 + PLACED ( 12211 45785 ) N ; - - _441_ XNOR2_X1 + PLACED ( 12940 44667 ) N ; - - _442_ AOI221_X1 + PLACED ( 11225 45194 ) N ; - - _443_ NAND2_X1 + PLACED ( 26881 44690 ) N ; - - _444_ AOI22_X1 + PLACED ( 12640 45713 ) N ; - - _445_ OAI21_X1 + PLACED ( 37611 23787 ) N ; - - _446_ NAND2_X1 + PLACED ( 38271 23113 ) N ; - - _447_ XNOR2_X1 + PLACED ( 36565 7591 ) N ; - - _448_ XNOR2_X1 + PLACED ( 37806 9912 ) N ; - - _449_ NOR2_X1 + PLACED ( 40354 12020 ) N ; - - _450_ AOI221_X1 + PLACED ( 38810 11790 ) N ; - - _451_ OR3_X1 + PLACED ( 39312 17137 ) N ; - - _452_ AOI21_X1 + PLACED ( 39437 11930 ) N ; - - _453_ XNOR2_X1 + PLACED ( 36428 17640 ) N ; - - _454_ XNOR2_X1 + PLACED ( 35438 23828 ) N ; - - _455_ AOI221_X1 + PLACED ( 33592 16222 ) N ; - - _456_ OR3_X1 + PLACED ( 34688 17415 ) N ; - - _457_ AOI22_X1 + PLACED ( 34418 15997 ) N ; - - _458_ AOI22_X1 + PLACED ( 45394 27927 ) N ; - - _459_ NOR2_X1 + PLACED ( 47760 25181 ) N ; - - _460_ XOR2_X1 + PLACED ( 49116 14147 ) N ; - - _461_ XNOR2_X1 + PLACED ( 48160 13911 ) N ; - - _462_ NOR2_X1 + PLACED ( 44837 12017 ) N ; - - _463_ AOI221_X1 + PLACED ( 43891 12803 ) N ; - - _464_ OR3_X1 + PLACED ( 42176 16979 ) N ; - - _465_ AOI21_X1 + PLACED ( 44282 12265 ) N ; - - _466_ XNOR2_X1 + PLACED ( 49561 24292 ) N ; - - _467_ XNOR2_X1 + PLACED ( 44366 25601 ) N ; - - _468_ AOI221_X4 + PLACED ( 45269 19608 ) N ; - - _469_ OR3_X1 + PLACED ( 42418 21651 ) N ; - - _470_ AOI22_X1 + PLACED ( 48312 21735 ) N ; - - _471_ XNOR2_X1 + PLACED ( 50016 32356 ) N ; - - _472_ INV_X1 + PLACED ( 56194 33946 ) N ; - - _473_ NOR2_X1 + PLACED ( 53289 36590 ) N ; - - _474_ XNOR2_X1 + PLACED ( 51734 34511 ) N ; - - _475_ AOI221_X4 + PLACED ( 39109 37092 ) N ; - - _476_ NAND3_X1 + PLACED ( 41626 33294 ) N ; - - _477_ AOI22_X1 + PLACED ( 45472 31875 ) N ; - - _478_ XOR2_X1 + PLACED ( 47277 38683 ) N ; - - _479_ AOI221_X4 + PLACED ( 39065 39965 ) N ; - - _480_ NAND3_X1 + PLACED ( 41795 36641 ) N ; - - _481_ AOI22_X1 + PLACED ( 44533 39001 ) N ; - - _482_ NOR2_X1 + PLACED ( 9190 31916 ) N ; - - _483_ NOR2_X1 + PLACED ( 56614 30079 ) N ; - - _484_ AND3_X1 + PLACED ( 55630 31767 ) N ; - - _485_ NAND3_X1 + PLACED ( 34870 34218 ) N ; - - _486_ NOR3_X1 + PLACED ( 27284 16440 ) N ; - - _487_ NAND2_X1 + PLACED ( 29326 17776 ) N ; - - _488_ NOR4_X1 + PLACED ( 33864 43011 ) N ; - - _489_ NAND3_X1 + PLACED ( 34577 44584 ) N ; - - _490_ NOR3_X1 + PLACED ( 34214 36180 ) N ; - - _491_ NAND3_X1 + PLACED ( 34139 33974 ) N ; - - _492_ AOI221_X4 + PLACED ( 8177 32519 ) N ; - - _493_ NAND3_X1 + PLACED ( 7659 34246 ) N ; - - _494_ AOI221_X1 + PLACED ( 8481 33675 ) N ; - - _495_ MUX2_X1 + PLACED ( 44500 54312 ) N ; - - _496_ NOR2_X4 + PLACED ( 35237 43616 ) N ; - - _498_ MUX2_X1 + PLACED ( 46427 54720 ) N ; - - _499_ MUX2_X1 + PLACED ( 16719 46416 ) N ; - - _500_ MUX2_X1 + PLACED ( 18731 47068 ) N ; - - _501_ MUX2_X1 + PLACED ( 20821 54852 ) N ; - - _502_ MUX2_X1 + PLACED ( 21605 55603 ) N ; - - _503_ MUX2_X1 + PLACED ( 50989 47350 ) N ; - - _504_ MUX2_X1 + PLACED ( 52698 47438 ) N ; - - _505_ MUX2_X1 + PLACED ( 25032 5621 ) N ; - - _506_ MUX2_X1 + PLACED ( 26865 6211 ) N ; - - _507_ MUX2_X1 + PLACED ( 13620 26961 ) N ; - - _508_ MUX2_X1 + PLACED ( 15092 30359 ) N ; - - _509_ MUX2_X1 + PLACED ( 16941 7043 ) N ; - - _510_ MUX2_X1 + PLACED ( 18398 6031 ) N ; - - _511_ MUX2_X1 + PLACED ( 9934 6523 ) N ; - - _512_ MUX2_X1 + PLACED ( 12313 5777 ) N ; - - _513_ MUX2_X1 + PLACED ( 10116 52927 ) N ; - - _514_ MUX2_X1 + PLACED ( 13497 55778 ) N ; - - _515_ MUX2_X1 + PLACED ( 11267 50721 ) N ; - - _516_ MUX2_X1 + PLACED ( 13631 52157 ) N ; - - _517_ MUX2_X1 + PLACED ( 41443 5811 ) N ; - - _518_ MUX2_X1 + PLACED ( 43766 5512 ) N ; - - _519_ MUX2_X1 + PLACED ( 51195 15658 ) N ; - - _520_ MUX2_X1 + PLACED ( 54292 16023 ) N ; - - _521_ MUX2_X1 + PLACED ( 50854 9275 ) N ; - - _522_ MUX2_X1 + PLACED ( 53191 9084 ) N ; - - _523_ MUX2_X1 + PLACED ( 52372 22122 ) N ; - - _524_ MUX2_X1 + PLACED ( 54504 21473 ) N ; - - _525_ MUX2_X1 + PLACED ( 50928 31976 ) N ; - - _526_ MUX2_X1 + PLACED ( 54529 31154 ) N ; - - _527_ MUX2_X1 + PLACED ( 52146 39892 ) N ; - - _528_ MUX2_X1 + PLACED ( 54288 39597 ) N ; - - _529_ AOI22_X1 + PLACED ( 13776 37321 ) N ; - - _530_ NOR2_X1 + PLACED ( 13382 38142 ) N ; - - _531_ XNOR2_X1 + PLACED ( 13053 40616 ) N ; - - _532_ XNOR2_X1 + PLACED ( 11375 39785 ) N ; - - _533_ AOI221_X1 + PLACED ( 8026 39881 ) N ; - - _534_ OR3_X1 + PLACED ( 31886 36480 ) N ; - - _535_ AOI22_X1 + PLACED ( 8781 39075 ) N ; - - _536_ DFF_X1 + PLACED ( 1423 44005 ) N ; - - _537_ DFF_X1 + PLACED ( 31170 57478 ) N ; - - _538_ DFF_X1 + PLACED ( 39892 57478 ) N ; - - _539_ DFF_X1 + PLACED ( 45737 49817 ) N ; - - _540_ DFF_X1 + PLACED ( 21129 1322 ) N ; - - _541_ DFF_X1 + PLACED ( 16083 12250 ) N ; - - _542_ DFF_X1 + PLACED ( 5268 9076 ) N ; - - _543_ DFF_X1 + PLACED ( 2521 17604 ) N ; - - _544_ DFF_X1 + PLACED ( 5220 47670 ) N ; - - _545_ DFF_X1 + PLACED ( 35244 4077 ) N ; - - _546_ DFF_X1 + PLACED ( 31416 10515 ) N ; - - _547_ DFF_X1 + PLACED ( 44531 10413 ) N ; - - _548_ DFF_X1 + PLACED ( 53728 25526 ) N ; - - _549_ DFF_X1 + PLACED ( 44611 32549 ) N ; - - _550_ DFF_X1 + PLACED ( 46844 40504 ) N ; - - _551_ DFF_X1 + PLACED ( 3100 24658 ) N ; - - _552_ DFF_X1 + PLACED ( 0 32362 ) N ; - - _553_ DFF_X1 + PLACED ( 47044 55051 ) N ; - - _554_ DFF_X1 + PLACED ( 19200 47403 ) N ; - - _555_ DFF_X1 + PLACED ( 21803 56472 ) N ; - - _556_ DFF_X1 + PLACED ( 53239 47711 ) N ; - - _557_ DFF_X1 + PLACED ( 27447 6166 ) N ; - - _558_ DFF_X1 + PLACED ( 15594 30819 ) N ; - - _559_ DFF_X1 + PLACED ( 19019 5764 ) N ; - - _560_ DFF_X1 + PLACED ( 12146 5410 ) N ; - - _561_ DFF_X1 + PLACED ( 14077 56997 ) N ; - - _562_ DFF_X1 + PLACED ( 14316 52468 ) N ; - - _563_ DFF_X1 + PLACED ( 44521 5085 ) N ; - - _564_ DFF_X1 + PLACED ( 55304 16183 ) N ; - - _565_ DFF_X1 + PLACED ( 53926 9176 ) N ; - - _566_ DFF_X1 + PLACED ( 55480 21583 ) N ; - - _567_ DFF_X1 + PLACED ( 55480 31231 ) N ; - - _568_ DFF_X1 + PLACED ( 55168 39614 ) N ; - - _569_ DFF_X1 + PLACED ( 1482 39421 ) N ; - - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 8961 26601 ) N ; + - _276_ NOR2_X4 + PLACED ( 9098 31400 ) N ; + - _278_ INV_X1 + PLACED ( 19167 44098 ) N ; + - _279_ NOR2_X1 + PLACED ( 22001 42502 ) N ; + - _280_ INV_X1 + PLACED ( 22726 36416 ) N ; + - _281_ INV_X1 + PLACED ( 39361 52047 ) N ; + - _282_ NOR2_X1 + PLACED ( 38128 52469 ) N ; + - _283_ INV_X1 + PLACED ( 41331 45551 ) N ; + - _284_ NOR2_X1 + PLACED ( 40698 49117 ) N ; + - _285_ NOR2_X1 + PLACED ( 37459 50849 ) N ; + - _286_ INV_X1 + PLACED ( 27879 50569 ) N ; + - _287_ NOR2_X1 + PLACED ( 28030 51782 ) N ; + - _288_ INV_X1 + PLACED ( 28303 51284 ) N ; + - _289_ AND2_X1 + PLACED ( 27302 33971 ) N ; + - _290_ INV_X1 + PLACED ( 17285 15785 ) N ; + - _291_ NOR2_X1 + PLACED ( 15942 17031 ) N ; + - _292_ INV_X2 + PLACED ( 9734 17328 ) N ; + - _293_ AOI21_X2 + PLACED ( 14444 17926 ) N ; + - _294_ INV_X1 + PLACED ( 28702 16441 ) N ; + - _295_ NOR2_X1 + PLACED ( 26130 18546 ) N ; + - _296_ INV_X1 + PLACED ( 20852 17727 ) N ; + - _297_ NOR2_X2 + PLACED ( 20978 17965 ) N ; + - _298_ NOR2_X1 + PLACED ( 23373 22943 ) N ; + - _299_ AND2_X2 + PLACED ( 23856 30494 ) N ; + - _300_ INV_X1 + PLACED ( 46674 17931 ) N ; + - _301_ NOR2_X1 + PLACED ( 45977 18319 ) N ; + - _302_ INV_X1 + PLACED ( 46419 22480 ) N ; + - _303_ NOR3_X1 + PLACED ( 47829 20393 ) N ; + - _304_ AOI21_X1 + PLACED ( 46384 18648 ) N ; + - _305_ INV_X1 + PLACED ( 43114 19966 ) N ; + - _306_ INV_X1 + PLACED ( 42774 31512 ) N ; + - _307_ AND2_X1 + PLACED ( 44844 29457 ) N ; + - _308_ INV_X1 + PLACED ( 47629 29419 ) N ; + - _309_ INV_X1 + PLACED ( 41024 38145 ) N ; + - _310_ OAI211_X1 + PLACED ( 42576 29688 ) N ; + - _311_ NAND2_X1 + PLACED ( 43567 26892 ) N ; + - _312_ INV_X1 + PLACED ( 52648 23194 ) N ; + - _313_ NOR2_X1 + PLACED ( 47536 24942 ) N ; + - _314_ NOR3_X1 + PLACED ( 42556 25038 ) N ; + - _315_ NOR2_X2 + PLACED ( 39916 24335 ) N ; + - _316_ INV_X1 + PLACED ( 35919 18007 ) N ; + - _317_ NOR2_X1 + PLACED ( 34763 18690 ) N ; + - _318_ INV_X1 + PLACED ( 33684 18377 ) N ; + - _319_ NOR2_X1 + PLACED ( 36272 23626 ) N ; + - _320_ INV_X1 + PLACED ( 12805 45888 ) N ; + - _321_ NAND2_X1 + PLACED ( 14464 37407 ) N ; + - _322_ INV_X1 + PLACED ( 18884 38586 ) N ; + - _323_ OAI21_X1 + PLACED ( 14896 37449 ) N ; + - _324_ NOR4_X2 + PLACED ( 31613 25362 ) N ; + - _325_ NOR2_X1 + PLACED ( 13900 37745 ) N ; + - _326_ OAI21_X1 + PLACED ( 16809 37952 ) N ; + - _327_ INV_X1 + PLACED ( 9008 39024 ) N ; + - _328_ INV_X1 + PLACED ( 30645 16240 ) N ; + - _329_ NOR3_X1 + PLACED ( 35142 23416 ) N ; + - _330_ AOI21_X1 + PLACED ( 34814 24353 ) N ; + - _331_ OAI221_X4 + PLACED ( 17571 38149 ) N ; + - _332_ OAI211_X1 + PLACED ( 26408 28696 ) N ; + - _333_ AND2_X1 + PLACED ( 21749 43282 ) N ; + - _334_ INV_X2 + PLACED ( 23093 42625 ) N ; + - _335_ NAND2_X1 + PLACED ( 37685 52800 ) N ; + - _336_ NAND2_X1 + PLACED ( 40663 48308 ) N ; + - _337_ NAND2_X1 + PLACED ( 34635 50761 ) N ; + - _338_ INV_X1 + PLACED ( 37288 51949 ) N ; + - _339_ NAND3_X1 + PLACED ( 29244 51056 ) N ; + - _340_ NAND2_X1 + PLACED ( 28165 51682 ) N ; + - _341_ NAND2_X1 + PLACED ( 28458 50989 ) N ; + - _342_ INV_X1 + PLACED ( 17644 17126 ) N ; + - _343_ OAI211_X1 + PLACED ( 17713 17357 ) N ; + - _344_ NAND2_X1 + PLACED ( 18965 17282 ) N ; + - _345_ AOI211_X1 + PLACED ( 21899 21261 ) N ; + - _346_ NAND2_X1 + PLACED ( 26508 18546 ) N ; + - _347_ NAND2_X1 + PLACED ( 20639 19579 ) N ; + - _348_ OAI21_X1 + PLACED ( 25206 21076 ) N ; + - _349_ OR2_X2 + PLACED ( 27576 23076 ) N ; + - _350_ AOI21_X1 + PLACED ( 27296 35295 ) N ; + - _351_ AND4_X1 + PLACED ( 22363 35988 ) N ; + - _352_ AOI22_X1 + PLACED ( 22509 36140 ) N ; + - _353_ OR2_X1 + PLACED ( 22505 37410 ) N ; + - _355_ INV_X8 + PLACED ( 4644 34381 ) N ; + - _357_ AND3_X2 + PLACED ( 27010 33819 ) N ; + - _358_ OAI211_X1 + PLACED ( 26928 28091 ) N ; + - _359_ OAI21_X2 + PLACED ( 26701 35869 ) N ; + - _360_ OAI21_X2 + PLACED ( 27736 23858 ) N ; + - _361_ NAND3_X4 + PLACED ( 27765 28945 ) N ; + - _362_ NOR2_X4 + PLACED ( 35999 31377 ) N ; + - _363_ INV_X4 + PLACED ( 37354 32162 ) N ; + - _364_ NOR2_X4 + PLACED ( 34140 37540 ) N ; + - _365_ AOI221_X4 + PLACED ( 27537 42584 ) N ; + - _366_ AND2_X4 + PLACED ( 37278 30601 ) N ; + - _368_ OAI21_X1 + PLACED ( 22572 38532 ) N ; + - _370_ AOI22_X1 + PLACED ( 21578 42698 ) N ; + - _371_ NOR2_X2 + PLACED ( 30801 27399 ) N ; + - _372_ NAND3_X1 + PLACED ( 24591 32066 ) N ; + - _373_ OR2_X1 + PLACED ( 25520 46693 ) N ; + - _374_ AOI22_X1 + PLACED ( 29298 50415 ) N ; + - _375_ NAND2_X1 + PLACED ( 27593 50357 ) N ; + - _376_ XOR2_X1 + PLACED ( 26853 56912 ) N ; + - _377_ XNOR2_X1 + PLACED ( 27852 56129 ) N ; + - _378_ INV_X4 + PLACED ( 9782 24148 ) N ; + - _380_ NOR2_X1 + PLACED ( 32305 55254 ) N ; + - _381_ NAND2_X1 + PLACED ( 30194 55834 ) N ; + - _382_ AOI221_X4 + PLACED ( 27344 45951 ) N ; + - _383_ AOI21_X1 + PLACED ( 31484 55949 ) N ; + - _384_ INV_X1 + PLACED ( 32656 47235 ) N ; + - _385_ INV_X1 + PLACED ( 31314 42512 ) N ; + - _386_ OAI211_X1 + PLACED ( 33896 47671 ) N ; + - _387_ INV_X1 + PLACED ( 38251 51532 ) N ; + - _388_ AND4_X1 + PLACED ( 36534 52647 ) N ; + - _389_ AOI22_X1 + PLACED ( 36314 52708 ) N ; + - _390_ NOR2_X1 + PLACED ( 38604 53642 ) N ; + - _391_ NOR2_X1 + PLACED ( 42535 54874 ) N ; + - _392_ NAND2_X1 + PLACED ( 40519 54752 ) N ; + - _393_ AOI221_X4 + PLACED ( 38210 45663 ) N ; + - _394_ AOI21_X1 + PLACED ( 41547 55396 ) N ; + - _395_ OAI21_X1 + PLACED ( 33908 46166 ) N ; + - _396_ XOR2_X1 + PLACED ( 45269 46380 ) N ; + - _397_ XNOR2_X1 + PLACED ( 44694 46073 ) N ; + - _398_ NOR2_X1 + PLACED ( 45394 47095 ) N ; + - _399_ AOI221_X1 + PLACED ( 44382 45933 ) N ; + - _401_ OR3_X1 + PLACED ( 41783 37311 ) N ; + - _402_ AOI21_X1 + PLACED ( 45177 46740 ) N ; + - _403_ INV_X1 + PLACED ( 22218 24103 ) N ; + - _404_ OAI211_X1 + PLACED ( 25983 26419 ) N ; + - _405_ AOI21_X1 + PLACED ( 21205 18230 ) N ; + - _406_ AOI21_X1 + PLACED ( 21562 17064 ) N ; + - _407_ AND2_X1 + PLACED ( 26312 16180 ) N ; + - _408_ XNOR2_X1 + PLACED ( 27026 11273 ) N ; + - _409_ XNOR2_X1 + PLACED ( 27241 12066 ) N ; + - _410_ NOR2_X1 + PLACED ( 26300 11467 ) N ; + - _411_ AOI221_X1 + PLACED ( 26199 12122 ) N ; + - _412_ OR3_X1 + PLACED ( 29582 17527 ) N ; + - _413_ AOI21_X1 + PLACED ( 26018 11797 ) N ; + - _414_ OAI21_X1 + PLACED ( 26076 26843 ) N ; + - _415_ AND2_X1 + PLACED ( 20347 21705 ) N ; + - _416_ AND4_X1 + PLACED ( 20861 25500 ) N ; + - _417_ AOI22_X1 + PLACED ( 20709 25550 ) N ; + - _418_ OR2_X1 + PLACED ( 19293 25860 ) N ; + - _419_ NOR2_X1 + PLACED ( 15675 24770 ) N ; + - _420_ AOI221_X4 + PLACED ( 28028 38171 ) N ; + - _421_ OAI21_X1 + PLACED ( 18091 25548 ) N ; + - _422_ AOI21_X1 + PLACED ( 16770 25340 ) N ; + - _423_ AOI21_X1 + PLACED ( 12198 17093 ) N ; + - _424_ NOR2_X1 + PLACED ( 11574 16111 ) N ; + - _425_ NOR2_X1 + PLACED ( 11970 15394 ) N ; + - _426_ XNOR2_X1 + PLACED ( 14183 10976 ) N ; + - _427_ XNOR2_X1 + PLACED ( 12010 11872 ) N ; + - _428_ NOR2_X1 + PLACED ( 9866 11035 ) N ; + - _429_ AOI221_X1 + PLACED ( 8868 12014 ) N ; + - _430_ OR3_X1 + PLACED ( 29568 17256 ) N ; + - _431_ AOI21_X1 + PLACED ( 8960 11614 ) N ; + - _432_ XNOR2_X1 + PLACED ( 11110 18401 ) N ; + - _433_ XNOR2_X1 + PLACED ( 11980 20523 ) N ; + - _434_ AOI221_X1 + PLACED ( 9683 20625 ) N ; + - _435_ OR3_X1 + PLACED ( 29723 18033 ) N ; + - _436_ AOI22_X1 + PLACED ( 9934 18350 ) N ; + - _437_ NAND2_X1 + PLACED ( 36993 22733 ) N ; + - _438_ OAI221_X1 + PLACED ( 39784 24409 ) N ; + - _439_ NAND2_X1 + PLACED ( 14763 37109 ) N ; + - _440_ XOR2_X1 + PLACED ( 12411 45755 ) N ; + - _441_ XNOR2_X1 + PLACED ( 13218 44703 ) N ; + - _442_ AOI221_X1 + PLACED ( 11458 45225 ) N ; + - _443_ NAND2_X1 + PLACED ( 26985 44493 ) N ; + - _444_ AOI22_X1 + PLACED ( 12872 45633 ) N ; + - _445_ OAI21_X1 + PLACED ( 36748 23819 ) N ; + - _446_ NAND2_X1 + PLACED ( 36687 22970 ) N ; + - _447_ XNOR2_X1 + PLACED ( 35649 9476 ) N ; + - _448_ XNOR2_X1 + PLACED ( 35453 10397 ) N ; + - _449_ NOR2_X1 + PLACED ( 35937 10176 ) N ; + - _450_ AOI221_X1 + PLACED ( 34800 11101 ) N ; + - _451_ OR3_X1 + PLACED ( 37999 17685 ) N ; + - _452_ AOI21_X1 + PLACED ( 35255 10301 ) N ; + - _453_ XNOR2_X1 + PLACED ( 34814 17639 ) N ; + - _454_ XNOR2_X1 + PLACED ( 34731 23882 ) N ; + - _455_ AOI221_X1 + PLACED ( 34028 15151 ) N ; + - _456_ OR3_X1 + PLACED ( 36274 17570 ) N ; + - _457_ AOI22_X1 + PLACED ( 36887 15527 ) N ; + - _458_ AOI22_X1 + PLACED ( 45060 27740 ) N ; + - _459_ NOR2_X1 + PLACED ( 47491 25020 ) N ; + - _460_ XOR2_X1 + PLACED ( 49563 13535 ) N ; + - _461_ XNOR2_X1 + PLACED ( 48220 13280 ) N ; + - _462_ NOR2_X1 + PLACED ( 45778 11014 ) N ; + - _463_ AOI221_X1 + PLACED ( 44889 12151 ) N ; + - _464_ OR3_X1 + PLACED ( 42545 17519 ) N ; + - _465_ AOI21_X1 + PLACED ( 45312 11363 ) N ; + - _466_ XNOR2_X1 + PLACED ( 49832 24604 ) N ; + - _467_ XNOR2_X1 + PLACED ( 44128 25516 ) N ; + - _468_ AOI221_X4 + PLACED ( 45320 19160 ) N ; + - _469_ OR3_X1 + PLACED ( 42628 21922 ) N ; + - _470_ AOI22_X1 + PLACED ( 48555 22033 ) N ; + - _471_ XNOR2_X1 + PLACED ( 49794 32328 ) N ; + - _472_ INV_X1 + PLACED ( 56048 33219 ) N ; + - _473_ NOR2_X1 + PLACED ( 53224 36180 ) N ; + - _474_ XNOR2_X1 + PLACED ( 51588 34108 ) N ; + - _475_ AOI221_X4 + PLACED ( 38920 37151 ) N ; + - _476_ NAND3_X1 + PLACED ( 41796 32972 ) N ; + - _477_ AOI22_X1 + PLACED ( 45095 31744 ) N ; + - _478_ XOR2_X1 + PLACED ( 47268 38544 ) N ; + - _479_ AOI221_X4 + PLACED ( 38752 40106 ) N ; + - _480_ NAND3_X1 + PLACED ( 42001 36540 ) N ; + - _481_ AOI22_X1 + PLACED ( 44182 39033 ) N ; + - _482_ NOR2_X1 + PLACED ( 8925 32322 ) N ; + - _483_ NOR2_X1 + PLACED ( 56690 30036 ) N ; + - _484_ AND3_X1 + PLACED ( 55507 31788 ) N ; + - _485_ NAND3_X1 + PLACED ( 35034 34557 ) N ; + - _486_ NOR3_X1 + PLACED ( 27580 16367 ) N ; + - _487_ NAND2_X1 + PLACED ( 29435 17739 ) N ; + - _488_ NOR4_X1 + PLACED ( 33794 43342 ) N ; + - _489_ NAND3_X1 + PLACED ( 34424 45294 ) N ; + - _490_ NOR3_X1 + PLACED ( 33990 35782 ) N ; + - _491_ NAND3_X1 + PLACED ( 33902 33260 ) N ; + - _492_ AOI221_X4 + PLACED ( 8256 32258 ) N ; + - _493_ NAND3_X1 + PLACED ( 7567 33362 ) N ; + - _494_ AOI221_X1 + PLACED ( 8537 33002 ) N ; + - _495_ MUX2_X1 + PLACED ( 44635 54089 ) N ; + - _496_ NOR2_X4 + PLACED ( 35028 43921 ) N ; + - _498_ MUX2_X1 + PLACED ( 46755 54486 ) N ; + - _499_ MUX2_X1 + PLACED ( 16430 46293 ) N ; + - _500_ MUX2_X1 + PLACED ( 18837 47252 ) N ; + - _501_ MUX2_X1 + PLACED ( 21224 54477 ) N ; + - _502_ MUX2_X1 + PLACED ( 21716 55639 ) N ; + - _503_ MUX2_X1 + PLACED ( 51000 46700 ) N ; + - _504_ MUX2_X1 + PLACED ( 52893 46545 ) N ; + - _505_ MUX2_X1 + PLACED ( 24738 5494 ) N ; + - _506_ MUX2_X1 + PLACED ( 26833 6236 ) N ; + - _507_ MUX2_X1 + PLACED ( 13247 25959 ) N ; + - _508_ MUX2_X1 + PLACED ( 14667 29901 ) N ; + - _509_ MUX2_X1 + PLACED ( 16919 8440 ) N ; + - _510_ MUX2_X1 + PLACED ( 18262 6641 ) N ; + - _511_ MUX2_X1 + PLACED ( 9147 5271 ) N ; + - _512_ MUX2_X1 + PLACED ( 11811 5214 ) N ; + - _513_ MUX2_X1 + PLACED ( 9870 52368 ) N ; + - _514_ MUX2_X1 + PLACED ( 13317 55837 ) N ; + - _515_ MUX2_X1 + PLACED ( 11376 50949 ) N ; + - _516_ MUX2_X1 + PLACED ( 13520 52392 ) N ; + - _517_ MUX2_X1 + PLACED ( 39813 5900 ) N ; + - _518_ MUX2_X1 + PLACED ( 41877 5503 ) N ; + - _519_ MUX2_X1 + PLACED ( 51100 15766 ) N ; + - _520_ MUX2_X1 + PLACED ( 54314 16204 ) N ; + - _521_ MUX2_X1 + PLACED ( 51336 8984 ) N ; + - _522_ MUX2_X1 + PLACED ( 53913 8785 ) N ; + - _523_ MUX2_X1 + PLACED ( 52486 22637 ) N ; + - _524_ MUX2_X1 + PLACED ( 54558 21430 ) N ; + - _525_ MUX2_X1 + PLACED ( 50678 32020 ) N ; + - _526_ MUX2_X1 + PLACED ( 54517 31236 ) N ; + - _527_ MUX2_X1 + PLACED ( 52172 39711 ) N ; + - _528_ MUX2_X1 + PLACED ( 54484 39464 ) N ; + - _529_ AOI22_X1 + PLACED ( 13944 37044 ) N ; + - _530_ NOR2_X1 + PLACED ( 13313 37889 ) N ; + - _531_ XNOR2_X1 + PLACED ( 12716 40489 ) N ; + - _532_ XNOR2_X1 + PLACED ( 11095 39606 ) N ; + - _533_ AOI221_X1 + PLACED ( 8026 39752 ) N ; + - _534_ OR3_X1 + PLACED ( 31988 36637 ) N ; + - _535_ AOI22_X1 + PLACED ( 8669 39204 ) N ; + - _536_ DFF_X1 + PLACED ( 1938 43894 ) N ; + - _537_ DFF_X1 + PLACED ( 31692 57478 ) N ; + - _538_ DFF_X1 + PLACED ( 40317 57478 ) N ; + - _539_ DFF_X1 + PLACED ( 46206 49900 ) N ; + - _540_ DFF_X1 + PLACED ( 21391 1322 ) N ; + - _541_ DFF_X1 + PLACED ( 15997 12277 ) N ; + - _542_ DFF_X1 + PLACED ( 4197 10382 ) N ; + - _543_ DFF_X1 + PLACED ( 1890 17674 ) N ; + - _544_ DFF_X1 + PLACED ( 5386 47589 ) N ; + - _545_ DFF_X1 + PLACED ( 33253 4494 ) N ; + - _546_ DFF_X1 + PLACED ( 39331 12814 ) N ; + - _547_ DFF_X1 + PLACED ( 46116 9425 ) N ; + - _548_ DFF_X1 + PLACED ( 53853 25776 ) N ; + - _549_ DFF_X1 + PLACED ( 44441 32570 ) N ; + - _550_ DFF_X1 + PLACED ( 46658 40536 ) N ; + - _551_ DFF_X1 + PLACED ( 4196 24941 ) N ; + - _552_ DFF_X1 + PLACED ( 0 32131 ) N ; + - _553_ DFF_X1 + PLACED ( 47444 54741 ) N ; + - _554_ DFF_X1 + PLACED ( 19359 47630 ) N ; + - _555_ DFF_X1 + PLACED ( 21865 56619 ) N ; + - _556_ DFF_X1 + PLACED ( 53521 46735 ) N ; + - _557_ DFF_X1 + PLACED ( 27459 6271 ) N ; + - _558_ DFF_X1 + PLACED ( 15005 30497 ) N ; + - _559_ DFF_X1 + PLACED ( 18820 6468 ) N ; + - _560_ DFF_X1 + PLACED ( 11575 4595 ) N ; + - _561_ DFF_X1 + PLACED ( 14015 57183 ) N ; + - _562_ DFF_X1 + PLACED ( 14225 52722 ) N ; + - _563_ DFF_X1 + PLACED ( 42627 4998 ) N ; + - _564_ DFF_X1 + PLACED ( 55283 16364 ) N ; + - _565_ DFF_X1 + PLACED ( 54717 8863 ) N ; + - _566_ DFF_X1 + PLACED ( 55480 21454 ) N ; + - _567_ DFF_X1 + PLACED ( 55480 31323 ) N ; + - _568_ DFF_X1 + PLACED ( 55425 39536 ) N ; + - _569_ DFF_X1 + PLACED ( 1247 39775 ) N ; + - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 9469 26250 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL @@ -886,8 +886,8 @@ NETS 357 ; - dpath.b_reg.out_reg\[7\].qi ( _322_ A ) ( _331_ B1 ) ( _514_ B ) ( _531_ A ) ( _561_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[8\].qi ( _293_ B1 ) ( _342_ A ) ( _423_ B1 ) ( _424_ A2 ) ( _432_ A ) ( _512_ B ) ( _560_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[9\].qi ( _290_ A ) ( _426_ A ) ( _486_ A1 ) ( _510_ B ) ( _559_ Q ) + USE SIGNAL ; - - net1 ( max_cap1 Z ) ( _535_ B1 ) ( _420_ A ) ( _399_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _362_ A2 ) - ( _475_ A ) ( _479_ A ) ( _393_ A ) ( _382_ A ) ( _365_ A ) ( _442_ A ) ( _444_ B1 ) ( _533_ A ) + - net1 ( max_cap1 Z ) ( _535_ B1 ) ( _399_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _362_ A2 ) ( _475_ A ) + ( _479_ A ) ( _393_ A ) ( _382_ A ) ( _420_ A ) ( _365_ A ) ( _442_ A ) ( _444_ B1 ) ( _533_ A ) ( _370_ B1 ) ( _276_ A1 ) + USE SIGNAL ; - req_msg\[0\] ( PIN req_msg[0] ) ( _527_ B ) + USE SIGNAL ; - req_msg\[10\] ( PIN req_msg[10] ) ( _507_ B ) + USE SIGNAL ; diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index b41c8879a2..9df8d6f3f7 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -155,6 +155,4 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1012] Total timing-driven delta area: -65.17 (-11.78%) [INFO GPL-1013] Final placement area: 488.11 (-11.78%) worst slack max 1.40 -Differences found at line 63. - - _276_ NOR2_X4 + PLACED ( 9098 31400 ) N ; - - _276_ NOR2_X4 + PLACED ( 9573 29954 ) N ; +No differences found. From a3cfc29a3e2def408d1d8f8a62ba24d2196e089f Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 18:57:44 +0000 Subject: [PATCH 33/41] gpl: clang-tidy suggestion Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 6cd93898b4..d5453694ba 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -3402,7 +3402,7 @@ void NesterovBase::restoreRemovedFillers() "Restoring {} previously removed fillers.", removed_fillers_.size()); - if (removed_fillers_.size() == 0) { + if (removed_fillers_.empty()) { return; } From 66e78b21eb6eba2819706da677218d4d8eaff386 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 19:00:07 +0000 Subject: [PATCH 34/41] test: update after gpl change Signed-off-by: Augusto Berndt --- src/odb/test/replace_hier_mod1.ok | 48 +++++++++++++++---------------- src/rsz/test/buffer_ports8.ok | 8 +++--- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/odb/test/replace_hier_mod1.ok b/src/odb/test/replace_hier_mod1.ok index 6693db0849..9c211994d1 100644 --- a/src/odb/test/replace_hier_mod1.ok +++ b/src/odb/test/replace_hier_mod1.ok @@ -146,15 +146,15 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 [INFO GPL-1009] - For 50% usage of free space: 0.0025 -[INFO GPL-0083] Original area (um^2): 59.85 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 59.85 (+0.00%) +[INFO GPL-1010] Original area (um^2): 59.85 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 59.85 (+0.00%) [INFO GPL-0133] Unlocked instances -[INFO GPL-0083] Original area (um^2): 59.85 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 59.85 (+0.00%) +[INFO GPL-1010] Original area (um^2): 59.85 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 59.85 (+0.00%) Placement Analysis --------------------------------- total displacement 52.6 u @@ -276,15 +276,15 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 [INFO GPL-1009] - For 50% usage of free space: 0.0025 -[INFO GPL-0083] Original area (um^2): 60.38 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 60.38 (+0.00%) +[INFO GPL-1010] Original area (um^2): 60.38 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 60.38 (+0.00%) [INFO GPL-0133] Unlocked instances -[INFO GPL-0083] Original area (um^2): 60.38 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 60.38 (+0.00%) +[INFO GPL-1010] Original area (um^2): 60.38 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 60.38 (+0.00%) Placement Analysis --------------------------------- total displacement 39.4 u @@ -406,15 +406,15 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0014 [INFO GPL-1008] - For 80% usage of free space: 0.0016 [INFO GPL-1009] - For 50% usage of free space: 0.0025 -[INFO GPL-0083] Original area (um^2): 59.85 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 59.85 (+0.00%) +[INFO GPL-1010] Original area (um^2): 59.85 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 59.85 (+0.00%) [INFO GPL-0133] Unlocked instances -[INFO GPL-0083] Original area (um^2): 59.85 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 59.85 (+0.00%) +[INFO GPL-1010] Original area (um^2): 59.85 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 59.85 (+0.00%) Placement Analysis --------------------------------- total displacement 34.4 u diff --git a/src/rsz/test/buffer_ports8.ok b/src/rsz/test/buffer_ports8.ok index 344110fa88..682a2b028d 100644 --- a/src/rsz/test/buffer_ports8.ok +++ b/src/rsz/test/buffer_ports8.ok @@ -46,10 +46,10 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0008 [INFO GPL-1008] - For 80% usage of free space: 0.0009 [INFO GPL-1009] - For 50% usage of free space: 0.0014 -[INFO GPL-0083] Original area (um^2): 4.52 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 4.52 (+0.00%) +[INFO GPL-1010] Original area (um^2): 4.52 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 4.52 (+0.00%) [INFO RSZ-0027] Inserted 2 input buffers. [INFO RSZ-0028] Inserted 2 output buffers. No differences found. From dd1ab92352d6d78e2d28f9fb8fa2d4d8a348663e Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 19:02:26 +0000 Subject: [PATCH 35/41] test: update after gpl change Signed-off-by: Augusto Berndt --- test/upf_aes.ok | 8 ++++---- test/upf_test.ok | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/upf_aes.ok b/test/upf_aes.ok index 610849aec4..aa2e6184d6 100644 --- a/test/upf_aes.ok +++ b/test/upf_aes.ok @@ -245,10 +245,10 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0943 [INFO GPL-1008] - For 80% usage of free space: 0.1061 [INFO GPL-1009] - For 50% usage of free space: 0.1697 -[INFO GPL-0083] Original area (um^2): 368817.48 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 368817.48 (+0.00%) +[INFO GPL-1010] Original area (um^2): 368817.48 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 368817.48 (+0.00%) Placement Analysis --------------------------------- total displacement 130979.1 u diff --git a/test/upf_test.ok b/test/upf_test.ok index 619d1d8506..88a9609fd4 100644 --- a/test/upf_test.ok +++ b/test/upf_test.ok @@ -283,10 +283,10 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1007] - For 90% usage of free space: 0.0262 [INFO GPL-1008] - For 80% usage of free space: 0.0295 [INFO GPL-1009] - For 50% usage of free space: 0.0472 -[INFO GPL-0083] Original area (um^2): 158.90 -[INFO GPL-0085] Total routability artificial inflation: 0.00 (+0.00%) -[INFO GPL-0086] Total timing-driven delta area: 0.00 (+0.00%) -[INFO GPL-0084] Final placement area: 158.90 (+0.00%) +[INFO GPL-1010] Original area (um^2): 158.90 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 158.90 (+0.00%) Placement Analysis --------------------------------- total displacement 79.5 u From ed960d7f9fc6785bb923adb426cd763c8fa51f73 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 19:12:48 +0000 Subject: [PATCH 36/41] gpl: update test Signed-off-by: Augusto Berndt --- src/gpl/test/simple01-td-tune.defok | 584 ++++++++++++++-------------- src/gpl/test/simple01-td-tune.ok | 4 +- 2 files changed, 293 insertions(+), 295 deletions(-) diff --git a/src/gpl/test/simple01-td-tune.defok b/src/gpl/test/simple01-td-tune.defok index ecbb75cbee..d3b7dc0cbe 100644 --- a/src/gpl/test/simple01-td-tune.defok +++ b/src/gpl/test/simple01-td-tune.defok @@ -60,293 +60,293 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 287 ; - - _276_ NOR2_X4 + PLACED ( 5661 28030 ) N ; - - _278_ INV_X1 + PLACED ( 7954 38529 ) N ; - - _279_ NOR2_X1 + PLACED ( 18489 37236 ) N ; - - _280_ INV_X1 + PLACED ( 20314 34873 ) N ; - - _281_ INV_X1 + PLACED ( 38623 50997 ) N ; - - _282_ NOR2_X1 + PLACED ( 37327 52112 ) N ; - - _283_ INV_X1 + PLACED ( 38501 41460 ) N ; - - _284_ NOR2_X1 + PLACED ( 37814 48540 ) N ; - - _285_ NOR2_X1 + PLACED ( 36227 50252 ) N ; - - _286_ INV_X1 + PLACED ( 27023 47359 ) N ; - - _287_ NOR2_X1 + PLACED ( 26191 49150 ) N ; - - _288_ INV_X1 + PLACED ( 26554 48954 ) N ; - - _289_ AND2_X1 + PLACED ( 26046 33447 ) N ; - - _290_ INV_X1 + PLACED ( 16386 14826 ) N ; - - _291_ NOR2_X1 + PLACED ( 14760 17617 ) N ; - - _292_ INV_X2 + PLACED ( 6828 19475 ) N ; - - _293_ AOI21_X2 + PLACED ( 13687 20649 ) N ; - - _294_ INV_X1 + PLACED ( 25923 14484 ) N ; - - _295_ NOR2_X1 + PLACED ( 25052 16116 ) N ; - - _296_ INV_X1 + PLACED ( 20461 15301 ) N ; - - _297_ NOR2_X2 + PLACED ( 20863 15220 ) N ; - - _298_ NOR2_X1 + PLACED ( 24858 18842 ) N ; - - _299_ AND2_X2 + PLACED ( 29140 30234 ) N ; - - _300_ INV_X1 + PLACED ( 46111 17184 ) N ; - - _301_ NOR2_X1 + PLACED ( 46181 18006 ) N ; - - _302_ INV_X1 + PLACED ( 46750 23560 ) N ; - - _303_ NOR3_X1 + PLACED ( 48100 21644 ) N ; - - _304_ AOI21_X1 + PLACED ( 46925 18490 ) N ; - - _305_ INV_X1 + PLACED ( 43098 19886 ) N ; - - _306_ INV_X1 + PLACED ( 42987 32272 ) N ; - - _307_ AND2_X1 + PLACED ( 44510 30703 ) N ; - - _308_ INV_X1 + PLACED ( 47090 30839 ) N ; - - _309_ INV_X1 + PLACED ( 40164 38547 ) N ; - - _310_ OAI211_X1 + PLACED ( 42321 31306 ) N ; - - _311_ NAND2_X1 + PLACED ( 42843 28084 ) N ; - - _312_ INV_X1 + PLACED ( 50210 24268 ) N ; - - _313_ NOR2_X1 + PLACED ( 46220 25178 ) N ; - - _314_ NOR3_X1 + PLACED ( 41604 24848 ) N ; - - _315_ NOR2_X2 + PLACED ( 39964 23308 ) N ; - - _316_ INV_X1 + PLACED ( 36196 18236 ) N ; - - _317_ NOR2_X1 + PLACED ( 34965 18653 ) N ; - - _318_ INV_X1 + PLACED ( 31495 18087 ) N ; - - _319_ NOR2_X1 + PLACED ( 33995 22823 ) N ; - - _320_ INV_X2 + PLACED ( 17580 49752 ) N ; - - _321_ NAND2_X1 + PLACED ( 18552 43538 ) N ; - - _322_ INV_X1 + PLACED ( 21913 43278 ) N ; - - _323_ OAI21_X1 + PLACED ( 18672 42937 ) N ; - - _324_ NOR4_X2 + PLACED ( 30406 23275 ) N ; - - _325_ NOR2_X1 + PLACED ( 19014 43967 ) N ; - - _326_ OAI21_X1 + PLACED ( 20562 43162 ) N ; - - _327_ INV_X1 + PLACED ( 13154 43704 ) N ; - - _328_ INV_X1 + PLACED ( 31319 15619 ) N ; - - _329_ NOR3_X1 + PLACED ( 34392 22491 ) N ; - - _330_ AOI21_X1 + PLACED ( 33142 23903 ) N ; - - _331_ OAI221_X4 + PLACED ( 21442 42574 ) N ; - - _332_ OAI211_X1 + PLACED ( 27557 25692 ) N ; - - _333_ AND2_X1 + PLACED ( 17537 37603 ) N ; - - _334_ INV_X2 + PLACED ( 19378 36466 ) N ; - - _335_ NAND2_X1 + PLACED ( 37305 52285 ) N ; - - _336_ NAND2_X1 + PLACED ( 37469 47192 ) N ; - - _337_ NAND2_X1 + PLACED ( 35186 49311 ) N ; - - _338_ INV_X1 + PLACED ( 36672 51364 ) N ; - - _339_ NAND3_X1 + PLACED ( 28220 49363 ) N ; - - _340_ NAND2_X1 + PLACED ( 26220 49097 ) N ; - - _341_ NAND2_X1 + PLACED ( 26500 48818 ) N ; - - _342_ INV_X1 + PLACED ( 15145 17188 ) N ; - - _343_ OAI211_X1 + PLACED ( 15361 16768 ) N ; - - _344_ NAND2_X1 + PLACED ( 16665 16369 ) N ; - - _345_ AOI211_X1 + PLACED ( 21476 17951 ) N ; - - _346_ NAND2_X1 + PLACED ( 24816 16181 ) N ; - - _347_ NAND2_X1 + PLACED ( 20208 17082 ) N ; - - _348_ OAI21_X1 + PLACED ( 23113 18253 ) N ; - - _349_ OR2_X2 + PLACED ( 23291 26047 ) N ; - - _350_ AOI21_X1 + PLACED ( 24510 34160 ) N ; - - _351_ AND4_X1 + PLACED ( 20455 34186 ) N ; - - _352_ AOI22_X1 + PLACED ( 20464 34326 ) N ; - - _353_ OR2_X1 + PLACED ( 20359 34867 ) N ; - - _355_ INV_X8 + PLACED ( 7286 27053 ) N ; - - _357_ AND3_X2 + PLACED ( 24907 33231 ) N ; - - _358_ OAI211_X1 + PLACED ( 25223 25408 ) N ; - - _359_ OAI21_X2 + PLACED ( 24043 34972 ) N ; - - _360_ OAI21_X2 + PLACED ( 23784 25817 ) N ; - - _361_ NAND3_X4 + PLACED ( 25887 26380 ) N ; - - _362_ NOR2_X4 + PLACED ( 34840 29416 ) N ; - - _363_ INV_X4 + PLACED ( 35908 30950 ) N ; - - _364_ NOR2_X4 + PLACED ( 34736 35825 ) N ; - - _365_ AOI221_X4 + PLACED ( 26735 39627 ) N ; - - _366_ AND2_X4 + PLACED ( 35585 29834 ) N ; - - _368_ OAI21_X1 + PLACED ( 19951 35573 ) N ; - - _370_ AOI22_X1 + PLACED ( 18320 38658 ) N ; - - _371_ NOR2_X2 + PLACED ( 29541 24525 ) N ; - - _372_ NAND3_X1 + PLACED ( 28982 31765 ) N ; - - _373_ OR2_X1 + PLACED ( 29655 46144 ) N ; - - _374_ AOI22_X1 + PLACED ( 30022 49501 ) N ; - - _375_ NAND2_X1 + PLACED ( 30142 49868 ) N ; - - _376_ XOR2_X1 + PLACED ( 27775 54824 ) N ; - - _377_ XNOR2_X1 + PLACED ( 29361 53698 ) N ; - - _378_ INV_X4 + PLACED ( 10534 25220 ) N ; - - _380_ NOR2_X1 + PLACED ( 32527 55264 ) N ; - - _381_ NAND2_X1 + PLACED ( 30986 54423 ) N ; - - _382_ AOI221_X4 + PLACED ( 27565 45179 ) N ; - - _383_ AOI21_X1 + PLACED ( 31645 55567 ) N ; - - _384_ INV_X1 + PLACED ( 33721 45482 ) N ; - - _385_ INV_X1 + PLACED ( 32374 42322 ) N ; - - _386_ OAI211_X1 + PLACED ( 34499 46102 ) N ; - - _387_ INV_X1 + PLACED ( 37267 50863 ) N ; - - _388_ AND4_X1 + PLACED ( 36469 51838 ) N ; - - _389_ AOI22_X1 + PLACED ( 36273 51907 ) N ; - - _390_ NOR2_X1 + PLACED ( 38401 52834 ) N ; - - _391_ NOR2_X1 + PLACED ( 41739 54849 ) N ; - - _392_ NAND2_X1 + PLACED ( 39981 53987 ) N ; - - _393_ AOI221_X4 + PLACED ( 37700 45345 ) N ; - - _394_ AOI21_X1 + PLACED ( 40756 55061 ) N ; - - _395_ OAI21_X1 + PLACED ( 34543 45095 ) N ; - - _396_ XOR2_X1 + PLACED ( 43917 46065 ) N ; - - _397_ XNOR2_X1 + PLACED ( 43706 45941 ) N ; - - _398_ NOR2_X1 + PLACED ( 45508 48489 ) N ; - - _399_ AOI221_X1 + PLACED ( 43824 47188 ) N ; - - _401_ OR3_X1 + PLACED ( 40232 37377 ) N ; - - _402_ AOI21_X1 + PLACED ( 44449 48304 ) N ; - - _403_ INV_X1 + PLACED ( 23070 19817 ) N ; - - _404_ OAI211_X1 + PLACED ( 27574 23148 ) N ; - - _405_ AOI21_X1 + PLACED ( 20778 16108 ) N ; - - _406_ AOI21_X1 + PLACED ( 21238 13644 ) N ; - - _407_ AND2_X1 + PLACED ( 26776 11869 ) N ; - - _408_ XNOR2_X1 + PLACED ( 26521 9586 ) N ; - - _409_ XNOR2_X1 + PLACED ( 27605 10403 ) N ; - - _410_ NOR2_X1 + PLACED ( 29872 11602 ) N ; - - _411_ AOI221_X1 + PLACED ( 28275 11685 ) N ; - - _412_ OR3_X1 + PLACED ( 28595 16799 ) N ; - - _413_ AOI21_X1 + PLACED ( 29095 11317 ) N ; - - _414_ OAI21_X1 + PLACED ( 28105 23563 ) N ; - - _415_ AND2_X1 + PLACED ( 19128 18405 ) N ; - - _416_ AND4_X1 + PLACED ( 19883 21559 ) N ; - - _417_ AOI22_X1 + PLACED ( 19977 21657 ) N ; - - _418_ OR2_X1 + PLACED ( 19958 22401 ) N ; - - _419_ NOR2_X1 + PLACED ( 19203 25117 ) N ; - - _420_ AOI221_X4 + PLACED ( 27144 33872 ) N ; - - _421_ OAI21_X1 + PLACED ( 19470 23020 ) N ; - - _422_ AOI21_X1 + PLACED ( 19111 25103 ) N ; - - _423_ AOI21_X1 + PLACED ( 9739 20068 ) N ; - - _424_ NOR2_X1 + PLACED ( 8891 18953 ) N ; - - _425_ NOR2_X1 + PLACED ( 9684 18460 ) N ; - - _426_ XNOR2_X1 + PLACED ( 13034 13584 ) N ; - - _427_ XNOR2_X1 + PLACED ( 10497 14082 ) N ; - - _428_ NOR2_X1 + PLACED ( 10501 13442 ) N ; - - _429_ AOI221_X1 + PLACED ( 8754 13771 ) N ; - - _430_ OR3_X1 + PLACED ( 28499 16960 ) N ; - - _431_ AOI21_X1 + PLACED ( 9505 14105 ) N ; - - _432_ XNOR2_X1 + PLACED ( 7710 20542 ) N ; - - _433_ XNOR2_X1 + PLACED ( 9253 21612 ) N ; - - _434_ AOI221_X1 + PLACED ( 8176 21380 ) N ; - - _435_ OR3_X1 + PLACED ( 28737 18193 ) N ; - - _436_ AOI22_X1 + PLACED ( 8488 19733 ) N ; - - _437_ NAND2_X1 + PLACED ( 37129 21610 ) N ; - - _438_ OAI221_X1 + PLACED ( 38909 23838 ) N ; - - _439_ NAND2_X1 + PLACED ( 21366 42753 ) N ; - - _440_ XOR2_X1 + PLACED ( 17512 50197 ) N ; - - _441_ XNOR2_X1 + PLACED ( 20184 48891 ) N ; - - _442_ AOI221_X1 + PLACED ( 19188 48600 ) N ; - - _443_ NAND2_X1 + PLACED ( 26811 44722 ) N ; - - _444_ AOI22_X1 + PLACED ( 20113 48823 ) N ; - - _445_ OAI21_X1 + PLACED ( 36361 22265 ) N ; - - _446_ NAND2_X1 + PLACED ( 36285 21533 ) N ; - - _447_ XNOR2_X1 + PLACED ( 34600 9640 ) N ; - - _448_ XNOR2_X1 + PLACED ( 34997 11106 ) N ; - - _449_ NOR2_X1 + PLACED ( 35379 12440 ) N ; - - _450_ AOI221_X1 + PLACED ( 34536 12238 ) N ; - - _451_ OR3_X1 + PLACED ( 33128 17239 ) N ; - - _452_ AOI21_X1 + PLACED ( 34320 12431 ) N ; - - _453_ XNOR2_X1 + PLACED ( 40814 17873 ) N ; - - _454_ XNOR2_X1 + PLACED ( 39386 22156 ) N ; - - _455_ AOI221_X1 + PLACED ( 38772 15679 ) N ; - - _456_ OR3_X1 + PLACED ( 37573 17332 ) N ; - - _457_ AOI22_X1 + PLACED ( 39176 15447 ) N ; - - _458_ AOI22_X1 + PLACED ( 44401 28914 ) N ; - - _459_ NOR2_X1 + PLACED ( 46361 25703 ) N ; - - _460_ XOR2_X1 + PLACED ( 48845 14933 ) N ; - - _461_ XNOR2_X1 + PLACED ( 47358 14910 ) N ; - - _462_ NOR2_X1 + PLACED ( 46739 12167 ) N ; - - _463_ AOI221_X1 + PLACED ( 45598 13633 ) N ; - - _464_ OR3_X1 + PLACED ( 43457 17128 ) N ; - - _465_ AOI21_X1 + PLACED ( 46079 12689 ) N ; - - _466_ XNOR2_X1 + PLACED ( 50630 24835 ) N ; - - _467_ XNOR2_X1 + PLACED ( 43269 25788 ) N ; - - _468_ AOI221_X4 + PLACED ( 45471 23207 ) N ; - - _469_ OR3_X1 + PLACED ( 43175 24566 ) N ; - - _470_ AOI22_X1 + PLACED ( 48774 24316 ) N ; - - _471_ XNOR2_X1 + PLACED ( 50044 32370 ) N ; - - _472_ INV_X1 + PLACED ( 53633 37190 ) N ; - - _473_ NOR2_X1 + PLACED ( 51528 38394 ) N ; - - _474_ XNOR2_X1 + PLACED ( 50852 35846 ) N ; - - _475_ AOI221_X4 + PLACED ( 38540 33617 ) N ; - - _476_ NAND3_X1 + PLACED ( 42518 34481 ) N ; - - _477_ AOI22_X1 + PLACED ( 45165 32393 ) N ; - - _478_ XOR2_X1 + PLACED ( 46344 39183 ) N ; - - _479_ AOI221_X4 + PLACED ( 38518 40163 ) N ; - - _480_ NAND3_X1 + PLACED ( 42685 36987 ) N ; - - _481_ AOI22_X1 + PLACED ( 43955 38836 ) N ; - - _482_ NOR2_X1 + PLACED ( 10141 32030 ) N ; - - _483_ NOR2_X1 + PLACED ( 54792 32323 ) N ; - - _484_ AND3_X1 + PLACED ( 53461 35277 ) N ; - - _485_ NAND3_X1 + PLACED ( 34663 36361 ) N ; - - _486_ NOR3_X1 + PLACED ( 25739 14858 ) N ; - - _487_ NAND2_X1 + PLACED ( 29065 17169 ) N ; - - _488_ NOR4_X1 + PLACED ( 32413 38411 ) N ; - - _489_ NAND3_X1 + PLACED ( 32187 42140 ) N ; - - _490_ NOR3_X1 + PLACED ( 31738 40758 ) N ; - - _491_ NAND3_X1 + PLACED ( 32827 33328 ) N ; - - _492_ AOI221_X4 + PLACED ( 10309 33103 ) N ; - - _493_ NAND3_X1 + PLACED ( 10504 31822 ) N ; - - _494_ AOI221_X1 + PLACED ( 10969 32471 ) N ; - - _495_ MUX2_X1 + PLACED ( 46201 53657 ) N ; - - _496_ NOR2_X4 + PLACED ( 35036 40682 ) N ; - - _498_ MUX2_X1 + PLACED ( 50492 52617 ) N ; - - _499_ MUX2_X1 + PLACED ( 6741 38466 ) N ; - - _500_ MUX2_X1 + PLACED ( 9559 38128 ) N ; - - _501_ MUX2_X1 + PLACED ( 21596 55742 ) N ; - - _502_ MUX2_X1 + PLACED ( 22822 54905 ) N ; - - _503_ MUX2_X1 + PLACED ( 50079 46410 ) N ; - - _504_ MUX2_X1 + PLACED ( 52629 46172 ) N ; - - _505_ MUX2_X1 + PLACED ( 22637 4378 ) N ; - - _506_ MUX2_X1 + PLACED ( 21953 5332 ) N ; - - _507_ MUX2_X1 + PLACED ( 14203 25452 ) N ; - - _508_ MUX2_X1 + PLACED ( 14555 28013 ) N ; - - _509_ MUX2_X1 + PLACED ( 11594 6378 ) N ; - - _510_ MUX2_X1 + PLACED ( 13875 5938 ) N ; - - _511_ MUX2_X1 + PLACED ( 5403 7929 ) N ; - - _512_ MUX2_X1 + PLACED ( 7824 7165 ) N ; - - _513_ MUX2_X1 + PLACED ( 6106 44910 ) N ; - - _514_ MUX2_X1 + PLACED ( 7946 45903 ) N ; - - _515_ MUX2_X1 + PLACED ( 11450 53032 ) N ; - - _516_ MUX2_X1 + PLACED ( 13876 53566 ) N ; - - _517_ MUX2_X1 + PLACED ( 36700 5071 ) N ; - - _518_ MUX2_X1 + PLACED ( 38733 5476 ) N ; - - _519_ MUX2_X1 + PLACED ( 51034 16697 ) N ; - - _520_ MUX2_X1 + PLACED ( 53645 16821 ) N ; - - _521_ MUX2_X1 + PLACED ( 49755 8893 ) N ; - - _522_ MUX2_X1 + PLACED ( 51799 9309 ) N ; - - _523_ MUX2_X1 + PLACED ( 52709 23354 ) N ; - - _524_ MUX2_X1 + PLACED ( 54540 23308 ) N ; - - _525_ MUX2_X1 + PLACED ( 51204 32160 ) N ; - - _526_ MUX2_X1 + PLACED ( 54742 32294 ) N ; - - _527_ MUX2_X1 + PLACED ( 51177 40577 ) N ; - - _528_ MUX2_X1 + PLACED ( 54362 40607 ) N ; - - _529_ AOI22_X1 + PLACED ( 19845 42991 ) N ; - - _530_ NOR2_X1 + PLACED ( 18958 43716 ) N ; - - _531_ XNOR2_X1 + PLACED ( 12394 44413 ) N ; - - _532_ XNOR2_X1 + PLACED ( 13679 44817 ) N ; - - _533_ AOI221_X1 + PLACED ( 11433 45388 ) N ; - - _534_ OR3_X1 + PLACED ( 28802 37004 ) N ; - - _535_ AOI22_X1 + PLACED ( 12836 44027 ) N ; - - _536_ DFF_X1 + PLACED ( 404 39003 ) N ; - - _537_ DFF_X1 + PLACED ( 31114 57478 ) N ; - - _538_ DFF_X1 + PLACED ( 39099 57454 ) N ; - - _539_ DFF_X1 + PLACED ( 44387 50480 ) N ; - - _540_ DFF_X1 + PLACED ( 26622 2996 ) N ; - - _541_ DFF_X1 + PLACED ( 16134 10803 ) N ; - - _542_ DFF_X1 + PLACED ( 3094 13777 ) N ; - - _543_ DFF_X1 + PLACED ( 0 19035 ) N ; - - _544_ DFF_X1 + PLACED ( 5224 52684 ) N ; - - _545_ DFF_X1 + PLACED ( 31718 4690 ) N ; - - _546_ DFF_X1 + PLACED ( 39840 11410 ) N ; - - _547_ DFF_X1 + PLACED ( 45270 8018 ) N ; - - _548_ DFF_X1 + PLACED ( 54491 26994 ) N ; - - _549_ DFF_X1 + PLACED ( 45142 32283 ) N ; - - _550_ DFF_X1 + PLACED ( 45069 41063 ) N ; - - _551_ DFF_X1 + PLACED ( 59 34835 ) N ; - - _552_ DFF_X1 + PLACED ( 1292 31322 ) N ; - - _553_ DFF_X1 + PLACED ( 51245 52653 ) N ; - - _554_ DFF_X1 + PLACED ( 10163 38164 ) N ; - - _555_ DFF_X1 + PLACED ( 23224 56003 ) N ; - - _556_ DFF_X1 + PLACED ( 53427 46315 ) N ; - - _557_ DFF_X1 + PLACED ( 22103 5026 ) N ; - - _558_ DFF_X1 + PLACED ( 14841 28564 ) N ; - - _559_ DFF_X1 + PLACED ( 14601 5775 ) N ; - - _560_ DFF_X1 + PLACED ( 8046 7177 ) N ; - - _561_ DFF_X1 + PLACED ( 7974 46300 ) N ; - - _562_ DFF_X1 + PLACED ( 14495 54112 ) N ; - - _563_ DFF_X1 + PLACED ( 39379 5211 ) N ; - - _564_ DFF_X1 + PLACED ( 54490 16952 ) N ; - - _565_ DFF_X1 + PLACED ( 52439 9484 ) N ; - - _566_ DFF_X1 + PLACED ( 55480 23494 ) N ; - - _567_ DFF_X1 + PLACED ( 55480 32527 ) N ; - - _568_ DFF_X1 + PLACED ( 55406 40702 ) N ; - - _569_ DFF_X1 + PLACED ( 1009 44641 ) N ; - - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 8306 27687 ) N ; + - _276_ NOR2_X4 + PLACED ( 8992 31218 ) N ; + - _278_ INV_X1 + PLACED ( 15328 38130 ) N ; + - _279_ NOR2_X1 + PLACED ( 17931 36954 ) N ; + - _280_ INV_X1 + PLACED ( 20221 34729 ) N ; + - _281_ INV_X1 + PLACED ( 38783 51464 ) N ; + - _282_ NOR2_X1 + PLACED ( 37734 52342 ) N ; + - _283_ INV_X1 + PLACED ( 39859 41363 ) N ; + - _284_ NOR2_X1 + PLACED ( 38857 48320 ) N ; + - _285_ NOR2_X1 + PLACED ( 36842 50361 ) N ; + - _286_ INV_X1 + PLACED ( 27020 47627 ) N ; + - _287_ NOR2_X1 + PLACED ( 26286 49112 ) N ; + - _288_ INV_X1 + PLACED ( 26736 48924 ) N ; + - _289_ AND2_X1 + PLACED ( 26565 32924 ) N ; + - _290_ INV_X1 + PLACED ( 15971 15003 ) N ; + - _291_ NOR2_X1 + PLACED ( 14295 17669 ) N ; + - _292_ INV_X2 + PLACED ( 6986 19538 ) N ; + - _293_ AOI21_X2 + PLACED ( 13051 20857 ) N ; + - _294_ INV_X1 + PLACED ( 25923 14664 ) N ; + - _295_ NOR2_X1 + PLACED ( 24916 16245 ) N ; + - _296_ INV_X1 + PLACED ( 20389 15718 ) N ; + - _297_ NOR2_X2 + PLACED ( 20814 15746 ) N ; + - _298_ NOR2_X1 + PLACED ( 24687 19130 ) N ; + - _299_ AND2_X2 + PLACED ( 29214 30198 ) N ; + - _300_ INV_X1 + PLACED ( 45737 17443 ) N ; + - _301_ NOR2_X1 + PLACED ( 45709 18362 ) N ; + - _302_ INV_X1 + PLACED ( 46403 23253 ) N ; + - _303_ NOR3_X1 + PLACED ( 47654 21162 ) N ; + - _304_ AOI21_X1 + PLACED ( 46519 18797 ) N ; + - _305_ INV_X1 + PLACED ( 43200 20218 ) N ; + - _306_ INV_X1 + PLACED ( 42796 32296 ) N ; + - _307_ AND2_X1 + PLACED ( 44515 30630 ) N ; + - _308_ INV_X1 + PLACED ( 47154 30671 ) N ; + - _309_ INV_X1 + PLACED ( 39773 38786 ) N ; + - _310_ OAI211_X1 + PLACED ( 42259 31094 ) N ; + - _311_ NAND2_X1 + PLACED ( 42780 28001 ) N ; + - _312_ INV_X1 + PLACED ( 48789 23401 ) N ; + - _313_ NOR2_X1 + PLACED ( 45993 24195 ) N ; + - _314_ NOR3_X1 + PLACED ( 41714 24689 ) N ; + - _315_ NOR2_X2 + PLACED ( 39907 23465 ) N ; + - _316_ INV_X1 + PLACED ( 36040 18131 ) N ; + - _317_ NOR2_X1 + PLACED ( 34856 18948 ) N ; + - _318_ INV_X1 + PLACED ( 31731 18154 ) N ; + - _319_ NOR2_X1 + PLACED ( 34224 23724 ) N ; + - _320_ INV_X2 + PLACED ( 17793 49790 ) N ; + - _321_ NAND2_X1 + PLACED ( 18507 43598 ) N ; + - _322_ INV_X1 + PLACED ( 21577 42654 ) N ; + - _323_ OAI21_X1 + PLACED ( 18534 42574 ) N ; + - _324_ NOR4_X2 + PLACED ( 30322 23559 ) N ; + - _325_ NOR2_X1 + PLACED ( 18966 44469 ) N ; + - _326_ OAI21_X1 + PLACED ( 20352 42877 ) N ; + - _327_ INV_X1 + PLACED ( 12687 43030 ) N ; + - _328_ INV_X1 + PLACED ( 31250 15712 ) N ; + - _329_ NOR3_X1 + PLACED ( 34492 23333 ) N ; + - _330_ AOI21_X1 + PLACED ( 33327 24673 ) N ; + - _331_ OAI221_X4 + PLACED ( 21242 42088 ) N ; + - _332_ OAI211_X1 + PLACED ( 27822 25785 ) N ; + - _333_ AND2_X1 + PLACED ( 17548 37382 ) N ; + - _334_ INV_X2 + PLACED ( 19406 36390 ) N ; + - _335_ NAND2_X1 + PLACED ( 37678 52495 ) N ; + - _336_ NAND2_X1 + PLACED ( 38520 47164 ) N ; + - _337_ NAND2_X1 + PLACED ( 35499 49389 ) N ; + - _338_ INV_X1 + PLACED ( 37146 51538 ) N ; + - _339_ NAND3_X1 + PLACED ( 28509 49423 ) N ; + - _340_ NAND2_X1 + PLACED ( 26423 49073 ) N ; + - _341_ NAND2_X1 + PLACED ( 26794 48816 ) N ; + - _342_ INV_X1 + PLACED ( 14814 17217 ) N ; + - _343_ OAI211_X1 + PLACED ( 15018 16904 ) N ; + - _344_ NAND2_X1 + PLACED ( 16201 16614 ) N ; + - _345_ AOI211_X1 + PLACED ( 21557 18325 ) N ; + - _346_ NAND2_X1 + PLACED ( 24697 16278 ) N ; + - _347_ NAND2_X1 + PLACED ( 20068 17498 ) N ; + - _348_ OAI21_X1 + PLACED ( 23091 18501 ) N ; + - _349_ OR2_X2 + PLACED ( 23390 25487 ) N ; + - _350_ AOI21_X1 + PLACED ( 24824 33739 ) N ; + - _351_ AND4_X1 + PLACED ( 20523 34161 ) N ; + - _352_ AOI22_X1 + PLACED ( 20511 34292 ) N ; + - _353_ OR2_X1 + PLACED ( 20360 34929 ) N ; + - _355_ INV_X8 + PLACED ( 4392 31640 ) N ; + - _357_ AND3_X2 + PLACED ( 25384 32790 ) N ; + - _358_ OAI211_X1 + PLACED ( 25250 25405 ) N ; + - _359_ OAI21_X2 + PLACED ( 24580 34449 ) N ; + - _360_ OAI21_X2 + PLACED ( 23857 25465 ) N ; + - _361_ NAND3_X4 + PLACED ( 25840 26312 ) N ; + - _362_ NOR2_X4 + PLACED ( 34534 29956 ) N ; + - _363_ INV_X4 + PLACED ( 35879 31483 ) N ; + - _364_ NOR2_X4 + PLACED ( 34557 36119 ) N ; + - _365_ AOI221_X4 + PLACED ( 26489 39440 ) N ; + - _366_ AND2_X4 + PLACED ( 36823 30312 ) N ; + - _368_ OAI21_X1 + PLACED ( 19847 35459 ) N ; + - _370_ AOI22_X1 + PLACED ( 17951 37916 ) N ; + - _371_ NOR2_X2 + PLACED ( 29542 24615 ) N ; + - _372_ NAND3_X1 + PLACED ( 29326 31695 ) N ; + - _373_ OR2_X1 + PLACED ( 30100 46082 ) N ; + - _374_ AOI22_X1 + PLACED ( 30465 49620 ) N ; + - _375_ NAND2_X1 + PLACED ( 30541 50008 ) N ; + - _376_ XOR2_X1 + PLACED ( 27908 54822 ) N ; + - _377_ XNOR2_X1 + PLACED ( 29497 53606 ) N ; + - _378_ INV_X4 + PLACED ( 8329 25427 ) N ; + - _380_ NOR2_X1 + PLACED ( 32468 55095 ) N ; + - _381_ NAND2_X1 + PLACED ( 31011 54271 ) N ; + - _382_ AOI221_X4 + PLACED ( 27254 45739 ) N ; + - _383_ AOI21_X1 + PLACED ( 31571 55441 ) N ; + - _384_ INV_X1 + PLACED ( 33809 45702 ) N ; + - _385_ INV_X1 + PLACED ( 32367 42611 ) N ; + - _386_ OAI211_X1 + PLACED ( 34626 46284 ) N ; + - _387_ INV_X1 + PLACED ( 37920 50885 ) N ; + - _388_ AND4_X1 + PLACED ( 36904 51863 ) N ; + - _389_ AOI22_X1 + PLACED ( 36707 51948 ) N ; + - _390_ NOR2_X1 + PLACED ( 38811 52763 ) N ; + - _391_ NOR2_X1 + PLACED ( 42046 54557 ) N ; + - _392_ NAND2_X1 + PLACED ( 40256 53758 ) N ; + - _393_ AOI221_X4 + PLACED ( 37701 45730 ) N ; + - _394_ AOI21_X1 + PLACED ( 40913 54781 ) N ; + - _395_ OAI21_X1 + PLACED ( 34571 45319 ) N ; + - _396_ XOR2_X1 + PLACED ( 43973 46136 ) N ; + - _397_ XNOR2_X1 + PLACED ( 43961 46083 ) N ; + - _398_ NOR2_X1 + PLACED ( 46077 47983 ) N ; + - _399_ AOI221_X1 + PLACED ( 44268 47144 ) N ; + - _401_ OR3_X1 + PLACED ( 41442 37578 ) N ; + - _402_ AOI21_X1 + PLACED ( 45215 47866 ) N ; + - _403_ INV_X1 + PLACED ( 22807 20175 ) N ; + - _404_ OAI211_X1 + PLACED ( 27817 23355 ) N ; + - _405_ AOI21_X1 + PLACED ( 20802 16551 ) N ; + - _406_ AOI21_X1 + PLACED ( 21149 14291 ) N ; + - _407_ AND2_X1 + PLACED ( 26978 12516 ) N ; + - _408_ XNOR2_X1 + PLACED ( 26463 10243 ) N ; + - _409_ XNOR2_X1 + PLACED ( 27713 10893 ) N ; + - _410_ NOR2_X1 + PLACED ( 29848 11427 ) N ; + - _411_ AOI221_X1 + PLACED ( 28479 11783 ) N ; + - _412_ OR3_X1 + PLACED ( 28588 16914 ) N ; + - _413_ AOI21_X1 + PLACED ( 29159 11328 ) N ; + - _414_ OAI21_X1 + PLACED ( 28367 23756 ) N ; + - _415_ AND2_X1 + PLACED ( 18638 18810 ) N ; + - _416_ AND4_X1 + PLACED ( 19325 21880 ) N ; + - _417_ AOI22_X1 + PLACED ( 19404 21974 ) N ; + - _418_ OR2_X1 + PLACED ( 19269 22720 ) N ; + - _419_ NOR2_X1 + PLACED ( 18657 25364 ) N ; + - _420_ AOI221_X4 + PLACED ( 26670 34847 ) N ; + - _421_ OAI21_X1 + PLACED ( 18818 23323 ) N ; + - _422_ AOI21_X1 + PLACED ( 18545 25416 ) N ; + - _423_ AOI21_X1 + PLACED ( 9823 20056 ) N ; + - _424_ NOR2_X1 + PLACED ( 9147 18677 ) N ; + - _425_ NOR2_X1 + PLACED ( 9711 18084 ) N ; + - _426_ XNOR2_X1 + PLACED ( 12320 13810 ) N ; + - _427_ XNOR2_X1 + PLACED ( 10129 14521 ) N ; + - _428_ NOR2_X1 + PLACED ( 9513 13729 ) N ; + - _429_ AOI221_X1 + PLACED ( 7770 14228 ) N ; + - _430_ OR3_X1 + PLACED ( 28499 17060 ) N ; + - _431_ AOI21_X1 + PLACED ( 8448 14227 ) N ; + - _432_ XNOR2_X1 + PLACED ( 8675 21426 ) N ; + - _433_ XNOR2_X1 + PLACED ( 9357 22595 ) N ; + - _434_ AOI221_X1 + PLACED ( 7439 22321 ) N ; + - _435_ OR3_X1 + PLACED ( 28764 18427 ) N ; + - _436_ AOI22_X1 + PLACED ( 7981 20348 ) N ; + - _437_ NAND2_X1 + PLACED ( 37146 22468 ) N ; + - _438_ OAI221_X1 + PLACED ( 39084 23991 ) N ; + - _439_ NAND2_X1 + PLACED ( 21488 43442 ) N ; + - _440_ XOR2_X1 + PLACED ( 17804 50289 ) N ; + - _441_ XNOR2_X1 + PLACED ( 20359 48875 ) N ; + - _442_ AOI221_X1 + PLACED ( 19281 48559 ) N ; + - _443_ NAND2_X1 + PLACED ( 26348 45316 ) N ; + - _444_ AOI22_X1 + PLACED ( 20187 48791 ) N ; + - _445_ OAI21_X1 + PLACED ( 36597 22733 ) N ; + - _446_ NAND2_X1 + PLACED ( 36451 22236 ) N ; + - _447_ XNOR2_X1 + PLACED ( 34561 9117 ) N ; + - _448_ XNOR2_X1 + PLACED ( 35000 10657 ) N ; + - _449_ NOR2_X1 + PLACED ( 35664 11908 ) N ; + - _450_ AOI221_X1 + PLACED ( 34604 11951 ) N ; + - _451_ OR3_X1 + PLACED ( 33359 17334 ) N ; + - _452_ AOI21_X1 + PLACED ( 34650 11923 ) N ; + - _453_ XNOR2_X1 + PLACED ( 39405 18045 ) N ; + - _454_ XNOR2_X1 + PLACED ( 38904 22528 ) N ; + - _455_ AOI221_X1 + PLACED ( 37864 15624 ) N ; + - _456_ OR3_X1 + PLACED ( 36922 17395 ) N ; + - _457_ AOI22_X1 + PLACED ( 38547 15447 ) N ; + - _458_ AOI22_X1 + PLACED ( 44430 28821 ) N ; + - _459_ NOR2_X1 + PLACED ( 46150 23794 ) N ; + - _460_ XOR2_X1 + PLACED ( 48640 15695 ) N ; + - _461_ XNOR2_X1 + PLACED ( 47189 15435 ) N ; + - _462_ NOR2_X1 + PLACED ( 47074 11443 ) N ; + - _463_ AOI221_X1 + PLACED ( 46153 13520 ) N ; + - _464_ OR3_X1 + PLACED ( 43778 17214 ) N ; + - _465_ AOI21_X1 + PLACED ( 46655 12026 ) N ; + - _466_ XNOR2_X1 + PLACED ( 51023 24946 ) N ; + - _467_ XNOR2_X1 + PLACED ( 43520 25723 ) N ; + - _468_ AOI221_X4 + PLACED ( 46128 24058 ) N ; + - _469_ OR3_X1 + PLACED ( 43519 23415 ) N ; + - _470_ AOI22_X1 + PLACED ( 48926 24076 ) N ; + - _471_ XNOR2_X1 + PLACED ( 49895 32668 ) N ; + - _472_ INV_X1 + PLACED ( 53273 37350 ) N ; + - _473_ NOR2_X1 + PLACED ( 51693 38422 ) N ; + - _474_ XNOR2_X1 + PLACED ( 50869 35471 ) N ; + - _475_ AOI221_X4 + PLACED ( 38226 34402 ) N ; + - _476_ NAND3_X1 + PLACED ( 42761 34243 ) N ; + - _477_ AOI22_X1 + PLACED ( 45093 32401 ) N ; + - _478_ XOR2_X1 + PLACED ( 45614 39303 ) N ; + - _479_ AOI221_X4 + PLACED ( 38329 39992 ) N ; + - _480_ NAND3_X1 + PLACED ( 42951 37143 ) N ; + - _481_ AOI22_X1 + PLACED ( 43924 39127 ) N ; + - _482_ NOR2_X1 + PLACED ( 10244 32064 ) N ; + - _483_ NOR2_X1 + PLACED ( 53737 32355 ) N ; + - _484_ AND3_X1 + PLACED ( 52508 35338 ) N ; + - _485_ NAND3_X1 + PLACED ( 34654 36686 ) N ; + - _486_ NOR3_X1 + PLACED ( 25520 15143 ) N ; + - _487_ NAND2_X1 + PLACED ( 29177 17316 ) N ; + - _488_ NOR4_X1 + PLACED ( 32645 38561 ) N ; + - _489_ NAND3_X1 + PLACED ( 32407 42041 ) N ; + - _490_ NOR3_X1 + PLACED ( 31951 41324 ) N ; + - _491_ NAND3_X1 + PLACED ( 33017 32715 ) N ; + - _492_ AOI221_X4 + PLACED ( 9650 32102 ) N ; + - _493_ NAND3_X1 + PLACED ( 7979 33383 ) N ; + - _494_ AOI221_X1 + PLACED ( 9097 33586 ) N ; + - _495_ MUX2_X1 + PLACED ( 45295 53892 ) N ; + - _496_ NOR2_X4 + PLACED ( 35044 41828 ) N ; + - _498_ MUX2_X1 + PLACED ( 49693 52999 ) N ; + - _499_ MUX2_X1 + PLACED ( 6640 38737 ) N ; + - _500_ MUX2_X1 + PLACED ( 9310 38512 ) N ; + - _501_ MUX2_X1 + PLACED ( 21824 55760 ) N ; + - _502_ MUX2_X1 + PLACED ( 23180 54988 ) N ; + - _503_ MUX2_X1 + PLACED ( 51047 46381 ) N ; + - _504_ MUX2_X1 + PLACED ( 53575 45782 ) N ; + - _505_ MUX2_X1 + PLACED ( 22409 5647 ) N ; + - _506_ MUX2_X1 + PLACED ( 21940 5996 ) N ; + - _507_ MUX2_X1 + PLACED ( 13425 25635 ) N ; + - _508_ MUX2_X1 + PLACED ( 14705 28298 ) N ; + - _509_ MUX2_X1 + PLACED ( 12136 8150 ) N ; + - _510_ MUX2_X1 + PLACED ( 14164 6722 ) N ; + - _511_ MUX2_X1 + PLACED ( 5604 8342 ) N ; + - _512_ MUX2_X1 + PLACED ( 7980 7278 ) N ; + - _513_ MUX2_X1 + PLACED ( 6405 45131 ) N ; + - _514_ MUX2_X1 + PLACED ( 8102 46615 ) N ; + - _515_ MUX2_X1 + PLACED ( 11471 53079 ) N ; + - _516_ MUX2_X1 + PLACED ( 14056 53666 ) N ; + - _517_ MUX2_X1 + PLACED ( 37647 6146 ) N ; + - _518_ MUX2_X1 + PLACED ( 39772 6588 ) N ; + - _519_ MUX2_X1 + PLACED ( 51143 16519 ) N ; + - _520_ MUX2_X1 + PLACED ( 54021 16852 ) N ; + - _521_ MUX2_X1 + PLACED ( 51354 10302 ) N ; + - _522_ MUX2_X1 + PLACED ( 53486 10883 ) N ; + - _523_ MUX2_X1 + PLACED ( 53023 23360 ) N ; + - _524_ MUX2_X1 + PLACED ( 54721 22640 ) N ; + - _525_ MUX2_X1 + PLACED ( 51030 32653 ) N ; + - _526_ MUX2_X1 + PLACED ( 54804 33408 ) N ; + - _527_ MUX2_X1 + PLACED ( 51636 40622 ) N ; + - _528_ MUX2_X1 + PLACED ( 54654 40351 ) N ; + - _529_ AOI22_X1 + PLACED ( 19889 43594 ) N ; + - _530_ NOR2_X1 + PLACED ( 18942 44130 ) N ; + - _531_ XNOR2_X1 + PLACED ( 12425 44628 ) N ; + - _532_ XNOR2_X1 + PLACED ( 13682 44968 ) N ; + - _533_ AOI221_X1 + PLACED ( 11695 45093 ) N ; + - _534_ OR3_X1 + PLACED ( 28799 37304 ) N ; + - _535_ AOI22_X1 + PLACED ( 13043 43134 ) N ; + - _536_ DFF_X1 + PLACED ( 0 39033 ) N ; + - _537_ DFF_X1 + PLACED ( 31164 57478 ) N ; + - _538_ DFF_X1 + PLACED ( 38991 57478 ) N ; + - _539_ DFF_X1 + PLACED ( 45481 49537 ) N ; + - _540_ DFF_X1 + PLACED ( 26763 3793 ) N ; + - _541_ DFF_X1 + PLACED ( 15634 11741 ) N ; + - _542_ DFF_X1 + PLACED ( 2663 12870 ) N ; + - _543_ DFF_X1 + PLACED ( 0 19746 ) N ; + - _544_ DFF_X1 + PLACED ( 3894 52266 ) N ; + - _545_ DFF_X1 + PLACED ( 32532 4298 ) N ; + - _546_ DFF_X1 + PLACED ( 40129 12306 ) N ; + - _547_ DFF_X1 + PLACED ( 46236 8620 ) N ; + - _548_ DFF_X1 + PLACED ( 53927 26923 ) N ; + - _549_ DFF_X1 + PLACED ( 44761 32607 ) N ; + - _550_ DFF_X1 + PLACED ( 45588 41195 ) N ; + - _551_ DFF_X1 + PLACED ( 971 27955 ) N ; + - _552_ DFF_X1 + PLACED ( 0 34126 ) N ; + - _553_ DFF_X1 + PLACED ( 50587 53032 ) N ; + - _554_ DFF_X1 + PLACED ( 9849 38543 ) N ; + - _555_ DFF_X1 + PLACED ( 23568 56095 ) N ; + - _556_ DFF_X1 + PLACED ( 54419 45795 ) N ; + - _557_ DFF_X1 + PLACED ( 22085 5565 ) N ; + - _558_ DFF_X1 + PLACED ( 15134 28837 ) N ; + - _559_ DFF_X1 + PLACED ( 14893 6450 ) N ; + - _560_ DFF_X1 + PLACED ( 8135 7144 ) N ; + - _561_ DFF_X1 + PLACED ( 8133 47101 ) N ; + - _562_ DFF_X1 + PLACED ( 14728 54209 ) N ; + - _563_ DFF_X1 + PLACED ( 40337 6453 ) N ; + - _564_ DFF_X1 + PLACED ( 54975 17015 ) N ; + - _565_ DFF_X1 + PLACED ( 54237 11074 ) N ; + - _566_ DFF_X1 + PLACED ( 55480 22739 ) N ; + - _567_ DFF_X1 + PLACED ( 55480 33752 ) N ; + - _568_ DFF_X1 + PLACED ( 55480 40409 ) N ; + - _569_ DFF_X1 + PLACED ( 1494 43143 ) N ; + - max_cap1 BUF_X4 + SOURCE TIMING + PLACED ( 11339 28324 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL @@ -851,9 +851,8 @@ NETS 357 ; ( _558_ CK ) ( _559_ CK ) ( _560_ CK ) ( _561_ CK ) ( _562_ CK ) ( _563_ CK ) ( _564_ CK ) ( _565_ CK ) ( _566_ CK ) ( _567_ CK ) ( _568_ CK ) ( _569_ CK ) + USE SIGNAL ; - ctrl.state.out_reg\[0\].qi ( _276_ A2 ) ( _355_ A ) ( _482_ A2 ) ( _552_ Q ) + USE SIGNAL ; - - ctrl.state.out_reg\[1\].qi ( max_cap1 A ) ( _475_ A ) ( _442_ A ) ( _420_ A ) ( _365_ A ) ( _535_ B1 ) ( _481_ B1 ) - ( _477_ B1 ) ( _444_ B1 ) ( _399_ A ) ( _370_ B1 ) ( _276_ A1 ) ( _382_ A ) ( _393_ A ) ( _479_ A ) - ( _533_ A ) ( _551_ Q ) + USE SIGNAL ; + - ctrl.state.out_reg\[1\].qi ( max_cap1 A ) ( _468_ A ) ( _463_ A ) ( _455_ A ) ( _450_ A ) ( _434_ A ) ( _429_ A ) + ( _470_ B1 ) ( _457_ B1 ) ( _436_ B1 ) ( _411_ A ) ( _362_ A2 ) ( _378_ A ) ( _551_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[0\].qi ( _309_ A ) ( _473_ A2 ) ( _478_ B ) ( _527_ A ) ( _550_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[10\].qi ( _297_ A2 ) ( _347_ A2 ) ( _406_ B1 ) ( _419_ A2 ) ( _507_ A ) ( _541_ Q ) + USE SIGNAL ; - dpath.a_reg.out_reg\[11\].qi ( _295_ A2 ) ( _346_ A2 ) ( _408_ B ) ( _410_ A2 ) ( _505_ A ) ( _540_ Q ) + USE SIGNAL ; @@ -887,8 +886,9 @@ NETS 357 ; - dpath.b_reg.out_reg\[7\].qi ( _322_ A ) ( _331_ B1 ) ( _514_ B ) ( _531_ A ) ( _561_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[8\].qi ( _293_ B1 ) ( _342_ A ) ( _423_ B1 ) ( _424_ A2 ) ( _432_ A ) ( _512_ B ) ( _560_ Q ) + USE SIGNAL ; - dpath.b_reg.out_reg\[9\].qi ( _290_ A ) ( _426_ A ) ( _486_ A1 ) ( _510_ B ) ( _559_ Q ) + USE SIGNAL ; - - net1 ( max_cap1 Z ) ( _470_ B1 ) ( _468_ A ) ( _463_ A ) ( _450_ A ) ( _362_ A2 ) ( _455_ A ) - ( _457_ B1 ) ( _411_ A ) ( _429_ A ) ( _436_ B1 ) ( _378_ A ) ( _434_ A ) + USE SIGNAL ; + - net1 ( max_cap1 Z ) ( _365_ A ) ( _420_ A ) ( _477_ B1 ) ( _481_ B1 ) ( _475_ A ) ( _479_ A ) + ( _399_ A ) ( _393_ A ) ( _382_ A ) ( _444_ B1 ) ( _442_ A ) ( _535_ B1 ) ( _533_ A ) ( _370_ B1 ) + ( _276_ A1 ) + USE SIGNAL ; - req_msg\[0\] ( PIN req_msg[0] ) ( _527_ B ) + USE SIGNAL ; - req_msg\[10\] ( PIN req_msg[10] ) ( _507_ B ) + USE SIGNAL ; - req_msg\[11\] ( PIN req_msg[11] ) ( _505_ B ) + USE SIGNAL ; diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index 0146b28491..da773e6cd2 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -172,6 +172,4 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1012] Total timing-driven delta area: -64.90 (-11.73%) [INFO GPL-1013] Final placement area: 488.38 (-11.73%) worst slack max 1.40 -Differences found at line 63. - - _276_ NOR2_X4 + PLACED ( 8992 31218 ) N ; - - _276_ NOR2_X4 + PLACED ( 5661 28030 ) N ; +No differences found. From 112d0bc42441792b17c885f37d62a854fd1c7ff6 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 10 Jun 2025 21:01:10 +0000 Subject: [PATCH 37/41] test: update after gpl change Signed-off-by: Augusto Berndt --- test/aes_sky130hd.metrics | 225 ++++++++++++++---------------- test/aes_sky130hd.metrics_limits | 26 ++-- test/aes_sky130hs.metrics | 200 +++++++++++++++----------- test/aes_sky130hs.metrics_limits | 26 ++-- test/ibex_sky130hs.metrics | 154 ++++++++++---------- test/ibex_sky130hs.metrics_limits | 28 ++-- test/jpeg_sky130hd.metrics | 208 +++++++++++++-------------- test/jpeg_sky130hd.metrics_limits | 26 ++-- 8 files changed, 450 insertions(+), 443 deletions(-) diff --git a/test/aes_sky130hd.metrics b/test/aes_sky130hd.metrics index 6c1ddfe5fb..07627dea0d 100644 --- a/test/aes_sky130hd.metrics +++ b/test/aes_sky130hd.metrics @@ -2,152 +2,133 @@ "IFP::ord_version": "", "IFP::instance_count": "17210", "floorplan__design__io": 388, - "design__io__hpwl": 235712366, - "design__instance__displacement__total": 28760.2, - "design__instance__displacement__mean": 0.518, - "design__instance__displacement__max": 10.641, - "route__wirelength__estimated": 1.29962e+06, - "RSZ::repair_design_buffer_count": "367", - "RSZ::max_slew_slack": "20.01850424602481", + "design__io__hpwl": 233337939, + "design__instance__displacement__total": 28056.6, + "design__instance__displacement__mean": 0.506, + "design__instance__displacement__max": 11.965, + "route__wirelength__estimated": 1.30597e+06, + "RSZ::repair_design_buffer_count": "374", + "RSZ::max_slew_slack": "20.366970605023173", "RSZ::max_fanout_slack": "100.0", - "RSZ::max_capacitance_slack": "63.6713700657633", - "design__instance__displacement__total": 632.4, - "design__instance__displacement__mean": 0.011, - "design__instance__displacement__max": 8.194, - "route__wirelength__estimated": 1.31558e+06, - "design__instance__count__setup_buffer": 1979, - "design__instance__count__hold_buffer": 401, - "RSZ::worst_slack_min": "0.00029221070834562445", - "RSZ::worst_slack_max": "-0.9599161737183779", - "RSZ::tns_max": "-51.879511932621895", - "RSZ::hold_buffer_count": "401", - "design__instance__displacement__total": 11596.8, - "design__instance__displacement__mean": 0.199, - "design__instance__displacement__max": 16.291, - "route__wirelength__estimated": 1.49771e+06, + "RSZ::max_capacitance_slack": "63.731651615435894", + "design__instance__displacement__total": 527.461, + "design__instance__displacement__mean": 0.009, + "design__instance__displacement__max": 9.31, + "route__wirelength__estimated": 1.32771e+06, + "design__instance__count__setup_buffer": 1933, + "design__instance__count__hold_buffer": 35, + "RSZ::worst_slack_min": "-0.8632286241261018", + "RSZ::worst_slack_max": "-0.7366942819848878", + "RSZ::tns_max": "-58.65282825437742", + "RSZ::hold_buffer_count": "35", + "design__instance__displacement__total": 10809, + "design__instance__displacement__mean": 0.186, + "design__instance__displacement__max": 14.568, + "route__wirelength__estimated": 1.5204e+06, "DPL::utilization": "5.7", - "DPL::design_area": "170743", - "route__net": 17846, + "DPL::design_area": "171476", + "route__net": 17879, "route__net__special": 2, - "global_route__vias": 181750, - "global_route__wirelength": 2295726, - "grt__global_route__vias": 10583, - "grt__global_route__vias": 2600, - "grt__global_route__vias": 368, - "grt__global_route__vias": 87, - "grt__global_route__vias": 59, - "grt__antenna_diodes_count": 979, - "grt__antenna__violating__nets": 1, - "grt__antenna__violating__pins": 1, - "GRT::ANT::errors": "1", - "route__net": 17846, + "global_route__vias": 181100, + "global_route__wirelength": 2322698, + "grt__global_route__vias": 11889, + "grt__global_route__vias": 2878, + "grt__global_route__vias": 676, + "grt__global_route__vias": 171, + "grt__global_route__vias": 182, + "grt__antenna_diodes_count": 1025, + "grt__antenna__violating__nets": 0, + "grt__antenna__violating__pins": 0, + "GRT::ANT::errors": "0", + "route__net": 17879, "route__net__special": 2, - "route__drc_errors__iter:0": 6898, - "route__wirelength__iter:0": 1811983, - "route__drc_errors__iter:1": 2398, - "route__wirelength__iter:1": 1807169, - "route__drc_errors__iter:2": 1652, - "route__wirelength__iter:2": 1805775, - "route__drc_errors__iter:3": 102, - "route__wirelength__iter:3": 1805978, - "route__drc_errors__iter:4": 18, - "route__wirelength__iter:4": 1805980, - "route__drc_errors__iter:5": 18, - "route__wirelength__iter:5": 1805990, - "route__drc_errors__iter:6": 0, - "route__wirelength__iter:6": 1805987, + "route__drc_errors__iter:0": 6917, + "route__wirelength__iter:0": 1835682, + "route__drc_errors__iter:1": 2362, + "route__wirelength__iter:1": 1831103, + "route__drc_errors__iter:2": 1933, + "route__wirelength__iter:2": 1829876, + "route__drc_errors__iter:3": 87, + "route__wirelength__iter:3": 1830218, + "route__drc_errors__iter:4": 3, + "route__wirelength__iter:4": 1830200, + "route__drc_errors__iter:5": 0, + "route__wirelength__iter:5": 1830200, "route__drc_errors": 0, - "route__wirelength": 1805987, - "route__vias": 165847, - "route__vias__singlecut": 165847, + "route__wirelength": 1830200, + "route__vias": 166604, + "route__vias__singlecut": 166604, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 119, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 127, - "drt__repair_antennas__iter_0__global_route__vias": 2292, - "drt__repair_antennas__iter_0__antenna_diodes_count": 1431, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 995, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1805375, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 350, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1805273, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 327, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1805211, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 1, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1805302, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 130, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 134, + "drt__repair_antennas__iter_0__global_route__vias": 2772, + "drt__repair_antennas__iter_0__antenna_diodes_count": 1487, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 1199, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1831438, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 500, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1831254, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 430, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1831266, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 17, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1831384, "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1805302, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1831386, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1805302, - "drt__repair_antennas__iter_0__route__vias": 166775, - "drt__repair_antennas__iter_0__route__vias__singlecut": 166775, + "drt__repair_antennas__iter_0__route__wirelength": 1831386, + "drt__repair_antennas__iter_0__route__vias": 167654, + "drt__repair_antennas__iter_0__route__vias__singlecut": 167654, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 10, + "drt__repair_antennas__iter_0__antenna__violating__nets": 11, "drt__repair_antennas__iter_0__antenna__violating__pins": 11, - "drt__repair_antennas__iter_1__global_route__vias": 297, - "drt__repair_antennas__iter_1__antenna_diodes_count": 1500, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 88, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1805446, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 47, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1805435, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 33, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1805436, + "drt__repair_antennas__iter_1__global_route__vias": 351, + "drt__repair_antennas__iter_1__antenna_diodes_count": 1539, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 63, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1831534, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 24, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1831535, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 18, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1831528, "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1805433, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1831540, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1805433, - "drt__repair_antennas__iter_1__route__vias": 166917, - "drt__repair_antennas__iter_1__route__vias__singlecut": 166917, + "drt__repair_antennas__iter_1__route__wirelength": 1831540, + "drt__repair_antennas__iter_1__route__vias": 167749, + "drt__repair_antennas__iter_1__route__vias__singlecut": 167749, "drt__repair_antennas__iter_1__route__vias__multicut": 0, - "drt__repair_antennas__iter_1__antenna__violating__nets": 3, - "drt__repair_antennas__iter_1__antenna__violating__pins": 3, - "drt__repair_antennas__iter_2__global_route__vias": 172, - "drt__repair_antennas__iter_2__antenna_diodes_count": 1513, - "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 38, - "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1805457, - "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 9, - "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1805454, - "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 4, - "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1805456, + "drt__repair_antennas__iter_1__antenna__violating__nets": 1, + "drt__repair_antennas__iter_1__antenna__violating__pins": 1, + "drt__repair_antennas__iter_2__global_route__vias": 30, + "drt__repair_antennas__iter_2__antenna_diodes_count": 1548, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 7, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1831585, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 2, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1831582, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 2, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1831574, "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1805451, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1831572, "drt__repair_antennas__iter_2__route__drc_errors": 0, - "drt__repair_antennas__iter_2__route__wirelength": 1805451, - "drt__repair_antennas__iter_2__route__vias": 166939, - "drt__repair_antennas__iter_2__route__vias__singlecut": 166939, + "drt__repair_antennas__iter_2__route__wirelength": 1831572, + "drt__repair_antennas__iter_2__route__vias": 167758, + "drt__repair_antennas__iter_2__route__vias__singlecut": 167758, "drt__repair_antennas__iter_2__route__vias__multicut": 0, - "drt__repair_antennas__iter_2__antenna__violating__nets": 1, - "drt__repair_antennas__iter_2__antenna__violating__pins": 1, - "drt__repair_antennas__iter_3__global_route__vias": 32, - "drt__repair_antennas__iter_3__antenna_diodes_count": 1516, - "drt__repair_antennas__iter_3__route__drc_errors__iter:0": 15, - "drt__repair_antennas__iter_3__route__wirelength__iter:0": 1805469, - "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 5, - "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1805473, - "drt__repair_antennas__iter_3__route__drc_errors__iter:2": 2, - "drt__repair_antennas__iter_3__route__wirelength__iter:2": 1805474, - "drt__repair_antennas__iter_3__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_3__route__wirelength__iter:3": 1805469, - "drt__repair_antennas__iter_3__route__drc_errors": 0, - "drt__repair_antennas__iter_3__route__wirelength": 1805469, - "drt__repair_antennas__iter_3__route__vias": 166943, - "drt__repair_antennas__iter_3__route__vias__singlecut": 166943, - "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__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.293646781868592", - "DRT::worst_slack_max": "-1.490018373081354", - "DRT::tns_max": "-121.52152694750055", - "DRT::clock_skew": "0.6166085594422861", - "DRT::max_slew_slack": "-19.796080898699806", + "DRT::worst_slack_min": "-0.9670995389354671", + "DRT::worst_slack_max": "-1.433452952466133", + "DRT::tns_max": "-135.00848110494726", + "DRT::clock_skew": "0.602163336238047", + "DRT::max_slew_slack": "-15.403982735162627", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-23.517348243100802", + "DRT::max_capacitance_slack": "-18.279009050407286", "DRT::clock_period": "3.740000", - "flow__warnings__count": 350, + "flow__warnings__count": 35, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/aes_sky130hd.metrics_limits b/test/aes_sky130hd.metrics_limits index 176613ba7c..0b10500cde 100644 --- a/test/aes_sky130hd.metrics_limits +++ b/test/aes_sky130hd.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "20652.0" - ,"DPL::design_area" : "204891.6" + ,"DPL::design_area" : "205771.19999999998" ,"DPL::utilization" : "6.84" - ,"RSZ::repair_design_buffer_count" : "440" + ,"RSZ::repair_design_buffer_count" : "448" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.37370778929165444" - ,"RSZ::worst_slack_max" : "-1.333916173718378" - ,"RSZ::tns_max" : "-695.533511932622" - ,"RSZ::hold_buffer_count" : "481" - ,"GRT::ANT::errors" : "1" + ,"RSZ::worst_slack_min" : "-1.237228624126102" + ,"RSZ::worst_slack_max" : "-1.110694281984888" + ,"RSZ::tns_max" : "-702.3068282543775" + ,"RSZ::hold_buffer_count" : "42" + ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.667646781868592" - ,"DRT::worst_slack_max" : "-1.8640183730813542" - ,"DRT::tns_max" : "-765.1755269475007" - ,"DRT::clock_skew" : "0.7399302713307433" - ,"DRT::max_slew_slack" : "-23.755297078439767" - ,"DRT::max_capacitance_slack" : "-28.220817891720962" + ,"DRT::worst_slack_min" : "-1.3410995389354672" + ,"DRT::worst_slack_max" : "-1.8074529524661331" + ,"DRT::tns_max" : "-778.6624811049473" + ,"DRT::clock_skew" : "0.7225960034856563" + ,"DRT::max_slew_slack" : "-18.484779282195152" + ,"DRT::max_capacitance_slack" : "-21.934810860488742" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "3.74" ,"DRT::ANT::errors" : "0" diff --git a/test/aes_sky130hs.metrics b/test/aes_sky130hs.metrics index cc8c86a5fb..4bfb25a0cf 100644 --- a/test/aes_sky130hs.metrics +++ b/test/aes_sky130hs.metrics @@ -2,109 +2,145 @@ "IFP::ord_version": "", "IFP::instance_count": "16324", "floorplan__design__io": 388, - "design__io__hpwl": 229796078, - "design__instance__displacement__total": 34843.3, - "design__instance__displacement__mean": 0.739, - "design__instance__displacement__max": 12.912, - "route__wirelength__estimated": 1.34788e+06, - "RSZ::repair_design_buffer_count": "448", - "RSZ::max_slew_slack": "19.999396800994873", + "design__io__hpwl": 228375401, + "design__instance__displacement__total": 34635.3, + "design__instance__displacement__mean": 0.734, + "design__instance__displacement__max": 12.028, + "route__wirelength__estimated": 1.36046e+06, + "RSZ::repair_design_buffer_count": "464", + "RSZ::max_slew_slack": "19.73409801721573", "RSZ::max_fanout_slack": "100.0", - "RSZ::max_capacitance_slack": "32.57371410156652", - "design__instance__displacement__total": 652.48, - "design__instance__displacement__mean": 0.013, - "design__instance__displacement__max": 9.6, - "route__wirelength__estimated": 1.36475e+06, - "design__instance__count__setup_buffer": 2119, - "design__instance__count__hold_buffer": 619, - "RSZ::worst_slack_min": "8.948397831556736e-5", - "RSZ::worst_slack_max": "-0.5128462244478", - "RSZ::tns_max": "-32.09076828434678", - "RSZ::hold_buffer_count": "619", - "design__instance__displacement__total": 17518.1, - "design__instance__displacement__mean": 0.35, - "design__instance__displacement__max": 19.14, - "route__wirelength__estimated": 1.53147e+06, - "DPL::utilization": "8.4", - "DPL::design_area": "254304", - "route__net": 17795, + "RSZ::max_capacitance_slack": "33.437165544990435", + "design__instance__displacement__total": 673.267, + "design__instance__displacement__mean": 0.014, + "design__instance__displacement__max": 9.812, + "route__wirelength__estimated": 1.37713e+06, + "design__instance__count__setup_buffer": 2317, + "design__instance__count__hold_buffer": 647, + "RSZ::worst_slack_min": "0.0005279110631396064", + "RSZ::worst_slack_max": "-0.5755707184886223", + "RSZ::tns_max": "-35.42373605823519", + "RSZ::hold_buffer_count": "647", + "design__instance__displacement__total": 19312, + "design__instance__displacement__mean": 0.384, + "design__instance__displacement__max": 19.51, + "route__wirelength__estimated": 1.55215e+06, + "DPL::utilization": "8.6", + "DPL::design_area": "259181", + "route__net": 18023, "route__net__special": 2, - "global_route__vias": 179972, - "global_route__wirelength": 2351390, - "grt__global_route__vias": 5450, - "grt__global_route__vias": 981, - "grt__global_route__vias": 405, - "grt__global_route__vias": 275, - "grt__antenna_diodes_count": 304, + "global_route__vias": 180784, + "global_route__wirelength": 2364652, + "grt__global_route__vias": 4961, + "grt__global_route__vias": 1319, + "grt__global_route__vias": 158, + "grt__antenna_diodes_count": 406, "grt__antenna__violating__nets": 0, "grt__antenna__violating__pins": 0, "GRT::ANT::errors": "0", - "route__net": 17795, + "route__net": 18023, "route__net__special": 2, - "route__drc_errors__iter:0": 5843, - "route__wirelength__iter:0": 1836577, - "route__drc_errors__iter:1": 1445, - "route__wirelength__iter:1": 1831804, - "route__drc_errors__iter:2": 970, - "route__wirelength__iter:2": 1830871, - "route__drc_errors__iter:3": 14, - "route__wirelength__iter:3": 1830977, + "route__drc_errors__iter:0": 5807, + "route__wirelength__iter:0": 1850016, + "route__drc_errors__iter:1": 1513, + "route__wirelength__iter:1": 1845364, + "route__drc_errors__iter:2": 1020, + "route__wirelength__iter:2": 1844096, + "route__drc_errors__iter:3": 17, + "route__wirelength__iter:3": 1844145, "route__drc_errors__iter:4": 0, - "route__wirelength__iter:4": 1830970, + "route__wirelength__iter:4": 1844145, "route__drc_errors": 0, - "route__wirelength": 1830970, - "route__vias": 158535, - "route__vias__singlecut": 158535, + "route__wirelength": 1844145, + "route__vias": 159088, + "route__vias__singlecut": 159088, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 69, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 70, - "drt__repair_antennas__iter_0__global_route__vias": 1226, - "drt__repair_antennas__iter_0__antenna_diodes_count": 476, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 559, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1830859, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 200, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1830832, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 154, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1830812, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 4, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1830846, - "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1830847, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 68, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 73, + "drt__repair_antennas__iter_0__global_route__vias": 1045, + "drt__repair_antennas__iter_0__antenna_diodes_count": 545, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 382, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1844237, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 112, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1844165, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 91, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1844156, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1844147, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1830847, - "drt__repair_antennas__iter_0__route__vias": 158909, - "drt__repair_antennas__iter_0__route__vias__singlecut": 158909, + "drt__repair_antennas__iter_0__route__wirelength": 1844147, + "drt__repair_antennas__iter_0__route__vias": 159359, + "drt__repair_antennas__iter_0__route__vias__singlecut": 159359, "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": 4, - "drt__repair_antennas__iter_1__global_route__vias": 108, - "drt__repair_antennas__iter_1__antenna_diodes_count": 482, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 4, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1830846, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1830836, + "drt__repair_antennas__iter_0__antenna__violating__nets": 5, + "drt__repair_antennas__iter_0__antenna__violating__pins": 8, + "drt__repair_antennas__iter_1__global_route__vias": 296, + "drt__repair_antennas__iter_1__antenna_diodes_count": 559, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 23, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1844195, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1844195, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 0, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1844196, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1830836, - "drt__repair_antennas__iter_1__route__vias": 158921, - "drt__repair_antennas__iter_1__route__vias__singlecut": 158921, + "drt__repair_antennas__iter_1__route__wirelength": 1844196, + "drt__repair_antennas__iter_1__route__vias": 159383, + "drt__repair_antennas__iter_1__route__vias__singlecut": 159383, "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": 2, + "drt__repair_antennas__iter_2__global_route__vias": 145, + "drt__repair_antennas__iter_2__antenna_diodes_count": 561, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 0, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1844194, + "drt__repair_antennas__iter_2__route__drc_errors": 0, + "drt__repair_antennas__iter_2__route__wirelength": 1844194, + "drt__repair_antennas__iter_2__route__vias": 159400, + "drt__repair_antennas__iter_2__route__vias__singlecut": 159400, + "drt__repair_antennas__iter_2__route__vias__multicut": 0, + "drt__repair_antennas__iter_2__antenna__violating__nets": 1, + "drt__repair_antennas__iter_2__antenna__violating__pins": 2, + "drt__repair_antennas__iter_3__global_route__vias": 140, + "drt__repair_antennas__iter_3__antenna_diodes_count": 563, + "drt__repair_antennas__iter_3__route__drc_errors__iter:0": 2, + "drt__repair_antennas__iter_3__route__wirelength__iter:0": 1844203, + "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 0, + "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1844198, + "drt__repair_antennas__iter_3__route__drc_errors": 0, + "drt__repair_antennas__iter_3__route__wirelength": 1844198, + "drt__repair_antennas__iter_3__route__vias": 159393, + "drt__repair_antennas__iter_3__route__vias__singlecut": 159393, + "drt__repair_antennas__iter_3__route__vias__multicut": 0, + "drt__repair_antennas__iter_3__antenna__violating__nets": 1, + "drt__repair_antennas__iter_3__antenna__violating__pins": 1, + "drt__repair_antennas__iter_4__global_route__vias": 166, + "drt__repair_antennas__iter_4__antenna_diodes_count": 564, + "drt__repair_antennas__iter_4__route__drc_errors__iter:0": 3, + "drt__repair_antennas__iter_4__route__wirelength__iter:0": 1844202, + "drt__repair_antennas__iter_4__route__drc_errors__iter:1": 0, + "drt__repair_antennas__iter_4__route__wirelength__iter:1": 1844204, + "drt__repair_antennas__iter_4__route__drc_errors": 0, + "drt__repair_antennas__iter_4__route__wirelength": 1844204, + "drt__repair_antennas__iter_4__route__vias": 159401, + "drt__repair_antennas__iter_4__route__vias__singlecut": 159401, + "drt__repair_antennas__iter_4__route__vias__multicut": 0, + "drt__repair_antennas__iter_4__antenna__violating__nets": 0, + "drt__repair_antennas__iter_4__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.14337520465574258", - "DRT::worst_slack_max": "-0.8044902749456296", - "DRT::tns_max": "-59.10232115444546", - "DRT::clock_skew": "0.4167494245436345", - "DRT::max_slew_slack": "-9.19078141450882", + "DRT::worst_slack_min": "-0.11536294468457953", + "DRT::worst_slack_max": "-0.7078227093683619", + "DRT::tns_max": "-60.25612890311405", + "DRT::clock_skew": "0.42515814294765775", + "DRT::max_slew_slack": "-20.233726501464844", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-11.360558902486243", + "DRT::max_capacitance_slack": "-13.020113179566703", "DRT::clock_period": "2.811000", - "flow__warnings__count": 268, + "flow__warnings__count": 32, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/aes_sky130hs.metrics_limits b/test/aes_sky130hs.metrics_limits index a49477ca13..0f67fa2997 100644 --- a/test/aes_sky130hs.metrics_limits +++ b/test/aes_sky130hs.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "19588.8" - ,"DPL::design_area" : "305164.8" - ,"DPL::utilization" : "10.08" - ,"RSZ::repair_design_buffer_count" : "537" + ,"DPL::design_area" : "311017.2" + ,"DPL::utilization" : "10.319999999999999" + ,"RSZ::repair_design_buffer_count" : "556" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.2810105160216845" - ,"RSZ::worst_slack_max" : "-0.7939462244478" - ,"RSZ::tns_max" : "-490.95840828434683" - ,"RSZ::hold_buffer_count" : "742" + ,"RSZ::worst_slack_min" : "-0.2805720889368604" + ,"RSZ::worst_slack_max" : "-0.8566707184886223" + ,"RSZ::tns_max" : "-494.29137605823524" + ,"RSZ::hold_buffer_count" : "776" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.4244752046557426" - ,"DRT::worst_slack_max" : "-1.0855902749456297" - ,"DRT::tns_max" : "-517.9699611544455" - ,"DRT::clock_skew" : "0.5000993094523614" - ,"DRT::max_slew_slack" : "-11.028937697410583" - ,"DRT::max_capacitance_slack" : "-13.632670682983491" + ,"DRT::worst_slack_min" : "-0.39646294468457954" + ,"DRT::worst_slack_max" : "-0.9889227093683619" + ,"DRT::tns_max" : "-519.1237689031141" + ,"DRT::clock_skew" : "0.5101897715371893" + ,"DRT::max_slew_slack" : "-24.280471801757812" + ,"DRT::max_capacitance_slack" : "-15.624135815480043" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "2.811" ,"DRT::ANT::errors" : "0" diff --git a/test/ibex_sky130hs.metrics b/test/ibex_sky130hs.metrics index 78003186cd..553aa4ea78 100644 --- a/test/ibex_sky130hs.metrics +++ b/test/ibex_sky130hs.metrics @@ -2,91 +2,97 @@ "IFP::ord_version": "", "IFP::instance_count": "13935", "floorplan__design__io": 264, - "design__io__hpwl": 62071144, - "design__instance__displacement__total": 79670.6, - "design__instance__displacement__mean": 4.042, - "design__instance__displacement__max": 60.411, - "route__wirelength__estimated": 810696, - "RSZ::repair_design_buffer_count": "484", - "RSZ::max_slew_slack": "-42.54197180271149", + "design__io__hpwl": 60113119, + "design__instance__displacement__total": 73267.8, + "design__instance__displacement__mean": 3.712, + "design__instance__displacement__max": 50.47, + "route__wirelength__estimated": 810560, + "RSZ::repair_design_buffer_count": "509", + "RSZ::max_slew_slack": "-35.613879561424255", "RSZ::max_fanout_slack": "100.0", - "RSZ::max_capacitance_slack": "-44.362489387450935", - "design__instance__displacement__total": 8442.02, - "design__instance__displacement__mean": 0.423, - "design__instance__displacement__max": 48.42, - "route__wirelength__estimated": 839655, + "RSZ::max_capacitance_slack": "-36.68603824461692", + "design__instance__displacement__total": 4533.73, + "design__instance__displacement__mean": 0.226, + "design__instance__displacement__max": 33.84, + "route__wirelength__estimated": 834121, "design__instance__count__setup_buffer": 0, "design__instance__count__hold_buffer": 0, - "RSZ::worst_slack_min": "0.29738734538894945", - "RSZ::worst_slack_max": "0.2317968105290002", + "RSZ::worst_slack_min": "0.18783841680415855", + "RSZ::worst_slack_max": "0.18436985793252708", "RSZ::tns_max": "0.0", "RSZ::hold_buffer_count": "0", "design__instance__displacement__total": 0, "design__instance__displacement__mean": 0, "design__instance__displacement__max": 0, - "route__wirelength__estimated": 839655, - "DPL::utilization": "38.5", - "DPL::design_area": "233028", - "route__net": 14238, + "route__wirelength__estimated": 834121, + "DPL::utilization": "38.6", + "DPL::design_area": "233581", + "route__net": 14264, "route__net__special": 2, - "global_route__vias": 142669, - "global_route__wirelength": 1425700, - "grt__global_route__vias": 12737, - "grt__global_route__vias": 586, - "grt__global_route__vias": 33, - "grt__antenna_diodes_count": 103, - "grt__antenna__violating__nets": 0, - "grt__antenna__violating__pins": 0, - "GRT::ANT::errors": "0", - "route__net": 14238, + "global_route__vias": 139956, + "global_route__wirelength": 1412884, + "grt__global_route__vias": 10072, + "grt__global_route__vias": 235, + "grt__global_route__vias": 189, + "grt__global_route__vias": 259, + "grt__global_route__vias": 278, + "grt__antenna_diodes_count": 152, + "grt__antenna__violating__nets": 1, + "grt__antenna__violating__pins": 10, + "GRT::ANT::errors": "1", + "route__net": 14264, "route__net__special": 2, - "route__drc_errors__iter:0": 4122, - "route__wirelength__iter:0": 1038001, - "route__drc_errors__iter:1": 742, - "route__wirelength__iter:1": 1032912, - "route__drc_errors__iter:2": 507, - "route__wirelength__iter:2": 1031883, - "route__drc_errors__iter:3": 6, - "route__wirelength__iter:3": 1031692, + "route__drc_errors__iter:0": 4096, + "route__wirelength__iter:0": 1029969, + "route__drc_errors__iter:1": 765, + "route__wirelength__iter:1": 1025445, + "route__drc_errors__iter:2": 443, + "route__wirelength__iter:2": 1024681, + "route__drc_errors__iter:3": 9, + "route__wirelength__iter:3": 1024530, "route__drc_errors__iter:4": 0, - "route__wirelength__iter:4": 1031695, + "route__wirelength__iter:4": 1024526, "route__drc_errors": 0, - "route__wirelength": 1031695, - "route__vias": 122314, - "route__vias__singlecut": 122314, + "route__wirelength": 1024526, + "route__vias": 120861, + "route__vias__singlecut": 120861, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 33, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 40, - "drt__repair_antennas__iter_0__global_route__vias": 1114, - "drt__repair_antennas__iter_0__antenna_diodes_count": 143, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 525, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1030795, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 170, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1030721, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 129, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1030698, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 2, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1030692, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 37, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 44, + "drt__repair_antennas__iter_0__global_route__vias": 1040, + "drt__repair_antennas__iter_0__antenna_diodes_count": 196, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 610, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1024158, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 153, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1023978, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 131, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1023964, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 4, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1023992, "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1030692, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1023995, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1030692, - "drt__repair_antennas__iter_0__route__vias": 122333, - "drt__repair_antennas__iter_0__route__vias__singlecut": 122333, + "drt__repair_antennas__iter_0__route__wirelength": 1023995, + "drt__repair_antennas__iter_0__route__vias": 120930, + "drt__repair_antennas__iter_0__route__vias__singlecut": 120930, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 1, - "drt__repair_antennas__iter_0__antenna__violating__pins": 3, - "drt__repair_antennas__iter_1__global_route__vias": 114, - "drt__repair_antennas__iter_1__antenna_diodes_count": 146, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 9, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1030719, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1030710, + "drt__repair_antennas__iter_0__antenna__violating__nets": 4, + "drt__repair_antennas__iter_0__antenna__violating__pins": 6, + "drt__repair_antennas__iter_1__global_route__vias": 316, + "drt__repair_antennas__iter_1__antenna_diodes_count": 202, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 51, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1024020, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1024009, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1024012, + "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1024005, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1030710, - "drt__repair_antennas__iter_1__route__vias": 122347, - "drt__repair_antennas__iter_1__route__vias__singlecut": 122347, + "drt__repair_antennas__iter_1__route__wirelength": 1024005, + "drt__repair_antennas__iter_1__route__vias": 120935, + "drt__repair_antennas__iter_1__route__vias__singlecut": 120935, "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, @@ -96,14 +102,14 @@ "design__violations": 0, "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "0.2671518637480975", - "DRT::worst_slack_max": "-0.451887429155279", - "DRT::tns_max": "-1.1802461564355355", - "DRT::clock_skew": "2.103247635585713", - "DRT::max_slew_slack": "-57.3894739151001", + "DRT::worst_slack_min": "0.20831648107252876", + "DRT::worst_slack_max": "-0.482016218360447", + "DRT::tns_max": "-1.2472352392791588", + "DRT::clock_skew": "2.2661624329605687", + "DRT::max_slew_slack": "-68.12803745269775", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-58.594369173477034", + "DRT::max_capacitance_slack": "-71.25450708990931", "DRT::clock_period": "11.290000", - "flow__warnings__count": 258, + "flow__warnings__count": 72, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/ibex_sky130hs.metrics_limits b/test/ibex_sky130hs.metrics_limits index dc4f96b514..3d1849a91d 100644 --- a/test/ibex_sky130hs.metrics_limits +++ b/test/ibex_sky130hs.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "16722.0" - ,"DPL::design_area" : "279633.6" - ,"DPL::utilization" : "46.199999999999996" - ,"RSZ::repair_design_buffer_count" : "580" - ,"RSZ::max_slew_slack" : "-51.050366163253784" - ,"RSZ::max_capacitance_slack" : "-53.23498726494112" + ,"DPL::design_area" : "280297.2" + ,"DPL::utilization" : "46.32" + ,"RSZ::repair_design_buffer_count" : "610" + ,"RSZ::max_slew_slack" : "-42.736655473709106" + ,"RSZ::max_capacitance_slack" : "-44.0232458935403" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.8316126546110505" - ,"RSZ::worst_slack_max" : "-0.8972031894709998" + ,"RSZ::worst_slack_min" : "-0.9411615831958414" + ,"RSZ::worst_slack_max" : "-0.944630142067473" ,"RSZ::tns_max" : "-1573.2615" ,"RSZ::hold_buffer_count" : "0" - ,"GRT::ANT::errors" : "0" + ,"GRT::ANT::errors" : "1" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.8618481362519025" - ,"DRT::worst_slack_max" : "-1.580887429155279" - ,"DRT::tns_max" : "-1574.4417461564356" - ,"DRT::clock_skew" : "2.5238971627028555" - ,"DRT::max_slew_slack" : "-68.86736869812012" - ,"DRT::max_capacitance_slack" : "-70.31324300817244" + ,"DRT::worst_slack_min" : "-0.9206835189274712" + ,"DRT::worst_slack_max" : "-1.611016218360447" + ,"DRT::tns_max" : "-1574.5087352392793" + ,"DRT::clock_skew" : "2.7193949195526823" + ,"DRT::max_slew_slack" : "-81.7536449432373" + ,"DRT::max_capacitance_slack" : "-85.50540850789118" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "11.29" ,"DRT::ANT::errors" : "0" diff --git a/test/jpeg_sky130hd.metrics b/test/jpeg_sky130hd.metrics index cf8d42e576..8828f02268 100644 --- a/test/jpeg_sky130hd.metrics +++ b/test/jpeg_sky130hd.metrics @@ -2,140 +2,124 @@ "IFP::ord_version": "", "IFP::instance_count": "45634", "floorplan__design__io": 47, - "design__io__hpwl": 12889252, - "design__instance__displacement__total": 129909, - "design__instance__displacement__mean": 1.763, - "design__instance__displacement__max": 12.121, - "route__wirelength__estimated": 1.53079e+06, - "RSZ::repair_design_buffer_count": "418", - "RSZ::max_slew_slack": "17.409519354502358", + "design__io__hpwl": 12718446, + "design__instance__displacement__total": 126891, + "design__instance__displacement__mean": 1.722, + "design__instance__displacement__max": 13.267, + "route__wirelength__estimated": 1.53197e+06, + "RSZ::repair_design_buffer_count": "422", + "RSZ::max_slew_slack": "13.58924905459086", "RSZ::max_fanout_slack": "100.0", - "RSZ::max_capacitance_slack": "21.77971134337567", - "design__instance__displacement__total": 4420.99, - "design__instance__displacement__mean": 0.059, - "design__instance__displacement__max": 11.84, - "route__wirelength__estimated": 1.58859e+06, - "design__instance__count__setup_buffer": 270, - "design__instance__count__hold_buffer": 33, - "RSZ::worst_slack_min": "0.00711875023522851", - "RSZ::worst_slack_max": "0.00033573145214178124", - "RSZ::tns_max": "0.0", - "RSZ::hold_buffer_count": "33", - "design__instance__displacement__total": 2024.7, - "design__instance__displacement__mean": 0.027, - "design__instance__displacement__max": 12.106, - "route__wirelength__estimated": 1.63312e+06, + "RSZ::max_capacitance_slack": "22.476739997552407", + "design__instance__displacement__total": 3859.64, + "design__instance__displacement__mean": 0.051, + "design__instance__displacement__max": 12.332, + "route__wirelength__estimated": 1.58979e+06, + "design__instance__count__setup_buffer": 273, + "design__instance__count__hold_buffer": 2, + "RSZ::worst_slack_min": "0.0026696423605162937", + "RSZ::worst_slack_max": "-0.025185187981302513", + "RSZ::tns_max": "-0.025185187981302513", + "RSZ::hold_buffer_count": "2", + "design__instance__displacement__total": 1972.67, + "design__instance__displacement__mean": 0.026, + "design__instance__displacement__max": 13.21, + "route__wirelength__estimated": 1.63523e+06, "DPL::utilization": "24.7", - "DPL::design_area": "539546", - "route__net": 57574, + "DPL::design_area": "540601", + "route__net": 57602, "route__net__special": 2, - "global_route__vias": 356579, - "global_route__wirelength": 2663248, - "grt__global_route__vias": 2238, - "grt__global_route__vias": 132, - "grt__global_route__vias": 812, - "grt__global_route__vias": 67, - "grt__global_route__vias": 79, - "grt__antenna_diodes_count": 170, - "grt__antenna__violating__nets": 1, - "grt__antenna__violating__pins": 1, - "GRT::ANT::errors": "1", - "route__net": 57574, + "global_route__vias": 356111, + "global_route__wirelength": 2673825, + "grt__global_route__vias": 4803, + "grt__global_route__vias": 86, + "grt__antenna_diodes_count": 118, + "grt__antenna__violating__nets": 0, + "grt__antenna__violating__pins": 0, + "GRT::ANT::errors": "0", + "route__net": 57602, "route__net__special": 2, - "route__drc_errors__iter:0": 5800, - "route__wirelength__iter:0": 1780886, - "route__drc_errors__iter:1": 535, - "route__wirelength__iter:1": 1771175, - "route__drc_errors__iter:2": 217, - "route__wirelength__iter:2": 1770673, - "route__drc_errors__iter:3": 3, - "route__wirelength__iter:3": 1770633, - "route__drc_errors__iter:4": 0, - "route__wirelength__iter:4": 1770633, + "route__drc_errors__iter:0": 5871, + "route__wirelength__iter:0": 1788234, + "route__drc_errors__iter:1": 528, + "route__wirelength__iter:1": 1778560, + "route__drc_errors__iter:2": 210, + "route__wirelength__iter:2": 1777641, + "route__drc_errors__iter:3": 0, + "route__wirelength__iter:3": 1777601, "route__drc_errors": 0, - "route__wirelength": 1770633, - "route__vias": 316708, - "route__vias__singlecut": 316708, + "route__wirelength": 1777601, + "route__vias": 316382, + "route__vias__singlecut": 316382, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 67, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 78, - "drt__repair_antennas__iter_0__global_route__vias": 2303, - "drt__repair_antennas__iter_0__antenna_diodes_count": 403, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 715, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1771566, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 185, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1771470, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 141, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1771458, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 2, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1771446, - "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1771446, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 58, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 65, + "drt__repair_antennas__iter_0__global_route__vias": 1760, + "drt__repair_antennas__iter_0__antenna_diodes_count": 271, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 458, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1778345, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 80, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1778223, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 55, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1778211, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1778210, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1771446, - "drt__repair_antennas__iter_0__route__vias": 317123, - "drt__repair_antennas__iter_0__route__vias__singlecut": 317123, + "drt__repair_antennas__iter_0__route__wirelength": 1778210, + "drt__repair_antennas__iter_0__route__vias": 316613, + "drt__repair_antennas__iter_0__route__vias__singlecut": 316613, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 16, - "drt__repair_antennas__iter_0__antenna__violating__pins": 22, - "drt__repair_antennas__iter_1__global_route__vias": 826, - "drt__repair_antennas__iter_1__antenna_diodes_count": 470, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 105, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1771704, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 9, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1771672, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 11, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1771670, + "drt__repair_antennas__iter_0__antenna__violating__nets": 12, + "drt__repair_antennas__iter_0__antenna__violating__pins": 15, + "drt__repair_antennas__iter_1__global_route__vias": 432, + "drt__repair_antennas__iter_1__antenna_diodes_count": 304, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 118, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1778240, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 64, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1778215, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 44, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1778208, "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1771661, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1778224, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1771661, - "drt__repair_antennas__iter_1__route__vias": 317268, - "drt__repair_antennas__iter_1__route__vias__singlecut": 317268, + "drt__repair_antennas__iter_1__route__wirelength": 1778224, + "drt__repair_antennas__iter_1__route__vias": 316699, + "drt__repair_antennas__iter_1__route__vias__singlecut": 316699, "drt__repair_antennas__iter_1__route__vias__multicut": 0, - "drt__repair_antennas__iter_1__antenna__violating__nets": 2, + "drt__repair_antennas__iter_1__antenna__violating__nets": 3, "drt__repair_antennas__iter_1__antenna__violating__pins": 3, - "drt__repair_antennas__iter_2__global_route__vias": 184, - "drt__repair_antennas__iter_2__antenna_diodes_count": 473, - "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 7, - "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1771674, - "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 0, - "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1771671, + "drt__repair_antennas__iter_2__global_route__vias": 242, + "drt__repair_antennas__iter_2__antenna_diodes_count": 307, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 22, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1778244, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 3, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1778233, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 2, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1778233, + "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1778233, "drt__repair_antennas__iter_2__route__drc_errors": 0, - "drt__repair_antennas__iter_2__route__wirelength": 1771671, - "drt__repair_antennas__iter_2__route__vias": 317274, - "drt__repair_antennas__iter_2__route__vias__singlecut": 317274, + "drt__repair_antennas__iter_2__route__wirelength": 1778233, + "drt__repair_antennas__iter_2__route__vias": 316716, + "drt__repair_antennas__iter_2__route__vias__singlecut": 316716, "drt__repair_antennas__iter_2__route__vias__multicut": 0, - "drt__repair_antennas__iter_2__antenna__violating__nets": 2, - "drt__repair_antennas__iter_2__antenna__violating__pins": 2, - "drt__repair_antennas__iter_3__global_route__vias": 185, - "drt__repair_antennas__iter_3__antenna_diodes_count": 475, - "drt__repair_antennas__iter_3__route__drc_errors__iter:0": 2, - "drt__repair_antennas__iter_3__route__wirelength__iter:0": 1771672, - "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 0, - "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1771670, - "drt__repair_antennas__iter_3__route__drc_errors": 0, - "drt__repair_antennas__iter_3__route__wirelength": 1771670, - "drt__repair_antennas__iter_3__route__vias": 317279, - "drt__repair_antennas__iter_3__route__vias__singlecut": 317279, - "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__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.15266899288002853", - "DRT::worst_slack_max": "-0.29600944755411757", - "DRT::tns_max": "-2.2650397754063167", - "DRT::clock_skew": "0.5331200076738618", - "DRT::max_slew_slack": "-21.27128839492798", + "DRT::worst_slack_min": "-0.12386625409297608", + "DRT::worst_slack_max": "-0.4364633222825431", + "DRT::tns_max": "-8.159444906235557", + "DRT::clock_skew": "0.5813669710195145", + "DRT::max_slew_slack": "-26.41639510790507", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-15.433284565692801", + "DRT::max_capacitance_slack": "-22.658944406618186", "DRT::clock_period": "8.000000", - "flow__warnings__count": 857, + "flow__warnings__count": 141, "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 4d9dcce09e..4cdcd6aa74 100644 --- a/test/jpeg_sky130hd.metrics_limits +++ b/test/jpeg_sky130hd.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "54760.799999999996" - ,"DPL::design_area" : "647455.2" + ,"DPL::design_area" : "648721.2" ,"DPL::utilization" : "29.639999999999997" - ,"RSZ::repair_design_buffer_count" : "501" + ,"RSZ::repair_design_buffer_count" : "506" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.7928812497647715" - ,"RSZ::worst_slack_max" : "-0.7996642685478582" - ,"RSZ::tns_max" : "-3650.7200000000007" - ,"RSZ::hold_buffer_count" : "39" - ,"GRT::ANT::errors" : "1" + ,"RSZ::worst_slack_min" : "-0.7973303576394838" + ,"RSZ::worst_slack_max" : "-0.8251851879813026" + ,"RSZ::tns_max" : "-3650.745185187982" + ,"RSZ::hold_buffer_count" : "2" + ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.9526689928800286" - ,"DRT::worst_slack_max" : "-1.0960094475541176" - ,"DRT::tns_max" : "-3652.985039775407" - ,"DRT::clock_skew" : "0.6397440092086342" - ,"DRT::max_slew_slack" : "-25.525546073913574" - ,"DRT::max_capacitance_slack" : "-18.51994147883136" + ,"DRT::worst_slack_min" : "-0.9238662540929761" + ,"DRT::worst_slack_max" : "-1.2364633222825432" + ,"DRT::tns_max" : "-3658.879444906236" + ,"DRT::clock_skew" : "0.6976403652234174" + ,"DRT::max_slew_slack" : "-31.699674129486084" + ,"DRT::max_capacitance_slack" : "-27.19073328794182" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "8.0" ,"DRT::ANT::errors" : "0" From 3d2df2be3c559537e559633954889f92f57e6fbc Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Wed, 2 Jul 2025 09:20:53 +0000 Subject: [PATCH 38/41] gpl: fix conflict, member function previously renamed from name to getName Signed-off-by: Augusto Berndt --- src/gpl/src/graphics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/graphics.cpp b/src/gpl/src/graphics.cpp index 5cba72cb35..2d96a49e4c 100644 --- a/src/gpl/src/graphics.cpp +++ b/src/gpl/src/graphics.cpp @@ -350,7 +350,7 @@ void Graphics::reportSelected() if (selected_ == kInvalidIndex) { return; } - logger_->report("Inst: {}", nbc_->getGCellByIndex(selected_)->name()); + logger_->report("Inst: {}", nbc_->getGCellByIndex(selected_)->getName()); if (np_) { auto wlCoeffX = np_->getWireLengthCoefX(); From 96bb42a682a169673ae7717d0a43a928ec3b85ce Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 8 Jul 2025 14:29:58 +0000 Subject: [PATCH 39/41] gpl: member function renamed Signed-off-by: Augusto Berndt --- src/gpl/src/nesterovBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index 9b9a941f83..c9c101ffb9 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -1410,7 +1410,7 @@ FloatPoint NesterovBaseCommon::getWireLengthGradientPinWA(const GPin* gPin, "getGradientWAPin", 1, "{}, X[{:g} {:g}] Y[{:g} {:g}]", - gPin->gCell()->name(), + gPin->gCell()->getName(), gradientMinX, gradientMaxX, gradientMinY, From 35d2d82c1f03f2c2bfaf17952d709472a18ad2b2 Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 8 Jul 2025 17:48:05 +0000 Subject: [PATCH 40/41] gpl: update tests Signed-off-by: Augusto Berndt --- src/gpl/test/convergence01.ok | 7 ++++++- src/gpl/test/error01.ok | 5 ++++- src/gpl/test/simple01-td-tune.ok | 7 +++++-- src/gpl/test/simple01-td.ok | 7 +++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index e7d33cca25..125bae84a5 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -112,8 +112,13 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1001] Finished with Overflow: 0.097203 [INFO GPL-1002] Placed Cell Area 14.5946 [INFO GPL-1003] Available Free Area 116.6400 -[INFO GPL-1004] Minimum Feasible Density 0.1251 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.1400 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.1390 [INFO GPL-1008] - For 80% usage of free space: 0.1564 +[INFO GPL-1009] - For 50% usage of free space: 0.2502 +[INFO GPL-1010] Original area (um^2): 15.53 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -0.93 (-6.01%) +[INFO GPL-1013] Final placement area: 14.59 (-6.01%) No differences found. diff --git a/src/gpl/test/error01.ok b/src/gpl/test/error01.ok index 1f51930a94..89e8db66d2 100644 --- a/src/gpl/test/error01.ok +++ b/src/gpl/test/error01.ok @@ -66,4 +66,7 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.6637 [INFO GPL-1008] - For 80% usage of free space: 0.7467 -[INFO GPL-1009] - For 50% usage of free space: 1.1946 +[INFO GPL-1010] Original area (um^2): 569.77 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: 0.00 (+0.00%) +[INFO GPL-1013] Final placement area: 569.77 (+0.00%) diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index 50004cdc00..7f243e1a1c 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -278,10 +278,13 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1001] Finished with Overflow: 0.098870 [INFO GPL-1002] Placed Cell Area 487.0460 [INFO GPL-1003] Available Free Area 953.8760 -[INFO GPL-1004] Minimum Feasible Density 0.5106 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5673 [INFO GPL-1008] - For 80% usage of free space: 0.6382 -[INFO GPL-1009] - For 50% usage of free space: 1.0212 +[INFO GPL-1010] Original area (um^2): 553.28 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -66.23 (-11.97%) +[INFO GPL-1013] Final placement area: 487.05 (-11.97%) worst slack max 1.40 No differences found. diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index 0b53ae818c..77f49247df 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -220,10 +220,13 @@ Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group [INFO GPL-1001] Finished with Overflow: 0.099548 [INFO GPL-1002] Placed Cell Area 487.0460 [INFO GPL-1003] Available Free Area 953.8760 -[INFO GPL-1004] Minimum Feasible Density 0.5106 (cell_area / free_area) +[INFO GPL-1004] Minimum Feasible Density 0.5900 (cell_area / free_area) [INFO GPL-1006] Suggested Target Densities: [INFO GPL-1007] - For 90% usage of free space: 0.5673 [INFO GPL-1008] - For 80% usage of free space: 0.6382 -[INFO GPL-1009] - For 50% usage of free space: 1.0212 +[INFO GPL-1010] Original area (um^2): 553.28 +[INFO GPL-1011] Total routability artificial inflation: 0.00 (+0.00%) +[INFO GPL-1012] Total timing-driven delta area: -66.23 (-11.97%) +[INFO GPL-1013] Final placement area: 487.05 (-11.97%) worst slack max 1.40 No differences found. From 5181c86fc3748f2cad78896012acd104ba66f6bd Mon Sep 17 00:00:00 2001 From: Augusto Berndt Date: Tue, 8 Jul 2025 21:34:09 +0000 Subject: [PATCH 41/41] gpl: update tests after filler gcell removal update Signed-off-by: Augusto Berndt --- test/aes_sky130hd.metrics | 189 +++++++++++++++-------------- test/aes_sky130hd.metrics_limits | 24 ++-- test/jpeg_sky130hd.metrics | 194 +++++++++++++++++------------- test/jpeg_sky130hd.metrics_limits | 24 ++-- test/jpeg_sky130hs.metrics | 177 +++++++++++++++------------ test/jpeg_sky130hs.metrics_limits | 26 ++-- 6 files changed, 347 insertions(+), 287 deletions(-) diff --git a/test/aes_sky130hd.metrics b/test/aes_sky130hd.metrics index 07627dea0d..d9286950f4 100644 --- a/test/aes_sky130hd.metrics +++ b/test/aes_sky130hd.metrics @@ -15,120 +15,135 @@ "design__instance__displacement__mean": 0.009, "design__instance__displacement__max": 9.31, "route__wirelength__estimated": 1.32771e+06, - "design__instance__count__setup_buffer": 1933, - "design__instance__count__hold_buffer": 35, - "RSZ::worst_slack_min": "-0.8632286241261018", - "RSZ::worst_slack_max": "-0.7366942819848878", - "RSZ::tns_max": "-58.65282825437742", - "RSZ::hold_buffer_count": "35", - "design__instance__displacement__total": 10809, - "design__instance__displacement__mean": 0.186, - "design__instance__displacement__max": 14.568, - "route__wirelength__estimated": 1.5204e+06, - "DPL::utilization": "5.7", - "DPL::design_area": "171476", - "route__net": 17879, + "design__instance__count__setup_buffer": 2087, + "design__instance__count__hold_buffer": 454, + "RSZ::worst_slack_min": "0.0008442136118009605", + "RSZ::worst_slack_max": "-0.6960001660893692", + "RSZ::tns_max": "-74.39109094847355", + "RSZ::hold_buffer_count": "454", + "design__instance__displacement__total": 11092.9, + "design__instance__displacement__mean": 0.19, + "design__instance__displacement__max": 14.876, + "route__wirelength__estimated": 1.53646e+06, + "DPL::utilization": "5.6", + "DPL::design_area": "169438", + "route__net": 18035, "route__net__special": 2, - "global_route__vias": 181100, - "global_route__wirelength": 2322698, - "grt__global_route__vias": 11889, - "grt__global_route__vias": 2878, - "grt__global_route__vias": 676, - "grt__global_route__vias": 171, - "grt__global_route__vias": 182, - "grt__antenna_diodes_count": 1025, + "global_route__vias": 182333, + "global_route__wirelength": 2351906, + "grt__global_route__vias": 11527, + "grt__global_route__vias": 2284, + "grt__global_route__vias": 699, + "grt__global_route__vias": 132, + "grt__global_route__vias": 36, + "grt__antenna_diodes_count": 937, "grt__antenna__violating__nets": 0, "grt__antenna__violating__pins": 0, "GRT::ANT::errors": "0", - "route__net": 17879, + "route__net": 18035, "route__net__special": 2, - "route__drc_errors__iter:0": 6917, - "route__wirelength__iter:0": 1835682, - "route__drc_errors__iter:1": 2362, - "route__wirelength__iter:1": 1831103, - "route__drc_errors__iter:2": 1933, - "route__wirelength__iter:2": 1829876, - "route__drc_errors__iter:3": 87, - "route__wirelength__iter:3": 1830218, - "route__drc_errors__iter:4": 3, - "route__wirelength__iter:4": 1830200, + "route__drc_errors__iter:0": 7173, + "route__wirelength__iter:0": 1860926, + "route__drc_errors__iter:1": 2391, + "route__wirelength__iter:1": 1856803, + "route__drc_errors__iter:2": 1828, + "route__wirelength__iter:2": 1855691, + "route__drc_errors__iter:3": 64, + "route__wirelength__iter:3": 1855788, + "route__drc_errors__iter:4": 7, + "route__wirelength__iter:4": 1855775, "route__drc_errors__iter:5": 0, - "route__wirelength__iter:5": 1830200, + "route__wirelength__iter:5": 1855777, "route__drc_errors": 0, - "route__wirelength": 1830200, - "route__vias": 166604, - "route__vias__singlecut": 166604, + "route__wirelength": 1855777, + "route__vias": 167607, + "route__vias__singlecut": 167607, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 130, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 134, - "drt__repair_antennas__iter_0__global_route__vias": 2772, - "drt__repair_antennas__iter_0__antenna_diodes_count": 1487, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 1199, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1831438, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 500, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1831254, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 430, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1831266, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 17, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1831384, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 116, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 124, + "drt__repair_antennas__iter_0__global_route__vias": 2390, + "drt__repair_antennas__iter_0__antenna_diodes_count": 1297, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 917, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1856499, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 363, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1856422, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 269, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1856393, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 6, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1856440, "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1831386, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1856449, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1831386, - "drt__repair_antennas__iter_0__route__vias": 167654, - "drt__repair_antennas__iter_0__route__vias__singlecut": 167654, + "drt__repair_antennas__iter_0__route__wirelength": 1856449, + "drt__repair_antennas__iter_0__route__vias": 168347, + "drt__repair_antennas__iter_0__route__vias__singlecut": 168347, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 11, - "drt__repair_antennas__iter_0__antenna__violating__pins": 11, - "drt__repair_antennas__iter_1__global_route__vias": 351, - "drt__repair_antennas__iter_1__antenna_diodes_count": 1539, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 63, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1831534, + "drt__repair_antennas__iter_0__antenna__violating__nets": 13, + "drt__repair_antennas__iter_0__antenna__violating__pins": 13, + "drt__repair_antennas__iter_1__global_route__vias": 551, + "drt__repair_antennas__iter_1__antenna_diodes_count": 1332, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 125, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1856548, "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 24, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1831535, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 18, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1831528, - "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1831540, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1856534, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 15, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1856537, + "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1856523, + "drt__repair_antennas__iter_1__route__drc_errors__iter:4": 0, + "drt__repair_antennas__iter_1__route__wirelength__iter:4": 1856527, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1831540, - "drt__repair_antennas__iter_1__route__vias": 167749, - "drt__repair_antennas__iter_1__route__vias__singlecut": 167749, + "drt__repair_antennas__iter_1__route__wirelength": 1856527, + "drt__repair_antennas__iter_1__route__vias": 168423, + "drt__repair_antennas__iter_1__route__vias__singlecut": 168423, "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__global_route__vias": 30, - "drt__repair_antennas__iter_2__antenna_diodes_count": 1548, - "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 7, - "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1831585, - "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 2, - "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1831582, - "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 2, - "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1831574, + "drt__repair_antennas__iter_2__global_route__vias": 41, + "drt__repair_antennas__iter_2__antenna_diodes_count": 1343, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 21, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1856560, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 3, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1856560, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 4, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1856557, "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1831572, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1856553, "drt__repair_antennas__iter_2__route__drc_errors": 0, - "drt__repair_antennas__iter_2__route__wirelength": 1831572, - "drt__repair_antennas__iter_2__route__vias": 167758, - "drt__repair_antennas__iter_2__route__vias__singlecut": 167758, + "drt__repair_antennas__iter_2__route__wirelength": 1856553, + "drt__repair_antennas__iter_2__route__vias": 168443, + "drt__repair_antennas__iter_2__route__vias__singlecut": 168443, "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": 1, + "drt__repair_antennas__iter_2__antenna__violating__pins": 1, + "drt__repair_antennas__iter_3__global_route__vias": 53, + "drt__repair_antennas__iter_3__antenna_diodes_count": 1354, + "drt__repair_antennas__iter_3__route__drc_errors__iter:0": 21, + "drt__repair_antennas__iter_3__route__wirelength__iter:0": 1856607, + "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 0, + "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1856606, + "drt__repair_antennas__iter_3__route__drc_errors": 0, + "drt__repair_antennas__iter_3__route__wirelength": 1856606, + "drt__repair_antennas__iter_3__route__vias": 168464, + "drt__repair_antennas__iter_3__route__vias__singlecut": 168464, + "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.9670995389354671", - "DRT::worst_slack_max": "-1.433452952466133", - "DRT::tns_max": "-135.00848110494726", - "DRT::clock_skew": "0.602163336238047", - "DRT::max_slew_slack": "-15.403982735162627", + "DRT::worst_slack_min": "-0.1509574730168613", + "DRT::worst_slack_max": "-1.1278049924288338", + "DRT::tns_max": "-159.94060217832424", + "DRT::clock_skew": "0.5965229590242205", + "DRT::max_slew_slack": "-7.639985069702311", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-18.279009050407286", + "DRT::max_capacitance_slack": "-8.46118517188315", "DRT::clock_period": "3.740000", - "flow__warnings__count": 35, + "flow__warnings__count": 33, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/aes_sky130hd.metrics_limits b/test/aes_sky130hd.metrics_limits index 0b10500cde..a7b769b8be 100644 --- a/test/aes_sky130hd.metrics_limits +++ b/test/aes_sky130hd.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "20652.0" - ,"DPL::design_area" : "205771.19999999998" - ,"DPL::utilization" : "6.84" + ,"DPL::design_area" : "203325.6" + ,"DPL::utilization" : "6.72" ,"RSZ::repair_design_buffer_count" : "448" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-1.237228624126102" - ,"RSZ::worst_slack_max" : "-1.110694281984888" - ,"RSZ::tns_max" : "-702.3068282543775" - ,"RSZ::hold_buffer_count" : "42" + ,"RSZ::worst_slack_min" : "-0.3731557863881991" + ,"RSZ::worst_slack_max" : "-1.0700001660893692" + ,"RSZ::tns_max" : "-718.0450909484737" + ,"RSZ::hold_buffer_count" : "544" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-1.3410995389354672" - ,"DRT::worst_slack_max" : "-1.8074529524661331" - ,"DRT::tns_max" : "-778.6624811049473" - ,"DRT::clock_skew" : "0.7225960034856563" - ,"DRT::max_slew_slack" : "-18.484779282195152" - ,"DRT::max_capacitance_slack" : "-21.934810860488742" + ,"DRT::worst_slack_min" : "-0.5249574730168614" + ,"DRT::worst_slack_max" : "-1.501804992428834" + ,"DRT::tns_max" : "-803.5946021783243" + ,"DRT::clock_skew" : "0.7158275508290646" + ,"DRT::max_slew_slack" : "-9.167982083642773" + ,"DRT::max_capacitance_slack" : "-10.15342220625978" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "3.74" ,"DRT::ANT::errors" : "0" diff --git a/test/jpeg_sky130hd.metrics b/test/jpeg_sky130hd.metrics index 8828f02268..80a5049a84 100644 --- a/test/jpeg_sky130hd.metrics +++ b/test/jpeg_sky130hd.metrics @@ -3,123 +3,151 @@ "IFP::instance_count": "45634", "floorplan__design__io": 47, "design__io__hpwl": 12718446, - "design__instance__displacement__total": 126891, + "design__instance__displacement__total": 126890, "design__instance__displacement__mean": 1.722, "design__instance__displacement__max": 13.267, - "route__wirelength__estimated": 1.53197e+06, - "RSZ::repair_design_buffer_count": "422", + "route__wirelength__estimated": 1.53161e+06, + "RSZ::repair_design_buffer_count": "421", "RSZ::max_slew_slack": "13.58924905459086", "RSZ::max_fanout_slack": "100.0", "RSZ::max_capacitance_slack": "22.476739997552407", "design__instance__displacement__total": 3859.64, "design__instance__displacement__mean": 0.051, "design__instance__displacement__max": 12.332, - "route__wirelength__estimated": 1.58979e+06, - "design__instance__count__setup_buffer": 273, - "design__instance__count__hold_buffer": 2, - "RSZ::worst_slack_min": "0.0026696423605162937", - "RSZ::worst_slack_max": "-0.025185187981302513", - "RSZ::tns_max": "-0.025185187981302513", - "RSZ::hold_buffer_count": "2", - "design__instance__displacement__total": 1972.67, - "design__instance__displacement__mean": 0.026, - "design__instance__displacement__max": 13.21, - "route__wirelength__estimated": 1.63523e+06, + "route__wirelength__estimated": 1.58942e+06, + "design__instance__count__setup_buffer": 206, + "design__instance__count__hold_buffer": 3, + "RSZ::worst_slack_min": "0.0033071324392855094", + "RSZ::worst_slack_max": "0.0006785683318421187", + "RSZ::tns_max": "0.0", + "RSZ::hold_buffer_count": "3", + "design__instance__displacement__total": 1600.07, + "design__instance__displacement__mean": 0.021, + "design__instance__displacement__max": 11.42, + "route__wirelength__estimated": 1.63963e+06, "DPL::utilization": "24.7", - "DPL::design_area": "540601", - "route__net": 57602, + "DPL::design_area": "540223", + "route__net": 57535, "route__net__special": 2, - "global_route__vias": 356111, - "global_route__wirelength": 2673825, - "grt__global_route__vias": 4803, - "grt__global_route__vias": 86, - "grt__antenna_diodes_count": 118, + "global_route__vias": 356145, + "global_route__wirelength": 2681277, + "grt__global_route__vias": 4689, + "grt__global_route__vias": 105, + "grt__antenna_diodes_count": 115, "grt__antenna__violating__nets": 0, "grt__antenna__violating__pins": 0, "GRT::ANT::errors": "0", - "route__net": 57602, + "route__net": 57535, "route__net__special": 2, - "route__drc_errors__iter:0": 5871, - "route__wirelength__iter:0": 1788234, - "route__drc_errors__iter:1": 528, - "route__wirelength__iter:1": 1778560, - "route__drc_errors__iter:2": 210, - "route__wirelength__iter:2": 1777641, + "route__drc_errors__iter:0": 5854, + "route__wirelength__iter:0": 1796171, + "route__drc_errors__iter:1": 623, + "route__wirelength__iter:1": 1786298, + "route__drc_errors__iter:2": 216, + "route__wirelength__iter:2": 1785653, "route__drc_errors__iter:3": 0, - "route__wirelength__iter:3": 1777601, + "route__wirelength__iter:3": 1785607, "route__drc_errors": 0, - "route__wirelength": 1777601, - "route__vias": 316382, - "route__vias__singlecut": 316382, + "route__wirelength": 1785607, + "route__vias": 316347, + "route__vias__singlecut": 316347, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 58, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 65, - "drt__repair_antennas__iter_0__global_route__vias": 1760, - "drt__repair_antennas__iter_0__antenna_diodes_count": 271, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 458, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1778345, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 80, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1778223, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 55, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1778211, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1778210, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 46, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 53, + "drt__repair_antennas__iter_0__global_route__vias": 1285, + "drt__repair_antennas__iter_0__antenna_diodes_count": 225, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 529, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 1785878, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 131, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 1785797, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 128, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 1785776, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 4, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 1785804, + "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 1785804, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 1778210, - "drt__repair_antennas__iter_0__route__vias": 316613, - "drt__repair_antennas__iter_0__route__vias__singlecut": 316613, + "drt__repair_antennas__iter_0__route__wirelength": 1785804, + "drt__repair_antennas__iter_0__route__vias": 316563, + "drt__repair_antennas__iter_0__route__vias__singlecut": 316563, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 12, - "drt__repair_antennas__iter_0__antenna__violating__pins": 15, - "drt__repair_antennas__iter_1__global_route__vias": 432, - "drt__repair_antennas__iter_1__antenna_diodes_count": 304, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 118, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1778240, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 64, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1778215, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 44, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1778208, + "drt__repair_antennas__iter_0__antenna__violating__nets": 6, + "drt__repair_antennas__iter_0__antenna__violating__pins": 8, + "drt__repair_antennas__iter_1__global_route__vias": 344, + "drt__repair_antennas__iter_1__antenna_diodes_count": 233, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 17, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 1785748, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 1, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 1785733, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 3, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 1785733, "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1778224, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1785735, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 1778224, - "drt__repair_antennas__iter_1__route__vias": 316699, - "drt__repair_antennas__iter_1__route__vias__singlecut": 316699, + "drt__repair_antennas__iter_1__route__wirelength": 1785735, + "drt__repair_antennas__iter_1__route__vias": 316581, + "drt__repair_antennas__iter_1__route__vias__singlecut": 316581, "drt__repair_antennas__iter_1__route__vias__multicut": 0, "drt__repair_antennas__iter_1__antenna__violating__nets": 3, - "drt__repair_antennas__iter_1__antenna__violating__pins": 3, - "drt__repair_antennas__iter_2__global_route__vias": 242, - "drt__repair_antennas__iter_2__antenna_diodes_count": 307, - "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 22, - "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1778244, - "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 3, - "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1778233, - "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 2, - "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1778233, + "drt__repair_antennas__iter_1__antenna__violating__pins": 4, + "drt__repair_antennas__iter_2__global_route__vias": 225, + "drt__repair_antennas__iter_2__antenna_diodes_count": 237, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 16, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 1785775, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 2, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 1785759, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 3, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 1785764, "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1778233, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 1785767, "drt__repair_antennas__iter_2__route__drc_errors": 0, - "drt__repair_antennas__iter_2__route__wirelength": 1778233, - "drt__repair_antennas__iter_2__route__vias": 316716, - "drt__repair_antennas__iter_2__route__vias__singlecut": 316716, + "drt__repair_antennas__iter_2__route__wirelength": 1785767, + "drt__repair_antennas__iter_2__route__vias": 316594, + "drt__repair_antennas__iter_2__route__vias__singlecut": 316594, "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__global_route__vias": 129, + "drt__repair_antennas__iter_3__antenna_diodes_count": 239, + "drt__repair_antennas__iter_3__route__drc_errors__iter:0": 2, + "drt__repair_antennas__iter_3__route__wirelength__iter:0": 1785756, + "drt__repair_antennas__iter_3__route__drc_errors__iter:1": 0, + "drt__repair_antennas__iter_3__route__wirelength__iter:1": 1785749, + "drt__repair_antennas__iter_3__route__drc_errors": 0, + "drt__repair_antennas__iter_3__route__wirelength": 1785749, + "drt__repair_antennas__iter_3__route__vias": 316585, + "drt__repair_antennas__iter_3__route__vias__singlecut": 316585, + "drt__repair_antennas__iter_3__route__vias__multicut": 0, + "drt__repair_antennas__iter_3__antenna__violating__nets": 1, + "drt__repair_antennas__iter_3__antenna__violating__pins": 1, + "drt__repair_antennas__iter_4__global_route__vias": 92, + "drt__repair_antennas__iter_4__antenna_diodes_count": 240, + "drt__repair_antennas__iter_4__route__drc_errors__iter:0": 1, + "drt__repair_antennas__iter_4__route__wirelength__iter:0": 1785797, + "drt__repair_antennas__iter_4__route__drc_errors__iter:1": 0, + "drt__repair_antennas__iter_4__route__wirelength__iter:1": 1785797, + "drt__repair_antennas__iter_4__route__drc_errors": 0, + "drt__repair_antennas__iter_4__route__wirelength": 1785797, + "drt__repair_antennas__iter_4__route__vias": 316590, + "drt__repair_antennas__iter_4__route__vias__singlecut": 316590, + "drt__repair_antennas__iter_4__route__vias__multicut": 0, + "drt__repair_antennas__iter_4__antenna__violating__nets": 0, + "drt__repair_antennas__iter_4__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.12386625409297608", - "DRT::worst_slack_max": "-0.4364633222825431", - "DRT::tns_max": "-8.159444906235557", - "DRT::clock_skew": "0.5813669710195145", - "DRT::max_slew_slack": "-26.41639510790507", + "DRT::worst_slack_min": "-0.12158074890984423", + "DRT::worst_slack_max": "-0.3827409608691892", + "DRT::tns_max": "-7.657284800746603", + "DRT::clock_skew": "0.5386511389389753", + "DRT::max_slew_slack": "-27.310168743133545", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-22.658944406618186", + "DRT::max_capacitance_slack": "-22.67765140773784", "DRT::clock_period": "8.000000", - "flow__warnings__count": 141, + "flow__warnings__count": 177, "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 4cdcd6aa74..796ee7b523 100644 --- a/test/jpeg_sky130hd.metrics_limits +++ b/test/jpeg_sky130hd.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "54760.799999999996" - ,"DPL::design_area" : "648721.2" + ,"DPL::design_area" : "648267.6" ,"DPL::utilization" : "29.639999999999997" - ,"RSZ::repair_design_buffer_count" : "506" + ,"RSZ::repair_design_buffer_count" : "505" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.7973303576394838" - ,"RSZ::worst_slack_max" : "-0.8251851879813026" - ,"RSZ::tns_max" : "-3650.745185187982" - ,"RSZ::hold_buffer_count" : "2" + ,"RSZ::worst_slack_min" : "-0.7966928675607146" + ,"RSZ::worst_slack_max" : "-0.799321431668158" + ,"RSZ::tns_max" : "-3650.7200000000007" + ,"RSZ::hold_buffer_count" : "3" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.9238662540929761" - ,"DRT::worst_slack_max" : "-1.2364633222825432" - ,"DRT::tns_max" : "-3658.879444906236" - ,"DRT::clock_skew" : "0.6976403652234174" - ,"DRT::max_slew_slack" : "-31.699674129486084" - ,"DRT::max_capacitance_slack" : "-27.19073328794182" + ,"DRT::worst_slack_min" : "-0.9215807489098443" + ,"DRT::worst_slack_max" : "-1.1827409608691892" + ,"DRT::tns_max" : "-3658.3772848007475" + ,"DRT::clock_skew" : "0.6463813667267704" + ,"DRT::max_slew_slack" : "-32.772202491760254" + ,"DRT::max_capacitance_slack" : "-27.21318168928541" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "8.0" ,"DRT::ANT::errors" : "0" diff --git a/test/jpeg_sky130hs.metrics b/test/jpeg_sky130hs.metrics index 13d8b81e3e..b3c7571149 100644 --- a/test/jpeg_sky130hs.metrics +++ b/test/jpeg_sky130hs.metrics @@ -2,109 +2,126 @@ "IFP::ord_version": "", "IFP::instance_count": "49868", "floorplan__design__io": 47, - "design__io__hpwl": 12555842, - "design__instance__displacement__total": 186517, - "design__instance__displacement__mean": 2.572, - "design__instance__displacement__max": 16.996, - "route__wirelength__estimated": 1.89499e+06, - "RSZ::repair_design_buffer_count": "644", - "RSZ::max_slew_slack": "-8.952916413545609", + "design__io__hpwl": 12505066, + "design__instance__displacement__total": 180749, + "design__instance__displacement__mean": 2.494, + "design__instance__displacement__max": 17.939, + "route__wirelength__estimated": 1.90473e+06, + "RSZ::repair_design_buffer_count": "612", + "RSZ::max_slew_slack": "-10.240619629621506", "RSZ::max_fanout_slack": "100.0", - "RSZ::max_capacitance_slack": "-9.210573601790173", - "design__instance__displacement__total": 8662.6, + "RSZ::max_capacitance_slack": "-10.486362874449133", + "design__instance__displacement__total": 8710.5, "design__instance__displacement__mean": 0.118, - "design__instance__displacement__max": 18.15, - "route__wirelength__estimated": 1.96036e+06, - "design__instance__count__setup_buffer": 19, - "design__instance__count__hold_buffer": 17, - "RSZ::worst_slack_min": "0.005464184814835333", - "RSZ::worst_slack_max": "0.0030606629208480905", + "design__instance__displacement__max": 17.7, + "route__wirelength__estimated": 1.9712e+06, + "design__instance__count__setup_buffer": 27, + "design__instance__count__hold_buffer": 18, + "RSZ::worst_slack_min": "0.004359401851785444", + "RSZ::worst_slack_max": "0.01234123949076733", "RSZ::tns_max": "0.0", - "RSZ::hold_buffer_count": "17", - "design__instance__displacement__total": 436.819, - "design__instance__displacement__mean": 0.005, - "design__instance__displacement__max": 11.91, - "route__wirelength__estimated": 1.96505e+06, - "DPL::utilization": "35.8", - "DPL::design_area": "780651", - "route__net": 61759, + "RSZ::hold_buffer_count": "18", + "design__instance__displacement__total": 645.451, + "design__instance__displacement__mean": 0.008, + "design__instance__displacement__max": 16.544, + "route__wirelength__estimated": 1.98078e+06, + "DPL::utilization": "35.7", + "DPL::design_area": "778782", + "route__net": 61742, "route__net__special": 2, - "global_route__vias": 401270, - "global_route__wirelength": 3159295, - "grt__global_route__vias": 3769, - "grt__global_route__vias": 29, - "grt__antenna_diodes_count": 59, + "global_route__vias": 400755, + "global_route__wirelength": 3187231, + "grt__global_route__vias": 1749, + "grt__global_route__vias": 55, + "grt__antenna_diodes_count": 44, "grt__antenna__violating__nets": 0, "grt__antenna__violating__pins": 0, "GRT::ANT::errors": "0", - "route__net": 61759, + "route__net": 61742, "route__net__special": 2, - "route__drc_errors__iter:0": 6555, - "route__wirelength__iter:0": 2134374, - "route__drc_errors__iter:1": 513, - "route__wirelength__iter:1": 2123834, - "route__drc_errors__iter:2": 260, - "route__wirelength__iter:2": 2123320, - "route__drc_errors__iter:3": 2, - "route__wirelength__iter:3": 2123261, - "route__drc_errors__iter:4": 0, - "route__wirelength__iter:4": 2123260, + "route__drc_errors__iter:0": 6230, + "route__wirelength__iter:0": 2157257, + "route__drc_errors__iter:1": 605, + "route__wirelength__iter:1": 2146993, + "route__drc_errors__iter:2": 257, + "route__wirelength__iter:2": 2146352, + "route__drc_errors__iter:3": 0, + "route__wirelength__iter:3": 2146317, "route__drc_errors": 0, - "route__wirelength": 2123260, - "route__vias": 345242, - "route__vias__singlecut": 345242, + "route__wirelength": 2146317, + "route__vias": 345616, + "route__vias__singlecut": 345616, "route__vias__multicut": 0, "DRT::drv": "0", - "drt__repair_antennas__pre_repair__antenna__violating__nets": 42, - "drt__repair_antennas__pre_repair__antenna__violating__pins": 54, - "drt__repair_antennas__iter_0__global_route__vias": 1089, - "drt__repair_antennas__iter_0__antenna_diodes_count": 127, - "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 393, - "drt__repair_antennas__iter_0__route__wirelength__iter:0": 2123544, - "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 90, - "drt__repair_antennas__iter_0__route__wirelength__iter:1": 2123464, - "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 67, - "drt__repair_antennas__iter_0__route__wirelength__iter:2": 2123460, - "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_0__route__wirelength__iter:3": 2123471, + "drt__repair_antennas__pre_repair__antenna__violating__nets": 34, + "drt__repair_antennas__pre_repair__antenna__violating__pins": 40, + "drt__repair_antennas__iter_0__global_route__vias": 1142, + "drt__repair_antennas__iter_0__antenna_diodes_count": 94, + "drt__repair_antennas__iter_0__route__drc_errors__iter:0": 390, + "drt__repair_antennas__iter_0__route__wirelength__iter:0": 2146569, + "drt__repair_antennas__iter_0__route__drc_errors__iter:1": 99, + "drt__repair_antennas__iter_0__route__wirelength__iter:1": 2146536, + "drt__repair_antennas__iter_0__route__drc_errors__iter:2": 79, + "drt__repair_antennas__iter_0__route__wirelength__iter:2": 2146529, + "drt__repair_antennas__iter_0__route__drc_errors__iter:3": 1, + "drt__repair_antennas__iter_0__route__wirelength__iter:3": 2146547, + "drt__repair_antennas__iter_0__route__drc_errors__iter:4": 0, + "drt__repair_antennas__iter_0__route__wirelength__iter:4": 2146546, "drt__repair_antennas__iter_0__route__drc_errors": 0, - "drt__repair_antennas__iter_0__route__wirelength": 2123471, - "drt__repair_antennas__iter_0__route__vias": 345350, - "drt__repair_antennas__iter_0__route__vias__singlecut": 345350, + "drt__repair_antennas__iter_0__route__wirelength": 2146546, + "drt__repair_antennas__iter_0__route__vias": 345664, + "drt__repair_antennas__iter_0__route__vias__singlecut": 345664, "drt__repair_antennas__iter_0__route__vias__multicut": 0, - "drt__repair_antennas__iter_0__antenna__violating__nets": 8, - "drt__repair_antennas__iter_0__antenna__violating__pins": 11, - "drt__repair_antennas__iter_1__global_route__vias": 487, - "drt__repair_antennas__iter_1__antenna_diodes_count": 140, - "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 9, - "drt__repair_antennas__iter_1__route__wirelength__iter:0": 2123542, - "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 3, - "drt__repair_antennas__iter_1__route__wirelength__iter:1": 2123532, - "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 2, - "drt__repair_antennas__iter_1__route__wirelength__iter:2": 2123536, + "drt__repair_antennas__iter_0__antenna__violating__nets": 12, + "drt__repair_antennas__iter_0__antenna__violating__pins": 16, + "drt__repair_antennas__iter_1__global_route__vias": 904, + "drt__repair_antennas__iter_1__antenna_diodes_count": 112, + "drt__repair_antennas__iter_1__route__drc_errors__iter:0": 129, + "drt__repair_antennas__iter_1__route__wirelength__iter:0": 2146651, + "drt__repair_antennas__iter_1__route__drc_errors__iter:1": 26, + "drt__repair_antennas__iter_1__route__wirelength__iter:1": 2146620, + "drt__repair_antennas__iter_1__route__drc_errors__iter:2": 19, + "drt__repair_antennas__iter_1__route__wirelength__iter:2": 2146616, "drt__repair_antennas__iter_1__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 2123536, + "drt__repair_antennas__iter_1__route__wirelength__iter:3": 2146613, "drt__repair_antennas__iter_1__route__drc_errors": 0, - "drt__repair_antennas__iter_1__route__wirelength": 2123536, - "drt__repair_antennas__iter_1__route__vias": 345377, - "drt__repair_antennas__iter_1__route__vias__singlecut": 345377, + "drt__repair_antennas__iter_1__route__wirelength": 2146613, + "drt__repair_antennas__iter_1__route__vias": 345710, + "drt__repair_antennas__iter_1__route__vias__singlecut": 345710, "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": 4, + "drt__repair_antennas__iter_1__antenna__violating__pins": 4, + "drt__repair_antennas__iter_2__global_route__vias": 453, + "drt__repair_antennas__iter_2__antenna_diodes_count": 116, + "drt__repair_antennas__iter_2__route__drc_errors__iter:0": 74, + "drt__repair_antennas__iter_2__route__wirelength__iter:0": 2146628, + "drt__repair_antennas__iter_2__route__drc_errors__iter:1": 7, + "drt__repair_antennas__iter_2__route__wirelength__iter:1": 2146617, + "drt__repair_antennas__iter_2__route__drc_errors__iter:2": 6, + "drt__repair_antennas__iter_2__route__wirelength__iter:2": 2146617, + "drt__repair_antennas__iter_2__route__drc_errors__iter:3": 0, + "drt__repair_antennas__iter_2__route__wirelength__iter:3": 2146619, + "drt__repair_antennas__iter_2__route__drc_errors": 0, + "drt__repair_antennas__iter_2__route__wirelength": 2146619, + "drt__repair_antennas__iter_2__route__vias": 345715, + "drt__repair_antennas__iter_2__route__vias__singlecut": 345715, + "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.051206373923791404", - "DRT::worst_slack_max": "-0.6406706457801143", - "DRT::tns_max": "-87.71786034704019", - "DRT::clock_skew": "0.42018556490203", - "DRT::max_slew_slack": "8.387507498264313", + "DRT::worst_slack_min": "-0.05377209940626381", + "DRT::worst_slack_max": "-0.4588489718057745", + "DRT::tns_max": "-26.685532761072558", + "DRT::clock_skew": "0.4097154953498862", + "DRT::max_slew_slack": "-26.521340012550354", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "13.19036979949142", + "DRT::max_capacitance_slack": "8.032439987207123", "DRT::clock_period": "6.387000", - "flow__warnings__count": 136, + "flow__warnings__count": 61, "flow__errors__count": 0 } \ No newline at end of file diff --git a/test/jpeg_sky130hs.metrics_limits b/test/jpeg_sky130hs.metrics_limits index 929fdf3e8d..52e8081f24 100644 --- a/test/jpeg_sky130hs.metrics_limits +++ b/test/jpeg_sky130hs.metrics_limits @@ -1,22 +1,22 @@ { "IFP::instance_count" : "59841.6" - ,"DPL::design_area" : "936781.2" - ,"DPL::utilization" : "42.959999999999994" - ,"RSZ::repair_design_buffer_count" : "772" - ,"RSZ::max_slew_slack" : "-10.74349969625473" - ,"RSZ::max_capacitance_slack" : "-11.052688322148208" + ,"DPL::design_area" : "934538.4" + ,"DPL::utilization" : "42.84" + ,"RSZ::repair_design_buffer_count" : "734" + ,"RSZ::max_slew_slack" : "-12.288743555545807" + ,"RSZ::max_capacitance_slack" : "-12.58363544933896" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.6332358151851647" - ,"RSZ::worst_slack_max" : "-0.635639337079152" + ,"RSZ::worst_slack_min" : "-0.6343405981482146" + ,"RSZ::worst_slack_max" : "-0.6263587605092327" ,"RSZ::tns_max" : "-3185.0691600000005" - ,"RSZ::hold_buffer_count" : "20" + ,"RSZ::hold_buffer_count" : "21" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.6899063739237914" - ,"DRT::worst_slack_max" : "-1.2793706457801144" - ,"DRT::tns_max" : "-3272.7870203470407" - ,"DRT::clock_skew" : "0.504222677882436" - ,"DRT::max_slew_slack" : "0" + ,"DRT::worst_slack_min" : "-0.6924720994062639" + ,"DRT::worst_slack_max" : "-1.0975489718057745" + ,"DRT::tns_max" : "-3211.754692761073" + ,"DRT::clock_skew" : "0.4916585944198634" + ,"DRT::max_slew_slack" : "-31.825608015060425" ,"DRT::max_capacitance_slack" : "0" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "6.387"