diff --git a/src/gpl/include/gpl/Replace.h b/src/gpl/include/gpl/Replace.h index 5eab534355d..6e7e665d4d2 100644 --- a/src/gpl/include/gpl/Replace.h +++ b/src/gpl/include/gpl/Replace.h @@ -198,7 +198,7 @@ class Replace int routabilityMaxInflationIter_ = 4; float timingNetWeightMax_ = 1.9; - float keepResizeBelowOverflow_ = 0.0; + float keepResizeBelowOverflow_ = 0.3; bool timingDrivenMode_ = true; bool routabilityDrivenMode_ = true; diff --git a/src/gpl/src/nesterovBase.cpp b/src/gpl/src/nesterovBase.cpp index edc5c10da74..313cc4f0920 100644 --- a/src/gpl/src/nesterovBase.cpp +++ b/src/gpl/src/nesterovBase.cpp @@ -114,6 +114,15 @@ void GCell::setInstance(Instance* inst) dUx_ = ux_ = inst->ux(); dUy_ = uy_ = inst->uy(); } + +void GCell::setAllLocations(int lx, int ly, int ux, int uy) +{ + dLx_ = lx_ = lx; + dLy_ = ly_ = ly; + dUx_ = ux_ = ux; + dUy_ = uy_ = uy; +} + Instance* GCell::instance() const { return insts_.empty() ? nullptr : *insts_.begin(); @@ -161,6 +170,7 @@ void GCell::setSize(int dx, int dy) uy_ = centerY + dy / 2; } +// Used for initialization void GCell::setDensityLocation(int dLx, int dLy) { dUx_ = dLx + (dUx_ - dLx_); @@ -174,6 +184,7 @@ void GCell::setDensityLocation(int dLx, int dLy) } } +// Used for updating density locations void GCell::setDensityCenterLocation(int dCx, int dCy) { const int halfDDx = dDx() / 2; @@ -248,6 +259,23 @@ bool GCell::isStdInstance() const return !instance()->isMacro(); } +void GCell::print(utl::Logger* logger) const +{ + if (!insts_.empty()) { + logger->report("print gcell:{}", insts_[0]->dbInst()->getName()); + } else { + logger->report("print gcell insts_ empty! (filler cell)"); + } + logger->report( + "insts_ size: {}, gPins_ size: {}", insts_.size(), gPins_.size()); + logger->report("lx_: {} ly_: {} ux_: {} uy_: {}", lx_, ly_, ux_, uy_); + logger->report("dLx_: {} dLy_: {} dUx_: {} dUy_: {}", dLx_, dLy_, dUx_, dUy_); + logger->report("densityScale_: {} gradientX_: {} gradientY_: {}", + densityScale_, + gradientX_, + gradientY_); +} + //////////////////////////////////////////////// // GNet @@ -331,6 +359,26 @@ bool GNet::isDontCare() const return gPins_.empty() || isDontCare_; } +void GNet::print(utl::Logger* log) const +{ + log->report("print net: {}", nets_[0]->dbNet()->getName()); + log->report("gPins_ size: {}", gPins_.size()); + log->report("nets_ size: {}", nets_.size()); + // log->report("gpl_net_: {}", pb_net->); + log->report("lx_: {}, ly_: {}, ux_: {}, uy_: {}", lx_, ly_, ux_, uy_); + log->report("timingWeight_: {}", timingWeight_); + log->report("customWeight_: {}", customWeight_); + log->report( + "waExpMinSumX_: {}, waXExpMinSumX_: {}", waExpMinSumX_, waXExpMinSumX_); + log->report( + "waExpMaxSumX_: {}, waXExpMaxSumX_: {}", waExpMaxSumX_, waXExpMaxSumX_); + log->report( + "waExpMinSumY_: {}, waYExpMinSumY_: {}", waExpMinSumY_, waYExpMinSumY_); + log->report( + "waExpMaxSumY_: {}, waYExpMaxSumY_: {}", waExpMaxSumY_, waYExpMaxSumY_); + log->report("isDontCare_: {}", isDontCare_ ? "true" : "false"); +} + //////////////////////////////////////////////// // GPin @@ -416,6 +464,47 @@ void GPin::updateDensityLocation(const GCell* gCell) cy_ = gCell->dCy() + offsetCy_; } +void GPin::updateCoordi() +{ + Pin* pb_pin = pins_[0]; + cx_ = pb_pin->cx(); + cy_ = pb_pin->cy(); + offsetCx_ = pb_pin->offsetCx(); + offsetCy_ = pb_pin->offsetCy(); +} + +void GPin::print(utl::Logger* log) const +{ + if (pin()->dbITerm() != nullptr) { + log->report("--> print pin: {}", pin()->dbITerm()->getName()); + } else { + log->report("pin()->dbIterm() is nullptr!"); + } + if (gCell_) { + if (gCell_->isInstance()) { + log->report("GCell*: {}", gCell_->instance()->dbInst()->getName()); + } else { + log->report("GCell of gpin is filler!"); + } + } else { + log->report("gcell of gpin is null"); + } + log->report("GNet: {}", gNet_->net()->dbNet()->getName()); + log->report("pins_.size(): {}", pins_.size()); + log->report("offsetCx_: {}", offsetCx_); + log->report("offsetCy_: {}", offsetCy_); + log->report("cx_: {}", cx_); + log->report("cy_: {}", cy_); + log->report("maxExpSumX_: {}", maxExpSumX_); + log->report("maxExpSumY_: {}", maxExpSumY_); + log->report("minExpSumX_: {}", minExpSumX_); + log->report("minExpSumY_: {}", minExpSumY_); + log->report("hasMaxExpSumX_: {}", hasMaxExpSumX_); + log->report("hasMaxExpSumY_: {}", hasMaxExpSumY_); + log->report("hasMinExpSumX_: {}", hasMinExpSumX_); + log->report("hasMinExpSumY_: {}", hasMinExpSumY_); +} + //////////////////////////////////////////////////////// // Bin @@ -891,6 +980,7 @@ NesterovBaseCommon::NesterovBaseCommon(NesterovBaseVars nbVars, nbVars_ = nbVars; pbc_ = std::move(pbc); log_ = log; + deltaArea_ = 0; // gCellStor init gCellStor_.reserve(pbc_->placeInsts().size()); @@ -919,26 +1009,34 @@ NesterovBaseCommon::NesterovBaseCommon(NesterovBaseVars nbVars, // gCell ptr init gCells_.reserve(gCellStor_.size()); - for (auto& gCell : gCellStor_) { + for (size_t i = 0; i < gCellStor_.size(); ++i) { + GCell& gCell = gCellStor_[i]; if (!gCell.isInstance()) { continue; } gCells_.push_back(&gCell); gCellMap_[gCell.instance()] = &gCell; + db_inst_map_[gCell.instance()->dbInst()] = i; } // gPin ptr init gPins_.reserve(gPinStor_.size()); - for (auto& gPin : gPinStor_) { + for (size_t i = 0; i < gPinStor_.size(); ++i) { + GPin& gPin = gPinStor_[i]; gPins_.push_back(&gPin); gPinMap_[gPin.pin()] = &gPin; + if (gPin.pin()->isITerm()) { + db_iterm_map_[gPin.pin()->dbITerm()] = i; + } } // gNet ptr init gNets_.reserve(gNetStor_.size()); - for (auto& gNet : gNetStor_) { + for (size_t i = 0; i < gNetStor_.size(); ++i) { + GNet& gNet = gNetStor_[i]; gNets_.push_back(&gNet); gNetMap_[gNet.net()] = &gNet; + db_net_map_[gNet.net()->dbNet()] = i; } // gCellStor_'s pins_ fill @@ -1150,7 +1248,8 @@ FloatPoint NesterovBaseCommon::getWireLengthGradientWA(const GCell* gCell, GPL, "getGradientWA", 1, - "gradient: {:g} {:g}", + "{}, gradient: {:g} {:g}", + gCell->instance()->dbInst()->getName(), gradientPair.x, gradientPair.y); } @@ -1238,6 +1337,9 @@ FloatPoint NesterovBaseCommon::getWireLengthPreconditioner( void NesterovBaseCommon::updateDbGCells() { + if (db_cbk_) { + db_cbk_->removeOwner(); + } assert(omp_get_thread_num() == 0); #pragma omp parallel for num_threads(num_threads_) for (auto it = gCells().begin(); it < gCells().end(); ++it) { @@ -1253,6 +1355,9 @@ void NesterovBaseCommon::updateDbGCells() gCell->dCy() - replInst->dy() / 2); } } + if (db_cbk_) { + db_cbk_->addOwner(pbc_->db()->getChip()->getBlock()); + } } int64_t NesterovBaseCommon::getHpwl() @@ -1268,6 +1373,123 @@ int64_t NesterovBaseCommon::getHpwl() return hpwl; } +GCell* NesterovBaseCommon::getGCellByIndex(size_t i) +{ + if (i >= gCellStor_.size()) { + return nullptr; + } + return &gCellStor_[i]; +} + +// fixPointers() member functions assumes there was push_backs to storage +// vectors, invalidating them. This function resets the pointers and maintain +// consistency among parallel vectors. Most of the code here is based on +// nesterovBaseCommon constructor. +// +void NesterovBaseCommon::fixPointers() +{ + gCells_.clear(); + gCellMap_.clear(); + db_inst_map_.clear(); + gCells_.reserve(gCellStor_.size()); + for (size_t i = 0; i < gCellStor_.size(); ++i) { + GCell& gCell = gCellStor_[i]; + if (!gCell.isInstance()) { + continue; + } + gCells_.push_back(&gCell); + gCellMap_[gCell.instance()] = &gCell; + db_inst_map_[gCell.instance()->dbInst()] = i; + } + + gPins_.clear(); + gPinMap_.clear(); + db_iterm_map_.clear(); + gPins_.reserve(gPinStor_.size()); + for (size_t i = 0; i < gPinStor_.size(); ++i) { + GPin& gPin = gPinStor_[i]; + gPins_.push_back(&gPin); + gPinMap_[gPin.pin()] = &gPin; + if (gPin.pin()->isITerm()) { + db_iterm_map_[gPin.pin()->dbITerm()] = i; + } + } + + gNets_.clear(); + gNetMap_.clear(); + db_net_map_.clear(); + gNets_.reserve(gNetStor_.size()); + for (size_t i = 0; i < gNetStor_.size(); ++i) { + GNet& gNet = gNetStor_[i]; + gNets_.push_back(&gNet); + gNetMap_[gNet.net()] = &gNet; + db_net_map_[gNet.net()->dbNet()] = i; + } + + for (auto it = gCellStor_.begin(); it < gCellStor_.end(); ++it) { + auto& gCell = *it; // old-style loop for old OpenMP + if (gCell.isFiller()) { + continue; + } + gCell.clearGPins(); + for (odb::dbITerm* iterm : gCell.instance()->dbInst()->getITerms()) { + if (isValidSigType(iterm->getSigType())) { + auto it = db_iterm_map_.find(iterm); + if (it != db_iterm_map_.end()) { + size_t gpin_index = it->second; + gCell.addGPin(&gPinStor_[gpin_index]); + } else { + log_->report("error: gpin nullptr (from iterm:{}) in gcell:{}", + iterm->getName(), + gCell.instance()->dbInst()->getName()); + } + } + } + } + + // #pragma omp parallel for num_threads(num_threads_) + for (auto it = gPinStor_.begin(); it < gPinStor_.end(); ++it) { + auto& gPin = *it; // old-style loop for old OpenMP + auto iterm = gPin.pin()->dbITerm(); + if (iterm != nullptr) { + if (isValidSigType(iterm->getSigType())) { + auto inst_it = db_inst_map_.find(iterm->getInst()); + auto net_it = db_net_map_.find(iterm->getNet()); + + if (inst_it != db_inst_map_.end()) { + gPin.setGCell(&gCellStor_[inst_it->second]); + } + + if (net_it != db_net_map_.end()) { + gPin.setGNet(&gNetStor_[net_it->second]); + } else { + log_->report("Net not found in db_net_map_ for ITerm: {} -> {}", + iterm->getNet()->getName(), + iterm->getName()); + } + } else { + log_->report("Warning: invalid type itermType: {}", + iterm->getSigType().getString()); + } + } + } + + // #pragma omp parallel for num_threads(num_threads_) + for (auto it = gNetStor_.begin(); it < gNetStor_.end(); ++it) { + auto& gNet = *it; // old-style loop for old OpenMP + gNet.clearGPins(); + for (odb::dbITerm* iterm : gNet.net()->dbNet()->getITerms()) { + if (isValidSigType(iterm->getSigType())) { + auto it = db_iterm_map_.find(iterm); + if (it != db_iterm_map_.end()) { + size_t gpin_index = it->second; + gNet.addGPin(&gPinStor_[gpin_index]); + } + } + } + } +} + //////////////////////////////////////////////// // NesterovBase @@ -1295,16 +1517,16 @@ NesterovBase::NesterovBase(NesterovBaseVars nbVars, gCells_.reserve(pb_->insts().size() + fillerStor_.size()); // add place instances - for (auto& inst : pb_->placeInsts()) { + for (auto& pb_inst : pb_->placeInsts()) { int x_offset = rand() % (2 * dbu_per_micron) - dbu_per_micron; int y_offset = rand() % (2 * dbu_per_micron) - dbu_per_micron; - GCell* gCell = nbc_->pbToNb(inst); + GCell* gCell = nbc_->pbToNb(pb_inst); - inst->setLocation(inst->lx() + x_offset, inst->ly() + y_offset); + pb_inst->setLocation(pb_inst->lx() + x_offset, pb_inst->ly() + y_offset); gCell->clearInstances(); - gCell->setInstance(inst); + gCell->setInstance(pb_inst); gCells_.emplace_back(GCellHandle(nbc_.get(), nbc_->getGCellIndex(gCell))); } @@ -2045,6 +2267,78 @@ void NesterovBase::updateNextGradient(float wlCoeffX, float wlCoeffY) wlCoeffY); } +void NesterovBase::updateSinglePrevGradient(size_t gCellIndex, + float wlCoeffX, + float wlCoeffY) +{ + updateSingleGradient(gCellIndex, + prevSLPSumGrads_, + prevSLPWireLengthGrads_, + prevSLPDensityGrads_, + wlCoeffX, + wlCoeffY); +} + +void NesterovBase::updateSingleCurGradient(size_t gCellIndex, + float wlCoeffX, + float wlCoeffY) +{ + updateSingleGradient(gCellIndex, + curSLPSumGrads_, + curSLPWireLengthGrads_, + curSLPDensityGrads_, + wlCoeffX, + wlCoeffY); +} + +void NesterovBase::updateSingleGradient( + size_t gCellIndex, + std::vector& sumGrads, + std::vector& wireLengthGrads, + std::vector& densityGrads, + float wlCoeffX, + float wlCoeffY) +{ + if (gCellIndex >= gCells_.size()) { + return; + } + + GCell* gCell = gCells_.at(gCellIndex); + + wireLengthGrads[gCellIndex] + = nbc_->getWireLengthGradientWA(gCell, wlCoeffX, wlCoeffY); + densityGrads[gCellIndex] = getDensityGradient(gCell); + + wireLengthGradSum_ += std::fabs(wireLengthGrads[gCellIndex].x); + wireLengthGradSum_ += std::fabs(wireLengthGrads[gCellIndex].y); + + densityGradSum_ += std::fabs(densityGrads[gCellIndex].x); + densityGradSum_ += std::fabs(densityGrads[gCellIndex].y); + + sumGrads[gCellIndex].x = wireLengthGrads[gCellIndex].x + + densityPenalty_ * densityGrads[gCellIndex].x; + sumGrads[gCellIndex].y = wireLengthGrads[gCellIndex].y + + densityPenalty_ * densityGrads[gCellIndex].y; + + FloatPoint wireLengthPreCondi = nbc_->getWireLengthPreconditioner(gCell); + FloatPoint densityPrecondi = getDensityPreconditioner(gCell); + + FloatPoint sumPrecondi( + wireLengthPreCondi.x + densityPenalty_ * densityPrecondi.x, + wireLengthPreCondi.y + densityPenalty_ * densityPrecondi.y); + + if (sumPrecondi.x <= npVars_->minPreconditioner) { + sumPrecondi.x = npVars_->minPreconditioner; + } + + if (sumPrecondi.y <= npVars_->minPreconditioner) { + sumPrecondi.y = npVars_->minPreconditioner; + } + + sumGrads[gCellIndex].x /= sumPrecondi.x; + sumGrads[gCellIndex].y /= sumPrecondi.y; +} + void NesterovBase::updateInitialPrevSLPCoordi() { assert(omp_get_thread_num() == 0); @@ -2374,6 +2668,338 @@ bool NesterovBase::revertDivergence() return true; } +void NesterovBaseCommon::moveGCell(odb::dbInst* db_inst) +{ + GCell* gcell = getGCellByIndex(db_inst_map_.find(db_inst)->second); + odb::dbBox* bbox = db_inst->getBBox(); + gcell->setAllLocations( + bbox->xMin(), bbox->yMin(), bbox->xMax(), bbox->yMax()); +} + +void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst) +{ + GCell* gcell = getGCellByIndex(db_inst_map_.find(db_inst)->second); + if (gcell->instance()->dbInst()->getName() != db_inst->getName()) { + log_->report("warning: gcell {} found in db_inst_map_ as {}", + gcell->instance()->dbInst()->getName(), + db_inst->getName()); + } + + int64_t prevCellArea + = static_cast(gcell->dx()) * static_cast(gcell->dy()); + odb::dbBox* bbox = db_inst->getBBox(); + gcell->setSize(bbox->getDX(), bbox->getDY()); + int64_t newCellArea + = static_cast(gcell->dx()) * static_cast(gcell->dy()); + int64_t areaChange = newCellArea - prevCellArea; + deltaArea_ += areaChange; +} + +void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY) +{ + for (auto& db_inst : new_instances) { + auto db_it = db_inst_index_map_.find(db_inst); + if (db_it != db_inst_index_map_.end()) { + size_t gcells_index = db_it->second; + GCellHandle& handle = gCells_[gcells_index]; + GCell* gcell = handle; + + for (auto& gpin : gcell->gPins()) { + gpin->pin()->updateCoordi(gpin->pin()->dbITerm()); + gpin->updateCoordi(); + } + + // analogous to NesterovBase::updateDensitySize() + float scaleX = 0, scaleY = 0; + float densitySizeX = 0, densitySizeY = 0; + if (gcell->dx() < REPLACE_SQRT2 * bg_.binSizeX()) { + scaleX = static_cast(gcell->dx()) + / static_cast(REPLACE_SQRT2 * bg_.binSizeX()); + densitySizeX = REPLACE_SQRT2 * static_cast(bg_.binSizeX()); + } else { + scaleX = 1.0; + densitySizeX = gcell->dx(); + } + + if (gcell->dy() < REPLACE_SQRT2 * bg_.binSizeY()) { + scaleY = static_cast(gcell->dy()) + / static_cast(REPLACE_SQRT2 * bg_.binSizeY()); + densitySizeY = REPLACE_SQRT2 * static_cast(bg_.binSizeY()); + } else { + scaleY = 1.0; + densitySizeY = gcell->dy(); + } + + gcell->setDensitySize(densitySizeX, densitySizeY); + gcell->setDensityScale(scaleX * scaleY); + + // analogous to NesterovBase::initDensity1() + updateDensityCoordiLayoutInside(gcell); + curSLPCoordi_[gcells_index] = prevSLPCoordi_[gcells_index] + = curCoordi_[gcells_index] = initCoordi_[gcells_index] + = FloatPoint(gcell->dCx(), gcell->dCy()); + + // analogous to updateCurGradient() + updateSingleCurGradient(gcells_index, wlCoeffX, wlCoeffY); + + // analogous to NesterovBase::updateInitialPrevSLPCoordi() + GCell* curGCell = gCells_[gcells_index]; + float prevCoordiX = curSLPCoordi_[gcells_index].x + - npVars_->initialPrevCoordiUpdateCoef + * curSLPSumGrads_[gcells_index].x; + float prevCoordiY = curSLPCoordi_[gcells_index].y + - npVars_->initialPrevCoordiUpdateCoef + * curSLPSumGrads_[gcells_index].y; + FloatPoint newCoordi( + getDensityCoordiLayoutInsideX(curGCell, prevCoordiX), + getDensityCoordiLayoutInsideY(curGCell, prevCoordiY)); + prevSLPCoordi_[gcells_index] = newCoordi; + + // analogous to + // NesterovBase::updateGCellDensityCenterLocation(prevSLPCoordi_) + gCells_[gcells_index]->setDensityCenterLocation( + prevSLPCoordi_[gcells_index].x, prevSLPCoordi_[gcells_index].y); + + // analogous to updatePrevGradient() + updateSinglePrevGradient(gcells_index, wlCoeffX, wlCoeffY); + } else { + log_->report( + "warning: updateGCellState, db_inst not found in db_inst_index_map_ " + "for instance: {}", + db_inst->getName()); + } + } + new_instances.clear(); +} + +void NesterovBase::createGCell(odb::dbInst* db_inst, + size_t stor_index, + RouteBase* rb) +{ + auto gcell = nbc_->getGCellByIndex(stor_index); + if (gcell != nullptr) { + new_instances.push_back(db_inst); + gCells_.emplace_back(GCellHandle(nbc_.get(), stor_index)); + size_t gcells_index = gCells_.size() - 1; + db_inst_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(); + snapshotCoordi_.emplace_back(); + snapshotSLPCoordi_.emplace_back(); + snapshotSLPSumGrads_.emplace_back(); + + rb->pushBackMinRcCellSize(gcell->dx(), gcell->dy()); + } else { + log_->report("Error! gCell is nullptr!"); + } +} + +size_t NesterovBaseCommon::createGCell(odb::dbInst* db_inst) +{ + Instance gpl_inst(db_inst, + pbc_->padLeft() * pbc_->siteSizeX(), + pbc_->padRight() * pbc_->siteSizeX(), + pbc_->siteSizeY(), + log_); + + pb_insts_stor_.push_back(gpl_inst); + GCell gcell(&pb_insts_stor_.back()); + gCellStor_.push_back(gcell); + GCell* gcell_ptr = &gCellStor_.back(); + gCellMap_[gcell_ptr->instance()] = gcell_ptr; + db_inst_map_[db_inst] = gCellStor_.size() - 1; + return gCellStor_.size() - 1; +} + +void NesterovBaseCommon::createGNet(odb::dbNet* db_net, bool skip_io_mode) +{ + Net gpl_net(db_net, skip_io_mode); + pb_nets_stor_.push_back(gpl_net); + GNet gnet(&pb_nets_stor_.back()); + gNetStor_.push_back(gnet); + GNet* gnet_ptr = &gNetStor_.back(); + gNetMap_[gnet_ptr->net()] = gnet_ptr; + db_net_map_[db_net] = gNetStor_.size() - 1; +} + +void NesterovBaseCommon::createITerm(odb::dbITerm* iTerm) +{ + Pin gpl_pin(iTerm); + pb_pins_stor_.push_back(gpl_pin); + GPin gpin(&pb_pins_stor_.back()); + gPinStor_.push_back(gpin); + GPin* gpin_ptr = &gPinStor_.back(); + gPinMap_[gpin_ptr->pin()] = gpin_ptr; + db_iterm_map_[iTerm] = gPinStor_.size() - 1; +} + +// assuming fixpointers will be called later +// maintaining consistency in NBC::gcellStor_ and NB::gCells_ +void NesterovBase::destroyGCell(odb::dbInst* db_inst) +{ + auto db_it = db_inst_index_map_.find(db_inst); + if (db_it != db_inst_index_map_.end()) { + size_t last_index = gCells_.size() - 1; + size_t gcell_index = db_it->second; + + GCellHandle& handle = gCells_[gcell_index]; + if (handle.isNesterovBaseCommon()) { + nbc_->destroyGCell(handle.getIndex()); + } else { + destroyFillerGCell(handle.getIndex()); + } + + if (gcell_index != last_index) { + std::swap(gCells_[gcell_index], gCells_[last_index]); + } + swapAndPopParallelVectors(gcell_index, last_index); + gCells_.pop_back(); + db_inst_index_map_.erase(db_it); + } else { + log_->report( + "warning: db_inst not found in db_inst_index_map_ for instance: {}", + db_inst->getName()); + } +} + +void NesterovBaseCommon::destroyGCell(size_t index_remove) +{ + log_->report("before destroy gCellStor_.size():{}", gCellStor_.size()); + size_t last_index = gCellStor_.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(gCellStor_[index_remove], gCellStor_[last_index]); + } + gCellStor_.pop_back(); + + log_->report("after destroy gCellStor_.size():{}", gCellStor_.size()); +} + +void NesterovBase::destroyFillerGCell(size_t index_remove) +{ + size_t last_index = fillerStor_.size() - 1; + if (index_remove > last_index) { + log_->report("error: index {} out of bounds for fillerStor_ (max:{})", + index_remove, + last_index); + return; + } + if (index_remove != last_index) { + std::swap(fillerStor_[index_remove], fillerStor_[last_index]); + } + fillerStor_.pop_back(); +} + +void NesterovBaseCommon::destroyGNet(odb::dbNet* db_net) +{ +} + +void NesterovBaseCommon::destroyITerm(odb::dbITerm* db_iterm) +{ + auto db_it = db_iterm_map_.find(db_iterm); + if (db_it != db_iterm_map_.end()) { + log_->report("before destroy gPinStor_.size():{}", gPinStor_.size()); + size_t last_index = gPinStor_.size() - 1; + size_t index_remove = db_it->second; + if (index_remove > last_index) { + log_->report("error: 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]); + } + gPinStor_.pop_back(); + + log_->report("after destroy gPinStor_.size():{}", gPinStor_.size()); + } else { + log_->report("error: db_iterm not found in db_iterm_map_ for iterm: {}", + db_iterm->getMTerm()->getName()); + } +} + +void NesterovBase::swapAndPop(std::vector& vec, + size_t remove_index, + size_t last_index) +{ + if (last_index != vec.size() - 1) { + log_->report( + "Error: last_index {} does not match the actual last index {}.", + last_index, + vec.size() - 1); + return; + } + + if (remove_index != last_index) { + log_->report( + "Swapping index {} with last_index {}", remove_index, last_index); + std::swap(vec[remove_index], vec[last_index]); + } + vec.pop_back(); +} + +void NesterovBase::swapAndPopParallelVectors(size_t remove_index, + size_t last_index) +{ + log_->report( + "Swapping and popping parallel vectors with remove_index {} and " + "last_index {}", + remove_index, + last_index); + swapAndPop(curSLPCoordi_, remove_index, last_index); + swapAndPop(curSLPWireLengthGrads_, remove_index, last_index); + swapAndPop(curSLPDensityGrads_, remove_index, last_index); + swapAndPop(curSLPSumGrads_, remove_index, last_index); + swapAndPop(nextSLPCoordi_, remove_index, last_index); + swapAndPop(nextSLPWireLengthGrads_, remove_index, last_index); + swapAndPop(nextSLPDensityGrads_, remove_index, last_index); + swapAndPop(nextSLPSumGrads_, remove_index, last_index); + swapAndPop(prevSLPCoordi_, remove_index, last_index); + swapAndPop(prevSLPWireLengthGrads_, remove_index, last_index); + swapAndPop(prevSLPDensityGrads_, remove_index, last_index); + swapAndPop(prevSLPSumGrads_, remove_index, last_index); + swapAndPop(curCoordi_, remove_index, last_index); + swapAndPop(nextCoordi_, remove_index, last_index); + swapAndPop(initCoordi_, remove_index, last_index); + swapAndPop(snapshotCoordi_, remove_index, last_index); + swapAndPop(snapshotSLPCoordi_, remove_index, last_index); + swapAndPop(snapshotSLPSumGrads_, remove_index, last_index); +} + +void NesterovBaseCommon::printGCells() +{ + for (auto& gcell : gCellStor_) { + gcell.print(log_); + } +} + +void NesterovBaseCommon::printGPins() +{ + for (auto& gpin : gPinStor_) { + gpin.print(log_); + } +} + // https://stackoverflow.com/questions/33333363/built-in-mod-vs-custom-mod-function-improve-the-performance-of-modulus-op static int fastModulo(const int input, const int ceil) { diff --git a/src/gpl/src/nesterovBase.h b/src/gpl/src/nesterovBase.h index 9a3cd930cd8..abd8d24a189 100644 --- a/src/gpl/src/nesterovBase.h +++ b/src/gpl/src/nesterovBase.h @@ -39,7 +39,10 @@ #include #include +#include "odb/db.h" +#include "placerBase.h" #include "point.h" +#include "routeBase.h" namespace odb { class dbInst; @@ -66,6 +69,7 @@ class Net; class GPin; class FFT; +class nesterovDbCbk; class GCell { @@ -82,6 +86,7 @@ class GCell const std::vector& gPins() const { return gPins_; } void addGPin(GPin* gPin); + void clearGPins() { gPins_.clear(); } void setClusteredInstance(const std::vector& insts); void setInstance(Instance* inst); @@ -109,7 +114,9 @@ class GCell int dDy() const; void setCenterLocation(int cx, int cy); + // void setLocation(int x, int y); void setSize(int dx, int dy); + void setAllLocations(int lx, int ly, int ux, int uy); void setDensityLocation(int dLx, int dLy); void setDensityCenterLocation(int dCx, int dCy); @@ -129,6 +136,8 @@ class GCell bool isMacroInstance() const; bool isStdInstance() const; + void print(utl::Logger* logger) const; + private: std::vector insts_; std::vector gPins_; @@ -249,6 +258,7 @@ class GNet float customWeight() const { return customWeight_; } void addGPin(GPin* gPin); + void clearGPins() { gPins_.clear(); } void updateBox(); int64_t hpwl() const; @@ -282,6 +292,8 @@ class GNet float waExpMaxSumY() const; float waYExpMaxSumY() const; + void print(utl::Logger* log) const; + private: std::vector gPins_; std::vector nets_; @@ -474,6 +486,9 @@ class GPin void updateLocation(const GCell* gCell); void updateDensityLocation(const GCell* gCell); + void print(utl::Logger* log) const; + void updateCoordi(); + private: GCell* gCell_ = nullptr; GNet* gNet_ = nullptr; @@ -758,14 +773,16 @@ class NesterovPlaceVars float minPreconditioner = 1.0; // MIN_PRE float initialPrevCoordiUpdateCoef = 100; // z_ref_alpha float referenceHpwl = 446000000; // refDeltaHpwl - float routabilityCheckOverflow = 0.20; - float keepResizeBelowOverflow = 0.0; + float routabilityCheckOverflow = 0.30; + float keepResizeBelowOverflow = 0.3; static const int maxRecursionWlCoef = 10; static const int maxRecursionInitSLPCoef = 10; bool timingDrivenMode = true; + int timingDrivenIterCounter = 0; bool routabilityDrivenMode = true; + bool debug = false; int debug_pause_iterations = 10; int debug_update_iterations = 10; @@ -832,6 +849,19 @@ class NesterovBaseCommon // Number of threads of execution size_t getNumThreads() { return num_threads_; } + GCell* getGCellByIndex(size_t i); + + void setCbk(nesterovDbCbk* cbk) { db_cbk_ = cbk; } + size_t createGCell(odb::dbInst* db_inst); + void createGNet(odb::dbNet* net, bool skip_io_mode); + void createITerm(odb::dbITerm* iTerm); + void destroyGCell(size_t); + void destroyGNet(odb::dbNet*); + void destroyITerm(odb::dbITerm*); + void resizeGCell(odb::dbInst* db_inst); + void moveGCell(odb::dbInst* db_inst); + void fixPointers(); + GCell& getGCell(size_t index) { return gCellStor_[index]; } size_t getGCellIndex(const GCell* gCell) const @@ -839,6 +869,14 @@ class NesterovBaseCommon return std::distance(gCellStor_.data(), gCell); } + void printGCells(); + void printGPins(); + + // TODO do this for each region? Also, manage this properly if other callbacks + // are implemented. + int64_t getDeltaArea() { return deltaArea_; } + void resetDeltaArea() { deltaArea_ = 0; } + private: NesterovBaseVars nbVars_; std::shared_ptr pbc_; @@ -856,7 +894,19 @@ class NesterovBaseCommon std::unordered_map gPinMap_; std::unordered_map gNetMap_; + std::unordered_map db_inst_map_; + std::unordered_map db_net_map_; + std::unordered_map db_iterm_map_; + + // These three deques should not be required if placerBase allows for dynamic + // modifications on its vectors. + std::deque pb_insts_stor_; + std::deque pb_nets_stor_; + std::deque pb_pins_stor_; + int num_threads_; + int64_t deltaArea_; + nesterovDbCbk* db_cbk_; }; // Stores instances belonging to a specific power domain @@ -922,6 +972,8 @@ class NesterovBase // should be separately defined. // This is mainly used for NesterovLoop int64_t nesterovInstsArea() const; + int64_t getStdInstArea() const { return this->stdInstsArea_; } + int64_t getMacroInstArea() const { return this->macroInstsArea_; } // sum phi and target density // used in NesterovPlace @@ -979,6 +1031,25 @@ class NesterovBase float wlCoeffX, float wlCoeffY); + void updatePrevGradient(float wlCoeffX, float wlCoeffY); + void updateCurGradient(float wlCoeffX, float wlCoeffY); + void updateNextGradient(float wlCoeffX, float wlCoeffY); + + // Used for updates based on callbacks + void updateSingleGradient(size_t gCellIndex, + std::vector& sumGrads, + std::vector& wireLengthGrads, + std::vector& densityGrads, + float wlCoeffX, + float wlCoeffY); + + void updateSinglePrevGradient(size_t gCellIndex, + float wlCoeffX, + float wlCoeffY); + void updateSingleCurGradient(size_t gCellIndex, + float wlCoeffX, + float wlCoeffY); + void updateInitialPrevSLPCoordi(); float getStepLength(const std::vector& prevSLPCoordi_, @@ -996,10 +1067,6 @@ class NesterovBase bool checkDivergence(); bool revertDivergence(); - void updatePrevGradient(float wlCoeffX, float wlCoeffY); - void updateCurGradient(float wlCoeffX, float wlCoeffY); - void updateNextGradient(float wlCoeffX, float wlCoeffY); - void updateDensityCenterCur(); void updateDensityCenterCurSLP(); void updateDensityCenterPrevSLP(); @@ -1015,6 +1082,16 @@ class NesterovBase bool isDiverged() const { return isDiverged_; } + void createGCell(odb::dbInst* db_inst, size_t stor_index, RouteBase* rb); + void destroyGCell(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); + private: NesterovBaseVars nbVars_; std::shared_ptr pb_; @@ -1039,11 +1116,16 @@ class NesterovBase std::vector gCellInsts_; std::vector gCellFillers_; + std::unordered_map db_inst_index_map_; + + // used to update gcell states after fixPointers() is called + std::vector new_instances; + float sumPhi_ = 0; float targetDensity_ = 0; float uniformTargetDensity_ = 0; - // Nesterov loop data for each region + // Nesterov loop data for each region, using parallel vectors // SLP is Step Length Prediction. // // y_st, y_dst, y_wdst, w_pdst @@ -1107,7 +1189,7 @@ class NesterovBase int iter_ = 0; bool isConverged_ = false; - // Snapshot data + // Snapshot data for routability, parallel vectors std::vector snapshotCoordi_; std::vector snapshotSLPCoordi_; std::vector snapshotSLPSumGrads_; @@ -1115,6 +1197,11 @@ class NesterovBase float snapshotStepLength_ = 0; void initFillerGCells(); + + void swapAndPop(std::vector& vec, + size_t remove_index, + size_t last_index); + void swapAndPopParallelVectors(size_t remove_index, size_t last_index); }; inline std::vector& NesterovBase::bins() @@ -1153,6 +1240,13 @@ class GCellHandle const GCell& operator*() const { return getGCell(); } operator const GCell*() const { return &getGCell(); } + bool isNesterovBaseCommon() const + { + return std::holds_alternative(storage_); + } + + size_t getIndex() const { return index_; } + private: using StorageVariant = std::variant; @@ -1168,4 +1262,10 @@ class GCellHandle size_t index_; }; +inline bool isValidSigType(const odb::dbSigType& db_type) +{ + return (db_type == odb::dbSigType::SIGNAL + || db_type == odb::dbSigType::CLOCK); +} + } // namespace gpl diff --git a/src/gpl/src/nesterovPlace.cpp b/src/gpl/src/nesterovPlace.cpp index fcf017b030b..f034564286e 100644 --- a/src/gpl/src/nesterovPlace.cpp +++ b/src/gpl/src/nesterovPlace.cpp @@ -71,6 +71,12 @@ NesterovPlace::NesterovPlace(const NesterovPlaceVars& npVars, tb_ = std::move(tb); log_ = log; + db_cbk_ = std::make_unique(this); + nbc_->setCbk(db_cbk_.get()); + if (npVars_.timingDrivenMode) { + db_cbk_->addOwner(pbc_->db()->getChip()->getBlock()); + } + if (npVars.debug && Graphics::guiActive()) { graphics_ = std::make_unique(log_, this, @@ -418,7 +424,8 @@ int NesterovPlace::doNesterovPlace(int start_iter) } // timing driven feature - // do reweight on timing-critical nets. + // if virtual, do reweight on timing-critical nets, + // otherwise keep all modifications by rsz. if (npVars_.timingDrivenMode && tb_->isTimingNetWeightOverflow(average_overflow_)) { // update db's instance location from current density coordinates @@ -429,12 +436,60 @@ int NesterovPlace::doNesterovPlace(int start_iter) // and update GNet's weights from worst timing paths. // // See timingBase.cpp in detail - log_->info( - GPL, 100, "Timing-driven: executing resizer for reweighting nets."); - - bool run_journal_restore + bool virtual_td_iter = (average_overflow_ > npVars_.keepResizeBelowOverflow); - bool shouldTdProceed = tb_->updateGNetWeights(run_journal_restore); + + log_->info(GPL, + 100, + "Timing-driven iteration {}/{}, virtual: {}.", + ++npVars_.timingDrivenIterCounter, + tb_->getTimingNetWeightOverflowSize(), + virtual_td_iter); + + log_->info(GPL, + 101, + "Iter: {}, overflow: {:.3f}, keep rsz at: {}", + iter, + average_overflow_, + npVars_.keepResizeBelowOverflow); + + if (!virtual_td_iter) { + db_cbk_->addOwner(pbc_->db()->getChip()->getBlock()); + } else { + db_cbk_->removeOwner(); + } + + auto block = pbc_->db()->getChip()->getBlock(); + bool shouldTdProceed = tb_->updateGNetWeights(virtual_td_iter); + + if (!virtual_td_iter) { + for (auto& nesterov : nbVec_) { + nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_); + // updates order in routability: + // 1. change areas + // 2. set target density with delta area + // 3. updateareas + // 4. updateDensitySize + + nesterov->setTargetDensity( + static_cast(nbc_->getDeltaArea() + + nesterov->nesterovInstsArea() + + nesterov->totalFillerArea()) + / static_cast(nesterov->whiteSpaceArea())); + + log_->info(GPL, + 107, + "Timing-driven: RSZ delta area: {}", + block->dbuAreaToMicrons(nbc_->getDeltaArea())); + log_->info(GPL, + 108, + "Timing-driven: new target density: {}", + nesterov->targetDensity()); + nbc_->resetDeltaArea(); + nesterov->updateAreas(); + nesterov->updateDensitySize(); + } + } // problem occured // escape timing driven later @@ -554,6 +609,9 @@ int NesterovPlace::doNesterovPlace(int start_iter) graphics_->cellPlot(true); } + if (db_cbk_ != nullptr) { + db_cbk_->removeOwner(); + } return iter; } @@ -596,4 +654,116 @@ void NesterovPlace::updateDb() nbc_->updateDbGCells(); } +nesterovDbCbk::nesterovDbCbk(NesterovPlace* nesterov_place) + : nesterov_place_(nesterov_place) +{ +} + +void NesterovPlace::createGCell(odb::dbInst* db_inst) +{ + auto gcell_index = nbc_->createGCell(db_inst); + for (auto& nesterov : nbVec_) { + // TODO: manage regions, not every NB should create a + // gcell. + nesterov->createGCell(db_inst, gcell_index, rb_.get()); + } +} + +void NesterovPlace::destroyGCell(odb::dbInst* db_inst) +{ + for (auto& nesterov : nbVec_) { + nesterov->destroyGCell(db_inst); + } +} + +void NesterovPlace::createGNet(odb::dbNet* db_net) +{ + odb::dbSigType netType = db_net->getSigType(); + if (!isValidSigType(netType)) { + log_->report("db_net:{} is not signal or clock: {}", + db_net->getName(), + db_net->getSigType().getString()); + return; + } + nbc_->createGNet(db_net, pbc_->skipIoMode()); +} + +void NesterovPlace::destroyGNet(odb::dbNet* db_net) +{ + nbc_->destroyGNet(db_net); +} + +void NesterovPlace::createITerm(odb::dbITerm* iterm) +{ + if (!isValidSigType(iterm->getSigType())) { + return; + } + nbc_->createITerm(iterm); +} + +void NesterovPlace::destroyITerm(odb::dbITerm* iterm) +{ + if (!isValidSigType(iterm->getSigType())) { + log_->report("iterm:{} is not signal or clock: {}", + iterm->getName('|'), + iterm->getSigType().getString()); + return; + } + nbc_->destroyITerm(iterm); +} + +void NesterovPlace::resizeGCell(odb::dbInst* db_inst) +{ + nbc_->resizeGCell(db_inst); +} + +void NesterovPlace::moveGCell(odb::dbInst* db_inst) +{ + nbc_->moveGCell(db_inst); +} + +void nesterovDbCbk::inDbInstSwapMasterAfter(odb::dbInst* db_inst) +{ + nesterov_place_->resizeGCell(db_inst); +} + +void nesterovDbCbk::inDbPostMoveInst(odb::dbInst* db_inst) +{ + nesterov_place_->moveGCell(db_inst); +} + +void nesterovDbCbk::inDbInstCreate(odb::dbInst* db_inst) +{ + nesterov_place_->createGCell(db_inst); +} + +// TODO: use the region to create new gcell. +void nesterovDbCbk::inDbInstCreate(odb::dbInst* db_inst, odb::dbRegion* region) +{ +} + +void nesterovDbCbk::inDbInstDestroy(odb::dbInst* db_inst) +{ + nesterov_place_->destroyGCell(db_inst); +} + +void nesterovDbCbk::inDbITermCreate(odb::dbITerm* iterm) +{ + nesterov_place_->createITerm(iterm); +} + +void nesterovDbCbk::inDbITermDestroy(odb::dbITerm* iterm) +{ + nesterov_place_->destroyITerm(iterm); +} + +void nesterovDbCbk::inDbNetCreate(odb::dbNet* db_net) +{ + nesterov_place_->createGNet(db_net); +} + +void nesterovDbCbk::inDbNetDestroy(odb::dbNet* db_net) +{ +} + } // namespace gpl diff --git a/src/gpl/src/nesterovPlace.h b/src/gpl/src/nesterovPlace.h index e23fdd6761f..cdb08fa3ca5 100644 --- a/src/gpl/src/nesterovPlace.h +++ b/src/gpl/src/nesterovPlace.h @@ -38,6 +38,7 @@ #include #include "nesterovBase.h" +#include "odb/dbBlockCallBackObj.h" #include "point.h" namespace utl { @@ -90,6 +91,17 @@ class NesterovPlace void updateCurGradient(const std::shared_ptr& nb); void updateNextGradient(const std::shared_ptr& nb); + void resizeGCell(odb::dbInst*); + void moveGCell(odb::dbInst*); + + void createGCell(odb::dbInst*); + void createGNet(odb::dbNet*); + void createITerm(odb::dbITerm*); + + void destroyGCell(odb::dbInst*); + void destroyGNet(odb::dbNet*); + void destroyITerm(odb::dbITerm*); + private: std::shared_ptr pbc_; std::shared_ptr nbc_; @@ -132,5 +144,30 @@ class NesterovPlace void init(); void reset(); + + std::unique_ptr db_cbk_; }; + +class nesterovDbCbk : public odb::dbBlockCallBackObj +{ + public: + nesterovDbCbk(NesterovPlace* nesterov_place_); + + void inDbInstCreate(odb::dbInst*) override; + void inDbInstCreate(odb::dbInst*, odb::dbRegion*) override; + void inDbInstDestroy(odb::dbInst*) override; + + void inDbITermCreate(odb::dbITerm*) override; + void inDbITermDestroy(odb::dbITerm*) override; + + void inDbNetCreate(odb::dbNet*) override; + void inDbNetDestroy(odb::dbNet*) override; + + void inDbInstSwapMasterAfter(odb::dbInst*) override; + void inDbPostMoveInst(odb::dbInst*) override; + + private: + NesterovPlace* nesterov_place_; +}; + } // namespace gpl diff --git a/src/gpl/src/placerBase.h b/src/gpl/src/placerBase.h index 5b25b9096ba..5c7355c9519 100644 --- a/src/gpl/src/placerBase.h +++ b/src/gpl/src/placerBase.h @@ -186,6 +186,8 @@ class Pin Net* net() const { return net_; } std::string name() const; + void updateCoordi(odb::dbITerm* iTerm); + private: void* term_ = nullptr; Instance* inst_ = nullptr; @@ -210,7 +212,6 @@ class Pin unsigned char maxPinXField_ : 1; unsigned char maxPinYField_ : 1; - void updateCoordi(odb::dbITerm* iTerm); void updateCoordi(odb::dbBTerm* bTerm, utl::Logger* logger); }; @@ -332,6 +333,7 @@ class PlacerBaseCommon int padLeft() const { return pbVars_.padLeft; } int padRight() const { return pbVars_.padRight; } + bool skipIoMode() const { return pbVars_.skipIoMode; } int64_t hpwl() const; void printInfo() const; diff --git a/src/gpl/src/replace.cpp b/src/gpl/src/replace.cpp index 6e91b206d56..d383fafe46d 100644 --- a/src/gpl/src/replace.cpp +++ b/src/gpl/src/replace.cpp @@ -114,7 +114,7 @@ void Replace::reset() routabilityMaxInflationIter_ = 4; timingDrivenMode_ = true; - keepResizeBelowOverflow_ = 0.0; + keepResizeBelowOverflow_ = 0.3; routabilityDrivenMode_ = true; routabilityUseRudy_ = true; uniformTargetDensityMode_ = false; diff --git a/src/gpl/src/replace.i b/src/gpl/src/replace.i index ddd177b949d..2a5a7bc9165 100644 --- a/src/gpl/src/replace.i +++ b/src/gpl/src/replace.i @@ -181,7 +181,7 @@ set_routability_check_overflow_cmd(float overflow) Replace* replace = getReplace(); replace->setRoutabilityCheckOverflow(overflow); } - + void set_routability_max_density_cmd(float density) { diff --git a/src/gpl/src/replace.tcl b/src/gpl/src/replace.tcl index a9c37ddb5f1..5bdbcfee22a 100644 --- a/src/gpl/src/replace.tcl +++ b/src/gpl/src/replace.tcl @@ -351,7 +351,7 @@ proc cluster_flops { args } { flags {} if { [ord::get_db_block] == "NULL" } { - utl::error GPL 104 "No design block found." + utl::error GPL 113 "No design block found." } set tray_weight 32.0 @@ -384,7 +384,7 @@ proc global_placement_debug { args } { flags {-draw_bins -initial} ;# checker off if { [ord::get_db_block] == "NULL" } { - utl::error GPL 105 "No design block found." + utl::error GPL 117 "No design block found." } set pause 10 @@ -413,7 +413,7 @@ proc global_placement_debug { args } { namespace eval gpl { proc get_global_placement_uniform_density { args } { if { [ord::get_db_block] == "NULL" } { - utl::error GPL 106 "No design block found." + utl::error GPL 114 "No design block found." } sta::parse_key_args "get_global_placement_uniform_density" args \ diff --git a/src/gpl/src/routeBase.h b/src/gpl/src/routeBase.h index 70756299bb0..b1721ac1928 100644 --- a/src/gpl/src/routeBase.h +++ b/src/gpl/src/routeBase.h @@ -201,6 +201,10 @@ class RouteBase int inflationIterCnt() const; void revertGCellSizeToMinRc(); + void pushBackMinRcCellSize(int dx, int dy) + { + minRcCellSize_.emplace_back(dx, dy); + } private: RouteBaseVars rbVars_; diff --git a/src/gpl/src/timingBase.cpp b/src/gpl/src/timingBase.cpp index 6c4e9a388db..d605a95289b 100644 --- a/src/gpl/src/timingBase.cpp +++ b/src/gpl/src/timingBase.cpp @@ -146,13 +146,17 @@ bool TimingBase::updateGNetWeights(bool run_journal_restore) { rs_->findResizeSlacks(run_journal_restore); + if (!run_journal_restore) { + nbc_->fixPointers(); + } + // get worst resize nets sta::NetSeq& worst_slack_nets = rs_->resizeWorstSlackNets(); if (worst_slack_nets.empty()) { log_->warn( GPL, - 114, + 105, "Timing-driven: no net slacks found. Timing-driven mode disabled."); return false; } @@ -163,7 +167,7 @@ bool TimingBase::updateGNetWeights(bool run_journal_restore) = rs_->resizeNetSlack(worst_slack_nets[worst_slack_nets.size() - 1]) .value(); - log_->info(GPL, 101, "Timing-driven: worst slack {:.3g}", slack_min); + log_->info(GPL, 106, "Timing-driven: worst slack {:.3g}", slack_min); if (sta::fuzzyInf(slack_min)) { log_->warn(GPL, diff --git a/src/gpl/test/convergence01.defok b/src/gpl/test/convergence01.defok index 17410a7f7de..04b2a63fc5f 100644 --- a/src/gpl/test/convergence01.defok +++ b/src/gpl/test/convergence01.defok @@ -160,71 +160,71 @@ COMPONENTS 145 ; - PHY_79 TAPCELL_ASAP7_75t_R + SOURCE DIST + FIXED ( 11394 11070 ) S ; - PHY_8 TAPCELL_ASAP7_75t_R + SOURCE DIST + FIXED ( 486 1620 ) N ; - PHY_9 TAPCELL_ASAP7_75t_R + SOURCE DIST + FIXED ( 11394 1620 ) FN ; - - _33_ INVx3_ASAP7_75t_R + PLACED ( 4863 10251 ) N ; - - _34_ INVx3_ASAP7_75t_R + PLACED ( 5589 6085 ) N ; - - _35_ INVx3_ASAP7_75t_R + PLACED ( 5219 5929 ) N ; - - _36_ INVx3_ASAP7_75t_R + PLACED ( 4563 10251 ) N ; - - _37_ INVx3_ASAP7_75t_R + PLACED ( 4777 5627 ) N ; - - _38_ INVx3_ASAP7_75t_R + PLACED ( 4573 5547 ) N ; - - _39_ INVx3_ASAP7_75t_R + PLACED ( 10394 4424 ) N ; - - _40_ INVx3_ASAP7_75t_R + PLACED ( 6172 4824 ) N ; - - _41_ INVx3_ASAP7_75t_R + PLACED ( 10394 4417 ) N ; - - _42_ INVx3_ASAP7_75t_R + PLACED ( 5889 4403 ) N ; - - _43_ INVx3_ASAP7_75t_R + PLACED ( 5785 4238 ) N ; - - _44_ INVx3_ASAP7_75t_R + PLACED ( 10394 3939 ) N ; - - _45_ INVx3_ASAP7_75t_R + PLACED ( 5575 4009 ) N ; - - _46_ INVx3_ASAP7_75t_R + PLACED ( 5470 3916 ) N ; - - _47_ INVx3_ASAP7_75t_R + PLACED ( 3021 1359 ) N ; - - _48_ INVx3_ASAP7_75t_R + PLACED ( 2962 1359 ) N ; - - _49_ INVx3_ASAP7_75t_R + PLACED ( 2875 1359 ) N ; - - _50_ INVx3_ASAP7_75t_R + PLACED ( 2800 1359 ) N ; - - _51_ INVx3_ASAP7_75t_R + PLACED ( 2728 1359 ) N ; - - _52_ INVx3_ASAP7_75t_R + PLACED ( 2647 1359 ) N ; - - _53_ INVx3_ASAP7_75t_R + PLACED ( 2584 1359 ) N ; - - _54_ INVx3_ASAP7_75t_R + PLACED ( 2537 1359 ) N ; - - _55_ INVx3_ASAP7_75t_R + PLACED ( 4113 3833 ) N ; - - _56_ INVx3_ASAP7_75t_R + PLACED ( 3909 3778 ) N ; - - _57_ INVx3_ASAP7_75t_R + PLACED ( 3815 3661 ) N ; - - _58_ INVx3_ASAP7_75t_R + PLACED ( 3818 3354 ) N ; - - _59_ INVx3_ASAP7_75t_R + PLACED ( 3768 3137 ) N ; - - _60_ INVx3_ASAP7_75t_R + PLACED ( 3251 3102 ) N ; - - _61_ INVx3_ASAP7_75t_R + PLACED ( 3844 2943 ) N ; - - _62_ INVx3_ASAP7_75t_R + PLACED ( 1324 2911 ) N ; - - _63_ INVx3_ASAP7_75t_R + PLACED ( 5354 10251 ) N ; - - _64_ INVx3_ASAP7_75t_R + PLACED ( 6046 6200 ) N ; - - _65_ INVx3_ASAP7_75t_R + PLACED ( 6039 6108 ) N ; - - _66_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6192 5321 ) N ; - - _67_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6190 5419 ) N ; - - _68_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5078 9540 ) N ; - - _69_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1154 1359 ) N ; - - _70_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3441 1642 ) N ; - - _71_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3082 1699 ) N ; - - _72_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3482 1822 ) N ; - - _73_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3567 2297 ) N ; - - _74_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3607 2838 ) N ; - - _75_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3699 2971 ) N ; - - _76_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3866 3007 ) N ; - - _77_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2089 ) N ; - - _78_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2110 ) N ; - - _79_ DFFLQNx1_ASAP7_75t_R + PLACED ( 953 2134 ) N ; - - _80_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1010 2175 ) N ; - - _81_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1059 2254 ) N ; - - _82_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1113 2449 ) N ; - - _83_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1186 2945 ) N ; - - _84_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1212 3095 ) N ; - - _85_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3681 4697 ) N ; - - _86_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3790 4781 ) N ; - - _87_ DFFLQNx1_ASAP7_75t_R + PLACED ( 8861 4028 ) N ; - - _88_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4005 5038 ) N ; - - _89_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4105 5275 ) N ; - - _90_ DFFLQNx1_ASAP7_75t_R + PLACED ( 8478 5108 ) N ; - - _91_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4365 5962 ) N ; - - _92_ DFFLQNx1_ASAP7_75t_R + PLACED ( 8648 4934 ) N ; - - _93_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4229 4767 ) N ; - - _94_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4528 4840 ) N ; - - _95_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3978 9781 ) N ; - - _96_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5177 5126 ) N ; - - _97_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5710 5278 ) N ; + - _33_ INVx3_ASAP7_75t_R + PLACED ( 4075 5663 ) N ; + - _34_ INVx3_ASAP7_75t_R + PLACED ( 7307 7219 ) N ; + - _35_ INVx3_ASAP7_75t_R + PLACED ( 7547 4689 ) N ; + - _36_ INVx3_ASAP7_75t_R + PLACED ( 4981 4421 ) N ; + - _37_ INVx3_ASAP7_75t_R + PLACED ( 7495 4651 ) N ; + - _38_ INVx3_ASAP7_75t_R + PLACED ( 4923 4581 ) N ; + - _39_ INVx3_ASAP7_75t_R + PLACED ( 4632 5953 ) N ; + - _40_ INVx3_ASAP7_75t_R + PLACED ( 7594 4721 ) N ; + - _41_ INVx3_ASAP7_75t_R + PLACED ( 7659 4691 ) N ; + - _42_ INVx3_ASAP7_75t_R + PLACED ( 4952 4498 ) N ; + - _43_ INVx3_ASAP7_75t_R + PLACED ( 7379 4442 ) N ; + - _44_ INVx3_ASAP7_75t_R + PLACED ( 5843 7119 ) N ; + - _45_ INVx3_ASAP7_75t_R + PLACED ( 7527 4672 ) N ; + - _46_ INVx3_ASAP7_75t_R + PLACED ( 7689 7185 ) N ; + - _47_ INVx2_ASAP7_75t_R + PLACED ( 5252 7328 ) N ; + - _48_ INVx2_ASAP7_75t_R + PLACED ( 4997 7364 ) N ; + - _49_ INVx2_ASAP7_75t_R + PLACED ( 5444 7337 ) N ; + - _50_ INVx2_ASAP7_75t_R + PLACED ( 4839 6539 ) N ; + - _51_ INVx2_ASAP7_75t_R + PLACED ( 4808 7271 ) N ; + - _52_ INVx2_ASAP7_75t_R + PLACED ( 5782 7349 ) N ; + - _53_ INVx2_ASAP7_75t_R + PLACED ( 4810 7281 ) N ; + - _54_ INVx2_ASAP7_75t_R + PLACED ( 4874 7294 ) N ; + - _55_ INVx3_ASAP7_75t_R + PLACED ( 7297 7318 ) N ; + - _56_ INVx2_ASAP7_75t_R + PLACED ( 5022 4490 ) N ; + - _57_ INVx2_ASAP7_75t_R + PLACED ( 5894 4307 ) N ; + - _58_ INVx2_ASAP7_75t_R + PLACED ( 5102 4654 ) N ; + - _59_ INVx3_ASAP7_75t_R + PLACED ( 7289 7319 ) N ; + - _60_ INVx2_ASAP7_75t_R + PLACED ( 4874 4329 ) N ; + - _61_ INVx2_ASAP7_75t_R + PLACED ( 4974 4250 ) N ; + - _62_ INVx2_ASAP7_75t_R + PLACED ( 4983 7461 ) N ; + - _63_ INVx3_ASAP7_75t_R + PLACED ( 7411 7150 ) N ; + - _64_ INVx3_ASAP7_75t_R + PLACED ( 7522 4666 ) N ; + - _65_ INVx3_ASAP7_75t_R + PLACED ( 7445 4588 ) N ; + - _66_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6443 4595 ) N ; + - _67_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6517 4671 ) N ; + - _68_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6416 7145 ) N ; + - _69_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3997 7440 ) N ; + - _70_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3992 4273 ) N ; + - _71_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3897 4345 ) N ; + - _72_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6298 7306 ) N ; + - _73_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4115 4656 ) N ; + - _74_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4901 4323 ) N ; + - _75_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4037 4497 ) N ; + - _76_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6307 7305 ) N ; + - _77_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3893 7284 ) N ; + - _78_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3831 7273 ) N ; + - _79_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4792 7337 ) N ; + - _80_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3829 7262 ) N ; + - _81_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3858 6542 ) N ; + - _82_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4449 7325 ) N ; + - _83_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4009 7350 ) N ; + - _84_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4259 7317 ) N ; + - _85_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6676 7179 ) N ; + - _86_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6521 4676 ) N ; + - _87_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5074 7453 ) N ; + - _88_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6381 4454 ) N ; + - _89_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3972 4509 ) N ; + - _90_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6646 4695 ) N ; + - _91_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6583 4723 ) N ; + - _92_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3665 5954 ) N ; + - _93_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3946 4588 ) N ; + - _94_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6491 4656 ) N ; + - _95_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3998 4431 ) N ; + - _96_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6539 4694 ) N ; + - _97_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6317 7211 ) N ; END COMPONENTS PINS 65 ; - clock + NET clock + DIRECTION INPUT + USE SIGNAL diff --git a/src/gpl/test/convergence01.ok b/src/gpl/test/convergence01.ok index 7fe3bdc9067..6bbca58decb 100644 --- a/src/gpl/test/convergence01.ok +++ b/src/gpl/test/convergence01.ok @@ -49,38 +49,37 @@ [INFO GPL-0029] BinSize: ( 1.377 1.350 ) [INFO GPL-0030] NumBins: 64 [NesterovSolve] Iter: 1 overflow: 0.127 HPWL: 397899 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 6.35e-09 -[INFO GPL-0103] Timing-driven: weighted 8 nets. -[NesterovSolve] Iter: 10 overflow: 0.234 HPWL: 398615 -[NesterovSolve] Iter: 20 overflow: 0.223 HPWL: 398901 -[NesterovSolve] Iter: 30 overflow: 0.217 HPWL: 398906 -[NesterovSolve] Iter: 40 overflow: 0.207 HPWL: 398830 -[NesterovSolve] Iter: 50 overflow: 0.194 HPWL: 398921 -[NesterovSolve] Iter: 60 overflow: 0.201 HPWL: 399003 -[NesterovSolve] Iter: 70 overflow: 0.196 HPWL: 398949 -[NesterovSolve] Iter: 80 overflow: 0.200 HPWL: 398918 -[NesterovSolve] Iter: 90 overflow: 0.197 HPWL: 398963 -[NesterovSolve] Iter: 100 overflow: 0.199 HPWL: 398961 -[NesterovSolve] Iter: 110 overflow: 0.198 HPWL: 398946 -[NesterovSolve] Iter: 120 overflow: 0.197 HPWL: 398947 -[NesterovSolve] Iter: 130 overflow: 0.198 HPWL: 398956 -[NesterovSolve] Iter: 140 overflow: 0.197 HPWL: 398961 -[NesterovSolve] Iter: 150 overflow: 0.197 HPWL: 398948 -[NesterovSolve] Iter: 160 overflow: 0.196 HPWL: 398956 -[NesterovSolve] Iter: 170 overflow: 0.196 HPWL: 398953 -[NesterovSolve] Iter: 180 overflow: 0.196 HPWL: 398942 -[NesterovSolve] Iter: 190 overflow: 0.195 HPWL: 398936 -[NesterovSolve] Iter: 200 overflow: 0.194 HPWL: 398935 -[NesterovSolve] Iter: 210 overflow: 0.191 HPWL: 398955 -[NesterovSolve] Iter: 220 overflow: 0.186 HPWL: 398982 -[NesterovSolve] Iter: 230 overflow: 0.178 HPWL: 398974 -[NesterovSolve] Iter: 240 overflow: 0.173 HPWL: 398947 -[NesterovSolve] Iter: 250 overflow: 0.162 HPWL: 398959 -[NesterovSolve] Iter: 260 overflow: 0.157 HPWL: 398984 -[NesterovSolve] Iter: 270 overflow: 0.153 HPWL: 399059 -[NesterovSolve] Iter: 280 overflow: 0.140 HPWL: 399158 -[NesterovSolve] Iter: 290 overflow: 0.126 HPWL: 399332 -[NesterovSolve] Iter: 300 overflow: 0.103 HPWL: 399704 -[NesterovSolve] Finished with Overflow: 0.096799 +[INFO GPL-0100] Timing-driven iteration 1/6, virtual: false. +[INFO GPL-0101] Iter: 0, overflow: 0.127, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 6.35e-09 +[INFO GPL-0103] Timing-driven: weighted 4 nets. +[INFO GPL-0107] Timing-driven: RSZ delta area: -1.0206 +[INFO GPL-0108] Timing-driven: new target density: 0.49125 +[NesterovSolve] Iter: 10 overflow: 0.379 HPWL: 13036 +[NesterovSolve] Iter: 20 overflow: 0.522 HPWL: 6251 +[NesterovSolve] Iter: 30 overflow: 0.726 HPWL: 1966 +[NesterovSolve] Iter: 40 overflow: 0.710 HPWL: 2056 +[NesterovSolve] Iter: 50 overflow: 0.745 HPWL: 759 +[NesterovSolve] Iter: 60 overflow: 0.743 HPWL: 1255 +[NesterovSolve] Iter: 70 overflow: 0.745 HPWL: 741 +[NesterovSolve] Iter: 80 overflow: 0.743 HPWL: 933 +[NesterovSolve] Iter: 90 overflow: 0.739 HPWL: 848 +[NesterovSolve] Iter: 100 overflow: 0.729 HPWL: 841 +[NesterovSolve] Iter: 110 overflow: 0.719 HPWL: 683 +[NesterovSolve] Iter: 120 overflow: 0.697 HPWL: 693 +[NesterovSolve] Iter: 130 overflow: 0.693 HPWL: 807 +[NesterovSolve] Iter: 140 overflow: 0.700 HPWL: 982 +[NesterovSolve] Iter: 150 overflow: 0.684 HPWL: 1389 +[NesterovSolve] Iter: 160 overflow: 0.630 HPWL: 2178 +[NesterovSolve] Iter: 170 overflow: 0.521 HPWL: 3636 +[NesterovSolve] Iter: 180 overflow: 0.505 HPWL: 3978 +[NesterovSolve] Iter: 190 overflow: 0.500 HPWL: 4651 +[NesterovSolve] Iter: 200 overflow: 0.460 HPWL: 6865 +[NesterovSolve] Iter: 210 overflow: 0.429 HPWL: 7570 +[NesterovSolve] Iter: 220 overflow: 0.335 HPWL: 7626 +[NesterovSolve] Iter: 230 overflow: 0.312 HPWL: 7462 +[NesterovSolve] Iter: 240 overflow: 0.239 HPWL: 7418 +[NesterovSolve] Iter: 250 overflow: 0.199 HPWL: 7411 +[NesterovSolve] Iter: 260 overflow: 0.106 HPWL: 7276 +[NesterovSolve] Finished with Overflow: 0.098768 No differences found. diff --git a/src/gpl/test/simple01-td-tune.defok b/src/gpl/test/simple01-td-tune.defok index b448305d570..ad1ac44ed7d 100644 --- a/src/gpl/test/simple01-td-tune.defok +++ b/src/gpl/test/simple01-td-tune.defok @@ -60,292 +60,292 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 286 ; - - _276_ NOR2_X2 + PLACED ( 42354 14225 ) N ; - - _278_ INV_X1 + PLACED ( 9385 35614 ) N ; - - _279_ NOR2_X1 + PLACED ( 12045 37359 ) N ; - - _280_ INV_X1 + PLACED ( 15550 36873 ) N ; - - _281_ INV_X1 + PLACED ( 21594 52087 ) N ; - - _282_ NOR2_X1 + PLACED ( 22211 49249 ) N ; - - _283_ INV_X1 + PLACED ( 28527 46458 ) N ; - - _284_ NOR2_X1 + PLACED ( 27058 47233 ) N ; - - _285_ NOR2_X1 + PLACED ( 21815 47049 ) N ; - - _286_ INV_X1 + PLACED ( 13256 45340 ) N ; - - _287_ NOR2_X1 + PLACED ( 16844 45152 ) N ; - - _288_ INV_X1 + PLACED ( 18130 44804 ) N ; - - _289_ AND2_X1 + PLACED ( 18980 38772 ) N ; - - _290_ INV_X1 + PLACED ( 21131 13356 ) N ; - - _291_ NOR2_X1 + PLACED ( 18737 13110 ) N ; - - _292_ INV_X1 + PLACED ( 14020 11487 ) N ; - - _293_ AOI21_X1 + PLACED ( 18005 13082 ) N ; - - _294_ INV_X1 + PLACED ( 26003 17124 ) N ; - - _295_ NOR2_X1 + PLACED ( 24712 20139 ) N ; - - _296_ INV_X1 + PLACED ( 17375 20606 ) N ; - - _297_ NOR2_X1 + PLACED ( 17618 21756 ) N ; - - _298_ NOR2_X1 + PLACED ( 20373 24153 ) N ; - - _299_ AND2_X1 + PLACED ( 20175 36369 ) N ; - - _300_ INV_X16 + PLACED ( 55480 15491 ) N ; - - _301_ NOR2_X4 + PLACED ( 53842 17696 ) N ; - - _302_ INV_X16 + PLACED ( 48847 18091 ) N ; - - _303_ NOR3_X2 + PLACED ( 51618 18609 ) N ; - - _304_ AOI21_X1 + PLACED ( 49672 18398 ) N ; - - _305_ INV_X1 + PLACED ( 43799 26919 ) N ; - - _306_ INV_X32 + PLACED ( 41494 39812 ) N ; - - _307_ AND2_X4 + PLACED ( 56646 34091 ) N ; - - _308_ INV_X4 + PLACED ( 58253 32758 ) N ; - - _309_ INV_X32 + PLACED ( 48955 52163 ) N ; - - _310_ OAI211_X4 + PLACED ( 53973 37862 ) N ; - - _311_ NAND2_X4 + PLACED ( 56386 30778 ) N ; - - _312_ INV_X16 + PLACED ( 55480 23194 ) N ; - - _313_ NOR2_X1 + PLACED ( 56482 27704 ) N ; - - _314_ NOR3_X4 + PLACED ( 53023 28519 ) N ; - - _315_ NOR2_X2 + PLACED ( 40940 29906 ) N ; - - _316_ INV_X1 + PLACED ( 34345 39925 ) N ; - - _317_ NOR2_X1 + PLACED ( 33345 37563 ) N ; - - _318_ INV_X32 + PLACED ( 33402 4608 ) N ; - - _319_ NOR2_X4 + PLACED ( 34329 28310 ) N ; - - _320_ INV_X4 + PLACED ( 28088 24119 ) N ; - - _321_ NAND2_X1 + PLACED ( 26067 27523 ) N ; - - _322_ INV_X1 + PLACED ( 26029 29792 ) N ; - - _323_ OAI21_X4 + PLACED ( 24346 29504 ) N ; - - _324_ NOR4_X4 + PLACED ( 30520 33259 ) N ; - - _325_ NOR2_X1 + PLACED ( 27394 27244 ) N ; - - _326_ OAI21_X1 + PLACED ( 26145 29380 ) N ; - - _327_ INV_X1 + PLACED ( 13403 30479 ) N ; - - _328_ INV_X32 + PLACED ( 31769 49193 ) N ; - - _329_ NOR3_X2 + PLACED ( 34608 31819 ) N ; - - _330_ AOI21_X4 + PLACED ( 35302 28250 ) N ; - - _331_ OAI221_X4 + PLACED ( 25003 29980 ) N ; - - _332_ OAI211_X1 + PLACED ( 19078 36286 ) N ; - - _333_ AND2_X1 + PLACED ( 11653 37356 ) N ; - - _334_ INV_X1 + PLACED ( 14022 37407 ) N ; - - _335_ NAND2_X1 + PLACED ( 23889 49257 ) N ; - - _336_ NAND2_X1 + PLACED ( 27069 46837 ) N ; - - _337_ NAND2_X1 + PLACED ( 23663 46294 ) N ; - - _338_ INV_X1 + PLACED ( 22242 47535 ) N ; - - _339_ NAND3_X1 + PLACED ( 19240 45200 ) N ; - - _340_ NAND2_X1 + PLACED ( 16912 45080 ) N ; - - _341_ NAND2_X1 + PLACED ( 18233 44605 ) N ; - - _342_ INV_X1 + PLACED ( 19436 13048 ) N ; - - _343_ OAI211_X1 + PLACED ( 18570 13864 ) N ; - - _344_ NAND2_X1 + PLACED ( 19057 14772 ) N ; - - _345_ AOI211_X1 + PLACED ( 20035 22537 ) N ; - - _346_ NAND2_X1 + PLACED ( 24925 20171 ) N ; - - _347_ NAND2_X1 + PLACED ( 17792 22118 ) N ; - - _348_ OAI21_X1 + PLACED ( 22832 22825 ) N ; - - _349_ OR2_X1 + PLACED ( 22336 36084 ) N ; - - _350_ AOI21_X1 + PLACED ( 18643 37688 ) N ; - - _351_ AND4_X1 + PLACED ( 16340 36214 ) N ; - - _352_ AOI22_X1 + PLACED ( 16294 36342 ) N ; - - _353_ OR2_X1 + PLACED ( 17554 34041 ) N ; - - _355_ INV_X2 + PLACED ( 43100 14384 ) N ; - - _357_ AND3_X1 + PLACED ( 19347 38295 ) N ; - - _358_ OAI211_X4 + PLACED ( 23564 36873 ) N ; - - _359_ OAI21_X1 + PLACED ( 17467 37804 ) N ; - - _360_ OAI21_X1 + PLACED ( 23093 36542 ) N ; - - _361_ NAND3_X4 + PLACED ( 24286 37990 ) N ; - - _362_ NOR2_X1 + PLACED ( 42283 44790 ) N ; - - _363_ INV_X1 + PLACED ( 42546 44281 ) N ; - - _364_ NOR2_X4 + PLACED ( 40934 45041 ) N ; - - _365_ AOI221_X4 + PLACED ( 10073 39662 ) N ; - - _366_ AND2_X4 + PLACED ( 41447 45324 ) N ; - - _368_ OAI21_X1 + PLACED ( 15716 35251 ) N ; - - _370_ AOI22_X1 + PLACED ( 11627 36373 ) N ; - - _371_ NOR2_X2 + PLACED ( 19593 30586 ) N ; - - _372_ NAND3_X1 + PLACED ( 19619 37946 ) N ; - - _373_ OR2_X1 + PLACED ( 19314 42490 ) N ; - - _374_ AOI22_X1 + PLACED ( 19387 45128 ) N ; - - _375_ NAND2_X1 + PLACED ( 18929 44137 ) N ; - - _376_ XOR2_X1 + PLACED ( 7497 45520 ) N ; - - _377_ XNOR2_X1 + PLACED ( 8758 44628 ) N ; - - _378_ INV_X1 + PLACED ( 46193 52678 ) N ; - - _380_ NOR2_X1 + PLACED ( 14125 47268 ) N ; - - _381_ NAND2_X1 + PLACED ( 12097 45676 ) N ; - - _382_ AOI221_X4 + PLACED ( 10623 45637 ) N ; - - _383_ AOI21_X1 + PLACED ( 12867 47142 ) N ; - - _384_ INV_X1 + PLACED ( 24096 44348 ) N ; - - _385_ INV_X1 + PLACED ( 23935 41778 ) N ; - - _386_ OAI211_X1 + PLACED ( 24168 45257 ) N ; - - _387_ INV_X1 + PLACED ( 25115 47186 ) N ; - - _388_ AND4_X1 + PLACED ( 24205 47127 ) N ; - - _389_ AOI22_X1 + PLACED ( 24023 47255 ) N ; - - _390_ NOR2_X1 + PLACED ( 25410 47433 ) N ; - - _391_ NOR2_X1 + PLACED ( 21821 53508 ) N ; - - _392_ NAND2_X1 + PLACED ( 23260 52449 ) N ; - - _393_ AOI221_X4 + PLACED ( 15786 53358 ) N ; - - _394_ AOI21_X1 + PLACED ( 21202 53999 ) N ; - - _395_ OAI21_X1 + PLACED ( 24835 44985 ) N ; - - _396_ XOR2_X1 + PLACED ( 27628 54139 ) N ; - - _397_ XNOR2_X1 + PLACED ( 27156 53558 ) N ; - - _398_ NOR2_X1 + PLACED ( 28885 53702 ) N ; - - _399_ AOI221_X1 + PLACED ( 26624 54571 ) N ; - - _401_ OR3_X1 + PLACED ( 27769 46072 ) N ; - - _402_ AOI21_X1 + PLACED ( 28125 54418 ) N ; - - _403_ INV_X1 + PLACED ( 19583 24545 ) N ; - - _404_ OAI211_X1 + PLACED ( 18797 28814 ) N ; - - _405_ AOI21_X1 + PLACED ( 18770 21373 ) N ; - - _406_ AOI21_X1 + PLACED ( 17600 21072 ) N ; - - _407_ AND2_X1 + PLACED ( 18266 20408 ) N ; - - _408_ XNOR2_X1 + PLACED ( 23103 16137 ) N ; - - _409_ XNOR2_X1 + PLACED ( 18336 16537 ) N ; - - _410_ NOR2_X1 + PLACED ( 25241 16319 ) N ; - - _411_ AOI221_X1 + PLACED ( 16156 16563 ) N ; - - _412_ OR3_X1 + PLACED ( 25933 17460 ) N ; - - _413_ AOI21_X1 + PLACED ( 23956 16344 ) N ; - - _414_ OAI21_X1 + PLACED ( 19598 29382 ) N ; - - _415_ AND2_X1 + PLACED ( 19584 22437 ) N ; - - _416_ AND4_X1 + PLACED ( 19836 24588 ) N ; - - _417_ AOI22_X1 + PLACED ( 19778 24673 ) N ; - - _418_ OR2_X1 + PLACED ( 22357 23364 ) N ; - - _419_ NOR2_X1 + PLACED ( 13867 21559 ) N ; - - _420_ AOI221_X4 + PLACED ( 10535 21512 ) N ; - - _421_ OAI21_X1 + PLACED ( 20681 23251 ) N ; - - _422_ AOI21_X1 + PLACED ( 13031 21861 ) N ; - - _423_ AOI21_X1 + PLACED ( 18338 10494 ) N ; - - _424_ NOR2_X1 + PLACED ( 17538 10538 ) N ; - - _425_ NOR2_X1 + PLACED ( 19099 11405 ) N ; - - _426_ XNOR2_X1 + PLACED ( 22175 10988 ) N ; - - _427_ XNOR2_X1 + PLACED ( 22634 10799 ) N ; - - _428_ NOR2_X1 + PLACED ( 30294 13797 ) N ; - - _429_ AOI221_X2 + PLACED ( 31195 13949 ) N ; - - _430_ OR3_X1 + PLACED ( 27148 14861 ) N ; - - _431_ AOI21_X1 + PLACED ( 29514 13620 ) N ; - - _432_ XNOR2_X1 + PLACED ( 18038 7158 ) N ; - - _433_ XNOR2_X1 + PLACED ( 19115 7925 ) N ; - - _434_ AOI221_X2 + PLACED ( 10475 14449 ) N ; - - _435_ OR3_X1 + PLACED ( 25418 14897 ) N ; - - _436_ AOI22_X1 + PLACED ( 12116 13825 ) N ; - - _437_ NAND2_X1 + PLACED ( 37952 32055 ) N ; - - _438_ OAI221_X1 + PLACED ( 39891 28666 ) N ; - - _439_ NAND2_X1 + PLACED ( 39500 27471 ) N ; - - _440_ XOR2_X1 + PLACED ( 34841 25134 ) N ; - - _441_ XNOR2_X1 + PLACED ( 40539 26387 ) N ; - - _442_ AOI221_X2 + PLACED ( 42420 24480 ) N ; - - _443_ NAND2_X1 + PLACED ( 31427 23611 ) N ; - - _444_ AOI22_X1 + PLACED ( 30392 23897 ) N ; - - _445_ OAI21_X1 + PLACED ( 38045 32369 ) N ; - - _446_ NAND2_X1 + PLACED ( 38136 30887 ) N ; - - _447_ XNOR2_X1 + PLACED ( 36546 19269 ) N ; - - _448_ XNOR2_X1 + PLACED ( 36437 19295 ) N ; - - _449_ NOR2_X1 + PLACED ( 36037 15752 ) N ; - - _450_ AOI221_X1 + PLACED ( 31461 18117 ) N ; - - _451_ OR3_X1 + PLACED ( 34609 16183 ) N ; - - _452_ AOI21_X1 + PLACED ( 34691 16069 ) N ; - - _453_ XNOR2_X1 + PLACED ( 36787 37096 ) N ; - - _454_ XNOR2_X1 + PLACED ( 37732 35546 ) N ; - - _455_ AOI221_X2 + PLACED ( 33513 53761 ) N ; - - _456_ OR3_X1 + PLACED ( 32996 43603 ) N ; - - _457_ AOI22_X1 + PLACED ( 33821 47032 ) N ; - - _458_ AOI22_X1 + PLACED ( 56420 30791 ) N ; - - _459_ NOR2_X1 + PLACED ( 57930 28001 ) N ; - - _460_ XOR2_X1 + PLACED ( 56759 18616 ) N ; - - _461_ XNOR2_X1 + PLACED ( 57651 19654 ) N ; - - _462_ NOR2_X1 + PLACED ( 48302 14062 ) N ; - - _463_ AOI221_X1 + PLACED ( 46123 14557 ) N ; - - _464_ OR3_X1 + PLACED ( 47650 15453 ) N ; - - _465_ AOI21_X1 + PLACED ( 47921 14013 ) N ; - - _466_ XNOR2_X1 + PLACED ( 55885 24516 ) N ; - - _467_ XNOR2_X1 + PLACED ( 56173 28829 ) N ; - - _468_ AOI221_X4 + PLACED ( 47160 29135 ) N ; - - _469_ OR3_X1 + PLACED ( 48568 24597 ) N ; - - _470_ AOI22_X1 + PLACED ( 49316 24733 ) N ; - - _471_ XNOR2_X1 + PLACED ( 46792 36566 ) N ; - - _472_ INV_X1 + PLACED ( 52577 37474 ) N ; - - _473_ NOR2_X1 + PLACED ( 51948 37439 ) N ; - - _474_ XNOR2_X1 + PLACED ( 48268 36261 ) N ; - - _475_ AOI221_X4 + PLACED ( 45682 31682 ) N ; - - _476_ NAND3_X1 + PLACED ( 47070 33243 ) N ; - - _477_ AOI22_X1 + PLACED ( 47251 34092 ) N ; - - _478_ XOR2_X1 + PLACED ( 52580 46770 ) N ; - - _479_ AOI221_X4 + PLACED ( 46349 45495 ) N ; - - _480_ NAND3_X1 + PLACED ( 48069 46122 ) N ; - - _481_ AOI22_X1 + PLACED ( 48558 47265 ) N ; - - _482_ NOR2_X1 + PLACED ( 42062 14504 ) N ; - - _483_ NOR2_X1 + PLACED ( 53939 33192 ) N ; - - _484_ AND3_X1 + PLACED ( 52236 34811 ) N ; - - _485_ NAND3_X1 + PLACED ( 30429 37224 ) N ; - - _486_ NOR3_X1 + PLACED ( 23099 15812 ) N ; - - _487_ NAND2_X1 + PLACED ( 24893 16017 ) N ; - - _488_ NOR4_X1 + PLACED ( 27114 40103 ) N ; - - _489_ NAND3_X1 + PLACED ( 26316 42832 ) N ; - - _490_ NOR3_X1 + PLACED ( 36215 22638 ) N ; - - _491_ NAND3_X1 + PLACED ( 39623 21817 ) N ; - - _492_ AOI221_X4 + PLACED ( 40058 20364 ) N ; - - _493_ NAND3_X1 + PLACED ( 34828 53224 ) N ; - - _494_ AOI221_X1 + PLACED ( 36856 20737 ) N ; - - _495_ MUX2_X1 + PLACED ( 12422 57478 ) N ; - - _496_ NOR2_X4 + PLACED ( 42093 52804 ) N ; - - _498_ MUX2_X1 + PLACED ( 14393 56595 ) N ; - - _499_ MUX2_X1 + PLACED ( 1407 34649 ) N ; - - _500_ MUX2_X1 + PLACED ( 3423 38250 ) N ; - - _501_ MUX2_X1 + PLACED ( 1527 50042 ) N ; - - _502_ MUX2_X1 + PLACED ( 4011 49111 ) N ; - - _503_ MUX2_X1 + PLACED ( 33289 57478 ) N ; - - _504_ MUX2_X1 + PLACED ( 35074 56634 ) N ; - - _505_ MUX2_X1 + PLACED ( 26486 4579 ) N ; - - _506_ MUX2_X1 + PLACED ( 27758 5586 ) N ; - - _507_ MUX2_X1 + PLACED ( 1407 21503 ) N ; - - _508_ MUX2_X1 + PLACED ( 3090 19857 ) N ; - - _509_ MUX2_X1 + PLACED ( 1407 10782 ) N ; - - _510_ MUX2_X1 + PLACED ( 3817 11196 ) N ; - - _511_ MUX2_X1 + PLACED ( 12113 5627 ) N ; - - _512_ MUX2_X1 + PLACED ( 13172 5945 ) N ; - - _513_ MUX2_X1 + PLACED ( 7650 27393 ) N ; - - _514_ MUX2_X1 + PLACED ( 9768 28047 ) N ; - - _515_ MUX2_X1 + PLACED ( 1407 25795 ) N ; - - _516_ MUX2_X1 + PLACED ( 2634 25948 ) N ; - - _517_ MUX2_X1 + PLACED ( 40307 10878 ) N ; - - _518_ MUX2_X1 + PLACED ( 41591 8071 ) N ; - - _519_ MUX2_X1 + PLACED ( 35218 39256 ) N ; - - _520_ MUX2_X1 + PLACED ( 34119 40290 ) N ; - - _521_ MUX2_X1 + PLACED ( 54814 9978 ) N ; - - _522_ MUX2_X1 + PLACED ( 55194 10320 ) N ; - - _523_ MUX2_X1 + PLACED ( 49489 5965 ) N ; - - _524_ MUX2_X1 + PLACED ( 51634 6356 ) N ; - - _525_ MUX2_X1 + PLACED ( 47225 39185 ) N ; - - _526_ MUX2_X1 + PLACED ( 54179 40393 ) N ; - - _527_ MUX2_X1 + PLACED ( 54443 46210 ) N ; - - _528_ MUX2_X1 + PLACED ( 55174 46357 ) N ; - - _529_ AOI22_X1 + PLACED ( 29398 27839 ) N ; - - _530_ NOR2_X1 + PLACED ( 27714 28761 ) N ; - - _531_ XNOR2_X1 + PLACED ( 11368 30175 ) N ; - - _532_ XNOR2_X1 + PLACED ( 11889 30747 ) N ; - - _533_ AOI221_X2 + PLACED ( 9882 53714 ) N ; - - _534_ OR3_X1 + PLACED ( 26231 32286 ) N ; - - _535_ AOI22_X1 + PLACED ( 11696 32191 ) N ; - - _536_ DFF_X1 + PLACED ( 2308 34702 ) N ; - - _537_ DFF_X1 + PLACED ( 10835 50057 ) N ; - - _538_ DFF_X1 + PLACED ( 19800 57472 ) N ; - - _539_ DFF_X1 + PLACED ( 26663 57478 ) N ; - - _540_ DFF_X1 + PLACED ( 21167 5241 ) N ; - - _541_ DFF_X1 + PLACED ( 6770 20780 ) N ; - - _542_ DFF_X1 + PLACED ( 26882 10805 ) N ; - - _543_ DFF_X1 + PLACED ( 8384 12468 ) N ; - - _544_ DFF_X1 + PLACED ( 29015 22771 ) N ; - - _545_ DFF_X1 + PLACED ( 33588 10567 ) N ; - - _546_ DFF_X1 + PLACED ( 31706 47040 ) N ; - - _547_ DFF_X1 + PLACED ( 47062 11275 ) N ; - - _548_ DFF_X1 + PLACED ( 47974 24433 ) N ; - - _549_ DFF_X1 + PLACED ( 41073 35650 ) N ; - - _550_ DFF_X1 + PLACED ( 47299 50353 ) N ; - - _551_ DFF_X1 + PLACED ( 42507 19889 ) N ; - - _552_ DFF_X1 + PLACED ( 37278 14044 ) N ; - - _553_ DFF_X1 + PLACED ( 14669 57146 ) N ; - - _554_ DFF_X1 + PLACED ( 3229 39260 ) N ; - - _555_ DFF_X1 + PLACED ( 4071 49135 ) N ; - - _556_ DFF_X1 + PLACED ( 35550 57031 ) N ; - - _557_ DFF_X1 + PLACED ( 28090 5378 ) N ; - - _558_ DFF_X1 + PLACED ( 2661 19369 ) N ; - - _559_ DFF_X1 + PLACED ( 3924 11288 ) N ; - - _560_ DFF_X1 + PLACED ( 12906 5623 ) N ; - - _561_ DFF_X1 + PLACED ( 10300 28237 ) N ; - - _562_ DFF_X1 + PLACED ( 1931 26092 ) N ; - - _563_ DFF_X1 + PLACED ( 41985 7575 ) N ; - - _564_ DFF_X1 + PLACED ( 33865 40801 ) N ; - - _565_ DFF_X1 + PLACED ( 55480 10291 ) N ; - - _566_ DFF_X1 + PLACED ( 52396 6195 ) N ; - - _567_ DFF_X1 + PLACED ( 55437 40902 ) N ; - - _568_ DFF_X1 + PLACED ( 55480 46579 ) N ; - - _569_ DFF_X1 + PLACED ( 1727 31233 ) N ; + - _276_ NOR2_X4 + PLACED ( 51660 14936 ) N ; + - _278_ INV_X1 + PLACED ( 6359 27927 ) N ; + - _279_ NOR2_X1 + PLACED ( 9327 29740 ) N ; + - _280_ INV_X1 + PLACED ( 11661 30597 ) N ; + - _281_ INV_X1 + PLACED ( 11594 46392 ) N ; + - _282_ NOR2_X1 + PLACED ( 14845 45595 ) N ; + - _283_ INV_X1 + PLACED ( 20560 45687 ) N ; + - _284_ NOR2_X1 + PLACED ( 18541 45604 ) N ; + - _285_ NOR2_X1 + PLACED ( 17080 44674 ) N ; + - _286_ INV_X1 + PLACED ( 11770 38590 ) N ; + - _287_ NOR2_X1 + PLACED ( 13636 37807 ) N ; + - _288_ INV_X1 + PLACED ( 15618 37510 ) N ; + - _289_ AND2_X1 + PLACED ( 17635 32316 ) N ; + - _290_ INV_X1 + PLACED ( 14204 10320 ) N ; + - _291_ NOR2_X1 + PLACED ( 15938 9917 ) N ; + - _292_ INV_X1 + PLACED ( 19141 8453 ) N ; + - _293_ AOI21_X2 + PLACED ( 17826 9828 ) N ; + - _294_ INV_X1 + PLACED ( 25516 14522 ) N ; + - _295_ NOR2_X1 + PLACED ( 24008 16505 ) N ; + - _296_ INV_X1 + PLACED ( 12206 17530 ) N ; + - _297_ NOR2_X2 + PLACED ( 12796 17997 ) N ; + - _298_ NOR2_X1 + PLACED ( 19297 19063 ) N ; + - _299_ AND2_X1 + PLACED ( 19730 30270 ) N ; + - _300_ INV_X16 + PLACED ( 55480 32787 ) N ; + - _301_ NOR2_X1 + PLACED ( 47191 35218 ) N ; + - _302_ INV_X16 + PLACED ( 55480 39499 ) N ; + - _303_ NOR3_X1 + PLACED ( 48781 37844 ) N ; + - _304_ AOI21_X1 + PLACED ( 47530 34145 ) N ; + - _305_ INV_X1 + PLACED ( 44258 32473 ) N ; + - _306_ INV_X16 + PLACED ( 42070 52038 ) N ; + - _307_ AND2_X1 + PLACED ( 43834 47529 ) N ; + - _308_ INV_X4 + PLACED ( 47117 46128 ) N ; + - _309_ INV_X16 + PLACED ( 33098 56010 ) N ; + - _310_ OAI211_X1 + PLACED ( 39835 47377 ) N ; + - _311_ NAND2_X1 + PLACED ( 42880 45747 ) N ; + - _312_ INV_X16 + PLACED ( 55480 45687 ) N ; + - _313_ NOR2_X1 + PLACED ( 46964 39963 ) N ; + - _314_ NOR3_X2 + PLACED ( 43825 38755 ) N ; + - _315_ NOR2_X2 + PLACED ( 41437 31233 ) N ; + - _316_ INV_X1 + PLACED ( 32767 34496 ) N ; + - _317_ NOR2_X1 + PLACED ( 30242 33517 ) N ; + - _318_ INV_X16 + PLACED ( 37558 9112 ) N ; + - _319_ NOR2_X2 + PLACED ( 39213 28586 ) N ; + - _320_ INV_X4 + PLACED ( 36595 11381 ) N ; + - _321_ NAND2_X1 + PLACED ( 34390 20159 ) N ; + - _322_ INV_X1 + PLACED ( 32043 23900 ) N ; + - _323_ OAI21_X2 + PLACED ( 31026 24198 ) N ; + - _324_ NOR4_X4 + PLACED ( 27470 30016 ) N ; + - _325_ NOR2_X1 + PLACED ( 35432 18968 ) N ; + - _326_ OAI21_X1 + PLACED ( 33340 23342 ) N ; + - _327_ INV_X1 + PLACED ( 32952 24300 ) N ; + - _328_ INV_X16 + PLACED ( 32559 36493 ) N ; + - _329_ NOR3_X1 + PLACED ( 37513 29672 ) N ; + - _330_ AOI21_X2 + PLACED ( 38137 25291 ) N ; + - _331_ OAI221_X4 + PLACED ( 32409 24751 ) N ; + - _332_ OAI211_X1 + PLACED ( 18731 30025 ) N ; + - _333_ AND2_X1 + PLACED ( 8898 29455 ) N ; + - _334_ INV_X1 + PLACED ( 10864 30259 ) N ; + - _335_ NAND2_X1 + PLACED ( 14812 45425 ) N ; + - _336_ NAND2_X1 + PLACED ( 19544 44870 ) N ; + - _337_ NAND2_X1 + PLACED ( 17846 42475 ) N ; + - _338_ INV_X1 + PLACED ( 16540 44758 ) N ; + - _339_ NAND3_X1 + PLACED ( 16804 38379 ) N ; + - _340_ NAND2_X1 + PLACED ( 13622 37743 ) N ; + - _341_ NAND2_X1 + PLACED ( 15574 37360 ) N ; + - _342_ INV_X1 + PLACED ( 19872 10006 ) N ; + - _343_ OAI211_X2 + PLACED ( 14703 10426 ) N ; + - _344_ NAND2_X1 + PLACED ( 14818 12274 ) N ; + - _345_ AOI211_X2 + PLACED ( 17773 17643 ) N ; + - _346_ NAND2_X1 + PLACED ( 24121 16671 ) N ; + - _347_ NAND2_X1 + PLACED ( 13190 18412 ) N ; + - _348_ OAI21_X1 + PLACED ( 21605 18674 ) N ; + - _349_ OR2_X1 + PLACED ( 20618 29567 ) N ; + - _350_ AOI21_X1 + PLACED ( 16481 31419 ) N ; + - _351_ AND4_X1 + PLACED ( 11959 30584 ) N ; + - _352_ AOI22_X1 + PLACED ( 11917 30690 ) N ; + - _353_ OR2_X1 + PLACED ( 11688 30023 ) N ; + - _355_ INV_X4 + PLACED ( 50504 15293 ) N ; + - _357_ AND3_X1 + PLACED ( 17669 31766 ) N ; + - _358_ OAI211_X2 + PLACED ( 21619 29946 ) N ; + - _359_ OAI21_X2 + PLACED ( 14529 31022 ) N ; + - _360_ OAI21_X2 + PLACED ( 21816 29793 ) N ; + - _361_ NAND3_X4 + PLACED ( 22463 30844 ) N ; + - _362_ NOR2_X2 + PLACED ( 42859 24194 ) N ; + - _363_ INV_X2 + PLACED ( 41339 40964 ) N ; + - _364_ NOR2_X4 + PLACED ( 26815 44213 ) N ; + - _365_ AOI221_X4 + PLACED ( 6217 25993 ) N ; + - _366_ AND2_X4 + PLACED ( 40112 39380 ) N ; + - _368_ OAI21_X1 + PLACED ( 11032 29191 ) N ; + - _370_ AOI22_X1 + PLACED ( 8281 27344 ) N ; + - _371_ NOR2_X2 + PLACED ( 21449 25760 ) N ; + - _372_ NAND3_X1 + PLACED ( 19386 31891 ) N ; + - _373_ OR2_X1 + PLACED ( 20073 36423 ) N ; + - _374_ AOI22_X1 + PLACED ( 17812 38805 ) N ; + - _375_ NAND2_X1 + PLACED ( 19030 37968 ) N ; + - _376_ XOR2_X1 + PLACED ( 9867 39536 ) N ; + - _377_ XNOR2_X1 + PLACED ( 10835 38789 ) N ; + - _378_ INV_X2 + PLACED ( 30702 45359 ) N ; + - _380_ NOR2_X1 + PLACED ( 10192 38355 ) N ; + - _381_ NAND2_X1 + PLACED ( 11011 38736 ) N ; + - _382_ AOI221_X4 + PLACED ( 6340 38786 ) N ; + - _383_ AOI21_X1 + PLACED ( 9519 38414 ) N ; + - _384_ INV_X1 + PLACED ( 21413 38933 ) N ; + - _385_ INV_X1 + PLACED ( 21327 37618 ) N ; + - _386_ OAI211_X1 + PLACED ( 19988 40766 ) N ; + - _387_ INV_X1 + PLACED ( 17586 44980 ) N ; + - _388_ AND4_X1 + PLACED ( 16554 44521 ) N ; + - _389_ AOI22_X1 + PLACED ( 16333 44618 ) N ; + - _390_ NOR2_X1 + PLACED ( 16312 45132 ) N ; + - _391_ NOR2_X1 + PLACED ( 11605 46637 ) N ; + - _392_ NAND2_X1 + PLACED ( 13074 45842 ) N ; + - _393_ AOI221_X4 + PLACED ( 7585 46550 ) N ; + - _394_ AOI21_X1 + PLACED ( 11314 47225 ) N ; + - _395_ OAI21_X1 + PLACED ( 21833 40187 ) N ; + - _396_ XOR2_X1 + PLACED ( 23019 44867 ) N ; + - _397_ XNOR2_X1 + PLACED ( 23356 43718 ) N ; + - _398_ NOR2_X1 + PLACED ( 24641 46419 ) N ; + - _399_ AOI221_X1 + PLACED ( 23506 45254 ) N ; + - _401_ OR3_X1 + PLACED ( 22208 45624 ) N ; + - _402_ AOI21_X1 + PLACED ( 23759 46753 ) N ; + - _403_ INV_X1 + PLACED ( 17937 19340 ) N ; + - _404_ OAI211_X1 + PLACED ( 19238 23922 ) N ; + - _405_ AOI21_X1 + PLACED ( 14848 17167 ) N ; + - _406_ AOI21_X1 + PLACED ( 13434 17617 ) N ; + - _407_ AND2_X1 + PLACED ( 21160 17717 ) N ; + - _408_ XNOR2_X1 + PLACED ( 28961 14630 ) N ; + - _409_ XNOR2_X1 + PLACED ( 28526 15596 ) N ; + - _410_ NOR2_X1 + PLACED ( 29679 13252 ) N ; + - _411_ AOI221_X1 + PLACED ( 28557 14690 ) N ; + - _412_ OR3_X1 + PLACED ( 26438 14525 ) N ; + - _413_ AOI21_X1 + PLACED ( 28680 13490 ) N ; + - _414_ OAI21_X1 + PLACED ( 18963 24599 ) N ; + - _415_ AND2_X1 + PLACED ( 16409 17418 ) N ; + - _416_ AND4_X1 + PLACED ( 17111 19874 ) N ; + - _417_ AOI22_X1 + PLACED ( 16842 19996 ) N ; + - _418_ OR2_X1 + PLACED ( 16807 19894 ) N ; + - _419_ NOR2_X1 + PLACED ( 9831 19145 ) N ; + - _420_ AOI221_X4 + PLACED ( 6563 19114 ) N ; + - _421_ OAI21_X1 + PLACED ( 15625 19732 ) N ; + - _422_ AOI21_X1 + PLACED ( 9245 19653 ) N ; + - _423_ AOI21_X1 + PLACED ( 18946 9098 ) N ; + - _424_ NOR2_X1 + PLACED ( 17941 8527 ) N ; + - _425_ NOR2_X1 + PLACED ( 17613 8791 ) N ; + - _426_ XNOR2_X1 + PLACED ( 9627 8818 ) N ; + - _427_ XNOR2_X1 + PLACED ( 10240 9429 ) N ; + - _428_ NOR2_X1 + PLACED ( 9554 11868 ) N ; + - _429_ AOI221_X1 + PLACED ( 8121 11314 ) N ; + - _430_ OR3_X1 + PLACED ( 21371 12597 ) N ; + - _431_ AOI21_X1 + PLACED ( 8809 11438 ) N ; + - _432_ XNOR2_X1 + PLACED ( 22052 8681 ) N ; + - _433_ XNOR2_X1 + PLACED ( 22663 9786 ) N ; + - _434_ AOI221_X1 + PLACED ( 21499 11080 ) N ; + - _435_ OR3_X1 + PLACED ( 21982 12484 ) N ; + - _436_ AOI22_X1 + PLACED ( 21678 10606 ) N ; + - _437_ NAND2_X1 + PLACED ( 39061 30660 ) N ; + - _438_ OAI221_X2 + PLACED ( 40970 29805 ) N ; + - _439_ NAND2_X1 + PLACED ( 38292 19350 ) N ; + - _440_ XOR2_X1 + PLACED ( 36562 11008 ) N ; + - _441_ XNOR2_X1 + PLACED ( 36947 12143 ) N ; + - _442_ AOI221_X1 + PLACED ( 34472 12325 ) N ; + - _443_ NAND2_X1 + PLACED ( 35535 17928 ) N ; + - _444_ AOI22_X1 + PLACED ( 34588 12517 ) N ; + - _445_ OAI21_X1 + PLACED ( 39084 30827 ) N ; + - _446_ NAND2_X1 + PLACED ( 40531 29789 ) N ; + - _447_ XNOR2_X1 + PLACED ( 42254 20193 ) N ; + - _448_ XNOR2_X1 + PLACED ( 41612 20154 ) N ; + - _449_ NOR2_X1 + PLACED ( 43056 14246 ) N ; + - _450_ AOI221_X1 + PLACED ( 41939 17314 ) N ; + - _451_ OR3_X1 + PLACED ( 41268 14325 ) N ; + - _452_ AOI21_X1 + PLACED ( 42493 14706 ) N ; + - _453_ XNOR2_X1 + PLACED ( 34020 33071 ) N ; + - _454_ XNOR2_X1 + PLACED ( 33896 32312 ) N ; + - _455_ AOI221_X1 + PLACED ( 31617 33847 ) N ; + - _456_ OR3_X1 + PLACED ( 31260 35168 ) N ; + - _457_ AOI22_X1 + PLACED ( 31626 35544 ) N ; + - _458_ AOI22_X1 + PLACED ( 45995 44733 ) N ; + - _459_ NOR2_X1 + PLACED ( 46528 39376 ) N ; + - _460_ XOR2_X1 + PLACED ( 47095 35573 ) N ; + - _461_ XNOR2_X1 + PLACED ( 46998 35811 ) N ; + - _462_ NOR2_X1 + PLACED ( 47949 30119 ) N ; + - _463_ AOI221_X1 + PLACED ( 46810 33196 ) N ; + - _464_ OR3_X1 + PLACED ( 45099 31507 ) N ; + - _465_ AOI21_X1 + PLACED ( 47141 30663 ) N ; + - _466_ XNOR2_X1 + PLACED ( 48692 44421 ) N ; + - _467_ XNOR2_X1 + PLACED ( 47457 44145 ) N ; + - _468_ AOI221_X4 + PLACED ( 49164 45458 ) N ; + - _469_ OR3_X1 + PLACED ( 44694 44611 ) N ; + - _470_ AOI22_X1 + PLACED ( 52494 45309 ) N ; + - _471_ XNOR2_X1 + PLACED ( 46809 52960 ) N ; + - _472_ INV_X1 + PLACED ( 40564 50160 ) N ; + - _473_ NOR2_X1 + PLACED ( 40403 51679 ) N ; + - _474_ XNOR2_X1 + PLACED ( 41235 52117 ) N ; + - _475_ AOI221_X4 + PLACED ( 37331 45479 ) N ; + - _476_ NAND3_X1 + PLACED ( 42710 47052 ) N ; + - _477_ AOI22_X1 + PLACED ( 42682 47836 ) N ; + - _478_ XOR2_X1 + PLACED ( 36706 50408 ) N ; + - _479_ AOI221_X4 + PLACED ( 33162 46994 ) N ; + - _480_ NAND3_X1 + PLACED ( 38491 47207 ) N ; + - _481_ AOI22_X1 + PLACED ( 36730 48305 ) N ; + - _482_ NOR2_X1 + PLACED ( 49295 19475 ) N ; + - _483_ NOR2_X1 + PLACED ( 43521 38771 ) N ; + - _484_ AND3_X1 + PLACED ( 42066 39404 ) N ; + - _485_ NAND3_X1 + PLACED ( 32251 35185 ) N ; + - _486_ NOR3_X1 + PLACED ( 13357 12417 ) N ; + - _487_ NAND2_X1 + PLACED ( 14973 12733 ) N ; + - _488_ NOR4_X1 + PLACED ( 16275 35243 ) N ; + - _489_ NAND3_X1 + PLACED ( 15603 36791 ) N ; + - _490_ NOR3_X1 + PLACED ( 43266 21325 ) N ; + - _491_ NAND3_X1 + PLACED ( 44297 22586 ) N ; + - _492_ AOI221_X4 + PLACED ( 47291 21846 ) N ; + - _493_ NAND3_X1 + PLACED ( 46314 21667 ) N ; + - _494_ AOI221_X1 + PLACED ( 46857 21416 ) N ; + - _495_ MUX2_X1 + PLACED ( 2116 48884 ) N ; + - _496_ NOR2_X4 + PLACED ( 29088 46115 ) N ; + - _498_ MUX2_X1 + PLACED ( 3308 49007 ) N ; + - _499_ MUX2_X1 + PLACED ( 1976 29068 ) N ; + - _500_ MUX2_X1 + PLACED ( 2722 31465 ) N ; + - _501_ MUX2_X1 + PLACED ( 1858 40906 ) N ; + - _502_ MUX2_X1 + PLACED ( 2692 42276 ) N ; + - _503_ MUX2_X1 + PLACED ( 16373 52220 ) N ; + - _504_ MUX2_X1 + PLACED ( 17286 52758 ) N ; + - _505_ MUX2_X1 + PLACED ( 24766 4219 ) N ; + - _506_ MUX2_X1 + PLACED ( 26151 3280 ) N ; + - _507_ MUX2_X1 + PLACED ( 2114 15741 ) N ; + - _508_ MUX2_X1 + PLACED ( 3069 14596 ) N ; + - _509_ MUX2_X1 + PLACED ( 5982 5530 ) N ; + - _510_ MUX2_X1 + PLACED ( 8150 4153 ) N ; + - _511_ MUX2_X1 + PLACED ( 15072 3046 ) N ; + - _512_ MUX2_X1 + PLACED ( 16025 2709 ) N ; + - _513_ MUX2_X1 + PLACED ( 23442 22810 ) N ; + - _514_ MUX2_X1 + PLACED ( 25032 22650 ) N ; + - _515_ MUX2_X1 + PLACED ( 37135 4991 ) N ; + - _516_ MUX2_X1 + PLACED ( 39041 4060 ) N ; + - _517_ MUX2_X1 + PLACED ( 46882 9134 ) N ; + - _518_ MUX2_X1 + PLACED ( 48713 8820 ) N ; + - _519_ MUX2_X1 + PLACED ( 29421 39463 ) N ; + - _520_ MUX2_X1 + PLACED ( 31394 40519 ) N ; + - _521_ MUX2_X1 + PLACED ( 51015 29511 ) N ; + - _522_ MUX2_X1 + PLACED ( 52753 29937 ) N ; + - _523_ MUX2_X1 + PLACED ( 50793 38973 ) N ; + - _524_ MUX2_X1 + PLACED ( 52452 38370 ) N ; + - _525_ MUX2_X1 + PLACED ( 49411 53684 ) N ; + - _526_ MUX2_X1 + PLACED ( 52461 53161 ) N ; + - _527_ MUX2_X1 + PLACED ( 32003 54261 ) N ; + - _528_ MUX2_X1 + PLACED ( 32470 54757 ) N ; + - _529_ AOI22_X1 + PLACED ( 37189 19665 ) N ; + - _530_ NOR2_X1 + PLACED ( 35819 19233 ) N ; + - _531_ XNOR2_X1 + PLACED ( 31828 20771 ) N ; + - _532_ XNOR2_X1 + PLACED ( 34094 19054 ) N ; + - _533_ AOI221_X1 + PLACED ( 32420 19257 ) N ; + - _534_ OR3_X1 + PLACED ( 33035 25270 ) N ; + - _535_ AOI22_X1 + PLACED ( 32877 24643 ) N ; + - _536_ DFF_X1 + PLACED ( 0 26483 ) N ; + - _537_ DFF_X2 + PLACED ( 380 37317 ) N ; + - _538_ DFF_X1 + PLACED ( 9361 51206 ) N ; + - _539_ DFF_X2 + PLACED ( 21803 51641 ) N ; + - _540_ DFF_X2 + PLACED ( 27001 9251 ) N ; + - _541_ DFF_X2 + PLACED ( 380 19828 ) N ; + - _542_ DFF_X2 + PLACED ( 388 9736 ) N ; + - _543_ DFF_X2 + PLACED ( 20902 2413 ) N ; + - _544_ DFF_X2 + PLACED ( 32078 5788 ) N ; + - _545_ DFF_X2 + PLACED ( 41321 13369 ) N ; + - _546_ DFF_X2 + PLACED ( 24100 37066 ) N ; + - _547_ DFF_X2 + PLACED ( 46043 28395 ) N ; + - _548_ DFF_X2 + PLACED ( 53322 46132 ) N ; + - _549_ DFF_X2 + PLACED ( 42204 55520 ) N ; + - _550_ DFF_X2 + PLACED ( 28266 50520 ) N ; + - _551_ DFF_X2 + PLACED ( 50146 22479 ) N ; + - _552_ DFF_X2 + PLACED ( 47812 16294 ) N ; + - _553_ DFF_X1 + PLACED ( 2801 49317 ) N ; + - _554_ DFF_X1 + PLACED ( 1567 32407 ) N ; + - _555_ DFF_X1 + PLACED ( 1479 42980 ) N ; + - _556_ DFF_X1 + PLACED ( 17614 53156 ) N ; + - _557_ DFF_X1 + PLACED ( 26271 2661 ) N ; + - _558_ DFF_X1 + PLACED ( 2357 14289 ) N ; + - _559_ DFF_X1 + PLACED ( 8456 3451 ) N ; + - _560_ DFF_X2 + PLACED ( 16028 2088 ) N ; + - _561_ DFF_X1 + PLACED ( 24533 22662 ) N ; + - _562_ DFF_X2 + PLACED ( 39653 3641 ) N ; + - _563_ DFF_X2 + PLACED ( 48984 8813 ) N ; + - _564_ DFF_X2 + PLACED ( 31992 40958 ) N ; + - _565_ DFF_X2 + PLACED ( 53570 29942 ) N ; + - _566_ DFF_X2 + PLACED ( 53253 38167 ) N ; + - _567_ DFF_X2 + PLACED ( 53580 53144 ) N ; + - _568_ DFF_X2 + PLACED ( 32517 56134 ) N ; + - _569_ DFF_X2 + PLACED ( 12145 24668 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL diff --git a/src/gpl/test/simple01-td-tune.ok b/src/gpl/test/simple01-td-tune.ok index 5c2234f5307..b8ffe575fab 100644 --- a/src/gpl/test/simple01-td-tune.ok +++ b/src/gpl/test/simple01-td-tune.ok @@ -37,8 +37,9 @@ [INFO GPL-0029] BinSize: ( 1.936 1.925 ) [INFO GPL-0030] NumBins: 256 [NesterovSolve] Iter: 1 overflow: 0.832 HPWL: 3651238 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.42e-09 +[INFO GPL-0100] Timing-driven iteration 1/7, virtual: true. +[INFO GPL-0101] Iter: 2, overflow: 0.761, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.42e-09 [INFO GPL-0103] Timing-driven: weighted 35 nets. [NesterovSolve] Iter: 10 overflow: 0.730 HPWL: 4005677 [NesterovSolve] Iter: 20 overflow: 0.733 HPWL: 3997290 @@ -57,42 +58,52 @@ [NesterovSolve] Iter: 150 overflow: 0.723 HPWL: 4022941 [NesterovSolve] Iter: 160 overflow: 0.715 HPWL: 4037658 [NesterovSolve] Iter: 170 overflow: 0.704 HPWL: 4057804 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.42e-09 +[INFO GPL-0100] Timing-driven iteration 2/7, virtual: true. +[INFO GPL-0101] Iter: 176, overflow: 0.695, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.42e-09 [INFO GPL-0103] Timing-driven: weighted 35 nets. [NesterovSolve] Iter: 180 overflow: 0.686 HPWL: 4116142 [NesterovSolve] Iter: 190 overflow: 0.671 HPWL: 4152992 [NesterovSolve] Iter: 200 overflow: 0.649 HPWL: 4204028 [NesterovSolve] Iter: 210 overflow: 0.618 HPWL: 4266347 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 3/7, virtual: true. +[INFO GPL-0101] Iter: 216, overflow: 0.594, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 35 nets. [NesterovSolve] Iter: 220 overflow: 0.584 HPWL: 4328333 [NesterovSolve] Iter: 230 overflow: 0.542 HPWL: 4396817 [NesterovSolve] Iter: 240 overflow: 0.497 HPWL: 4448439 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 4/7, virtual: true. +[INFO GPL-0101] Iter: 240, overflow: 0.492, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 31 nets. [NesterovSolve] Iter: 250 overflow: 0.437 HPWL: 4448311 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 5/7, virtual: true. +[INFO GPL-0101] Iter: 257, overflow: 0.393, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 33 nets. [NesterovSolve] Iter: 260 overflow: 0.384 HPWL: 4438815 [NesterovSolve] Iter: 270 overflow: 0.334 HPWL: 4468479 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 6/7, virtual: false. +[INFO GPL-0101] Iter: 278, overflow: 0.294, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 32 nets. -[NesterovSolve] Iter: 280 overflow: 0.295 HPWL: 4473643 -[NesterovSolve] Iter: 290 overflow: 0.273 HPWL: 4527720 -[NesterovSolve] Iter: 300 overflow: 0.248 HPWL: 4545384 -[NesterovSolve] Iter: 310 overflow: 0.216 HPWL: 4582667 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 -[INFO GPL-0103] Timing-driven: weighted 31 nets. -[NesterovSolve] Iter: 320 overflow: 0.190 HPWL: 4586174 -[NesterovSolve] Iter: 330 overflow: 0.164 HPWL: 4623802 -[NesterovSolve] Iter: 340 overflow: 0.140 HPWL: 4634195 -[NesterovSolve] Iter: 350 overflow: 0.112 HPWL: 4648427 -[NesterovSolve] Finished with Overflow: 0.098509 -worst slack 1.38 +[INFO GPL-0107] Timing-driven: RSZ delta area: -12.768 +[INFO GPL-0108] Timing-driven: new target density: 0.6866146 +[NesterovSolve] Iter: 280 overflow: 0.305 HPWL: 2863594 +[NesterovSolve] Iter: 290 overflow: 0.290 HPWL: 2675862 +[NesterovSolve] Iter: 300 overflow: 0.242 HPWL: 2607478 +[NesterovSolve] Iter: 310 overflow: 0.217 HPWL: 2621283 +[NesterovSolve] Iter: 320 overflow: 0.202 HPWL: 2639961 +[INFO GPL-0100] Timing-driven iteration 7/7, virtual: false. +[INFO GPL-0101] Iter: 322, overflow: 0.194, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0103] Timing-driven: weighted 35 nets. +[INFO GPL-0107] Timing-driven: RSZ delta area: -6.65 +[INFO GPL-0108] Timing-driven: new target density: 0.67964303 +[NesterovSolve] Iter: 330 overflow: 0.170 HPWL: 2651271 +[NesterovSolve] Iter: 340 overflow: 0.132 HPWL: 2674704 +[NesterovSolve] Iter: 350 overflow: 0.108 HPWL: 2692157 +[NesterovSolve] Finished with Overflow: 0.098461 +worst slack 1.41 No differences found. diff --git a/src/gpl/test/simple01-td.defok b/src/gpl/test/simple01-td.defok index f2ac88a87fa..c9ea724195e 100644 --- a/src/gpl/test/simple01-td.defok +++ b/src/gpl/test/simple01-td.defok @@ -60,292 +60,292 @@ GCELLGRID Y 58940 DO 2 STEP 2660 ; GCELLGRID Y 140 DO 22 STEP 2800 ; GCELLGRID Y 0 DO 2 STEP 140 ; COMPONENTS 286 ; - - _276_ NOR2_X2 + PLACED ( 39752 53715 ) N ; - - _278_ INV_X1 + PLACED ( 9284 28551 ) N ; - - _279_ NOR2_X1 + PLACED ( 12141 29766 ) N ; - - _280_ INV_X1 + PLACED ( 15138 29903 ) N ; - - _281_ INV_X1 + PLACED ( 18744 52108 ) N ; - - _282_ NOR2_X1 + PLACED ( 19403 49332 ) N ; - - _283_ INV_X1 + PLACED ( 26410 46765 ) N ; - - _284_ NOR2_X1 + PLACED ( 25571 47525 ) N ; - - _285_ NOR2_X1 + PLACED ( 20000 47428 ) N ; - - _286_ INV_X1 + PLACED ( 14013 43359 ) N ; - - _287_ NOR2_X1 + PLACED ( 16957 42792 ) N ; - - _288_ INV_X1 + PLACED ( 18233 42481 ) N ; - - _289_ AND2_X1 + PLACED ( 18937 33009 ) N ; - - _290_ INV_X1 + PLACED ( 19814 13116 ) N ; - - _291_ NOR2_X1 + PLACED ( 19344 12897 ) N ; - - _292_ INV_X1 + PLACED ( 13444 11717 ) N ; - - _293_ AOI21_X1 + PLACED ( 18165 13094 ) N ; - - _294_ INV_X1 + PLACED ( 25806 13776 ) N ; - - _295_ NOR2_X1 + PLACED ( 24759 16430 ) N ; - - _296_ INV_X1 + PLACED ( 18108 20274 ) N ; - - _297_ NOR2_X1 + PLACED ( 18662 20713 ) N ; - - _298_ NOR2_X1 + PLACED ( 21053 21518 ) N ; - - _299_ AND2_X1 + PLACED ( 20567 32767 ) N ; - - _300_ INV_X16 + PLACED ( 47429 10746 ) N ; - - _301_ NOR2_X4 + PLACED ( 49433 14894 ) N ; - - _302_ INV_X16 + PLACED ( 47832 15316 ) N ; - - _303_ NOR3_X2 + PLACED ( 49476 16197 ) N ; - - _304_ AOI21_X1 + PLACED ( 45215 15957 ) N ; - - _305_ INV_X1 + PLACED ( 42564 18134 ) N ; - - _306_ INV_X32 + PLACED ( 49400 34823 ) N ; - - _307_ AND2_X4 + PLACED ( 56228 29728 ) N ; - - _308_ INV_X4 + PLACED ( 58253 27624 ) N ; - - _309_ INV_X32 + PLACED ( 49400 44852 ) N ; - - _310_ OAI211_X4 + PLACED ( 53210 30551 ) N ; - - _311_ NAND2_X4 + PLACED ( 56394 25443 ) N ; - - _312_ INV_X16 + PLACED ( 55315 17694 ) N ; - - _313_ NOR2_X1 + PLACED ( 56009 22874 ) N ; - - _314_ NOR3_X4 + PLACED ( 51647 23865 ) N ; - - _315_ NOR2_X2 + PLACED ( 39660 24919 ) N ; - - _316_ INV_X1 + PLACED ( 33590 28887 ) N ; - - _317_ NOR2_X1 + PLACED ( 32980 29381 ) N ; - - _318_ INV_X32 + PLACED ( 32949 4413 ) N ; - - _319_ NOR2_X4 + PLACED ( 31548 23228 ) N ; - - _320_ INV_X4 + PLACED ( 37039 36348 ) N ; - - _321_ NAND2_X1 + PLACED ( 32476 36534 ) N ; - - _322_ INV_X1 + PLACED ( 27406 37488 ) N ; - - _323_ OAI21_X4 + PLACED ( 30377 36827 ) N ; - - _324_ NOR4_X4 + PLACED ( 29102 28613 ) N ; - - _325_ NOR2_X1 + PLACED ( 33001 36581 ) N ; - - _326_ OAI21_X1 + PLACED ( 30012 36875 ) N ; - - _327_ INV_X1 + PLACED ( 26343 37984 ) N ; - - _328_ INV_X32 + PLACED ( 31174 44852 ) N ; - - _329_ NOR3_X2 + PLACED ( 31847 24787 ) N ; - - _330_ AOI21_X4 + PLACED ( 30903 24268 ) N ; - - _331_ OAI221_X4 + PLACED ( 26846 36490 ) N ; - - _332_ OAI211_X1 + PLACED ( 19638 30077 ) N ; - - _333_ AND2_X1 + PLACED ( 11597 29644 ) N ; - - _334_ INV_X1 + PLACED ( 13758 30050 ) N ; - - _335_ NAND2_X1 + PLACED ( 20361 49362 ) N ; - - _336_ NAND2_X1 + PLACED ( 25720 47032 ) N ; - - _337_ NAND2_X1 + PLACED ( 21437 46128 ) N ; - - _338_ INV_X1 + PLACED ( 19987 47893 ) N ; - - _339_ NAND3_X1 + PLACED ( 19178 43272 ) N ; - - _340_ NAND2_X1 + PLACED ( 16985 42735 ) N ; - - _341_ NAND2_X1 + PLACED ( 18274 42320 ) N ; - - _342_ INV_X1 + PLACED ( 19718 12571 ) N ; - - _343_ OAI211_X1 + PLACED ( 19647 13163 ) N ; - - _344_ NAND2_X1 + PLACED ( 20907 14315 ) N ; - - _345_ AOI211_X1 + PLACED ( 21226 20013 ) N ; - - _346_ NAND2_X1 + PLACED ( 25154 16423 ) N ; - - _347_ NAND2_X1 + PLACED ( 19007 21005 ) N ; - - _348_ OAI21_X1 + PLACED ( 23793 20557 ) N ; - - _349_ OR2_X1 + PLACED ( 23006 29453 ) N ; - - _350_ AOI21_X1 + PLACED ( 18484 31160 ) N ; - - _351_ AND4_X1 + PLACED ( 15871 29720 ) N ; - - _352_ AOI22_X1 + PLACED ( 15844 29842 ) N ; - - _353_ OR2_X1 + PLACED ( 16884 27971 ) N ; - - _355_ INV_X2 + PLACED ( 40543 53389 ) N ; - - _357_ AND3_X1 + PLACED ( 19073 32310 ) N ; - - _358_ OAI211_X4 + PLACED ( 22879 30017 ) N ; - - _359_ OAI21_X1 + PLACED ( 17257 30730 ) N ; - - _360_ OAI21_X1 + PLACED ( 23385 29751 ) N ; - - _361_ NAND3_X4 + PLACED ( 23454 30784 ) N ; - - _362_ NOR2_X1 + PLACED ( 43515 39068 ) N ; - - _363_ INV_X1 + PLACED ( 43797 43357 ) N ; - - _364_ NOR2_X4 + PLACED ( 42529 44046 ) N ; - - _365_ AOI221_X4 + PLACED ( 11393 35032 ) N ; - - _366_ AND2_X4 + PLACED ( 42080 44621 ) N ; - - _368_ OAI21_X1 + PLACED ( 15231 28864 ) N ; - - _370_ AOI22_X1 + PLACED ( 12166 29691 ) N ; - - _371_ NOR2_X2 + PLACED ( 25884 25871 ) N ; - - _372_ NAND3_X1 + PLACED ( 19752 33957 ) N ; - - _373_ OR2_X1 + PLACED ( 19362 38249 ) N ; - - _374_ AOI22_X1 + PLACED ( 19273 43536 ) N ; - - _375_ NAND2_X1 + PLACED ( 19068 41894 ) N ; - - _376_ XOR2_X1 + PLACED ( 6458 43579 ) N ; - - _377_ XNOR2_X1 + PLACED ( 7547 43057 ) N ; - - _378_ INV_X1 + PLACED ( 41828 50189 ) N ; - - _380_ NOR2_X1 + PLACED ( 14211 46152 ) N ; - - _381_ NAND2_X1 + PLACED ( 11947 44769 ) N ; - - _382_ AOI221_X4 + PLACED ( 11179 44537 ) N ; - - _383_ AOI21_X1 + PLACED ( 12732 46025 ) N ; - - _384_ INV_X1 + PLACED ( 24567 44148 ) N ; - - _385_ INV_X1 + PLACED ( 23777 43291 ) N ; - - _386_ OAI211_X1 + PLACED ( 23908 45684 ) N ; - - _387_ INV_X1 + PLACED ( 23255 47658 ) N ; - - _388_ AND4_X1 + PLACED ( 22321 47656 ) N ; - - _389_ AOI22_X1 + PLACED ( 22132 47769 ) N ; - - _390_ NOR2_X1 + PLACED ( 23525 48075 ) N ; - - _391_ NOR2_X1 + PLACED ( 20013 53785 ) N ; - - _392_ NAND2_X1 + PLACED ( 21373 52512 ) N ; - - _393_ AOI221_X4 + PLACED ( 14411 53593 ) N ; - - _394_ AOI21_X1 + PLACED ( 19380 54272 ) N ; - - _395_ OAI21_X1 + PLACED ( 25140 45543 ) N ; - - _396_ XOR2_X1 + PLACED ( 26293 53019 ) N ; - - _397_ XNOR2_X1 + PLACED ( 26257 52644 ) N ; - - _398_ NOR2_X1 + PLACED ( 26739 53562 ) N ; - - _399_ AOI221_X1 + PLACED ( 25139 54092 ) N ; - - _401_ OR3_X1 + PLACED ( 26085 46073 ) N ; - - _402_ AOI21_X1 + PLACED ( 25946 54124 ) N ; - - _403_ INV_X1 + PLACED ( 21417 21953 ) N ; - - _404_ OAI211_X1 + PLACED ( 19953 24686 ) N ; - - _405_ AOI21_X1 + PLACED ( 19978 19711 ) N ; - - _406_ AOI21_X1 + PLACED ( 18637 20383 ) N ; - - _407_ AND2_X1 + PLACED ( 19431 20548 ) N ; - - _408_ XNOR2_X1 + PLACED ( 21690 6529 ) N ; - - _409_ XNOR2_X1 + PLACED ( 20118 7275 ) N ; - - _410_ NOR2_X1 + PLACED ( 25445 12696 ) N ; - - _411_ AOI221_X1 + PLACED ( 18841 13640 ) N ; - - _412_ OR3_X1 + PLACED ( 25462 13895 ) N ; - - _413_ AOI21_X1 + PLACED ( 24375 12693 ) N ; - - _414_ OAI21_X1 + PLACED ( 21132 25212 ) N ; - - _415_ AND2_X1 + PLACED ( 21683 19851 ) N ; - - _416_ AND4_X1 + PLACED ( 22785 22368 ) N ; - - _417_ AOI22_X1 + PLACED ( 22627 22482 ) N ; - - _418_ OR2_X1 + PLACED ( 26082 22269 ) N ; - - _419_ NOR2_X1 + PLACED ( 14508 21423 ) N ; - - _420_ AOI221_X4 + PLACED ( 11442 22560 ) N ; - - _421_ OAI21_X1 + PLACED ( 24742 22090 ) N ; - - _422_ AOI21_X1 + PLACED ( 13798 21916 ) N ; - - _423_ AOI21_X1 + PLACED ( 16338 11731 ) N ; - - _424_ NOR2_X1 + PLACED ( 14704 11730 ) N ; - - _425_ NOR2_X1 + PLACED ( 15890 12628 ) N ; - - _426_ XNOR2_X1 + PLACED ( 13055 13218 ) N ; - - _427_ XNOR2_X1 + PLACED ( 14541 13240 ) N ; - - _428_ NOR2_X1 + PLACED ( 31494 12648 ) N ; - - _429_ AOI221_X2 + PLACED ( 39580 13699 ) N ; - - _430_ OR3_X1 + PLACED ( 27246 13491 ) N ; - - _431_ AOI21_X1 + PLACED ( 30629 12657 ) N ; - - _432_ XNOR2_X1 + PLACED ( 18013 5738 ) N ; - - _433_ XNOR2_X1 + PLACED ( 18708 6374 ) N ; - - _434_ AOI221_X2 + PLACED ( 10245 14524 ) N ; - - _435_ OR3_X1 + PLACED ( 24628 13578 ) N ; - - _436_ AOI22_X1 + PLACED ( 11654 13327 ) N ; - - _437_ NAND2_X1 + PLACED ( 37042 25016 ) N ; - - _438_ OAI221_X1 + PLACED ( 38159 24317 ) N ; - - _439_ NAND2_X1 + PLACED ( 37698 31574 ) N ; - - _440_ XOR2_X1 + PLACED ( 38805 33970 ) N ; - - _441_ XNOR2_X1 + PLACED ( 39638 32036 ) N ; - - _442_ AOI221_X2 + PLACED ( 41156 30911 ) N ; - - _443_ NAND2_X1 + PLACED ( 39482 36473 ) N ; - - _444_ AOI22_X1 + PLACED ( 38974 36373 ) N ; - - _445_ OAI21_X1 + PLACED ( 37383 25946 ) N ; - - _446_ NAND2_X1 + PLACED ( 37468 24424 ) N ; - - _447_ XNOR2_X1 + PLACED ( 36612 17767 ) N ; - - _448_ XNOR2_X1 + PLACED ( 36564 18265 ) N ; - - _449_ NOR2_X1 + PLACED ( 32833 17619 ) N ; - - _450_ AOI221_X1 + PLACED ( 28362 18729 ) N ; - - _451_ OR3_X1 + PLACED ( 31135 17529 ) N ; - - _452_ AOI21_X1 + PLACED ( 31465 17804 ) N ; - - _453_ XNOR2_X1 + PLACED ( 38723 28430 ) N ; - - _454_ XNOR2_X1 + PLACED ( 38921 28692 ) N ; - - _455_ AOI221_X2 + PLACED ( 30723 51933 ) N ; - - _456_ OR3_X1 + PLACED ( 32255 43489 ) N ; - - _457_ AOI22_X1 + PLACED ( 32067 45665 ) N ; - - _458_ AOI22_X1 + PLACED ( 55694 25341 ) N ; - - _459_ NOR2_X1 + PLACED ( 58151 23033 ) N ; - - _460_ XOR2_X1 + PLACED ( 56971 15942 ) N ; - - _461_ XNOR2_X1 + PLACED ( 57429 17118 ) N ; - - _462_ NOR2_X1 + PLACED ( 43691 12917 ) N ; - - _463_ AOI221_X1 + PLACED ( 42310 13948 ) N ; - - _464_ OR3_X1 + PLACED ( 43817 13629 ) N ; - - _465_ AOI21_X1 + PLACED ( 43411 12884 ) N ; - - _466_ XNOR2_X1 + PLACED ( 56009 19023 ) N ; - - _467_ XNOR2_X1 + PLACED ( 56251 24543 ) N ; - - _468_ AOI221_X4 + PLACED ( 46143 27093 ) N ; - - _469_ OR3_X1 + PLACED ( 46338 20512 ) N ; - - _470_ AOI22_X1 + PLACED ( 48459 21032 ) N ; - - _471_ XNOR2_X1 + PLACED ( 52204 36589 ) N ; - - _472_ INV_X1 + PLACED ( 47481 31956 ) N ; - - _473_ NOR2_X1 + PLACED ( 46869 36801 ) N ; - - _474_ XNOR2_X1 + PLACED ( 45362 36610 ) N ; - - _475_ AOI221_X4 + PLACED ( 46395 29021 ) N ; - - _476_ NAND3_X1 + PLACED ( 45514 36281 ) N ; - - _477_ AOI22_X1 + PLACED ( 48560 34352 ) N ; - - _478_ XOR2_X1 + PLACED ( 47547 48368 ) N ; - - _479_ AOI221_X4 + PLACED ( 46568 42894 ) N ; - - _480_ NAND3_X1 + PLACED ( 46459 45756 ) N ; - - _481_ AOI22_X1 + PLACED ( 49087 45408 ) N ; - - _482_ NOR2_X1 + PLACED ( 40418 52458 ) N ; - - _483_ NOR2_X1 + PLACED ( 48174 28867 ) N ; - - _484_ AND3_X1 + PLACED ( 46753 30239 ) N ; - - _485_ NAND3_X1 + PLACED ( 32664 34921 ) N ; - - _486_ NOR3_X1 + PLACED ( 19411 14205 ) N ; - - _487_ NAND2_X1 + PLACED ( 20270 14465 ) N ; - - _488_ NOR4_X1 + PLACED ( 20976 36288 ) N ; - - _489_ NAND3_X1 + PLACED ( 20137 40420 ) N ; - - _490_ NOR3_X1 + PLACED ( 36622 39535 ) N ; - - _491_ NAND3_X1 + PLACED ( 39891 46011 ) N ; - - _492_ AOI221_X4 + PLACED ( 40392 52251 ) N ; - - _493_ NAND3_X1 + PLACED ( 33516 53340 ) N ; - - _494_ AOI221_X1 + PLACED ( 35034 52150 ) N ; - - _495_ MUX2_X1 + PLACED ( 9576 57478 ) N ; - - _496_ NOR2_X4 + PLACED ( 45102 53689 ) N ; - - _498_ MUX2_X1 + PLACED ( 11997 56719 ) N ; - - _499_ MUX2_X1 + PLACED ( 1486 26562 ) N ; - - _500_ MUX2_X1 + PLACED ( 4831 27321 ) N ; - - _501_ MUX2_X1 + PLACED ( 1761 48669 ) N ; - - _502_ MUX2_X1 + PLACED ( 4228 48204 ) N ; - - _503_ MUX2_X1 + PLACED ( 29979 57478 ) N ; - - _504_ MUX2_X1 + PLACED ( 31845 56924 ) N ; - - _505_ MUX2_X1 + PLACED ( 26491 3790 ) N ; - - _506_ MUX2_X1 + PLACED ( 27464 5150 ) N ; - - _507_ MUX2_X1 + PLACED ( 1407 21668 ) N ; - - _508_ MUX2_X1 + PLACED ( 3827 20608 ) N ; - - _509_ MUX2_X1 + PLACED ( 1407 11626 ) N ; - - _510_ MUX2_X1 + PLACED ( 3771 12702 ) N ; - - _511_ MUX2_X1 + PLACED ( 11810 4220 ) N ; - - _512_ MUX2_X1 + PLACED ( 12672 4905 ) N ; - - _513_ MUX2_X1 + PLACED ( 7566 37263 ) N ; - - _514_ MUX2_X1 + PLACED ( 8632 38253 ) N ; - - _515_ MUX2_X1 + PLACED ( 1407 33870 ) N ; - - _516_ MUX2_X1 + PLACED ( 3385 34550 ) N ; - - _517_ MUX2_X1 + PLACED ( 36785 16226 ) N ; - - _518_ MUX2_X1 + PLACED ( 35878 9879 ) N ; - - _519_ MUX2_X1 + PLACED ( 39838 21136 ) N ; - - _520_ MUX2_X1 + PLACED ( 41178 22145 ) N ; - - _521_ MUX2_X1 + PLACED ( 56092 9487 ) N ; - - _522_ MUX2_X1 + PLACED ( 55734 10324 ) N ; - - _523_ MUX2_X1 + PLACED ( 47894 5504 ) N ; - - _524_ MUX2_X1 + PLACED ( 50106 5679 ) N ; - - _525_ MUX2_X1 + PLACED ( 53106 38078 ) N ; - - _526_ MUX2_X1 + PLACED ( 55085 39280 ) N ; - - _527_ MUX2_X1 + PLACED ( 55147 47952 ) N ; - - _528_ MUX2_X1 + PLACED ( 55407 49641 ) N ; - - _529_ AOI22_X1 + PLACED ( 35226 35547 ) N ; - - _530_ NOR2_X1 + PLACED ( 33056 36910 ) N ; - - _531_ XNOR2_X1 + PLACED ( 15386 38143 ) N ; - - _532_ XNOR2_X1 + PLACED ( 15793 38544 ) N ; - - _533_ AOI221_X2 + PLACED ( 10474 52685 ) N ; - - _534_ OR3_X1 + PLACED ( 26540 38736 ) N ; - - _535_ AOI22_X1 + PLACED ( 25102 39481 ) N ; - - _536_ DFF_X1 + PLACED ( 938 28418 ) N ; - - _537_ DFF_X1 + PLACED ( 10228 48153 ) N ; - - _538_ DFF_X1 + PLACED ( 17656 57246 ) N ; - - _539_ DFF_X1 + PLACED ( 23415 57478 ) N ; - - _540_ DFF_X1 + PLACED ( 21970 6288 ) N ; - - _541_ DFF_X1 + PLACED ( 8620 20831 ) N ; - - _542_ DFF_X1 + PLACED ( 29082 11030 ) N ; - - _543_ DFF_X1 + PLACED ( 6939 9009 ) N ; - - _544_ DFF_X1 + PLACED ( 37958 37148 ) N ; - - _545_ DFF_X1 + PLACED ( 30635 17002 ) N ; - - _546_ DFF_X1 + PLACED ( 30828 46132 ) N ; - - _547_ DFF_X1 + PLACED ( 41835 8521 ) N ; - - _548_ DFF_X1 + PLACED ( 47646 21245 ) N ; - - _549_ DFF_X1 + PLACED ( 46915 36868 ) N ; - - _550_ DFF_X1 + PLACED ( 48709 48805 ) N ; - - _551_ DFF_X1 + PLACED ( 44245 53097 ) N ; - - _552_ DFF_X1 + PLACED ( 34385 53259 ) N ; - - _553_ DFF_X1 + PLACED ( 12479 57329 ) N ; - - _554_ DFF_X1 + PLACED ( 5513 27515 ) N ; - - _555_ DFF_X1 + PLACED ( 4296 48345 ) N ; - - _556_ DFF_X1 + PLACED ( 32521 57478 ) N ; - - _557_ DFF_X1 + PLACED ( 27600 5269 ) N ; - - _558_ DFF_X1 + PLACED ( 3767 20281 ) N ; - - _559_ DFF_X1 + PLACED ( 3589 13121 ) N ; - - _560_ DFF_X1 + PLACED ( 12533 4638 ) N ; - - _561_ DFF_X1 + PLACED ( 8267 38668 ) N ; - - _562_ DFF_X1 + PLACED ( 3208 34655 ) N ; - - _563_ DFF_X1 + PLACED ( 35229 9454 ) N ; - - _564_ DFF_X1 + PLACED ( 41257 22427 ) N ; - - _565_ DFF_X1 + PLACED ( 55480 10509 ) N ; - - _566_ DFF_X1 + PLACED ( 51086 5488 ) N ; - - _567_ DFF_X1 + PLACED ( 55480 39765 ) N ; - - _568_ DFF_X1 + PLACED ( 55480 50252 ) N ; - - _569_ DFF_X1 + PLACED ( 22810 39253 ) N ; + - _276_ NOR2_X4 + PLACED ( 48353 52355 ) N ; + - _278_ INV_X1 + PLACED ( 6789 39119 ) N ; + - _279_ NOR2_X1 + PLACED ( 9820 37615 ) N ; + - _280_ INV_X1 + PLACED ( 11832 35491 ) N ; + - _281_ INV_X1 + PLACED ( 24478 48670 ) N ; + - _282_ NOR2_X1 + PLACED ( 21970 45941 ) N ; + - _283_ INV_X1 + PLACED ( 28107 41448 ) N ; + - _284_ NOR2_X1 + PLACED ( 26220 42495 ) N ; + - _285_ NOR2_X1 + PLACED ( 21032 42826 ) N ; + - _286_ INV_X1 + PLACED ( 15123 46908 ) N ; + - _287_ NOR2_X1 + PLACED ( 15194 44633 ) N ; + - _288_ INV_X1 + PLACED ( 16464 43253 ) N ; + - _289_ AND2_X1 + PLACED ( 17923 35608 ) N ; + - _290_ INV_X1 + PLACED ( 21690 14869 ) N ; + - _291_ NOR2_X1 + PLACED ( 18559 15125 ) N ; + - _292_ INV_X1 + PLACED ( 13329 12907 ) N ; + - _293_ AOI21_X2 + PLACED ( 17252 14662 ) N ; + - _294_ INV_X1 + PLACED ( 25281 15974 ) N ; + - _295_ NOR2_X1 + PLACED ( 23853 21389 ) N ; + - _296_ INV_X1 + PLACED ( 15236 21907 ) N ; + - _297_ NOR2_X2 + PLACED ( 15534 22394 ) N ; + - _298_ NOR2_X1 + PLACED ( 20035 24175 ) N ; + - _299_ AND2_X1 + PLACED ( 19216 32784 ) N ; + - _300_ INV_X16 + PLACED ( 47635 11914 ) N ; + - _301_ NOR2_X1 + PLACED ( 48352 17102 ) N ; + - _302_ INV_X16 + PLACED ( 55480 15420 ) N ; + - _303_ NOR3_X1 + PLACED ( 49876 17677 ) N ; + - _304_ AOI21_X1 + PLACED ( 47158 17500 ) N ; + - _305_ INV_X1 + PLACED ( 44729 18959 ) N ; + - _306_ INV_X16 + PLACED ( 51874 31130 ) N ; + - _307_ AND2_X1 + PLACED ( 54995 29044 ) N ; + - _308_ INV_X4 + PLACED ( 57371 27655 ) N ; + - _309_ INV_X16 + PLACED ( 52440 42822 ) N ; + - _310_ OAI211_X1 + PLACED ( 52210 29661 ) N ; + - _311_ NAND2_X1 + PLACED ( 52099 25048 ) N ; + - _312_ INV_X16 + PLACED ( 55480 18823 ) N ; + - _313_ NOR2_X1 + PLACED ( 54268 20279 ) N ; + - _314_ NOR3_X2 + PLACED ( 49396 21071 ) N ; + - _315_ NOR2_X2 + PLACED ( 41425 21061 ) N ; + - _316_ INV_X1 + PLACED ( 32718 28609 ) N ; + - _317_ NOR2_X1 + PLACED ( 31470 27684 ) N ; + - _318_ INV_X16 + PLACED ( 34907 11704 ) N ; + - _319_ NOR2_X2 + PLACED ( 34059 20026 ) N ; + - _320_ INV_X4 + PLACED ( 36502 46128 ) N ; + - _321_ NAND2_X1 + PLACED ( 35047 39034 ) N ; + - _322_ INV_X1 + PLACED ( 31986 32206 ) N ; + - _323_ OAI21_X2 + PLACED ( 32744 34497 ) N ; + - _324_ NOR4_X4 + PLACED ( 29616 27755 ) N ; + - _325_ NOR2_X1 + PLACED ( 35751 39196 ) N ; + - _326_ OAI21_X1 + PLACED ( 34514 34550 ) N ; + - _327_ INV_X1 + PLACED ( 30658 34008 ) N ; + - _328_ INV_X16 + PLACED ( 34344 24715 ) N ; + - _329_ NOR3_X1 + PLACED ( 33693 21411 ) N ; + - _330_ AOI21_X2 + PLACED ( 34109 20833 ) N ; + - _331_ OAI221_X4 + PLACED ( 33989 33627 ) N ; + - _332_ OAI211_X1 + PLACED ( 18031 33053 ) N ; + - _333_ AND2_X1 + PLACED ( 8975 37837 ) N ; + - _334_ INV_X1 + PLACED ( 10883 36763 ) N ; + - _335_ NAND2_X1 + PLACED ( 22198 46047 ) N ; + - _336_ NAND2_X1 + PLACED ( 26189 41762 ) N ; + - _337_ NAND2_X1 + PLACED ( 21265 42076 ) N ; + - _338_ INV_X1 + PLACED ( 21282 43892 ) N ; + - _339_ NAND3_X1 + PLACED ( 17625 42128 ) N ; + - _340_ NAND2_X1 + PLACED ( 15142 44422 ) N ; + - _341_ NAND2_X1 + PLACED ( 16324 42372 ) N ; + - _342_ INV_X1 + PLACED ( 19588 14078 ) N ; + - _343_ OAI211_X2 + PLACED ( 19464 15072 ) N ; + - _344_ NAND2_X1 + PLACED ( 18817 17942 ) N ; + - _345_ AOI211_X2 + PLACED ( 19891 22594 ) N ; + - _346_ NAND2_X1 + PLACED ( 24017 21570 ) N ; + - _347_ NAND2_X1 + PLACED ( 15606 23208 ) N ; + - _348_ OAI21_X1 + PLACED ( 21908 23949 ) N ; + - _349_ OR2_X1 + PLACED ( 21533 29764 ) N ; + - _350_ AOI21_X1 + PLACED ( 16847 35251 ) N ; + - _351_ AND4_X1 + PLACED ( 12077 35037 ) N ; + - _352_ AOI22_X1 + PLACED ( 12107 35176 ) N ; + - _353_ OR2_X1 + PLACED ( 12127 35526 ) N ; + - _355_ INV_X4 + PLACED ( 46622 50178 ) N ; + - _357_ AND3_X1 + PLACED ( 18247 35284 ) N ; + - _358_ OAI211_X2 + PLACED ( 21398 31931 ) N ; + - _359_ OAI21_X2 + PLACED ( 15423 35115 ) N ; + - _360_ OAI21_X2 + PLACED ( 22152 30283 ) N ; + - _361_ NAND3_X4 + PLACED ( 22248 32612 ) N ; + - _362_ NOR2_X2 + PLACED ( 42758 38758 ) N ; + - _363_ INV_X2 + PLACED ( 43985 38724 ) N ; + - _364_ NOR2_X4 + PLACED ( 41397 36865 ) N ; + - _365_ AOI221_X4 + PLACED ( 9473 40819 ) N ; + - _366_ AND2_X4 + PLACED ( 41946 38477 ) N ; + - _368_ OAI21_X1 + PLACED ( 11942 36276 ) N ; + - _370_ AOI22_X1 + PLACED ( 10173 39128 ) N ; + - _371_ NOR2_X2 + PLACED ( 23956 28973 ) N ; + - _372_ NAND3_X1 + PLACED ( 18680 34483 ) N ; + - _373_ OR2_X1 + PLACED ( 17911 38244 ) N ; + - _374_ AOI22_X1 + PLACED ( 17938 41379 ) N ; + - _375_ NAND2_X1 + PLACED ( 17303 41294 ) N ; + - _376_ XOR2_X1 + PLACED ( 13534 48489 ) N ; + - _377_ XNOR2_X1 + PLACED ( 14537 47499 ) N ; + - _378_ INV_X2 + PLACED ( 41171 38064 ) N ; + - _380_ NOR2_X1 + PLACED ( 13858 48793 ) N ; + - _381_ NAND2_X1 + PLACED ( 14491 48067 ) N ; + - _382_ AOI221_X4 + PLACED ( 10525 48996 ) N ; + - _383_ AOI21_X1 + PLACED ( 13456 49046 ) N ; + - _384_ INV_X1 + PLACED ( 22646 38858 ) N ; + - _385_ INV_X1 + PLACED ( 22049 36400 ) N ; + - _386_ OAI211_X1 + PLACED ( 22184 39598 ) N ; + - _387_ INV_X1 + PLACED ( 22623 43395 ) N ; + - _388_ AND4_X1 + PLACED ( 21522 44101 ) N ; + - _389_ AOI22_X1 + PLACED ( 21394 44204 ) N ; + - _390_ NOR2_X1 + PLACED ( 22406 45442 ) N ; + - _391_ NOR2_X1 + PLACED ( 21909 49640 ) N ; + - _392_ NAND2_X1 + PLACED ( 21973 47897 ) N ; + - _393_ AOI221_X4 + PLACED ( 20340 49936 ) N ; + - _394_ AOI21_X1 + PLACED ( 21540 50325 ) N ; + - _395_ OAI21_X1 + PLACED ( 23147 39138 ) N ; + - _396_ XOR2_X1 + PLACED ( 30288 42812 ) N ; + - _397_ XNOR2_X1 + PLACED ( 29958 42455 ) N ; + - _398_ NOR2_X1 + PLACED ( 30273 46530 ) N ; + - _399_ AOI221_X1 + PLACED ( 29687 45040 ) N ; + - _401_ OR3_X1 + PLACED ( 27958 40896 ) N ; + - _402_ AOI21_X1 + PLACED ( 29529 46257 ) N ; + - _403_ INV_X1 + PLACED ( 17845 24997 ) N ; + - _404_ OAI211_X1 + PLACED ( 18001 27897 ) N ; + - _405_ AOI21_X1 + PLACED ( 18177 21764 ) N ; + - _406_ AOI21_X1 + PLACED ( 16551 21939 ) N ; + - _407_ AND2_X1 + PLACED ( 18724 21492 ) N ; + - _408_ XNOR2_X1 + PLACED ( 28178 15164 ) N ; + - _409_ XNOR2_X1 + PLACED ( 28111 15864 ) N ; + - _410_ NOR2_X1 + PLACED ( 29040 14771 ) N ; + - _411_ AOI221_X1 + PLACED ( 28089 15423 ) N ; + - _412_ OR3_X1 + PLACED ( 26027 15936 ) N ; + - _413_ AOI21_X1 + PLACED ( 28028 14658 ) N ; + - _414_ OAI21_X1 + PLACED ( 18234 28523 ) N ; + - _415_ AND2_X1 + PLACED ( 18495 22455 ) N ; + - _416_ AND4_X1 + PLACED ( 17183 26626 ) N ; + - _417_ AOI22_X1 + PLACED ( 16780 26718 ) N ; + - _418_ OR2_X1 + PLACED ( 14535 27202 ) N ; + - _419_ NOR2_X1 + PLACED ( 11985 25875 ) N ; + - _420_ AOI221_X4 + PLACED ( 9302 28793 ) N ; + - _421_ OAI21_X1 + PLACED ( 13416 27034 ) N ; + - _422_ AOI21_X1 + PLACED ( 11534 27012 ) N ; + - _423_ AOI21_X1 + PLACED ( 13974 13165 ) N ; + - _424_ NOR2_X1 + PLACED ( 12566 13174 ) N ; + - _425_ NOR2_X1 + PLACED ( 12457 13608 ) N ; + - _426_ XNOR2_X1 + PLACED ( 9521 14952 ) N ; + - _427_ XNOR2_X1 + PLACED ( 10795 15084 ) N ; + - _428_ NOR2_X1 + PLACED ( 11741 17170 ) N ; + - _429_ AOI221_X1 + PLACED ( 9818 16718 ) N ; + - _430_ OR3_X1 + PLACED ( 23197 16922 ) N ; + - _431_ AOI21_X1 + PLACED ( 10797 17301 ) N ; + - _432_ XNOR2_X1 + PLACED ( 16689 9528 ) N ; + - _433_ XNOR2_X1 + PLACED ( 17084 11463 ) N ; + - _434_ AOI221_X1 + PLACED ( 15324 14142 ) N ; + - _435_ OR3_X1 + PLACED ( 23346 14968 ) N ; + - _436_ AOI22_X1 + PLACED ( 16479 13911 ) N ; + - _437_ NAND2_X1 + PLACED ( 39528 21414 ) N ; + - _438_ OAI221_X2 + PLACED ( 40219 20562 ) N ; + - _439_ NAND2_X1 + PLACED ( 37358 39460 ) N ; + - _440_ XOR2_X1 + PLACED ( 36725 45168 ) N ; + - _441_ XNOR2_X1 + PLACED ( 36947 43844 ) N ; + - _442_ AOI221_X1 + PLACED ( 34952 45404 ) N ; + - _443_ NAND2_X1 + PLACED ( 36366 46860 ) N ; + - _444_ AOI22_X1 + PLACED ( 35259 46920 ) N ; + - _445_ OAI21_X1 + PLACED ( 39644 21846 ) N ; + - _446_ NAND2_X1 + PLACED ( 39611 20216 ) N ; + - _447_ XNOR2_X1 + PLACED ( 38473 15113 ) N ; + - _448_ XNOR2_X1 + PLACED ( 38395 15646 ) N ; + - _449_ NOR2_X1 + PLACED ( 35990 14643 ) N ; + - _450_ AOI221_X1 + PLACED ( 36184 15217 ) N ; + - _451_ OR3_X1 + PLACED ( 34567 15115 ) N ; + - _452_ AOI21_X1 + PLACED ( 35286 14368 ) N ; + - _453_ XNOR2_X1 + PLACED ( 32459 22440 ) N ; + - _454_ XNOR2_X1 + PLACED ( 31881 22138 ) N ; + - _455_ AOI221_X1 + PLACED ( 29488 22146 ) N ; + - _456_ OR3_X1 + PLACED ( 30250 26336 ) N ; + - _457_ AOI22_X1 + PLACED ( 29891 23269 ) N ; + - _458_ AOI22_X1 + PLACED ( 55276 26244 ) N ; + - _459_ NOR2_X1 + PLACED ( 53290 20169 ) N ; + - _460_ XOR2_X1 + PLACED ( 49522 16515 ) N ; + - _461_ XNOR2_X1 + PLACED ( 50467 16870 ) N ; + - _462_ NOR2_X1 + PLACED ( 45865 15469 ) N ; + - _463_ AOI221_X1 + PLACED ( 44729 16393 ) N ; + - _464_ OR3_X1 + PLACED ( 45416 15743 ) N ; + - _465_ AOI21_X1 + PLACED ( 45188 15404 ) N ; + - _466_ XNOR2_X1 + PLACED ( 52914 20559 ) N ; + - _467_ XNOR2_X1 + PLACED ( 51773 22754 ) N ; + - _468_ AOI221_X4 + PLACED ( 45528 23559 ) N ; + - _469_ OR3_X1 + PLACED ( 47483 23825 ) N ; + - _470_ AOI22_X1 + PLACED ( 49453 23697 ) N ; + - _471_ XNOR2_X1 + PLACED ( 52404 35119 ) N ; + - _472_ INV_X1 + PLACED ( 48713 35752 ) N ; + - _473_ NOR2_X1 + PLACED ( 49119 37333 ) N ; + - _474_ XNOR2_X1 + PLACED ( 48637 36675 ) N ; + - _475_ AOI221_X4 + PLACED ( 45051 31025 ) N ; + - _476_ NAND3_X1 + PLACED ( 48588 36904 ) N ; + - _477_ AOI22_X1 + PLACED ( 49426 31312 ) N ; + - _478_ XOR2_X1 + PLACED ( 48160 40410 ) N ; + - _479_ AOI221_X4 + PLACED ( 45766 42713 ) N ; + - _480_ NAND3_X1 + PLACED ( 48668 40629 ) N ; + - _481_ AOI22_X1 + PLACED ( 50522 42210 ) N ; + - _482_ NOR2_X1 + PLACED ( 45577 48627 ) N ; + - _483_ NOR2_X1 + PLACED ( 48247 28135 ) N ; + - _484_ AND3_X1 + PLACED ( 47876 28994 ) N ; + - _485_ NAND3_X1 + PLACED ( 31230 30561 ) N ; + - _486_ NOR3_X1 + PLACED ( 22633 16073 ) N ; + - _487_ NAND2_X1 + PLACED ( 23689 16373 ) N ; + - _488_ NOR4_X1 + PLACED ( 26167 39281 ) N ; + - _489_ NAND3_X1 + PLACED ( 25651 43935 ) N ; + - _490_ NOR3_X1 + PLACED ( 40567 42867 ) N ; + - _491_ NAND3_X1 + PLACED ( 42774 41728 ) N ; + - _492_ AOI221_X4 + PLACED ( 43578 47120 ) N ; + - _493_ NAND3_X1 + PLACED ( 41488 46409 ) N ; + - _494_ AOI221_X1 + PLACED ( 42086 46598 ) N ; + - _495_ MUX2_X1 + PLACED ( 20111 55136 ) N ; + - _496_ NOR2_X4 + PLACED ( 39764 49460 ) N ; + - _498_ MUX2_X1 + PLACED ( 21117 56256 ) N ; + - _499_ MUX2_X1 + PLACED ( 3284 40915 ) N ; + - _500_ MUX2_X1 + PLACED ( 4807 42707 ) N ; + - _501_ MUX2_X1 + PLACED ( 7778 52128 ) N ; + - _502_ MUX2_X1 + PLACED ( 9462 54539 ) N ; + - _503_ MUX2_X1 + PLACED ( 26370 53800 ) N ; + - _504_ MUX2_X1 + PLACED ( 27259 55390 ) N ; + - _505_ MUX2_X1 + PLACED ( 22652 8067 ) N ; + - _506_ MUX2_X1 + PLACED ( 23608 6566 ) N ; + - _507_ MUX2_X1 + PLACED ( 4821 22577 ) N ; + - _508_ MUX2_X1 + PLACED ( 6534 22330 ) N ; + - _509_ MUX2_X1 + PLACED ( 3126 13776 ) N ; + - _510_ MUX2_X1 + PLACED ( 4447 12949 ) N ; + - _511_ MUX2_X1 + PLACED ( 8942 7291 ) N ; + - _512_ MUX2_X1 + PLACED ( 9759 6831 ) N ; + - _513_ MUX2_X1 + PLACED ( 3031 32197 ) N ; + - _514_ MUX2_X1 + PLACED ( 4605 31330 ) N ; + - _515_ MUX2_X1 + PLACED ( 36121 54187 ) N ; + - _516_ MUX2_X1 + PLACED ( 37467 56119 ) N ; + - _517_ MUX2_X1 + PLACED ( 35491 7122 ) N ; + - _518_ MUX2_X1 + PLACED ( 37361 5984 ) N ; + - _519_ MUX2_X1 + PLACED ( 38071 28496 ) N ; + - _520_ MUX2_X1 + PLACED ( 39238 29980 ) N ; + - _521_ MUX2_X1 + PLACED ( 47334 7224 ) N ; + - _522_ MUX2_X1 + PLACED ( 49137 6027 ) N ; + - _523_ MUX2_X1 + PLACED ( 53810 11259 ) N ; + - _524_ MUX2_X1 + PLACED ( 54915 10259 ) N ; + - _525_ MUX2_X1 + PLACED ( 53913 35433 ) N ; + - _526_ MUX2_X1 + PLACED ( 55031 36609 ) N ; + - _527_ MUX2_X1 + PLACED ( 53148 47786 ) N ; + - _528_ MUX2_X1 + PLACED ( 54636 48525 ) N ; + - _529_ AOI22_X1 + PLACED ( 36240 39040 ) N ; + - _530_ NOR2_X1 + PLACED ( 35460 38067 ) N ; + - _531_ XNOR2_X1 + PLACED ( 30463 34711 ) N ; + - _532_ XNOR2_X1 + PLACED ( 31617 37095 ) N ; + - _533_ AOI221_X1 + PLACED ( 28950 36657 ) N ; + - _534_ OR3_X1 + PLACED ( 29735 34181 ) N ; + - _535_ AOI22_X1 + PLACED ( 29310 34923 ) N ; + - _536_ DFF_X1 + PLACED ( 0 39399 ) N ; + - _537_ DFF_X2 + PLACED ( 3048 49437 ) N ; + - _538_ DFF_X1 + PLACED ( 16146 54689 ) N ; + - _539_ DFF_X2 + PLACED ( 27247 49445 ) N ; + - _540_ DFF_X2 + PLACED ( 25802 9681 ) N ; + - _541_ DFF_X2 + PLACED ( 380 25743 ) N ; + - _542_ DFF_X2 + PLACED ( 380 17647 ) N ; + - _543_ DFF_X2 + PLACED ( 15368 6352 ) N ; + - _544_ DFF_X2 + PLACED ( 33081 51841 ) N ; + - _545_ DFF_X2 + PLACED ( 31899 9302 ) N ; + - _546_ DFF_X2 + PLACED ( 25147 23068 ) N ; + - _547_ DFF_X2 + PLACED ( 42704 9606 ) N ; + - _548_ DFF_X2 + PLACED ( 55100 24105 ) N ; + - _549_ DFF_X2 + PLACED ( 48818 31373 ) N ; + - _550_ DFF_X2 + PLACED ( 51823 42733 ) N ; + - _551_ DFF_X2 + PLACED ( 47346 49350 ) N ; + - _552_ DFF_X2 + PLACED ( 41528 53839 ) N ; + - _553_ DFF_X1 + PLACED ( 21155 57222 ) N ; + - _554_ DFF_X1 + PLACED ( 4424 43658 ) N ; + - _555_ DFF_X1 + PLACED ( 9701 55489 ) N ; + - _556_ DFF_X1 + PLACED ( 27020 56228 ) N ; + - _557_ DFF_X1 + PLACED ( 23939 5705 ) N ; + - _558_ DFF_X1 + PLACED ( 6465 22264 ) N ; + - _559_ DFF_X1 + PLACED ( 3625 12463 ) N ; + - _560_ DFF_X2 + PLACED ( 9556 6381 ) N ; + - _561_ DFF_X1 + PLACED ( 4278 30901 ) N ; + - _562_ DFF_X2 + PLACED ( 37690 57404 ) N ; + - _563_ DFF_X2 + PLACED ( 37539 5257 ) N ; + - _564_ DFF_X2 + PLACED ( 39146 30719 ) N ; + - _565_ DFF_X2 + PLACED ( 49711 5303 ) N ; + - _566_ DFF_X2 + PLACED ( 55100 9841 ) N ; + - _567_ DFF_X2 + PLACED ( 55100 37100 ) N ; + - _568_ DFF_X2 + PLACED ( 55100 48783 ) N ; + - _569_ DFF_X2 + PLACED ( 380 34445 ) N ; END COMPONENTS PINS 54 ; - clk + NET clk + DIRECTION INPUT + USE SIGNAL diff --git a/src/gpl/test/simple01-td.ok b/src/gpl/test/simple01-td.ok index 36b1fedcae2..63a31ac4b4b 100644 --- a/src/gpl/test/simple01-td.ok +++ b/src/gpl/test/simple01-td.ok @@ -37,8 +37,9 @@ [INFO GPL-0029] BinSize: ( 1.936 1.925 ) [INFO GPL-0030] NumBins: 256 [NesterovSolve] Iter: 1 overflow: 0.832 HPWL: 3651238 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.42e-09 +[INFO GPL-0100] Timing-driven iteration 1/6, virtual: true. +[INFO GPL-0101] Iter: 2, overflow: 0.761, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.42e-09 [INFO GPL-0103] Timing-driven: weighted 35 nets. [NesterovSolve] Iter: 10 overflow: 0.730 HPWL: 4005677 [NesterovSolve] Iter: 20 overflow: 0.733 HPWL: 3997290 @@ -60,36 +61,48 @@ [NesterovSolve] Iter: 180 overflow: 0.691 HPWL: 4088093 [NesterovSolve] Iter: 190 overflow: 0.674 HPWL: 4128327 [NesterovSolve] Iter: 200 overflow: 0.652 HPWL: 4181482 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.42e-09 +[INFO GPL-0100] Timing-driven iteration 2/6, virtual: true. +[INFO GPL-0101] Iter: 205, overflow: 0.632, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.42e-09 [INFO GPL-0103] Timing-driven: weighted 31 nets. [NesterovSolve] Iter: 210 overflow: 0.616 HPWL: 4268407 [NesterovSolve] Iter: 220 overflow: 0.581 HPWL: 4334998 [NesterovSolve] Iter: 230 overflow: 0.541 HPWL: 4395113 [NesterovSolve] Iter: 240 overflow: 0.497 HPWL: 4450593 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 3/6, virtual: true. +[INFO GPL-0101] Iter: 242, overflow: 0.481, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 33 nets. [NesterovSolve] Iter: 250 overflow: 0.439 HPWL: 4450154 [NesterovSolve] Iter: 260 overflow: 0.384 HPWL: 4445553 [NesterovSolve] Iter: 270 overflow: 0.331 HPWL: 4451490 [NesterovSolve] Iter: 280 overflow: 0.303 HPWL: 4479186 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0100] Timing-driven iteration 4/6, virtual: false. +[INFO GPL-0101] Iter: 285, overflow: 0.284, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 [INFO GPL-0103] Timing-driven: weighted 34 nets. -[NesterovSolve] Iter: 290 overflow: 0.281 HPWL: 4494546 -[NesterovSolve] Iter: 300 overflow: 0.241 HPWL: 4523631 -[NesterovSolve] Iter: 310 overflow: 0.213 HPWL: 4546538 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 -[INFO GPL-0103] Timing-driven: weighted 33 nets. -[NesterovSolve] Iter: 320 overflow: 0.190 HPWL: 4581550 -[NesterovSolve] Iter: 330 overflow: 0.162 HPWL: 4603269 -[INFO GPL-0100] Timing-driven: executing resizer for reweighting nets. -[INFO GPL-0101] Timing-driven: worst slack 1.41e-09 -[INFO GPL-0103] Timing-driven: weighted 32 nets. -[NesterovSolve] Iter: 340 overflow: 0.141 HPWL: 4630716 -[NesterovSolve] Iter: 350 overflow: 0.116 HPWL: 4645283 -[NesterovSolve] Finished with Overflow: 0.098917 -worst slack 1.38 +[INFO GPL-0107] Timing-driven: RSZ delta area: -14.098 +[INFO GPL-0108] Timing-driven: new target density: 0.6852203 +[NesterovSolve] Iter: 290 overflow: 0.290 HPWL: 2640387 +[NesterovSolve] Iter: 300 overflow: 0.261 HPWL: 2660468 +[NesterovSolve] Iter: 310 overflow: 0.229 HPWL: 2636189 +[INFO GPL-0100] Timing-driven iteration 5/6, virtual: false. +[INFO GPL-0101] Iter: 316, overflow: 0.201, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0103] Timing-driven: weighted 35 nets. +[INFO GPL-0107] Timing-driven: RSZ delta area: -5.32 +[INFO GPL-0108] Timing-driven: new target density: 0.67964303 +[NesterovSolve] Iter: 320 overflow: 0.185 HPWL: 2623574 +[NesterovSolve] Iter: 330 overflow: 0.180 HPWL: 2647293 +[NesterovSolve] Iter: 340 overflow: 0.152 HPWL: 2680941 +[INFO GPL-0100] Timing-driven iteration 6/6, virtual: false. +[INFO GPL-0101] Iter: 342, overflow: 0.143, keep rsz at: 0.3 +[INFO GPL-0106] Timing-driven: worst slack 1.41e-09 +[INFO GPL-0103] Timing-driven: weighted 31 nets. +[INFO GPL-0107] Timing-driven: RSZ delta area: 0.0 +[INFO GPL-0108] Timing-driven: new target density: 0.67964303 +[NesterovSolve] Iter: 350 overflow: 0.127 HPWL: 2703881 +[NesterovSolve] Iter: 360 overflow: 0.101 HPWL: 2726281 +[NesterovSolve] Finished with Overflow: 0.098104 +worst slack 1.41 No differences found.