diff --git a/src/gpl/src/graphics.cpp b/src/gpl/src/graphics.cpp index bcf80f67d9..13399e640e 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(); @@ -365,7 +365,7 @@ void Graphics::reportSelected() wlGrad.x, wlGrad.y, weight, - gPin->pin()->name()); + gPin->pin()->getName()); } FloatPoint wlGrad = nbc_->getWireLengthGradientWA( diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index e17115d684..c9c101ffb9 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -87,7 +87,7 @@ void GCell::lock() } } -std::string GCell::name() const +std::string GCell::getName() const { if (insts_.empty()) { return "fill"; @@ -515,7 +515,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!"); } @@ -1250,7 +1250,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MinX updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->minExpSumX()); } } @@ -1266,7 +1266,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MaxX updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->maxExpSumX()); } } @@ -1282,7 +1282,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MinY updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->minExpSumY()); } } @@ -1298,7 +1298,7 @@ void NesterovBaseCommon::updateWireLengthForceWA(float wlCoeffX, float wlCoeffY) "wlUpdateWA", 1, "MaxY updated: {} {:g}", - gPin->gCell()->name(), + gPin->gCell()->getName(), gPin->maxExpSumY()); } } @@ -1338,7 +1338,7 @@ FloatPoint NesterovBaseCommon::getWireLengthGradientWA(const GCell* gCell, "getGradientWA", 1, "{}, gradient: {:g} {:g}", - gCell->name(), + gCell->getName(), gradientPair.x, gradientPair.y); } @@ -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, @@ -1507,12 +1507,16 @@ void NesterovBaseCommon::revertGCellSizeToMinRc() } } -GCell* NesterovBaseCommon::getGCellByIndex(size_t i) +GCell* NesterovBaseCommon::getGCellByIndex(size_t idx) { - if (i >= gCellStor_.size()) { - return nullptr; + if (idx >= gCellStor_.size()) { + log_->error(GPL, + 315, + "getGCellByIndex out of bounds: idx = {}, size = {}", + idx, + gCellStor_.size()); } - return &gCellStor_[i]; + return &gCellStor_[idx]; } // fixPointers() member functions assumes there was push_backs to storage @@ -1705,12 +1709,13 @@ 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; } debugPrint(log_, @@ -1762,6 +1767,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; @@ -1896,17 +1902,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 {}", fillerCellArea()); - 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. @@ -1927,6 +1966,8 @@ void NesterovBase::initFillerGCells() fillerStor_.push_back(myGCell); } + // totalFillerArea_ = fillerStor_.size() * getFillerCellArea(); + initial_filler_area_ = totalFillerArea_; } NesterovBase::~NesterovBase() = default; @@ -1935,18 +1976,16 @@ NesterovBase::~NesterovBase() = default; void NesterovBase::updateGCellCenterLocation( 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) { - for (auto& coordi : coordis) { - int idx = &coordi - &coordis[0]; - nb_gcells_[idx]->setDensityCenterLocation(coordi.x, coordi.y); + for (int idx = 0; idx < coordis.size(); ++idx) { + nb_gcells_[idx]->setDensityCenterLocation(coordis[idx].x, coordis[idx].y); } bg_.updateBinsGCellDensityArea(nb_gcells_); } @@ -2010,7 +2049,7 @@ int NesterovBase::getFillerCnt() const return static_cast(fillerStor_.size()); } -int64_t NesterovBase::fillerCellArea() const +int64_t NesterovBase::getFillerCellArea() const { return static_cast(fillerDx_) * static_cast(fillerDy_); } @@ -2025,7 +2064,7 @@ int64_t NesterovBase::movableArea() const return movableArea_; } -int64_t NesterovBase::totalFillerArea() const +int64_t NesterovBase::getTotalFillerArea() const { return totalFillerArea_; } @@ -2107,25 +2146,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_->error(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_); - } } void NesterovBase::updateDensityCoordiLayoutInside(GCell* gCell) @@ -2856,7 +2876,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, @@ -2958,7 +2978,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()); } @@ -2982,8 +3002,8 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) 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()) { + auto db_it = db_inst_to_nb_index_.find(db_inst); + if (db_it != db_inst_to_nb_index_.end()) { size_t gcells_index = db_it->second; GCellHandle& handle = nb_gcells_[gcells_index]; GCell* gcell = handle; @@ -3061,40 +3081,20 @@ 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; - 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(); - } + debugPrint(log_, + GPL, + "callbacks", + 1, + "NesterovBase: creatGCell {}, index: {}", + db_inst->getName(), + gcells_index); + db_inst_to_nb_index_[db_inst] = gcells_index; + appendParallelVectors(); } else { debugPrint(log_, @@ -3154,8 +3154,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; @@ -3175,7 +3175,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) @@ -3185,16 +3185,16 @@ 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()) { - nb_gcells_[it->second].updateIndex(replacer.second); + 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_, GPL, @@ -3252,20 +3252,279 @@ std::pair NesterovBaseCommon::destroyCbkGCell( return replacement; } -// TODO to be implemented. -void NesterovBase::destroyFillerGCell(size_t index_remove) +void NesterovBase::cutFillerCells(int64_t inflation_area) { - // 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(); + 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)); + 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())); + + 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; + + 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) { + if (nb_gcells_[i]->isFiller()) { + 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; + } + } + } + + totalFillerArea_ = availableFillerArea; + + if (single_filler_area * fillerStor_.size() != totalFillerArea_) { + log_->warn(GPL, + 312, + "Unexpected filler area! The value {}, should be equal to " + "totalFillerArea_ {}.", + block->dbuAreaToMicrons(single_filler_area * fillerStor_.size()), + block->dbuAreaToMicrons(totalFillerArea_)); + } + + 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}%)", + block->dbuAreaToMicrons(filler_area_before_removal), + block->dbuAreaToMicrons(totalFillerArea_), + (filler_area_before_removal != 0) + ? (static_cast(totalFillerArea_ - filler_area_before_removal) + / filler_area_before_removal * 100.0) + : 0.0); + + int64_t removedFillerArea = single_filler_area * removed_count; + int64_t remainingInflationArea = originalInflationArea - removedFillerArea; + + log_->info(GPL, + 78, + "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)); + + if (remainingInflationArea > single_filler_area) { + int64_t totalGCellArea = nesterovInstsArea() + removedFillerArea + + totalFillerArea_ + remainingInflationArea; + setTargetDensity(static_cast(totalGCellArea) + / static_cast(whiteSpaceArea())); + + float newTargetDensity = static_cast(totalGCellArea) + / static_cast(whiteSpaceArea()); + log_->info(GPL, 79, "New target density: {}", newTargetDensity); + } +} + +void NesterovBase::destroyFillerGCell(size_t 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(); + 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; + } + + 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()) { + 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 NesterovBase::restoreRemovedFillers() +{ + log_->info(GPL, + 80, + "Restoring {} previously removed fillers.", + removed_fillers_.size()); + + if (removed_fillers_.empty()) { + return; + } + + size_t num_fill_before = fillerStor_.size(); + int64_t area_before = totalFillerArea_; + + 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(); + } + + 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 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}%%", + area_before_um, + area_after_um, + rel_area_change); + + removed_fillers_.clear(); } void NesterovBaseCommon::destroyCbkGNet(odb::dbNet* db_net) @@ -3289,7 +3548,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) { @@ -3318,7 +3576,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]); @@ -3336,6 +3593,33 @@ 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) @@ -3374,6 +3658,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); @@ -3389,12 +3680,30 @@ 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 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() @@ -3408,7 +3717,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()) { @@ -3454,6 +3763,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 385d0e9dcc..d51a1ba5c2 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -64,7 +64,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(); } @@ -122,6 +122,14 @@ 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_; @@ -855,7 +863,17 @@ 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 { @@ -864,8 +882,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 @@ -924,7 +942,18 @@ 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_; } @@ -956,10 +985,10 @@ class NesterovBase int fillerDx() const; int fillerDy() const; int getFillerCnt() 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 @@ -1084,14 +1113,37 @@ class NesterovBase void createCbkGCell(odb::dbInst* db_inst, size_t stor_index); void destroyCbkGCell(odb::dbInst* db_inst); - void destroyFillerGCell(size_t index_remove); - // 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(); + void clearRemovedFillers() { 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; + + void printGCellsToFile(const std::string& filename, + bool print_only_name) const; + private: NesterovBaseVars nbVars_; std::shared_ptr pb_; @@ -1106,6 +1158,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; @@ -1113,11 +1166,37 @@ 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; + 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_; + float sumPhi_ = 0; float targetDensity_ = 0; float uniformTargetDensity_ = 0; @@ -1162,6 +1241,7 @@ class NesterovBase size_t remove_index, size_t last_index); void swapAndPopParallelVectors(size_t remove_index, size_t last_index); + void appendParallelVectors(); float wireLengthGradSum_ = 0; float densityGradSum_ = 0; @@ -1219,10 +1299,14 @@ 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), storage_index_(idx) { } - GCellHandle(NesterovBase* nb, size_t idx) : storage_(nb), index_(idx) {} // Non-const versions GCell* operator->() { return &getGCell(); } @@ -1239,8 +1323,19 @@ class GCellHandle return std::holds_alternative(storage_); } - void updateIndex(size_t new_index) { index_ = new_index; } - size_t getIndex() const { return 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: using StorageVariant = std::variant; @@ -1248,13 +1343,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/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index 8836b0b710..a86ef598fd 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -289,10 +289,22 @@ 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, td_accumulated_delta_area = 0, + end_routability_area = 0; + ; + for (auto& nb : nbVec_) { nb->setIter(start_iter); nb->setMaxPhiCoefChanged(false); nb->resetMinSumOverflow(); + original_area += nb->nesterovInstsArea(); + } + + if (!npVars_.routability_driven_mode) { + end_routability_area = original_area; } namespace fs = std::filesystem; @@ -325,10 +337,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; - // Core Nesterov Loop int iter = start_iter; for (; iter < npVars_.maxNesterovIter; iter++) { @@ -557,7 +565,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(); } @@ -566,22 +573,10 @@ int NesterovPlace::doNesterovPlace(int start_iter) nbVec_[0]->setTrueReprintIterHeader(); ++timing_driven_count; - if (graphics_ && npVars_.debug_generate_images) { - updateDb(); - bool select_buffers = !virtual_td_iter; - graphics_->saveLabeledImage( - fmt::format("{}/timing_{:05d}_1.png", timing_driven_dir, iter), - fmt::format("Iter {} |R: {} |T: {} after TD", - iter, - routability_driven_count, - timing_driven_count), - select_buffers); - } - + 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, @@ -591,6 +586,19 @@ int NesterovPlace::doNesterovPlace(int start_iter) nbc_->getNewGcellsCount(), nb_total_gcells_delta); } + + if (graphics_ && npVars_.debug_generate_images) { + updateDb(); + bool select_buffers = !virtual_td_iter; + graphics_->saveLabeledImage( + fmt::format("{}/timing_{:05d}_1.png", timing_driven_dir, iter), + fmt::format("Iter {} |R: {} |T: {} after TD", + iter, + routability_driven_count, + timing_driven_count), + select_buffers); + } + if (!virtual_td_iter) { for (auto& nesterov : nbVec_) { nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); @@ -603,7 +611,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 @@ -718,10 +726,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_, @@ -755,7 +763,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) { @@ -819,24 +827,88 @@ int NesterovPlace::doNesterovPlace(int start_iter) nb->revertToSnapshot(); nb->resetMinSumOverflow(); } + } + + if (is_routability_need_ && isRevertInitNeeded) { log_->info( - GPL, 89, "Routability end iteration: revert back to snapshot"); + 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_) { + for (auto& nb : nbVec_) { + end_routability_area += nb->nesterovInstsArea(); + } } } // 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, + 1010, + "Original area (um^2): {:.2f}", + block->dbuAreaToMicrons(original_area)); + + int64_t new_area = 0; + for (auto& nb : nbVec_) { + new_area += nb->nesterovInstsArea(); + } + + float routability_diff + = 100.0 * (end_routability_area - original_area) / original_area; + log_->info(GPL, + 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, + 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, + 1013, + "Final placement area: {:.2f} ({:+.2f}%)", + block->dbuAreaToMicrons(new_area), + placement_diff); + // in all case including diverge, // db should be updated. updateDb(); diff --git a/src/gpl/src/placerBase.cpp b/src/gpl/src/placerBase.cpp index 6c43e1d72e..c1add7b56a 100644 --- a/src/gpl/src/placerBase.cpp +++ b/src/gpl/src/placerBase.cpp @@ -310,7 +310,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 df9b6c8235..0864811510 100644 --- a/src/gpl/src/placerBase.h +++ b/src/gpl/src/placerBase.h @@ -154,7 +154,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 29b556b10a..48d4168285 100644 --- a/src/gpl/src/routeBase.cpp +++ b/src/gpl/src/routeBase.cpp @@ -570,6 +570,7 @@ std::pair RouteBase::routability() minRc_ = curRc; minRcTargetDensity_ = nbVec_[0]->targetDensity(); minRcViolatedCnt_ = 0; + nbVec_[0]->clearRemovedFillers(); // save cell size info nbc_->updateMinRcCellSize(); @@ -651,7 +652,7 @@ std::pair RouteBase::routability() if (inflatedAreaDelta_ > targetInflationDeltaAreaRatio * (nbVec_[0]->whiteSpaceArea() - (nbVec_[0]->nesterovInstsArea() - + nbVec_[0]->totalFillerArea()))) { + + nbVec_[0]->getTotalFillerArea()))) { // TODO dynamic inflation procedure? } @@ -673,13 +674,15 @@ std::pair RouteBase::routability() "Placement target density:", nbVec_[0]->targetDensity()); - int64_t totalGCellArea = inflatedAreaDelta_ + nbVec_[0]->nesterovInstsArea() - + nbVec_[0]->totalFillerArea(); + 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; - // newly set Density - nbVec_[0]->setTargetDensity( - static_cast(totalGCellArea) - / static_cast(nbVec_[0]->whiteSpaceArea())); + nbVec_[0]->cutFillerCells(inflatedAreaDelta_); // // max density detection or, @@ -720,35 +723,18 @@ std::pair RouteBase::routability() nbVec_[0]->setTargetDensity(minRcTargetDensity_); nbc_->revertGCellSizeToMinRc(); + nbVec_[0]->restoreRemovedFillers(); nbVec_[0]->updateDensitySize(); resetRoutabilityResources(); 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]->totalFillerArea(); - double prev_total_gcells_area - = nbVec_[0]->nesterovInstsArea() + nbVec_[0]->totalFillerArea(); - double prev_expected_gcells_area - = inflatedAreaDelta_ + prev_total_gcells_area; - - // 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(); 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 { @@ -772,12 +758,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]->totalFillerArea()), - percentDiff(prev_total_filler_area, nbVec_[0]->totalFillerArea())); + 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, diff --git a/src/gpl/test/ar01.ok b/src/gpl/test/ar01.ok index 8959dda2b7..ef778eddf1 100644 --- a/src/gpl/test/ar01.ok +++ b/src/gpl/test/ar01.ok @@ -64,4 +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-1009] - For 50% usage of free space: 0.9981 +[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 77a37f56cc..5cac1f1b75 100644 --- a/src/gpl/test/ar02.ok +++ b/src/gpl/test/ar02.ok @@ -64,4 +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-1009] - For 50% usage of free space: 0.9977 +[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 3b4431a88e..e659e16736 100644 --- a/src/gpl/test/cluster_place01.ok +++ b/src/gpl/test/cluster_place01.ok @@ -65,4 +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-1009] - For 50% usage of free space: 0.9972 +[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 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/core01.ok b/src/gpl/test/core01.ok index ffbd86156b..7fd08bd450 100644 --- a/src/gpl/test/core01.ok +++ b/src/gpl/test/core01.ok @@ -64,4 +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-1009] - For 50% usage of free space: 0.9972 +[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 9ee3e20fc0..7579d36a85 100644 --- a/src/gpl/test/density01.ok +++ b/src/gpl/test/density01.ok @@ -142,5 +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-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 fd6f7926bb..8580663fac 100644 --- a/src/gpl/test/diverge01.ok +++ b/src/gpl/test/diverge01.ok @@ -44,5 +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-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/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/incremental01.ok b/src/gpl/test/incremental01.ok index 5bfcb86dfa..f25ae6cf73 100644 --- a/src/gpl/test/incremental01.ok +++ b/src/gpl/test/incremental01.ok @@ -48,5 +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-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 4551e99c64..35c97169c5 100644 --- a/src/gpl/test/incremental02.ok +++ b/src/gpl/test/incremental02.ok @@ -84,6 +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-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 | @@ -106,4 +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-1009] - For 50% usage of free space: 0.0995 +[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 fe42f0f0c9..562bdc3a20 100644 --- a/src/gpl/test/nograd01.ok +++ b/src/gpl/test/nograd01.ok @@ -40,4 +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-1009] - For 50% usage of free space: 0.0001 +[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 d8b57c127e..5c42d5f9dc 100644 --- a/src/gpl/test/simple01-obs.ok +++ b/src/gpl/test/simple01-obs.ok @@ -63,5 +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-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 81115703eb..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,5 +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-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%) No differences found. diff --git a/src/gpl/test/simple01-ref.ok b/src/gpl/test/simple01-ref.ok index 6cc73a5ded..6389470d0c 100644 --- a/src/gpl/test/simple01-ref.ok +++ b/src/gpl/test/simple01-ref.ok @@ -64,5 +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-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 70c41f0adc..e84297bab2 100644 --- a/src/gpl/test/simple01-skip-io.ok +++ b/src/gpl/test/simple01-skip-io.ok @@ -75,5 +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-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 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. diff --git a/src/gpl/test/simple01-uniform.ok b/src/gpl/test/simple01-uniform.ok index a08cd51aec..3826be58bf 100644 --- a/src/gpl/test/simple01-uniform.ok +++ b/src/gpl/test/simple01-uniform.ok @@ -64,5 +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-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 3a724caebb..3adce95653 100644 --- a/src/gpl/test/simple01.ok +++ b/src/gpl/test/simple01.ok @@ -64,5 +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-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 cf544408a6..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,5 +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-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%) No differences found. diff --git a/src/gpl/test/simple02.ok b/src/gpl/test/simple02.ok index 73d9c32d91..c07ae96290 100644 --- a/src/gpl/test/simple02.ok +++ b/src/gpl/test/simple02.ok @@ -64,5 +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-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 ee005d7e91..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,5 +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-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%) No differences found. diff --git a/src/gpl/test/simple03.ok b/src/gpl/test/simple03.ok index 09997377c2..a77bcdc6a3 100644 --- a/src/gpl/test/simple03.ok +++ b/src/gpl/test/simple03.ok @@ -79,5 +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-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 06622b096b..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,5 +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-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%) No differences found. diff --git a/src/gpl/test/simple04.ok b/src/gpl/test/simple04.ok index faf910e7b0..87830ec996 100644 --- a/src/gpl/test/simple04.ok +++ b/src/gpl/test/simple04.ok @@ -89,5 +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-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 af849cb704..fddaf13e1e 100644 --- a/src/gpl/test/simple05.ok +++ b/src/gpl/test/simple05.ok @@ -40,4 +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-1009] - For 50% usage of free space: 0.1094 +[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 4c22379925..4562942491 100644 --- a/src/gpl/test/simple07.ok +++ b/src/gpl/test/simple07.ok @@ -49,4 +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-1009] - For 50% usage of free space: 0.0115 +[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 c628877446..a28ce1d37d 100644 --- a/src/gpl/test/simple08.ok +++ b/src/gpl/test/simple08.ok @@ -49,4 +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-1009] - For 50% usage of free space: 0.0115 +[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 a8b8ddc442..06a9900484 100644 --- a/src/gpl/test/simple09.ok +++ b/src/gpl/test/simple09.ok @@ -40,4 +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-1009] - For 50% usage of free space: 0.0039 +[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 75ea435b58..74147e3e2a 100644 --- a/src/gpl/test/simple10.ok +++ b/src/gpl/test/simple10.ok @@ -49,4 +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-1009] - For 50% usage of free space: 0.0000 +[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/odb/test/replace_hier_mod1.ok b/src/odb/test/replace_hier_mod1.ok index 143671df33..9c211994d1 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-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-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 @@ -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-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-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 @@ -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-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-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 b87691a9bd..682a2b028d 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-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. diff --git a/test/aes_sky130hd.metrics b/test/aes_sky130hd.metrics index 6c1ddfe5fb..d9286950f4 100644 --- a/test/aes_sky130hd.metrics +++ b/test/aes_sky130hd.metrics @@ -2,135 +2,131 @@ "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, - "DPL::utilization": "5.7", - "DPL::design_area": "170743", - "route__net": 17846, + "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": 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": 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": 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": 18035, "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": 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": 1855777, "route__drc_errors": 0, - "route__wirelength": 1805987, - "route__vias": 165847, - "route__vias__singlecut": 165847, + "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": 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": 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": 1805302, + "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": 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": 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": 10, - "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__route__drc_errors__iter:3": 0, - "drt__repair_antennas__iter_1__route__wirelength__iter:3": 1805433, + "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": 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": 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": 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": 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_1__antenna__violating__nets": 1, + "drt__repair_antennas__iter_1__antenna__violating__pins": 1, + "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": 1805456, + "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": 1805451, + "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": 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": 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": 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__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": 1805469, - "drt__repair_antennas__iter_3__route__vias": 166943, - "drt__repair_antennas__iter_3__route__vias__singlecut": 166943, + "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, @@ -140,14 +136,14 @@ "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.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": "-23.517348243100802", + "DRT::max_capacitance_slack": "-8.46118517188315", "DRT::clock_period": "3.740000", - "flow__warnings__count": 350, + "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 176613ba7c..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" : "204891.6" - ,"DPL::utilization" : "6.84" - ,"RSZ::repair_design_buffer_count" : "440" + ,"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" : "-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" : "-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" : "-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" : "-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/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 05b0d8eaf1..db499421e2 100644 --- a/test/ibex_sky130hs.metrics +++ b/test/ibex_sky130hs.metrics @@ -2,13 +2,13 @@ "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": 8511.91, diff --git a/test/ibex_sky130hs.metrics_limits b/test/ibex_sky130hs.metrics_limits index c84a79bffa..7795c93d20 100644 --- a/test/ibex_sky130hs.metrics_limits +++ b/test/ibex_sky130hs.metrics_limits @@ -10,7 +10,7 @@ ,"RSZ::worst_slack_max" : "-0.8972040776494447" ,"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.8415951141969884" ,"DRT::worst_slack_max" : "-1.4971099973476771" diff --git a/test/jpeg_sky130hd.metrics b/test/jpeg_sky130hd.metrics index cf8d42e576..80a5049a84 100644 --- a/test/jpeg_sky130hd.metrics +++ b/test/jpeg_sky130hd.metrics @@ -2,140 +2,152 @@ "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": 126890, + "design__instance__displacement__mean": 1.722, + "design__instance__displacement__max": 13.267, + "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": "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::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.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": "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::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": "539546", - "route__net": 57574, + "DPL::design_area": "540223", + "route__net": 57535, "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": 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": 57535, "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": 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": 1785607, "route__drc_errors": 0, - "route__wirelength": 1770633, - "route__vias": 316708, - "route__vias__singlecut": 316708, + "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": 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__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": 1771446, + "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": 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": 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": 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": 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": 1771661, + "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": 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": 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": 2, - "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_1__antenna__violating__nets": 3, + "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": 1785767, "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": 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": 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__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": 1771672, + "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": 1771670, + "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": 1771670, - "drt__repair_antennas__iter_3__route__vias": 317279, - "drt__repair_antennas__iter_3__route__vias__singlecut": 317279, + "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": 0, - "drt__repair_antennas__iter_3__antenna__violating__pins": 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.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.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": "-15.433284565692801", + "DRT::max_capacitance_slack": "-22.67765140773784", "DRT::clock_period": "8.000000", - "flow__warnings__count": 857, + "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 4d9dcce09e..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" : "647455.2" + ,"DPL::design_area" : "648267.6" ,"DPL::utilization" : "29.639999999999997" - ,"RSZ::repair_design_buffer_count" : "501" + ,"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.7928812497647715" - ,"RSZ::worst_slack_max" : "-0.7996642685478582" + ,"RSZ::worst_slack_min" : "-0.7966928675607146" + ,"RSZ::worst_slack_max" : "-0.799321431668158" ,"RSZ::tns_max" : "-3650.7200000000007" - ,"RSZ::hold_buffer_count" : "39" - ,"GRT::ANT::errors" : "1" + ,"RSZ::hold_buffer_count" : "3" + ,"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.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" diff --git a/test/upf_aes.ok b/test/upf_aes.ok index aa1a10de60..aa2e6184d6 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-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 c8cdad2c6a..88a9609fd4 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-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