From d8bdede1b1b59163eefe31df79389badb1721431 Mon Sep 17 00:00:00 2001 From: Krzysztof Bieganski Date: Mon, 9 Dec 2024 15:53:54 +0100 Subject: [PATCH 1/3] drt: Bidirectional A* Co-authored-by: Maciej Torhan Signed-off-by: Krzysztof Bieganski Signed-off-by: Maciej Torhan --- src/drt/src/dr/FlexGridGraph.cpp | 2 +- src/drt/src/dr/FlexGridGraph.h | 113 +++++++++-- src/drt/src/dr/FlexGridGraph_maze.cpp | 279 +++++++++++++++++++++----- src/drt/src/dr/FlexWavefront.h | 41 ++-- 4 files changed, 359 insertions(+), 76 deletions(-) diff --git a/src/drt/src/dr/FlexGridGraph.cpp b/src/drt/src/dr/FlexGridGraph.cpp index 45f848801e8..ca642d6e416 100644 --- a/src/drt/src/dr/FlexGridGraph.cpp +++ b/src/drt/src/dr/FlexGridGraph.cpp @@ -108,7 +108,7 @@ void FlexGridGraph::initGrids(const frLayerCoordTrackPatternMap& xMap, srcs_.clear(); dsts_.clear(); - prevDirs_.resize(capacity * 3, false); + prevDirs_.resize(capacity * 4, false); srcs_.resize(capacity, false); dsts_.resize(capacity, false); guides_.clear(); diff --git a/src/drt/src/dr/FlexGridGraph.h b/src/drt/src/dr/FlexGridGraph.h index ef4275e380d..4948fc81114 100644 --- a/src/drt/src/dr/FlexGridGraph.h +++ b/src/drt/src/dr/FlexGridGraph.h @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -45,6 +46,11 @@ #include "global.h" namespace drt { +enum class ExpandDir +{ + FORWARD, + BACKWARD, +}; using frLayerCoordTrackPatternMap = boost::container:: flat_map>; @@ -112,6 +118,26 @@ class FlexGridGraph return nodes_[getIdx(x, y, z)].hasGridCostUp; } + void setPathCost(frMIdx x, frMIdx y, frMIdx z, frCost in) + { + path_costs_[getIdx(x, y, z)] = in; + } + void setPathCost(const FlexMazeIdx& mIdx, frCost in) + { + path_costs_[getIdx(mIdx.x(), mIdx.y(), mIdx.z())] = in; + } + frCost getPathCost(frMIdx x, frMIdx y, frMIdx z) + { + return path_costs_[getIdx(x, y, z)]; + } + bool isClosed(frMIdx x, frMIdx y, frMIdx z, ExpandDir expandDir) const + { + auto baseIdx = 4 * getIdx(x, y, z); + return getPrevAstarNodeDir({x, y, z}) != frDirEnum::UNKNOWN + && (prevDirs_[baseIdx + 3] ? expandDir == ExpandDir::FORWARD + : expandDir == ExpandDir::BACKWARD); + } + void getBBox(Rect& in) const { if (!xCoords_.empty() && !yCoords_.empty()) { @@ -946,6 +972,11 @@ class FlexGridGraph void resetPrevNodeDir(); void resetSrc(); void resetDst(); + void traceBackPath(std::vector& connComps, + std::vector& path, + FlexMazeIdx& ccMazeIdx1, + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir); bool search(std::vector& connComps, drPin* nextPin, std::vector& path, @@ -989,8 +1020,10 @@ class FlexGridGraph yCoords_.shrink_to_fit(); yCoords_.clear(); yCoords_.shrink_to_fit(); - wavefront_.cleanup(); - wavefront_.fit(); + wavefrontForward_.cleanup(); + wavefrontForward_.fit(); + wavefrontBackward_.cleanup(); + wavefrontBackward_.fit(); } void printNode(frMIdx x, frMIdx y, frMIdx z) @@ -1095,6 +1128,7 @@ class FlexGridGraph std::vector srcs_; std::vector dsts_; std::vector guides_; + std::unordered_map path_costs_; frVector xCoords_; frVector yCoords_; frVector zCoords_; @@ -1105,7 +1139,15 @@ class FlexGridGraph frUInt4 ggMarkerCost_ = 0; frUInt4 ggFixedShapeCost_ = 0; // temporary variables - FlexWavefront wavefront_; + FlexWavefront wavefrontForward_; + FlexWavefront wavefrontBackward_; + struct MeetingPoint + { + FlexWavefrontGrid wavefront; + ExpandDir wavefrontDir; + frCost mazeCost; + }; + std::optional meetingPoint_; const std::vector>* halfViaEncArea_ = nullptr; // std::pair // ndr related @@ -1122,32 +1164,39 @@ class FlexGridGraph void printExpansion(const FlexWavefrontGrid& currGrid, const std::string& keyword); // unsafe access, no idx check - void setPrevAstarNodeDir(frMIdx x, frMIdx y, frMIdx z, frDirEnum dir) + void setPrevAstarNodeDir(frMIdx x, + frMIdx y, + frMIdx z, + ExpandDir expandDir, + frDirEnum dir) { - auto baseIdx = 3 * getIdx(x, y, z); + auto baseIdx = 4 * getIdx(x, y, z); prevDirs_[baseIdx] = ((uint16_t) dir >> 2) & 1; prevDirs_[baseIdx + 1] = ((uint16_t) dir >> 1) & 1; prevDirs_[baseIdx + 2] = ((uint16_t) dir) & 1; + prevDirs_[baseIdx + 3] = expandDir == ExpandDir::FORWARD; } // unsafe access, no check frDirEnum getPrevAstarNodeDir(const FlexMazeIdx& idx) const { - auto baseIdx = 3 * getIdx(idx.x(), idx.y(), idx.z()); + auto baseIdx = 4 * getIdx(idx.x(), idx.y(), idx.z()); return (frDirEnum) (((uint16_t) (prevDirs_[baseIdx]) << 2) + ((uint16_t) (prevDirs_[baseIdx + 1]) << 1) + ((uint16_t) (prevDirs_[baseIdx + 2]) << 0)); } // unsafe access, no check - bool isSrc(frMIdx x, frMIdx y, frMIdx z) const + bool isSrc(frMIdx x, frMIdx y, frMIdx z, ExpandDir expandDir) const { - return srcs_[getIdx(x, y, z)]; + auto& srcs = expandDir == ExpandDir::FORWARD ? srcs_ : dsts_; + return srcs[getIdx(x, y, z)]; } // unsafe access, no check - bool isDst(frMIdx x, frMIdx y, frMIdx z) const + bool isDst(frMIdx x, frMIdx y, frMIdx z, ExpandDir expandDir) const { - return dsts_[getIdx(x, y, z)]; + auto& dsts = expandDir == ExpandDir::FORWARD ? dsts_ : srcs_; + return dsts[getIdx(x, y, z)]; } bool isDst(frMIdx x, frMIdx y, frMIdx z, frDirEnum dir) const { @@ -1307,13 +1356,23 @@ class FlexGridGraph std::vector& path, std::vector& root, FlexMazeIdx& ccMazeIdx1, - FlexMazeIdx& ccMazeIdx2) const; + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir) const; + void traceBackPath(const FlexMazeIdx& currGrid, + std::vector& path, + std::vector& root, + FlexMazeIdx& ccMazeIdx1, + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir) const; void expandWavefront(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, + ExpandDir expandDir, bool route_with_jumpers); - bool isExpandable(const FlexWavefrontGrid& currGrid, frDirEnum dir) const; + bool isExpandable(const FlexWavefrontGrid& currGrid, + frDirEnum dir, + ExpandDir expandDir) const; FlexMazeIdx getTailIdx(const FlexMazeIdx& currIdx, const FlexWavefrontGrid& currGrid) const; void expand(FlexWavefrontGrid& currGrid, @@ -1321,6 +1380,7 @@ class FlexGridGraph const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, + ExpandDir expandDir, bool route_with_jumpers); bool hasAlignedUpDefTrack( frLayerNum layerNum, @@ -1332,6 +1392,35 @@ class FlexGridGraph bool hasOutOfDieViol(frMIdx x, frMIdx y, frMIdx z); bool isWorkerBorder(frMIdx v, bool isVert); + template + void serialize(Archive& ar, const unsigned int version) + { + // The wavefront should always be empty here so we don't need to + // serialize it. + if (!wavefrontForward_.empty() || !wavefrontBackward_.empty()) { + throw std::logic_error("don't serialize non-empty wavefront"); + } + if (is_loading(ar)) { + tech_ = ar.getDesign()->getTech(); + } + (ar) & drWorker_; + (ar) & nodes_; + (ar) & prevDirs_; + (ar) & srcs_; + (ar) & dsts_; + (ar) & guides_; + (ar) & xCoords_; + (ar) & yCoords_; + (ar) & zCoords_; + (ar) & zHeights_; + (ar) & layerRouteDirections_; + (ar) & dieBox_; + (ar) & ggDRCCost_; + (ar) & ggMarkerCost_; + (ar) & halfViaEncArea_; + (ar) & ap_locs_; + } + friend class boost::serialization::access; friend class FlexDRWorker; }; diff --git a/src/drt/src/dr/FlexGridGraph_maze.cpp b/src/drt/src/dr/FlexGridGraph_maze.cpp index b3298cc9ac4..80af19f4bd5 100644 --- a/src/drt/src/dr/FlexGridGraph_maze.cpp +++ b/src/drt/src/dr/FlexGridGraph_maze.cpp @@ -26,6 +26,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include + #include "dr/FlexDR.h" #include "dr/FlexDR_graphics.h" #include "dr/FlexGridGraph.h" @@ -81,6 +83,7 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, + ExpandDir expandDir, bool route_with_jumpers) { frCost nextEstCost, nextPathCost; @@ -98,6 +101,7 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, dstMazeIdx2, dir); nextPathCost = getNextPathCost(currGrid, dir, route_with_jumpers); + Point currPt; getPoint(currPt, gridX, gridY); frCoord currDist = Point::manhattanDistance(currPt, centerPt); @@ -154,7 +158,8 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, currDist, nextPathCost, nextPathCost + nextEstCost, - currGrid.getBackTraceBuffer()); + currGrid.getBackTraceBuffer(), + currGrid.getBackTraceCosts()); if (dir == frDirEnum::U || dir == frDirEnum::D) { nextWavefrontGrid.resetLength(); if (dir == frDirEnum::U) { @@ -170,20 +175,25 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, nextWavefrontGrid.setSrcTaperBox(currGrid.getSrcTaperBox()); } // update wavefront buffer - auto tailDir = nextWavefrontGrid.shiftAddBuffer(dir); + auto [tailDir, tailCost] + = nextWavefrontGrid.shiftAddBuffer(dir, currGrid.getPathCost()); // non-buffer enablement is faster for ripup all // commit grid prev direction if needed auto tailIdx = getTailIdx(nextIdx, nextWavefrontGrid); + auto& wavefront = (expandDir == ExpandDir::FORWARD) ? wavefrontForward_ + : wavefrontBackward_; if (tailDir != frDirEnum::UNKNOWN) { if (getPrevAstarNodeDir(tailIdx) == frDirEnum::UNKNOWN || getPrevAstarNodeDir(tailIdx) == tailDir) { - setPrevAstarNodeDir(tailIdx.x(), tailIdx.y(), tailIdx.z(), tailDir); + setPrevAstarNodeDir( + tailIdx.x(), tailIdx.y(), tailIdx.z(), expandDir, tailDir); + setPathCost(tailIdx.x(), tailIdx.y(), tailIdx.z(), tailCost); if (debug_) { nextWavefrontGrid.setId(curr_id_++); nextWavefrontGrid.setParentId(currGrid.getId()); printExpansion(nextWavefrontGrid, "Pushing"); } - wavefront_.push(nextWavefrontGrid); + wavefront.push(nextWavefrontGrid); } } else { // add to wavefront @@ -192,7 +202,7 @@ void FlexGridGraph::expand(FlexWavefrontGrid& currGrid, nextWavefrontGrid.setParentId(currGrid.getId()); printExpansion(nextWavefrontGrid, "Pushing"); } - wavefront_.push(nextWavefrontGrid); + wavefront.push(nextWavefrontGrid); } if (drWorker_->getDRIter() >= debugMazeIter) { std::cout << "Creating " << nextWavefrontGrid.x() << " " @@ -208,15 +218,17 @@ void FlexGridGraph::expandWavefront(FlexWavefrontGrid& currGrid, const FlexMazeIdx& dstMazeIdx1, const FlexMazeIdx& dstMazeIdx2, const Point& centerPt, + ExpandDir expandDir, bool route_with_jumpers) { for (const auto dir : frDirEnumAll) { - if (isExpandable(currGrid, dir)) { + if (isExpandable(currGrid, dir, expandDir)) { expand(currGrid, dir, dstMazeIdx1, dstMazeIdx2, centerPt, + expandDir, route_with_jumpers); } } @@ -625,15 +637,16 @@ FlexMazeIdx FlexGridGraph::getTailIdx(const FlexMazeIdx& currIdx, } bool FlexGridGraph::isExpandable(const FlexWavefrontGrid& currGrid, - frDirEnum dir) const + frDirEnum dir, + ExpandDir expandDir) const { frMIdx gridX = currGrid.x(); frMIdx gridY = currGrid.y(); frMIdx gridZ = currGrid.z(); bool hg = hasEdge(gridX, gridY, gridZ, dir); reverse(gridX, gridY, gridZ, dir); - if (!hg || isSrc(gridX, gridY, gridZ) - || (getPrevAstarNodeDir({gridX, gridY, gridZ}) != frDirEnum::UNKNOWN) + if (!hg || isSrc(gridX, gridY, gridZ, expandDir) + || isClosed(gridX, gridY, gridZ, expandDir) || // comment out for non-buffer enablement currGrid.getLastDir() == dir) { return false; @@ -643,7 +656,7 @@ bool FlexGridGraph::isExpandable(const FlexWavefrontGrid& currGrid, = (frCoord) getTech()->getLayer(getLayerNum(currGrid.z()))->getWidth() / 2; if (ndr_->getWidth(currGrid.z()) > 2 * halfWidth - && !isSrc(currGrid.x(), currGrid.y(), currGrid.z())) { + && !isSrc(currGrid.x(), currGrid.y(), currGrid.z(), expandDir)) { halfWidth = ndr_->getWidth(currGrid.z()) / 2; // if the expansion goes parallel to a die border and the wire goes out of // the die box, forbid expansion @@ -668,7 +681,8 @@ void FlexGridGraph::traceBackPath(const FlexWavefrontGrid& currGrid, std::vector& path, std::vector& root, FlexMazeIdx& ccMazeIdx1, - FlexMazeIdx& ccMazeIdx2) const + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir) const { frDirEnum prevDir = frDirEnum::UNKNOWN, currDir = frDirEnum::UNKNOWN; int currX = currGrid.x(), currY = currGrid.y(), currZ = currGrid.z(); @@ -676,7 +690,7 @@ void FlexGridGraph::traceBackPath(const FlexWavefrontGrid& currGrid, auto backTraceBuffer = currGrid.getBackTraceBuffer(); for (int i = 0; i < WAVEFRONTBUFFERSIZE; ++i) { // current grid is src - if (isSrc(currX, currY, currZ)) { + if (isSrc(currX, currY, currZ, expandDir)) { break; } // get last direction @@ -695,7 +709,46 @@ void FlexGridGraph::traceBackPath(const FlexWavefrontGrid& currGrid, prevDir = currDir; } // trace back according to grid prev dir - while (isSrc(currX, currY, currZ) == false) { + while (!isSrc(currX, currY, currZ, expandDir)) { + // get last direction + currDir = getPrevAstarNodeDir({currX, currY, currZ}); + root.emplace_back(currX, currY, currZ); + if (currDir == frDirEnum::UNKNOWN) { + std::cout << "Warning: unexpected direction in tracBackPath\n"; + break; + } + if (currDir != prevDir) { + path.emplace_back(currX, currY, currZ); + } + getPrevGrid(currX, currY, currZ, currDir); + prevDir = currDir; + } + // add final path to src, only add when path exists; no path exists (src = + // dst) + if (!path.empty()) { + path.emplace_back(currX, currY, currZ); + } + for (auto& mi : path) { + ccMazeIdx1.set(std::min(ccMazeIdx1.x(), mi.x()), + std::min(ccMazeIdx1.y(), mi.y()), + std::min(ccMazeIdx1.z(), mi.z())); + ccMazeIdx2.set(std::max(ccMazeIdx2.x(), mi.x()), + std::max(ccMazeIdx2.y(), mi.y()), + std::max(ccMazeIdx2.z(), mi.z())); + } +} + +void FlexGridGraph::traceBackPath(const FlexMazeIdx& currGrid, + std::vector& path, + std::vector& root, + FlexMazeIdx& ccMazeIdx1, + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir) const +{ + frDirEnum prevDir = frDirEnum::UNKNOWN, currDir = frDirEnum::UNKNOWN; + int currX = currGrid.x(), currY = currGrid.y(), currZ = currGrid.z(); + // trace back according to grid prev dir + while (!isSrc(currX, currY, currZ, expandDir)) { // get last direction currDir = getPrevAstarNodeDir({currX, currY, currZ}); root.emplace_back(currX, currY, currZ); @@ -724,12 +777,37 @@ void FlexGridGraph::traceBackPath(const FlexWavefrontGrid& currGrid, } } +void FlexGridGraph::traceBackPath(std::vector& connComps, + std::vector& path, + FlexMazeIdx& ccMazeIdx1, + FlexMazeIdx& ccMazeIdx2, + ExpandDir expandDir) +{ + if (meetingPoint_->wavefrontDir == expandDir) { + traceBackPath(meetingPoint_->wavefront, + path, + connComps, + ccMazeIdx1, + ccMazeIdx2, + meetingPoint_->wavefrontDir); + } else { + traceBackPath({meetingPoint_->wavefront.x(), + meetingPoint_->wavefront.y(), + meetingPoint_->wavefront.z()}, + path, + connComps, + ccMazeIdx1, + ccMazeIdx2, + expandDir); + } +} + bool FlexGridGraph::search(std::vector& connComps, drPin* nextPin, std::vector& path, FlexMazeIdx& ccMazeIdx1, FlexMazeIdx& ccMazeIdx2, - const Point& centerPt, + const Point& centerPtForward, std::map& mazeIdx2TaperBox, bool route_with_jumpers) { @@ -749,28 +827,29 @@ bool FlexGridGraph::search(std::vector& connComps, // prep nextPinBox frMIdx xDim, yDim, zDim; getDim(xDim, yDim, zDim); - FlexMazeIdx dstMazeIdx1(xDim - 1, yDim - 1, zDim - 1); - FlexMazeIdx dstMazeIdx2(0, 0, 0); + FlexMazeIdx dstMazeForwardIdx1(xDim - 1, yDim - 1, zDim - 1); + FlexMazeIdx dstMazeForwardIdx2(0, 0, 0); for (auto& ap : nextPin->getAccessPatterns()) { FlexMazeIdx mi = ap->getMazeIdx(); - dstMazeIdx1.set(std::min(dstMazeIdx1.x(), mi.x()), - std::min(dstMazeIdx1.y(), mi.y()), - std::min(dstMazeIdx1.z(), mi.z())); - dstMazeIdx2.set(std::max(dstMazeIdx2.x(), mi.x()), - std::max(dstMazeIdx2.y(), mi.y()), - std::max(dstMazeIdx2.z(), mi.z())); + dstMazeForwardIdx1.set(std::min(dstMazeForwardIdx1.x(), mi.x()), + std::min(dstMazeForwardIdx1.y(), mi.y()), + std::min(dstMazeForwardIdx1.z(), mi.z())); + dstMazeForwardIdx2.set(std::max(dstMazeForwardIdx2.x(), mi.x()), + std::max(dstMazeForwardIdx2.y(), mi.y()), + std::max(dstMazeForwardIdx2.z(), mi.z())); } - wavefront_.cleanup(); - // init wavefront + wavefrontForward_.cleanup(); + wavefrontBackward_.cleanup(); + // init wavefront for forward search Point currPt; for (auto& idx : connComps) { - if (isDst(idx.x(), idx.y(), idx.z())) { + if (isDst(idx.x(), idx.y(), idx.z(), ExpandDir::FORWARD)) { path.emplace_back(idx.x(), idx.y(), idx.z()); return true; } getPoint(currPt, idx.x(), idx.y()); - frCoord currDist = Point::manhattanDistance(currPt, centerPt); + frCoord currDist = Point::manhattanDistance(currPt, centerPtForward); FlexWavefrontGrid currGrid( idx.x(), idx.y(), @@ -781,7 +860,8 @@ bool FlexGridGraph::search(std::vector& connComps, std::numeric_limits::max(), currDist, 0, - getEstCost(idx, dstMazeIdx1, dstMazeIdx2, frDirEnum::UNKNOWN)); + getEstCost( + idx, dstMazeForwardIdx1, dstMazeForwardIdx2, frDirEnum::UNKNOWN)); if (ndr_ && router_cfg_->AUTO_TAPER_NDR_NETS) { auto it = mazeIdx2TaperBox.find(idx); if (it != mazeIdx2TaperBox.end()) { @@ -792,36 +872,137 @@ bool FlexGridGraph::search(std::vector& connComps, currGrid.setId(curr_id_++); printExpansion(currGrid, "Pushing"); } - wavefront_.push(currGrid); + wavefrontForward_.push(currGrid); } - while (!wavefront_.empty()) { - auto currGrid = wavefront_.top(); + FlexMazeIdx dstMazeBackwardIdx; + dstMazeBackwardIdx = {wavefrontForward_.top().x(), + wavefrontForward_.top().y(), + wavefrontForward_.top().z()}; + Point centerPtBackward; + getPoint(centerPtBackward, dstMazeBackwardIdx.x(), dstMazeBackwardIdx.y()); + // init wavefront for backward search + for (auto& ap : nextPin->getAccessPatterns()) { + auto idx = ap->getMazeIdx(); + getPoint(currPt, idx.x(), idx.y()); + frCoord currDist = Point::manhattanDistance(currPt, centerPtBackward); + FlexWavefrontGrid currGrid( + idx.x(), + idx.y(), + idx.z(), + std::numeric_limits::max(), + std::numeric_limits::max(), + true, + std::numeric_limits::max(), + currDist, + 0, + getEstCost( + idx, dstMazeBackwardIdx, dstMazeBackwardIdx, frDirEnum::UNKNOWN)); + if (ndr_ && router_cfg_->AUTO_TAPER_NDR_NETS) { + auto it = mazeIdx2TaperBox.find(idx); + if (it != mazeIdx2TaperBox.end()) { + currGrid.setSrcTaperBox(it->second); + } + } if (debug_) { - printExpansion(currGrid, "Popping"); + currGrid.setId(curr_id_++); + printExpansion(currGrid, "Pushing"); } - wavefront_.pop(); - if (getPrevAstarNodeDir({currGrid.x(), currGrid.y(), currGrid.z()}) - != frDirEnum::UNKNOWN) { - continue; + wavefrontBackward_.push(currGrid); + } + + meetingPoint_ = {}; + ExpandDir expandDir = ExpandDir::BACKWARD; + while (!wavefrontForward_.empty() || !wavefrontBackward_.empty()) { + if (meetingPoint_) { + frCost potentialCost = 0; + if (!wavefrontForward_.empty()) { + potentialCost += wavefrontForward_.top().getPathCost(); + } + if (!wavefrontBackward_.empty()) { + potentialCost += wavefrontBackward_.top().getPathCost(); + } + if (meetingPoint_->wavefront.getPathCost() + meetingPoint_->mazeCost + < potentialCost) { + break; + } } - if (graphics_) { - graphics_->searchNode(this, currGrid); + ExpandDir oppositeExpandDir = expandDir; + FlexMazeIdx dstMazeIdx1, dstMazeIdx2; + Point centerPt; + FlexWavefront* wavefront; + if (expandDir == ExpandDir::FORWARD) { + expandDir = ExpandDir::BACKWARD; + dstMazeIdx1 = dstMazeIdx2 = dstMazeBackwardIdx; + centerPt = centerPtBackward; + wavefront = &wavefrontBackward_; + } else { + expandDir = ExpandDir::FORWARD; + dstMazeIdx1 = dstMazeForwardIdx1; + dstMazeIdx2 = dstMazeForwardIdx2; + centerPt = centerPtForward; + wavefront = &wavefrontForward_; } - if (drWorker_->getDRIter() >= debugMazeIter) { - std::cout << "Expanding " << currGrid.x() << " " << currGrid.y() << " " - << currGrid.z() << " coords: " << xCoords_[currGrid.x()] << " " - << yCoords_[currGrid.y()] << " cost " << currGrid.getCost() - << " g " << currGrid.getPathCost() << "\n"; + if (wavefront->empty()) { + continue; } - if (isDst(currGrid.x(), currGrid.y(), currGrid.z())) { - traceBackPath(currGrid, path, connComps, ccMazeIdx1, ccMazeIdx2); - return true; + auto currGrid = wavefront->top(); + if (debug_) { + printExpansion(currGrid, "Popping"); + } + wavefront->pop(); + if (isClosed(currGrid.x(), currGrid.y(), currGrid.z(), expandDir)) { + } else if (isClosed(currGrid.x(), + currGrid.y(), + currGrid.z(), + oppositeExpandDir)) { + frCost backwardCost + = getPathCost(currGrid.x(), currGrid.y(), currGrid.z()); + if (!meetingPoint_ + || meetingPoint_->wavefront.getPathCost() + meetingPoint_->mazeCost + > currGrid.getPathCost() + backwardCost) { + meetingPoint_ = MeetingPoint{currGrid, expandDir, backwardCost}; + } + } else { + if (graphics_) { + graphics_->searchNode(this, currGrid); + } + if (drWorker_->getDRIter() >= debugMazeIter) { + std::cout << "Expanding " << currGrid.x() << " " << currGrid.y() << " " + << currGrid.z() << " coords: " << xCoords_[currGrid.x()] + << " " << yCoords_[currGrid.y()] << " cost " + << currGrid.getCost() << " g " << currGrid.getPathCost() + << "\n"; + } + if (isDst(currGrid.x(), currGrid.y(), currGrid.z(), expandDir)) { + traceBackPath( + currGrid, path, connComps, ccMazeIdx1, ccMazeIdx2, expandDir); + if (expandDir == ExpandDir::BACKWARD) { + std::reverse(path.begin(), path.end()); + } + return true; + } + // expand and update wavefront + expandWavefront(currGrid, + dstMazeIdx1, + dstMazeIdx2, + centerPt, + expandDir, + route_with_jumpers); } - // expand and update wavefront - expandWavefront( - currGrid, dstMazeIdx1, dstMazeIdx2, centerPt, route_with_jumpers); } - return false; + + if (!meetingPoint_) { + return false; + } + + // traceback forward and backward paths + traceBackPath(connComps, path, ccMazeIdx1, ccMazeIdx2, ExpandDir::BACKWARD); + if (!path.empty()) { + std::reverse(path.begin(), path.end()); + path.pop_back(); + } + traceBackPath(connComps, path, ccMazeIdx1, ccMazeIdx2, ExpandDir::FORWARD); + return true; } } // namespace drt diff --git a/src/drt/src/dr/FlexWavefront.h b/src/drt/src/dr/FlexWavefront.h index 6141b6650f5..475308f638f 100644 --- a/src/drt/src/dr/FlexWavefront.h +++ b/src/drt/src/dr/FlexWavefront.h @@ -39,17 +39,19 @@ namespace drt { class FlexWavefrontGrid { public: - FlexWavefrontGrid(int xIn, - int yIn, - int zIn, - frCoord vLengthXIn, - frCoord vLengthYIn, - bool prevViaUpIn, - frCoord tLengthIn, - frCoord distIn, - frCost pathCostIn, - frCost costIn, - const std::bitset& backTraceBufferIn = {}) + FlexWavefrontGrid( + int xIn, + int yIn, + int zIn, + frCoord vLengthXIn, + frCoord vLengthYIn, + bool prevViaUpIn, + frCoord tLengthIn, + frCoord distIn, + frCost pathCostIn, + frCost costIn, + const std::bitset& backTraceBufferIn = {}, + const std::array& backTraceCostsIn = {}) : xIdx_(xIn), yIdx_(yIn), zIdx_(zIn), @@ -60,7 +62,8 @@ class FlexWavefrontGrid dist_(distIn), prevViaUp_(prevViaUpIn), tLength_(tLengthIn), - backTraceBuffer_(backTraceBufferIn) + backTraceBuffer_(backTraceBufferIn), + backTraceCosts_(backTraceCostsIn) { } bool operator<(const FlexWavefrontGrid& b) const @@ -87,6 +90,10 @@ class FlexWavefrontGrid { return backTraceBuffer_; } + const std::array& getBackTraceCosts() const + { + return backTraceCosts_; + } frCoord getLength() const { return vLengthX_; } void getVLength(frCoord& vLengthXIn, frCoord& vLengthYIn) const { @@ -115,14 +122,19 @@ class FlexWavefrontGrid std::bitset mask = WAVEFRONTBUFFERHIGHMASK; return (mask & backTraceBuffer_).any(); } - frDirEnum shiftAddBuffer(const frDirEnum& dir) + std::pair shiftAddBuffer(const frDirEnum& dir, frCost cost) { auto retBS = static_cast( (backTraceBuffer_ >> (WAVEFRONTBITSIZE - DIRBITSIZE)).to_ulong()); backTraceBuffer_ <<= DIRBITSIZE; std::bitset newBS = (unsigned) dir; backTraceBuffer_ |= newBS; - return retBS; + for (int i = WAVEFRONTBUFFERSIZE - 1; i > 0; i--) { + backTraceCosts_[i] = backTraceCosts_[i - 1]; + } + frCost prevCost = backTraceCosts_[0]; + backTraceCosts_[0] = cost; + return {retBS, prevCost}; } void setSrcTaperBox(const frBox3D* b) { srcTaperBox = b; } const frBox3D* getSrcTaperBox() const { return srcTaperBox; } @@ -139,6 +151,7 @@ class FlexWavefrontGrid bool prevViaUp_; frCoord tLength_; // length since last turn std::bitset backTraceBuffer_; + std::array backTraceCosts_; const frBox3D* srcTaperBox = nullptr; frUInt4 id_{0}; frUInt4 parent_id_{0}; From 84e0d57ff33c86e87ab97d967b40d0e59b19c478 Mon Sep 17 00:00:00 2001 From: Krzysztof Bieganski Date: Fri, 3 Jan 2025 09:59:54 +0100 Subject: [PATCH 2/3] drt: Use Boost's hashmap for A* Signed-off-by: Krzysztof Bieganski --- etc/DependencyInstaller.sh | 4 ++-- src/drt/src/dr/FlexGridGraph.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/etc/DependencyInstaller.sh b/etc/DependencyInstaller.sh index 1a102428382..d9b472856c2 100755 --- a/etc/DependencyInstaller.sh +++ b/etc/DependencyInstaller.sh @@ -66,9 +66,9 @@ _installCommonDev() { pcreChecksum="37d2f77cfd411a3ddf1c64e1d72e43f7" swigVersion=4.1.0 swigChecksum="794433378154eb61270a3ac127d9c5f3" - boostVersionBig=1.80 + boostVersionBig=1.82 boostVersionSmall=${boostVersionBig}.0 - boostChecksum="077f074743ea7b0cb49c6ed43953ae95" + boostChecksum="f7050f554a65f6a42ece221eaeec1660" eigenVersion=3.4 cuddVersion=3.0.0 lemonVersion=1.3.1 diff --git a/src/drt/src/dr/FlexGridGraph.h b/src/drt/src/dr/FlexGridGraph.h index 4948fc81114..1942a1fc00a 100644 --- a/src/drt/src/dr/FlexGridGraph.h +++ b/src/drt/src/dr/FlexGridGraph.h @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include @@ -1128,7 +1128,7 @@ class FlexGridGraph std::vector srcs_; std::vector dsts_; std::vector guides_; - std::unordered_map path_costs_; + boost::unordered_flat_map path_costs_; frVector xCoords_; frVector yCoords_; frVector zCoords_; From bf4cb1ea5b89b53f21b9b5569fca7cce80539e55 Mon Sep 17 00:00:00 2001 From: Krzysztof Bieganski Date: Fri, 10 Jan 2025 17:18:14 +0100 Subject: [PATCH 3/3] drt: Adjust tests Signed-off-by: Krzysztof Bieganski --- src/drt/test/ispd18_sample.defok | 28 +- src/drt/test/ndr_vias1.defok | 463 +++++++++++++---------- src/drt/test/ndr_vias2.defok | 587 ++++++++++++++++------------- src/drt/test/obstruction.defok | 13 +- src/drt/test/single_step.defok | 156 ++++++++ src/drt/test/single_step.py | 2 +- src/drt/test/single_step.tcl | 2 +- src/drt/test/ta_ap_aligned.defok | 18 +- src/drt/test/ta_pin_aligned.defok | 19 +- src/drt/test/top_level_term.defok | 25 +- src/drt/test/top_level_term2.defok | 48 ++- 11 files changed, 850 insertions(+), 511 deletions(-) create mode 100644 src/drt/test/single_step.defok diff --git a/src/drt/test/ispd18_sample.defok b/src/drt/test/ispd18_sample.defok index 35cda4e886b..a0e681b2adc 100644 --- a/src/drt/test/ispd18_sample.defok +++ b/src/drt/test/ispd18_sample.defok @@ -55,12 +55,15 @@ COMPONENTS 22 ; END COMPONENTS NETS 11 ; - net1230 ( inst7234 Y ) ( inst5195 C0 ) + USE SIGNAL - + ROUTED Metal2 ( 92200 73530 ) ( * 78850 ) - NEW Metal3 ( 92200 78850 ) ( 95800 * ) + + ROUTED Metal2 ( 92200 73530 ) ( * 75810 ) + NEW Metal1 ( 92200 75810 ) ( 94200 * ) + NEW Metal1 ( 94200 75810 ) ( 94600 * ) + NEW Metal2 ( 94600 75810 ) ( * 78850 ) + NEW Metal2 ( 94600 78850 ) ( 95800 * ) NEW Metal2 ( 95800 78850 ) ( * 83790 ) NEW Metal1 ( 92200 73530 ) VIA12_1C_V - NEW Metal2 ( 92200 78850 ) VIA23_1C - NEW Metal2 ( 95800 78850 ) VIA23_1C + NEW Metal1 ( 92200 75810 ) VIA12_1C + NEW Metal1 ( 94600 75810 ) VIA12_1C NEW Metal1 ( 95800 83790 ) VIA12_1C_V ; - net1231 ( inst5821 B ) ( inst5275 Y ) + USE SIGNAL + ROUTED Metal3 ( 85800 77710 ) ( 91000 * ) @@ -97,7 +100,8 @@ NETS 11 ; NEW Metal2 ( 95400 73530 ) RECT ( -70 -442 70 0 ) ; - net1235 ( inst4183 A ) ( inst4132 Y ) + USE SIGNAL + ROUTED Metal2 ( 103000 84930 ) ( * 87590 ) - NEW Metal1 ( 98600 84930 ) ( 103000 * ) + NEW Metal1 ( 100600 84930 ) ( 103000 * ) + NEW Metal1 ( 98600 84930 ) ( 100600 * ) NEW Metal2 ( 98600 76950 ) ( * 84930 ) NEW Metal1 ( 103000 87590 ) VIA12_1C NEW Metal1 ( 103000 84930 ) VIA12_1C @@ -136,12 +140,16 @@ NETS 11 ; NEW Metal1 ( 91800 86830 ) VIA12_1C_V NEW Metal2 ( 102600 80370 ) RECT ( -70 -442 70 0 ) ; - net1240 ( inst3502 A ) ( inst2015 Y ) + USE SIGNAL - + ROUTED Metal2 ( 91000 78470 ) ( * 80750 ) - NEW Metal3 ( 91000 78470 ) ( 96200 * ) - NEW Metal2 ( 96200 76950 ) ( * 78470 ) + + ROUTED Metal2 ( 91000 80750 ) ( 91400 * ) + NEW Metal2 ( 91400 78090 ) ( * 80750 ) + NEW Metal1 ( 91400 78090 ) ( 93400 * ) + NEW Metal1 ( 93400 78090 ) ( 95400 * ) + NEW Metal2 ( 95400 78090 ) ( 95800 * ) + NEW Metal2 ( 95800 76950 ) ( * 78090 ) + NEW Metal2 ( 95800 76950 ) ( 96200 * ) NEW Metal1 ( 91000 80750 ) VIA12_1C - NEW Metal2 ( 91000 78470 ) VIA23_1C - NEW Metal2 ( 96200 78470 ) VIA23_1C + NEW Metal1 ( 91400 78090 ) VIA12_1C + NEW Metal1 ( 95400 78090 ) VIA12_1C NEW Metal1 ( 96200 76950 ) VIA12_1C_V ; END NETS END DESIGN diff --git a/src/drt/test/ndr_vias1.defok b/src/drt/test/ndr_vias1.defok index bfa849fc59a..38ae27660bb 100644 --- a/src/drt/test/ndr_vias1.defok +++ b/src/drt/test/ndr_vias1.defok @@ -214,64 +214,96 @@ PINS 1 ; END PINS NETS 8 ; - clk ( PIN clk ) ( clkbuf_0_clk A ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met2 ( 89470 340 0 ) ( * 148410 210 ) - NEW met1 ( 89470 148410 210 ) ( 110400 * 210 ) - NEW met1 ( 110400 148410 210 ) ( * 151130 210 ) - NEW met1 ( 110400 151130 210 ) ( 149500 * 210 ) + + ROUTED met1 ( 96600 148410 210 ) ( * 151130 210 ) + NEW met2 ( 89470 150790 210 ) ( * 151130 210 ) + NEW met1 ( 89470 151130 210 ) ( 96600 * 210 ) + NEW met2 ( 89470 340 0 ) ( * 17510 210 ) + NEW met2 ( 89470 106930 210 ) ( * 150790 210 ) + NEW met2 ( 89470 17510 210 ) ( * 58820 210 ) + NEW met2 ( 89470 58820 210 ) ( * 106930 210 ) + NEW met1 ( 96600 148410 210 ) ( 110400 * 210 ) + NEW met1 ( 110400 148410 210 ) ( * 149770 210 ) + NEW met1 ( 110400 149770 210 ) ( 111550 * 210 ) + NEW met1 ( 111550 149770 210 ) ( * 151130 210 ) + NEW met1 ( 111550 151130 210 ) ( 149500 * 210 ) NEW met1 TAPER ( 149500 151130 ) ( 151110 * ) - NEW met1 ( 89470 148410 ) M1M2_PR_R + NEW met1 ( 89470 151130 ) M1M2_PR_R NEW li1 TAPER ( 151110 151130 ) L1M1_PR_R ; - clknet_0_clk ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) ( clkbuf_2_0__f_clk A ) ( clkbuf_0_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met1 TAPER ( 167900 169830 ) ( 169510 * ) - NEW met1 TAPER ( 167900 118490 ) ( 169510 * ) - NEW met2 ( 152030 169830 210 ) ( * 172890 210 ) - NEW met1 TAPER ( 130870 172890 ) ( 132710 * ) - NEW met1 ( 132710 172890 210 ) ( 152030 * 210 ) - NEW met1 ( 152030 169830 210 ) ( 167900 * 210 ) - NEW met1 ( 152950 118150 210 ) ( * 118490 210 ) + + ROUTED met1 ( 164910 169830 210 ) ( 167900 * 210 ) + NEW met1 TAPER ( 167900 169830 ) ( 169510 * ) + NEW met1 ( 164910 118830 210 ) ( 167900 * 210 ) + NEW met1 TAPER ( 167900 118830 ) ( 169510 * ) + NEW met1 ( 158700 169830 210 ) ( 164910 * 210 ) + NEW met1 ( 158700 169830 210 ) ( * 171530 210 ) + NEW met1 ( 154330 171530 210 ) ( 158700 * 210 ) + NEW met1 ( 154330 171530 210 ) ( * 172890 210 ) + NEW met2 ( 152950 166090 210 ) ( * 172890 210 ) + NEW met2 ( 152950 158700 210 ) ( * 166090 210 ) + NEW met1 ( 152950 118150 210 ) ( * 118830 210 ) NEW met1 ( 118910 118150 210 ) ( 152950 * 210 ) NEW met1 ( 118910 118150 210 ) ( * 118490 210 ) NEW met1 TAPER ( 116610 118490 ) ( 118220 * ) NEW met1 ( 118220 118490 210 ) ( 118910 * 210 ) - NEW met2 ( 152030 118150 210 ) ( * 150450 210 ) - NEW met2 ( 152950 151470 210 ) ( * 169830 210 ) - NEW met1 ( 152950 118490 210 ) ( 167900 * 210 ) + NEW met2 ( 152030 123930 210 ) ( * 150450 210 ) + NEW met1 ( 152030 123930 210 ) ( 152950 * 210 ) + NEW met2 ( 152950 118830 210 ) ( * 123930 210 ) + NEW met2 ( 152490 158700 210 ) ( 152950 * 210 ) + NEW met2 ( 152030 158700 210 ) ( 152490 * 210 ) + NEW met2 ( 152030 150450 210 ) ( * 158700 210 ) + NEW met1 ( 152950 118830 210 ) ( 164910 * 210 ) + NEW met1 ( 138000 172890 210 ) ( 154330 * 210 ) + NEW met1 ( 138000 172890 210 ) ( * 173230 210 ) + NEW met1 ( 133630 173230 210 ) ( 138000 * 210 ) + NEW met2 ( 133630 173060 210 ) ( * 173230 210 ) + NEW met2 ( 132710 173060 210 ) ( 133630 * 210 ) + NEW met2 ( 132710 173060 210 ) ( * 173230 210 ) + NEW met1 TAPER ( 130870 173230 ) ( 132710 * ) NEW li1 TAPER ( 169510 169830 ) L1M1_PR_R - NEW li1 TAPER ( 169510 118490 ) L1M1_PR_R - NEW met1 ( 152030 169830 ) M1M2_PR_R - NEW met1 ( 152030 172890 ) M1M2_PR_R - NEW li1 TAPER ( 130870 172890 ) L1M1_PR_R - NEW met1 ( 152950 169830 ) M1M2_PR_R + NEW li1 TAPER ( 169510 118830 ) L1M1_PR_R + NEW met1 ( 152950 172890 ) M1M2_PR_R NEW li1 TAPER ( 116610 118490 ) L1M1_PR_R NEW li1 TAPER ( 152030 150450 ) L1M1_PR_R NEW met1 TAPER ( 152030 150450 ) M1M2_PR_R - NEW met1 ( 152030 118150 ) M1M2_PR_R - NEW li1 TAPER ( 152950 151470 ) L1M1_PR_R - NEW met1 TAPER ( 152950 151470 ) M1M2_PR_R ; + NEW met1 ( 152030 123930 ) M1M2_PR_R + NEW met1 ( 152950 123930 ) M1M2_PR_R + NEW met1 ( 152950 118830 ) M1M2_PR_R + NEW met1 ( 133630 173230 ) M1M2_PR_R + NEW met1 ( 132710 173230 ) M1M2_PR_R + NEW li1 TAPER ( 130870 173230 ) L1M1_PR_R ; - clknet_2_0__leaf_clk ( _414_ CLK ) ( _418_ CLK ) ( _428_ CLK ) ( _429_ CLK ) ( _432_ CLK ) ( _434_ CLK ) ( _444_ CLK ) ( _445_ CLK ) ( clkbuf_2_0__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S + ROUTED met2 ( 88550 104890 210 ) ( * 120870 210 ) NEW met1 TAPER ( 88550 104890 ) ( 89470 * ) NEW met1 ( 143750 88570 210 ) ( 144900 * 210 ) NEW met1 TAPER ( 144900 88570 ) ( 146510 * ) - NEW met2 ( 143750 115430 210 ) ( * 123590 210 ) - NEW met2 ( 143750 88570 210 ) ( * 115430 210 ) + NEW met2 ( 111090 126310 210 ) ( * 134470 210 ) + NEW met2 ( 143750 115770 210 ) ( * 123590 210 ) + NEW met2 ( 143750 114070 210 ) ( * 115770 210 ) + NEW met2 ( 143750 88570 210 ) ( * 114070 210 ) NEW met1 TAPER ( 91540 120870 ) ( 93150 * ) - NEW met2 ( 111090 118490 210 ) ( * 120870 210 ) - NEW met1 TAPER ( 115690 117810 ) ( 117530 * ) - NEW met1 TAPER ( 115690 117810 ) ( * 118490 ) - NEW met1 ( 111090 118490 210 ) ( 115460 * 210 ) - NEW met1 TAPER ( 115460 118490 ) ( 115690 * ) - NEW met1 ( 117530 120870 210 ) ( 123740 * 210 ) + NEW met1 ( 100970 120870 210 ) ( 109250 * 210 ) + NEW met1 TAPER ( 109250 120870 ) ( 111090 * ) + NEW met1 ( 100970 119170 210 ) ( * 120870 210 ) + NEW met1 ( 100970 118490 210 ) ( * 119170 210 ) + NEW met2 ( 111090 120870 210 ) ( * 122570 210 ) + NEW met2 ( 115690 117810 210 ) ( 117530 * 210 ) + NEW met2 ( 115690 117810 210 ) ( * 118150 210 ) + NEW met1 TAPER ( 115460 118150 ) ( 115690 * ) + NEW met1 ( 111090 118150 210 ) ( 115460 * 210 ) + NEW met2 ( 111090 118150 210 ) ( * 120870 210 ) + NEW met1 ( 118450 120870 210 ) ( 123740 * 210 ) NEW met1 TAPER ( 123740 120870 ) ( 125350 * ) + NEW met1 ( 117530 120870 210 ) ( 118450 * 210 ) NEW met2 ( 117530 117810 210 ) ( * 120870 210 ) NEW met1 ( 125350 123590 210 ) ( 136850 * 210 ) NEW met2 ( 125350 120870 210 ) ( * 123590 210 ) - NEW met1 ( 88550 118490 210 ) ( 111090 * 210 ) + NEW met1 ( 136850 123590 210 ) ( 137540 * 210 ) + NEW met1 ( 88550 118490 210 ) ( 100970 * 210 ) NEW met1 ( 88550 120870 210 ) ( 91540 * 210 ) - NEW met2 ( 111090 120870 210 ) ( * 134810 210 ) + NEW met2 ( 111090 122570 210 ) ( * 126310 210 ) NEW met2 ( 136850 123590 210 ) ( * 148070 210 ) - NEW met1 ( 136850 123590 210 ) ( 143750 * 210 ) + NEW met1 ( 137540 123590 210 ) ( 143750 * 210 ) NEW met1 ( 88550 120870 ) M1M2_PR_R NEW met1 TAPER ( 88550 104890 ) M1M2_PR_R NEW li1 TAPER ( 89470 104890 ) L1M1_PR_R @@ -280,222 +312,265 @@ NETS 8 ; NEW li1 TAPER ( 146510 88570 ) L1M1_PR_R NEW li1 TAPER ( 136850 148070 ) L1M1_PR_R NEW met1 TAPER ( 136850 148070 ) M1M2_PR_R - NEW li1 TAPER ( 111090 134810 ) L1M1_PR_R - NEW met1 TAPER ( 111090 134810 ) M1M2_PR_R - NEW li1 TAPER ( 143750 115430 ) L1M1_PR_R - NEW met1 TAPER ( 143750 115430 ) M1M2_PR_R + NEW li1 TAPER ( 111090 134470 ) L1M1_PR_R + NEW met1 TAPER ( 111090 134470 ) M1M2_PR_R + NEW li1 TAPER ( 143750 115770 ) L1M1_PR_R + NEW met1 TAPER ( 143750 115770 ) M1M2_PR_R NEW met1 ( 143750 123590 ) M1M2_PR_R NEW li1 TAPER ( 93150 120870 ) L1M1_PR_R NEW li1 TAPER ( 111090 120870 ) L1M1_PR_R NEW met1 TAPER ( 111090 120870 ) M1M2_PR_R - NEW met1 ( 111090 118490 ) M1M2_PR_R NEW li1 TAPER ( 117530 117810 ) L1M1_PR_R + NEW met1 TAPER ( 117530 117810 ) M1M2_PR_R + NEW met1 TAPER ( 115690 118150 ) M1M2_PR_R + NEW met1 ( 111090 118150 ) M1M2_PR_R NEW li1 TAPER ( 125350 120870 ) L1M1_PR_R NEW met1 ( 117530 120870 ) M1M2_PR_R - NEW met1 TAPER ( 117530 117810 ) M1M2_PR_R NEW met1 ( 136850 123590 ) M1M2_PR_R NEW met1 ( 125350 123590 ) M1M2_PR_R NEW met1 TAPER ( 125350 120870 ) M1M2_PR_R ; - clknet_2_1__leaf_clk ( _423_ CLK ) ( _424_ CLK ) ( _425_ CLK ) ( _426_ CLK ) ( _427_ CLK ) ( _440_ CLK ) ( _441_ CLK ) ( _442_ CLK ) ( _443_ CLK ) ( clkbuf_2_1__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met1 TAPER ( 163530 88230 ) ( 164450 * ) - NEW met1 ( 163530 85850 210 ) ( * 86700 210 ) - NEW met1 TAPER ( 163530 86700 ) ( * 88230 ) - NEW met1 ( 163530 85850 210 ) ( 178710 * 210 ) - NEW met2 ( 178710 85850 210 ) ( * 90950 210 ) - NEW met2 ( 158010 88230 210 ) ( * 102170 210 ) - NEW met1 ( 158010 88230 210 ) ( 162610 * 210 ) - NEW met1 TAPER ( 162610 88230 ) ( 163530 * ) - NEW met1 TAPER ( 169510 117810 ) ( 170430 * ) - NEW met1 TAPER ( 169510 117470 ) ( * 117810 ) - NEW met1 TAPER ( 168130 117470 ) ( 169510 * ) - NEW met1 ( 200330 113050 210 ) ( 204700 * 210 ) - NEW met1 TAPER ( 204700 113050 ) ( 206310 * ) - NEW met2 ( 200330 113050 210 ) ( * 117810 210 ) - NEW met1 TAPER ( 170430 117810 ) ( 173190 * ) - NEW met1 ( 173190 117810 210 ) ( 200330 * 210 ) - NEW met2 ( 199410 117810 210 ) ( * 137190 210 ) + + ROUTED met1 TAPER ( 163530 88570 ) ( 164450 * ) + NEW met1 TAPER ( 163530 88570 ) ( * 90270 ) + NEW met1 ( 163530 90270 210 ) ( * 90950 210 ) + NEW met1 ( 163530 90950 210 ) ( 167900 * 210 ) + NEW met1 ( 167900 90950 210 ) ( 177100 * 210 ) + NEW met1 TAPER ( 177100 90950 ) ( 178710 * ) + NEW met1 ( 158010 90950 210 ) ( 163530 * 210 ) + NEW met2 ( 205850 96730 210 ) ( * 110400 210 ) + NEW met2 ( 206310 113050 210 ) ( * 117130 210 ) + NEW met1 ( 200330 117130 210 ) ( 206310 * 210 ) + NEW met1 ( 199870 117130 210 ) ( 200330 * 210 ) + NEW met1 ( 199870 117130 210 ) ( * 117470 210 ) + NEW met1 ( 173190 117470 210 ) ( 199870 * 210 ) + NEW met2 ( 205850 110400 210 ) ( 206310 * 210 ) + NEW met2 ( 206310 110400 210 ) ( * 110670 210 ) + NEW met2 ( 206310 110670 210 ) ( * 113050 210 ) + NEW met2 ( 206310 122230 210 ) ( * 129030 210 ) + NEW met2 ( 206310 117130 210 ) ( * 122230 210 ) + NEW met2 ( 199410 129370 210 ) ( * 137190 210 ) + NEW met1 ( 199410 129030 210 ) ( * 129370 210 ) NEW met1 ( 199410 129030 210 ) ( 204700 * 210 ) NEW met1 TAPER ( 204700 129030 ) ( 206310 * ) - NEW met2 ( 205850 96730 210 ) ( * 113050 210 ) + NEW met1 TAPER ( 154790 129370 ) ( 156170 * ) NEW met1 ( 152950 129370 210 ) ( 154330 * 210 ) - NEW met1 TAPER ( 154330 129370 ) ( 156170 * ) + NEW met1 TAPER ( 154330 129370 ) ( 154790 * ) + NEW met2 ( 171350 118830 210 ) ( * 123590 210 ) + NEW met1 ( 156630 123590 210 ) ( 171350 * 210 ) + NEW met2 ( 156630 123590 210 ) ( * 129370 210 ) + NEW met1 TAPER ( 156170 129370 ) ( 156630 * ) + NEW met1 TAPER ( 171810 117470 ) ( * 118150 ) + NEW met1 TAPER ( 171350 118150 ) ( 171810 * ) + NEW met1 TAPER ( 171350 118150 ) ( * 118490 ) + NEW met1 TAPER ( 171350 118490 ) ( * 118830 ) + NEW met2 ( 158010 102170 210 ) ( * 123590 210 ) + NEW met2 ( 158010 100130 210 ) ( * 102170 210 ) NEW met2 ( 152950 129370 210 ) ( * 148070 210 ) - NEW met2 ( 156170 117470 210 ) ( * 129370 210 ) - NEW met2 ( 158010 102170 210 ) ( * 117470 210 ) - NEW met1 ( 156170 117470 210 ) ( 168130 * 210 ) + NEW met2 ( 158010 90950 210 ) ( * 100130 210 ) + NEW met1 TAPER ( 171810 117470 ) ( 173190 * ) NEW li1 TAPER ( 205850 96730 ) L1M1_PR_R NEW met1 TAPER ( 205850 96730 ) M1M2_PR_R - NEW li1 TAPER ( 164450 88230 ) L1M1_PR_R - NEW met1 ( 178710 85850 ) M1M2_PR_R + NEW li1 TAPER ( 164450 88570 ) L1M1_PR_R NEW li1 TAPER ( 178710 90950 ) L1M1_PR_R - NEW met1 TAPER ( 178710 90950 ) M1M2_PR_R - NEW li1 TAPER ( 158010 102170 ) L1M1_PR_R - NEW met1 TAPER ( 158010 102170 ) M1M2_PR_R - NEW met1 ( 158010 88230 ) M1M2_PR_R - NEW li1 TAPER ( 170430 117810 ) L1M1_PR_R + NEW met1 ( 158010 90950 ) M1M2_PR_R NEW li1 TAPER ( 206310 113050 ) L1M1_PR_R - NEW met1 ( 200330 113050 ) M1M2_PR_R - NEW met1 ( 200330 117810 ) M1M2_PR_R - NEW met1 TAPER ( 205850 113050 ) M1M2_PR_R + NEW met1 TAPER ( 206310 113050 ) M1M2_PR_R + NEW met1 ( 206310 117130 ) M1M2_PR_R + NEW li1 TAPER ( 206310 129030 ) L1M1_PR_R + NEW met1 TAPER ( 206310 129030 ) M1M2_PR_R NEW li1 TAPER ( 199410 137190 ) L1M1_PR_R NEW met1 TAPER ( 199410 137190 ) M1M2_PR_R - NEW met1 ( 199410 117810 ) M1M2_PR_R - NEW li1 TAPER ( 206310 129030 ) L1M1_PR_R - NEW met1 ( 199410 129030 ) M1M2_PR_R - NEW li1 TAPER ( 156170 129370 ) L1M1_PR_R - NEW met1 ( 152950 129370 ) M1M2_PR_R + NEW met1 ( 199410 129370 ) M1M2_PR_R NEW li1 TAPER ( 152950 148070 ) L1M1_PR_R NEW met1 TAPER ( 152950 148070 ) M1M2_PR_R - NEW met1 ( 156170 117470 ) M1M2_PR_R - NEW met1 TAPER ( 156170 129370 ) M1M2_PR_R - NEW met1 ( 158010 117470 ) M1M2_PR_R ; + NEW li1 TAPER ( 156170 129370 ) L1M1_PR_R + NEW met1 ( 152950 129370 ) M1M2_PR_R + NEW li1 TAPER ( 171350 118830 ) L1M1_PR_R + NEW met1 TAPER ( 171350 118830 ) M1M2_PR_R + NEW met1 ( 171350 123590 ) M1M2_PR_R + NEW met1 ( 156630 123590 ) M1M2_PR_R + NEW met1 TAPER ( 156630 129370 ) M1M2_PR_R + NEW li1 TAPER ( 158010 102170 ) L1M1_PR_R + NEW met1 TAPER ( 158010 102170 ) M1M2_PR_R + NEW met1 ( 158010 123590 ) M1M2_PR_R ; - clknet_2_2__leaf_clk ( _411_ CLK ) ( _413_ CLK ) ( _415_ CLK ) ( _416_ CLK ) ( _417_ CLK ) ( _421_ CLK ) ( _430_ CLK ) ( _431_ CLK ) ( _433_ CLK ) ( _437_ CLK ) ( clkbuf_2_2__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met2 ( 109250 183770 210 ) ( * 186150 210 ) - NEW met1 ( 98210 183770 210 ) ( 107410 * 210 ) - NEW met1 TAPER ( 107410 183770 ) ( 109250 * ) - NEW met2 ( 96830 183770 210 ) ( * 186150 210 ) - NEW met1 ( 96830 183770 210 ) ( 98210 * 210 ) - NEW met1 TAPER ( 98210 151130 ) ( 100050 * ) - NEW met2 ( 98210 151130 210 ) ( * 183770 210 ) - NEW met1 TAPER ( 136850 210630 ) ( 137770 * ) - NEW met1 ( 136850 208250 210 ) ( * 209100 210 ) - NEW met1 TAPER ( 136850 209100 ) ( * 210630 ) - NEW met1 ( 136850 208250 210 ) ( 146970 * 210 ) - NEW met1 ( 146970 208250 210 ) ( * 210630 210 ) - NEW met1 ( 146970 210630 210 ) ( 148810 * 210 ) - NEW met1 TAPER ( 148810 210630 ) ( 150595 * ) - NEW met1 ( 126270 208250 210 ) ( 136850 * 210 ) - NEW met2 ( 140990 159290 210 ) ( * 175270 210 ) + + ROUTED met2 ( 140990 159290 210 ) ( * 175610 210 ) NEW met1 ( 140990 159290 210 ) ( 142140 * 210 ) NEW met1 TAPER ( 142140 159290 ) ( 143750 * ) - NEW met1 TAPER ( 130410 172210 ) ( 131790 * ) - NEW met2 ( 130410 172210 210 ) ( * 175270 210 ) - NEW met1 ( 130410 175270 210 ) ( 139380 * 210 ) - NEW met1 TAPER ( 139380 175270 ) ( 140990 * ) - NEW met2 ( 125810 175270 210 ) ( * 183770 210 ) - NEW met1 ( 125810 175270 210 ) ( 130410 * 210 ) - NEW met2 ( 125810 206380 210 ) ( 126270 * 210 ) - NEW met2 ( 125810 183770 210 ) ( * 206380 210 ) - NEW met2 ( 111550 197370 210 ) ( * 200090 210 ) - NEW met1 ( 111550 197370 210 ) ( 125810 * 210 ) - NEW met1 TAPER ( 125810 199750 ) ( 126270 * ) - NEW met1 ( 109250 186150 210 ) ( 125810 * 210 ) - NEW met2 ( 126270 206380 210 ) ( * 208250 210 ) - NEW met1 ( 126270 208250 ) M1M2_PR_R - NEW li1 TAPER ( 109250 183770 ) L1M1_PR_R - NEW met1 TAPER ( 109250 183770 ) M1M2_PR_R - NEW met1 ( 109250 186150 ) M1M2_PR_R - NEW met1 ( 98210 183770 ) M1M2_PR_R + NEW met1 TAPER ( 139380 175610 ) ( 140990 * ) + NEW met2 ( 126270 206380 210 ) ( 126730 * 210 ) + NEW met2 ( 126270 199750 210 ) ( * 206380 210 ) + NEW met1 TAPER ( 110400 199750 ) ( 111550 * ) + NEW met1 ( 110400 197370 210 ) ( * 198220 210 ) + NEW met1 TAPER ( 110400 198220 ) ( * 199750 ) + NEW met1 ( 110400 197370 210 ) ( 126270 * 210 ) + NEW met1 ( 129260 210630 210 ) ( 135930 * 210 ) + NEW met1 TAPER ( 135930 210630 ) ( 137770 * ) + NEW met1 ( 126730 210630 210 ) ( 129260 * 210 ) + NEW met1 TAPER ( 150650 209950 ) ( * 210630 ) + NEW met1 ( 146970 209950 210 ) ( 148810 * 210 ) + NEW met1 TAPER ( 148810 209950 ) ( 150650 * ) + NEW met1 ( 146970 208250 210 ) ( * 209950 210 ) + NEW met1 ( 137715 208250 210 ) ( 146970 * 210 ) + NEW met1 ( 136850 208250 210 ) ( 137715 * 210 ) + NEW met1 ( 136850 208250 210 ) ( * 209100 210 ) + NEW met1 TAPER ( 136850 209100 ) ( * 210630 ) + NEW met2 ( 126730 206380 210 ) ( * 210630 210 ) + NEW met2 ( 126270 186300 210 ) ( * 199750 210 ) + NEW met2 ( 96830 152150 210 ) ( * 186150 210 ) + NEW met1 ( 96830 152150 210 ) ( 97750 * 210 ) + NEW met1 ( 97750 151130 210 ) ( * 152150 210 ) + NEW met1 ( 97750 151130 210 ) ( 98210 * 210 ) + NEW met1 TAPER ( 98210 151130 ) ( 100050 * ) + NEW met1 ( 97060 183770 210 ) ( 107410 * 210 ) + NEW met1 TAPER ( 107410 183770 ) ( 109250 * ) + NEW met1 ( 96830 183770 210 ) ( 97060 * 210 ) + NEW met1 ( 117530 183770 210 ) ( 123970 * 210 ) + NEW met1 TAPER ( 123970 183770 ) ( 125810 * ) + NEW met2 ( 117530 183770 210 ) ( * 185810 210 ) + NEW met1 ( 117300 185810 210 ) ( 117530 * 210 ) + NEW met1 ( 117070 185810 210 ) ( 117300 * 210 ) + NEW met1 ( 117070 185810 210 ) ( * 186150 210 ) + NEW met1 ( 109250 186150 210 ) ( 117070 * 210 ) + NEW met2 ( 109250 183770 210 ) ( * 186150 210 ) + NEW met2 ( 126270 186300 210 ) ( 126730 * 210 ) + NEW met2 ( 126730 183770 210 ) ( * 186300 210 ) + NEW met2 ( 126270 183770 210 ) ( 126730 * 210 ) + NEW met1 TAPER ( 125810 183770 ) ( 126270 * ) + NEW met2 ( 126730 175610 210 ) ( * 183770 210 ) + NEW met1 TAPER ( 133630 171870 ) ( 134550 * ) + NEW met1 TAPER ( 133630 171530 ) ( * 171870 ) + NEW met1 TAPER ( 133170 171530 ) ( 133630 * ) + NEW met1 TAPER ( 133170 171530 ) ( * 172550 ) + NEW met1 TAPER ( 132250 172550 ) ( 133170 * ) + NEW met1 ( 134550 171870 210 ) ( 140990 * 210 ) + NEW met1 ( 126730 175610 210 ) ( 139380 * 210 ) + NEW li1 TAPER ( 140990 175610 ) L1M1_PR_R + NEW met1 TAPER ( 140990 175610 ) M1M2_PR_R + NEW met1 ( 140990 159290 ) M1M2_PR_R + NEW li1 TAPER ( 143750 159290 ) L1M1_PR_R + NEW met1 ( 140990 171870 ) M1M2_PR_R + NEW li1 TAPER ( 126270 199750 ) L1M1_PR_R + NEW met1 TAPER ( 126270 199750 ) M1M2_PR_R + NEW li1 TAPER ( 111550 199750 ) L1M1_PR_R + NEW met1 ( 126270 197370 ) M1M2_PR_R + NEW li1 TAPER ( 137770 210630 ) L1M1_PR_R + NEW met1 ( 126730 210630 ) M1M2_PR_R + NEW li1 TAPER ( 150650 210630 ) L1M1_PR_R NEW li1 TAPER ( 96830 186150 ) L1M1_PR_R NEW met1 TAPER ( 96830 186150 ) M1M2_PR_R - NEW met1 ( 96830 183770 ) M1M2_PR_R - NEW met1 ( 98210 151130 ) M1M2_PR_R + NEW met1 ( 96830 152150 ) M1M2_PR_R NEW li1 TAPER ( 100050 151130 ) L1M1_PR_R - NEW li1 TAPER ( 137770 210630 ) L1M1_PR_R - NEW li1 TAPER ( 150595 210630 ) L1M1_PR_R - NEW li1 TAPER ( 140990 175270 ) L1M1_PR_R - NEW met1 TAPER ( 140990 175270 ) M1M2_PR_R - NEW met1 ( 140990 159290 ) M1M2_PR_R - NEW li1 TAPER ( 143750 159290 ) L1M1_PR_R - NEW li1 TAPER ( 131790 172210 ) L1M1_PR_R - NEW met1 TAPER ( 130410 172210 ) M1M2_PR_R - NEW met1 ( 130410 175270 ) M1M2_PR_R + NEW li1 TAPER ( 109250 183770 ) L1M1_PR_R + NEW met1 ( 96830 183770 ) M1M2_PR_R NEW li1 TAPER ( 125810 183770 ) L1M1_PR_R - NEW met1 TAPER ( 125810 183770 ) M1M2_PR_R - NEW met1 ( 125810 175270 ) M1M2_PR_R - NEW li1 TAPER ( 111550 200090 ) L1M1_PR_R - NEW met1 TAPER ( 111550 200090 ) M1M2_PR_R - NEW met1 ( 111550 197370 ) M1M2_PR_R - NEW met1 ( 125810 197370 ) M1M2_PR_R - NEW li1 TAPER ( 126270 199750 ) L1M1_PR_R - NEW met1 TAPER ( 125810 199750 ) M1M2_PR_R - NEW met1 ( 125810 186150 ) M1M2_PR_R ; + NEW met1 ( 117530 183770 ) M1M2_PR_R + NEW met1 ( 117530 185810 ) M1M2_PR_R + NEW met1 ( 109250 186150 ) M1M2_PR_R + NEW met1 TAPER ( 109250 183770 ) M1M2_PR_R + NEW met1 TAPER ( 126270 183770 ) M1M2_PR_R + NEW met1 ( 126730 175610 ) M1M2_PR_R + NEW li1 TAPER ( 132250 172550 ) L1M1_PR_R ; - clknet_2_3__leaf_clk ( _412_ CLK ) ( _419_ CLK ) ( _420_ CLK ) ( _422_ CLK ) ( _435_ CLK ) ( _436_ CLK ) ( _438_ CLK ) ( _439_ CLK ) ( clkbuf_2_3__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met2 ( 192050 191590 210 ) ( * 194310 210 ) + + ROUTED met1 ( 169510 175610 210 ) ( 171580 * 210 ) + NEW met1 ( 165830 175610 210 ) ( 169510 * 210 ) + NEW met2 ( 170890 170510 210 ) ( * 175610 210 ) + NEW met1 ( 173650 191590 210 ) ( 190210 * 210 ) + NEW met1 TAPER ( 190210 191590 ) ( 192050 * ) NEW met1 ( 192050 194310 210 ) ( 204010 * 210 ) NEW met1 TAPER ( 204010 194310 ) ( 205850 * ) - NEW met2 ( 201250 164390 210 ) ( * 177990 210 ) - NEW met1 ( 201250 177990 210 ) ( 205620 * 210 ) - NEW met1 TAPER ( 205620 177990 ) ( 207230 * ) - NEW met1 ( 192050 177990 210 ) ( 201250 * 210 ) - NEW met1 ( 192050 164390 210 ) ( 199535 * 210 ) - NEW met1 TAPER ( 199535 164390 ) ( 201250 * ) - NEW met2 ( 192050 177990 210 ) ( * 191590 210 ) - NEW met1 ( 169970 175610 210 ) ( 171580 * 210 ) - NEW met1 TAPER ( 171580 175610 ) ( 173190 * ) - NEW met1 TAPER ( 169970 170510 ) ( 170890 * ) - NEW met2 ( 169970 170510 210 ) ( * 175610 210 ) - NEW met2 ( 172730 164390 210 ) ( * 169490 210 ) - NEW met1 TAPER ( 171350 169490 ) ( 172730 * ) - NEW met1 ( 172730 164390 210 ) ( 192050 * 210 ) - NEW met2 ( 192050 153850 210 ) ( * 164390 210 ) + NEW met2 ( 192050 191590 210 ) ( * 194310 210 ) NEW met1 ( 153870 175610 210 ) ( * 176460 210 ) NEW met1 TAPER ( 153870 176460 ) ( * 177990 ) NEW met1 TAPER ( 153870 177990 ) ( 154790 * ) - NEW met1 ( 153870 175610 210 ) ( 169970 * 210 ) - NEW met1 ( 163990 197370 210 ) ( 169970 * 210 ) - NEW met2 ( 163990 197370 210 ) ( * 210630 210 ) - NEW met2 ( 169970 175610 210 ) ( * 197370 210 ) + NEW met1 ( 153870 175610 210 ) ( 165830 * 210 ) + NEW met2 ( 163990 191590 210 ) ( * 210630 210 ) + NEW met2 ( 165830 190230 210 ) ( * 191590 210 ) + NEW met2 ( 165830 175610 210 ) ( * 190230 210 ) + NEW met1 ( 163990 191590 210 ) ( 173650 * 210 ) + NEW met1 TAPER ( 171350 169490 ) ( 172500 * ) + NEW met2 ( 201250 164730 210 ) ( * 177990 210 ) + NEW met1 ( 201250 177990 210 ) ( * 178330 210 ) + NEW met1 ( 201250 178330 210 ) ( 205620 * 210 ) + NEW met1 TAPER ( 205620 178330 ) ( 207230 * ) + NEW met2 ( 192050 153850 210 ) ( * 164390 210 ) + NEW met1 ( 192050 164390 210 ) ( * 164730 210 ) + NEW met1 ( 192050 164730 210 ) ( 199410 * 210 ) + NEW met1 TAPER ( 199410 164730 ) ( 201250 * ) + NEW met1 ( 172500 169490 210 ) ( 192050 * 210 ) + NEW met2 ( 192050 164730 210 ) ( * 169490 210 ) + NEW met1 TAPER ( 171580 175610 ) ( 173190 * ) + NEW met1 ( 165830 175610 ) M1M2_PR_R + NEW li1 TAPER ( 170890 170510 ) L1M1_PR_R + NEW met1 TAPER ( 170890 170510 ) M1M2_PR_R + NEW met1 ( 170890 175610 ) M1M2_PR_R NEW li1 TAPER ( 192050 191590 ) L1M1_PR_R - NEW met1 TAPER ( 192050 191590 ) M1M2_PR_R - NEW met1 ( 192050 194310 ) M1M2_PR_R + NEW li1 TAPER ( 171350 169490 ) L1M1_PR_R NEW li1 TAPER ( 205850 194310 ) L1M1_PR_R - NEW li1 TAPER ( 201250 164390 ) L1M1_PR_R - NEW met1 TAPER ( 201250 164390 ) M1M2_PR_R + NEW met1 ( 192050 194310 ) M1M2_PR_R + NEW met1 TAPER ( 192050 191590 ) M1M2_PR_R + NEW li1 TAPER ( 154790 177990 ) L1M1_PR_R + NEW met1 ( 163990 191590 ) M1M2_PR_R + NEW li1 TAPER ( 163990 210630 ) L1M1_PR_R + NEW met1 TAPER ( 163990 210630 ) M1M2_PR_R + NEW met1 ( 165830 191590 ) M1M2_PR_R + NEW li1 TAPER ( 201250 164730 ) L1M1_PR_R + NEW met1 TAPER ( 201250 164730 ) M1M2_PR_R NEW met1 ( 201250 177990 ) M1M2_PR_R - NEW li1 TAPER ( 207230 177990 ) L1M1_PR_R - NEW met1 ( 192050 177990 ) M1M2_PR_R - NEW met1 ( 192050 164390 ) M1M2_PR_R - NEW met1 ( 169970 175610 ) M1M2_PR_R - NEW li1 TAPER ( 173190 175610 ) L1M1_PR_R - NEW li1 TAPER ( 170890 170510 ) L1M1_PR_R - NEW met1 TAPER ( 169970 170510 ) M1M2_PR_R - NEW met1 ( 172730 164390 ) M1M2_PR_R - NEW met1 TAPER ( 172730 169490 ) M1M2_PR_R - NEW li1 TAPER ( 171350 169490 ) L1M1_PR_R + NEW li1 TAPER ( 207230 178330 ) L1M1_PR_R NEW li1 TAPER ( 192050 153850 ) L1M1_PR_R NEW met1 TAPER ( 192050 153850 ) M1M2_PR_R - NEW li1 TAPER ( 154790 177990 ) L1M1_PR_R - NEW met1 ( 169970 197370 ) M1M2_PR_R - NEW met1 ( 163990 197370 ) M1M2_PR_R - NEW li1 TAPER ( 163990 210630 ) L1M1_PR_R - NEW met1 TAPER ( 163990 210630 ) M1M2_PR_R ; + NEW met1 ( 192050 164390 ) M1M2_PR_R + NEW met1 ( 192050 169490 ) M1M2_PR_R + NEW met1 ( 192050 164730 ) M1M2_PR_R + NEW li1 TAPER ( 173190 175610 ) L1M1_PR_R ; - ctrl.state.out\[1\] ( _412_ Q ) ( _290_ B2 ) ( _285_ A ) + USE SIGNAL - + ROUTED met1 ( 167670 208250 ) ( 170890 * ) - NEW met2 ( 170890 208250 ) ( * 209950 ) - NEW met2 ( 170890 205530 ) ( * 208250 ) + + ROUTED met2 ( 170890 205530 ) ( * 206210 ) + NEW met1 ( 167670 208250 ) ( * 208930 ) + NEW met1 ( 167670 208930 ) ( 170660 * ) + NEW met1 ( 170660 208930 ) ( 171350 * ) + NEW met1 ( 171350 208930 ) ( * 209950 ) + NEW met1 ( 170890 209950 ) ( 171350 * ) + NEW met2 ( 170890 208250 ) ( * 208930 ) + NEW met2 ( 170890 206210 ) ( * 208250 ) NEW li1 ( 170890 205530 ) L1M1_PR_MR NEW met1 ( 170890 205530 ) M1M2_PR NEW li1 ( 167670 208250 ) L1M1_PR_MR - NEW met1 ( 170890 208250 ) M1M2_PR NEW li1 ( 170890 209950 ) L1M1_PR_MR - NEW met1 ( 170890 209950 ) M1M2_PR ; + NEW met1 ( 170890 208930 ) M1M2_PR ; - ctrl.state.out\[2\] ( _413_ Q ) ( _297_ A ) ( _293_ A ) ( _290_ A1 ) ( _284_ A ) ( _279_ A ) + USE SIGNAL - + ROUTED met2 ( 158470 207570 ) ( * 209950 ) - NEW met1 ( 158010 213350 ) ( 158470 * ) - NEW met2 ( 158470 209950 ) ( * 213350 ) - NEW met1 ( 158470 207570 ) ( 166290 * ) - NEW met1 ( 158010 200090 ) ( * 200430 ) - NEW met1 ( 158010 200430 ) ( 158470 * ) - NEW met2 ( 158470 194650 ) ( * 200430 ) + + ROUTED met1 ( 158930 200260 ) ( * 200430 ) + NEW met1 ( 158930 200090 ) ( * 200260 ) + NEW met1 ( 163530 194650 ) ( 167210 * ) + NEW met1 ( 163300 207570 ) ( 166290 * ) + NEW met2 ( 158470 200430 ) ( * 203660 ) + NEW met2 ( 158470 194650 ) ( * 195670 ) + NEW met2 ( 158470 195670 ) ( * 200430 ) NEW met1 ( 158010 191590 ) ( 158470 * ) NEW met2 ( 158470 191590 ) ( * 194650 ) - NEW met2 ( 158470 200430 ) ( * 207570 ) - NEW met1 ( 158470 194650 ) ( 167210 * ) + NEW met1 ( 158470 194650 ) ( 163530 * ) + NEW met1 ( 158470 200430 ) ( 158930 * ) + NEW met2 ( 158470 211650 ) ( * 213010 ) + NEW met1 ( 158010 213010 ) ( 158470 * ) + NEW met1 ( 158010 213010 ) ( * 213350 ) + NEW met2 ( 158470 207570 ) ( * 208420 ) + NEW met2 ( 158470 208420 ) ( * 211650 ) + NEW met2 ( 158470 203660 ) ( * 207570 ) + NEW met1 ( 158470 207570 ) ( 163300 * ) + NEW li1 ( 158930 200090 ) L1M1_PR_MR NEW li1 ( 167210 194650 ) L1M1_PR_MR - NEW met1 ( 158470 207570 ) M1M2_PR - NEW li1 ( 158470 209950 ) L1M1_PR_MR - NEW met1 ( 158470 209950 ) M1M2_PR - NEW li1 ( 158010 213350 ) L1M1_PR_MR - NEW met1 ( 158470 213350 ) M1M2_PR NEW li1 ( 166290 207570 ) L1M1_PR_MR - NEW li1 ( 158010 200090 ) L1M1_PR_MR NEW met1 ( 158470 200430 ) M1M2_PR NEW met1 ( 158470 194650 ) M1M2_PR NEW li1 ( 158010 191590 ) L1M1_PR_MR - NEW met1 ( 158470 191590 ) M1M2_PR ; + NEW met1 ( 158470 191590 ) M1M2_PR + NEW li1 ( 158470 211650 ) L1M1_PR_MR + NEW met1 ( 158470 211650 ) M1M2_PR + NEW met1 ( 158470 213010 ) M1M2_PR + NEW li1 ( 158010 213350 ) L1M1_PR_MR + NEW met1 ( 158470 207570 ) M1M2_PR ; END NETS END DESIGN diff --git a/src/drt/test/ndr_vias2.defok b/src/drt/test/ndr_vias2.defok index 0f9685c403f..4054b5430d7 100644 --- a/src/drt/test/ndr_vias2.defok +++ b/src/drt/test/ndr_vias2.defok @@ -219,271 +219,311 @@ NETS 8 ; - clk ( PIN clk ) ( clkbuf_0_clk A ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S + ROUTED met2 ( 89470 340 0 ) ( * 18700 210 ) NEW met3 ( 89470 18700 450 ) ( 89700 * 450 ) - NEW met5 ( 89700 18700 2400 ) ( 151340 * 2400 ) - NEW met3 ( 151110 145180 450 ) ( 151340 * 450 ) - NEW met2 ( 151110 145180 210 ) ( * 151130 210 ) - NEW met4 ( 151340 18700 450 ) ( * 145180 450 ) + NEW met5 ( 89700 18700 2400 ) ( 96370 * 2400 ) + NEW met5 ( 96370 18700 2400 ) ( 151340 * 2400 ) + NEW met4 ( 151340 18700 450 ) ( * 34500 450 ) + NEW met4 ( 150420 34500 450 ) ( 150650 * 450 ) + NEW met4 ( 150650 34500 450 ) ( 151340 * 450 ) + NEW met3 ( 150420 145860 450 ) ( 151110 * 450 ) + NEW met2 ( 151110 145860 210 ) ( * 151130 210 ) + NEW met4 ( 150420 34500 450 ) ( * 145860 450 ) NEW met2 ( 89470 18700 ) M2M3_PR_R NEW met3 ( 89700 18700 ) M3M4_PR_R NEW met4 ( 89700 18700 ) M4M5_PR_R NEW met4 ( 151340 18700 ) M4M5_PR_R - NEW met3 ( 151340 145180 ) M3M4_PR_R - NEW met2 ( 151110 145180 ) M2M3_PR_R + NEW met3 ( 150420 145860 ) M3M4_PR_R + NEW met2 ( 151110 145860 ) M2M3_PR_R NEW li1 TAPER ( 151110 151130 ) L1M1_PR_R NEW met1 TAPER ( 151110 151130 ) M1M2_PR_R - NEW met3 TAPER ( 89470 18700 ) RECT ( -390 -150 0 150 ) - NEW met3 TAPER ( 151340 145180 ) RECT ( 0 -150 390 150 ) ; + NEW met3 TAPER ( 89470 18700 ) RECT ( -390 -150 0 150 ) ; - clknet_0_clk ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) ( clkbuf_2_0__f_clk A ) ( clkbuf_0_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met3 ( 116380 120700 450 ) ( 116610 * 450 ) + + ROUTED met5 ( 116380 120700 2400 ) ( 117070 * 2400 ) + NEW met3 ( 116380 120700 450 ) ( 116610 * 450 ) NEW met2 ( 116610 118830 210 ) ( * 120700 210 ) - NEW met2 ( 130870 171700 210 ) ( * 172890 210 ) + NEW met2 ( 130870 172890 210 ) ( * 173060 210 ) + NEW met5 ( 148810 120700 2400 ) ( 153180 * 2400 ) NEW met2 ( 169510 118830 210 ) ( * 120700 210 ) - NEW met3 ( 166980 120700 450 ) ( 169510 * 450 ) - NEW met5 ( 154100 120700 2400 ) ( 166980 * 2400 ) - NEW met5 ( 116380 120700 2400 ) ( 154100 * 2400 ) - NEW met4 ( 154100 120700 450 ) ( * 131100 450 ) - NEW met2 ( 169510 169830 210 ) ( * 171700 210 ) - NEW met2 ( 152950 151300 210 ) ( * 151470 210 ) - NEW met3 ( 152950 151300 450 ) ( 153180 * 450 ) - NEW met4 ( 153180 151300 450 ) ( * 171700 450 ) - NEW met4 ( 153180 131100 450 ) ( 154100 * 450 ) - NEW met4 ( 153180 131100 450 ) ( * 151300 450 ) - NEW met3 ( 130870 171700 450 ) ( 169510 * 450 ) + NEW met3 ( 159620 120700 450 ) ( 169510 * 450 ) + NEW met3 ( 153180 120700 450 ) ( 159620 * 450 ) + NEW met5 ( 117070 120700 2400 ) ( 148810 * 2400 ) + NEW met3 ( 130870 173060 450 ) ( 131100 * 450 ) + NEW met4 ( 153180 120700 450 ) ( * 131100 450 ) + NEW met2 ( 169510 169830 210 ) ( * 172380 210 ) + NEW met3 ( 151570 172380 450 ) ( 169510 * 450 ) + NEW met3 ( 131100 172380 450 ) ( 151570 * 450 ) + NEW met3 ( 131100 172380 450 ) ( * 173060 450 ) + NEW met2 ( 152490 150620 210 ) ( * 150790 210 ) + NEW met3 ( 152260 150620 450 ) ( 152490 * 450 ) + NEW met4 ( 152260 150620 450 ) ( * 172380 450 ) + NEW met4 ( 152260 131100 450 ) ( 153180 * 450 ) + NEW met4 ( 152260 131100 450 ) ( * 134470 450 ) + NEW met4 ( 152260 134470 450 ) ( * 150620 450 ) NEW met3 ( 116380 120700 ) M3M4_PR_R NEW met4 ( 116380 120700 ) M4M5_PR_R NEW met2 ( 116610 120700 ) M2M3_PR_R NEW li1 TAPER ( 116610 118830 ) L1M1_PR_R NEW met1 TAPER ( 116610 118830 ) M1M2_PR_R - NEW met2 ( 130870 171700 ) M2M3_PR_R + NEW met2 ( 130870 173060 ) M2M3_PR_R NEW li1 TAPER ( 130870 172890 ) L1M1_PR_R NEW met1 TAPER ( 130870 172890 ) M1M2_PR_R - NEW met4 ( 154100 120700 ) M4M5_PR_R + NEW met4 ( 153180 120700 ) M4M5_PR_R NEW li1 TAPER ( 169510 118830 ) L1M1_PR_R NEW met1 TAPER ( 169510 118830 ) M1M2_PR_R NEW met2 ( 169510 120700 ) M2M3_PR_R - NEW met3 ( 166980 120700 ) M3M4_PR_R - NEW met4 ( 166980 120700 ) M4M5_PR_R + NEW met3 ( 153180 120700 ) M3M4_PR_R NEW li1 TAPER ( 169510 169830 ) L1M1_PR_R NEW met1 TAPER ( 169510 169830 ) M1M2_PR_R - NEW met2 ( 169510 171700 ) M2M3_PR_R - NEW li1 TAPER ( 152950 151470 ) L1M1_PR_R - NEW met1 TAPER ( 152950 151470 ) M1M2_PR_R - NEW met2 ( 152950 151300 ) M2M3_PR_R - NEW met3 ( 153180 151300 ) M3M4_PR_R - NEW met3 ( 153180 171700 ) M3M4_PR_R + NEW met2 ( 169510 172380 ) M2M3_PR_R + NEW li1 TAPER ( 152490 150790 ) L1M1_PR_R + NEW met1 TAPER ( 152490 150790 ) M1M2_PR_R + NEW met2 ( 152490 150620 ) M2M3_PR_R + NEW met3 ( 152260 150620 ) M3M4_PR_R + NEW met3 ( 152260 172380 ) M3M4_PR_R NEW met3 TAPER ( 116380 120700 ) RECT ( -390 -150 0 150 ) - NEW met3 TAPER ( 130870 171700 ) RECT ( -390 -150 0 150 ) - NEW met3 TAPER ( 152950 151300 ) RECT ( -390 -150 0 150 ) - NEW met3 TAPER ( 153180 171700 ) RECT ( -600 -150 0 150 ) ; + NEW met3 TAPER ( 130870 173060 ) RECT ( -390 -150 0 150 ) + NEW met4 TAPER ( 153180 120700 ) RECT ( -150 -620 150 0 ) + NEW met3 TAPER ( 152490 150620 ) RECT ( 0 -150 390 150 ) + NEW met3 TAPER ( 152260 172380 ) RECT ( -600 -150 0 150 ) ; - clknet_2_0__leaf_clk ( _414_ CLK ) ( _418_ CLK ) ( _428_ CLK ) ( _429_ CLK ) ( _432_ CLK ) ( _434_ CLK ) ( _444_ CLK ) ( _445_ CLK ) ( clkbuf_2_0__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met1 ( 90390 120870 210 ) ( 91540 * 210 ) + + ROUTED met1 ( 89930 120870 210 ) ( 91540 * 210 ) NEW met1 TAPER ( 91540 120870 ) ( 93150 * ) - NEW met2 ( 90390 117300 210 ) ( * 120870 210 ) - NEW met2 ( 89470 117300 210 ) ( 90390 * 210 ) - NEW met2 ( 89470 104890 210 ) ( * 117300 210 ) - NEW met2 ( 111090 120700 210 ) ( * 120870 210 ) - NEW met3 ( 93150 120700 450 ) ( 111090 * 450 ) - NEW met2 ( 93150 120700 210 ) ( * 120870 210 ) - NEW met1 ( 111090 118150 210 ) ( 115460 * 210 ) + NEW met2 ( 89930 115260 210 ) ( * 120870 210 ) + NEW met2 ( 89470 115260 210 ) ( 89930 * 210 ) + NEW met2 ( 89470 104890 210 ) ( * 115260 210 ) + NEW met2 ( 111090 118490 210 ) ( * 120870 210 ) + NEW met1 ( 101890 118490 210 ) ( 111090 * 210 ) + NEW met1 ( 89930 118490 210 ) ( 101890 * 210 ) + NEW met1 ( 112700 118150 210 ) ( 115460 * 210 ) NEW met1 TAPER ( 115460 118150 ) ( 117990 * ) - NEW met2 ( 111090 118150 210 ) ( * 120700 210 ) - NEW met2 ( 125350 118150 210 ) ( * 120870 210 ) - NEW met1 TAPER ( 117990 118150 ) ( 120060 * ) - NEW met1 ( 120060 118150 210 ) ( 125350 * 210 ) - NEW met2 ( 125350 117300 210 ) ( * 118150 210 ) - NEW met2 ( 111090 120870 210 ) ( * 134470 210 ) - NEW met4 ( 144900 89420 450 ) ( * 117300 450 ) + NEW met1 ( 111090 118150 210 ) ( 112700 * 210 ) + NEW met1 ( 111090 118150 210 ) ( * 118490 210 ) + NEW met1 ( 119370 120870 210 ) ( 123740 * 210 ) + NEW met1 TAPER ( 123740 120870 ) ( 125350 * ) + NEW met1 TAPER ( 119370 119170 ) ( * 120870 ) + NEW met1 TAPER ( 119370 118830 ) ( * 119170 ) + NEW met1 TAPER ( 118450 118830 ) ( 119370 * ) + NEW met2 ( 125350 117470 210 ) ( * 119850 210 ) + NEW met2 ( 125350 119850 210 ) ( * 120870 210 ) + NEW met2 ( 111090 120870 210 ) ( * 125460 210 ) + NEW met2 ( 111090 133110 210 ) ( * 134470 210 ) + NEW met2 ( 111090 125460 210 ) ( * 133110 210 ) + NEW met1 ( 125350 117470 210 ) ( 131100 * 210 ) + NEW met2 ( 143750 113220 210 ) ( * 115430 210 ) + NEW met3 ( 143750 113220 450 ) ( 144900 * 450 ) + NEW met4 ( 144900 89420 450 ) ( * 113220 450 ) NEW met3 ( 144900 89420 450 ) ( 146510 * 450 ) NEW met2 ( 146510 88570 210 ) ( * 89420 210 ) - NEW met2 ( 143750 115430 210 ) ( * 117300 210 ) - NEW met3 ( 125350 117300 450 ) ( 144900 * 450 ) - NEW met4 ( 137540 117300 450 ) ( * 131100 450 ) - NEW met4 ( 136620 131100 450 ) ( 137540 * 450 ) - NEW met4 ( 136620 131100 450 ) ( * 145180 450 ) - NEW met3 ( 136620 145180 450 ) ( 136850 * 450 ) - NEW met2 ( 136850 145180 210 ) ( * 148070 210 ) + NEW met1 ( 131100 117130 210 ) ( * 117470 210 ) + NEW met1 ( 131100 117130 210 ) ( 140990 * 210 ) + NEW met1 ( 140990 116790 210 ) ( * 117130 210 ) + NEW met1 ( 140990 116450 210 ) ( * 116790 210 ) + NEW met1 ( 140990 116450 210 ) ( 142140 * 210 ) + NEW met1 TAPER ( 142140 116450 ) ( 143750 * ) + NEW met1 TAPER ( 143750 115430 ) ( * 116450 ) + NEW met4 ( 137540 117300 450 ) ( 138460 * 450 ) + NEW met3 ( 138230 117300 450 ) ( 138460 * 450 ) + NEW met2 ( 138230 117130 210 ) ( * 117300 210 ) + NEW met3 ( 137310 147900 450 ) ( 137540 * 450 ) + NEW met3 ( 136850 147900 450 ) ( 137310 * 450 ) + NEW met2 ( 136850 147900 210 ) ( * 148070 210 ) + NEW met4 ( 137540 117300 450 ) ( * 147900 450 ) NEW li1 TAPER ( 93150 120870 ) L1M1_PR_R - NEW met1 ( 90390 120870 ) M1M2_PR_R + NEW met1 ( 89930 120870 ) M1M2_PR_R NEW li1 TAPER ( 89470 104890 ) L1M1_PR_R NEW met1 TAPER ( 89470 104890 ) M1M2_PR_R NEW li1 TAPER ( 111090 120870 ) L1M1_PR_R NEW met1 TAPER ( 111090 120870 ) M1M2_PR_R - NEW met2 ( 111090 120700 ) M2M3_PR_R - NEW met2 ( 93150 120700 ) M2M3_PR_R - NEW met1 TAPER ( 93150 120870 ) M1M2_PR_R + NEW met1 ( 111090 118490 ) M1M2_PR_R + NEW met1 ( 89930 118490 ) M1M2_PR_R NEW li1 TAPER ( 117990 118150 ) L1M1_PR_R - NEW met1 ( 111090 118150 ) M1M2_PR_R NEW li1 TAPER ( 125350 120870 ) L1M1_PR_R + NEW li1 TAPER ( 118450 118830 ) L1M1_PR_R + NEW met1 ( 125350 117470 ) M1M2_PR_R NEW met1 TAPER ( 125350 120870 ) M1M2_PR_R - NEW met1 ( 125350 118150 ) M1M2_PR_R - NEW met2 ( 125350 117300 ) M2M3_PR_R NEW li1 TAPER ( 111090 134470 ) L1M1_PR_R NEW met1 TAPER ( 111090 134470 ) M1M2_PR_R - NEW met3 ( 144900 117300 ) M3M4_PR_R + NEW li1 TAPER ( 143750 115430 ) L1M1_PR_R + NEW met1 TAPER ( 143750 115430 ) M1M2_PR_R + NEW met2 ( 143750 113220 ) M2M3_PR_R + NEW met3 ( 144900 113220 ) M3M4_PR_R NEW met3 ( 144900 89420 ) M3M4_PR_R NEW met2 ( 146510 89420 ) M2M3_PR_R NEW li1 TAPER ( 146510 88570 ) L1M1_PR_R NEW met1 TAPER ( 146510 88570 ) M1M2_PR_R - NEW li1 TAPER ( 143750 115430 ) L1M1_PR_R - NEW met1 TAPER ( 143750 115430 ) M1M2_PR_R - NEW met2 ( 143750 117300 ) M2M3_PR_R - NEW met3 ( 137540 117300 ) M3M4_PR_R - NEW met3 ( 136620 145180 ) M3M4_PR_R - NEW met2 ( 136850 145180 ) M2M3_PR_R + NEW met3 ( 138460 117300 ) M3M4_PR_R + NEW met2 ( 138230 117300 ) M2M3_PR_R + NEW met1 ( 138230 117130 ) M1M2_PR_R + NEW met3 ( 137540 147900 ) M3M4_PR_R + NEW met2 ( 136850 147900 ) M2M3_PR_R NEW li1 TAPER ( 136850 148070 ) L1M1_PR_R NEW met1 TAPER ( 136850 148070 ) M1M2_PR_R - NEW met3 TAPER ( 143750 117300 ) RECT ( -620 -150 0 150 ) - NEW met3 TAPER ( 137540 117300 ) RECT ( -600 -150 0 150 ) - NEW met3 TAPER ( 136620 145180 ) RECT ( -390 -150 0 150 ) ; + NEW met3 TAPER ( 138460 117300 ) RECT ( 0 -150 390 150 ) ; - clknet_2_1__leaf_clk ( _423_ CLK ) ( _424_ CLK ) ( _425_ CLK ) ( _426_ CLK ) ( _427_ CLK ) ( _440_ CLK ) ( _441_ CLK ) ( _442_ CLK ) ( _443_ CLK ) ( clkbuf_2_1__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met3 ( 200100 126140 450 ) ( 200330 * 450 ) - NEW met4 ( 200100 124100 450 ) ( * 126140 450 ) - NEW met1 ( 200330 129030 210 ) ( 204700 * 210 ) - NEW met1 TAPER ( 204700 129030 ) ( 206310 * ) - NEW met2 ( 206310 113050 210 ) ( * 113220 210 ) - NEW met3 ( 200100 113220 450 ) ( 206310 * 450 ) - NEW met4 ( 200100 113220 450 ) ( * 124100 450 ) - NEW met2 ( 205850 96730 210 ) ( * 110500 210 ) + + ROUTED met2 ( 200330 124780 210 ) ( * 131070 210 ) + NEW met3 ( 200100 124780 450 ) ( 200330 * 450 ) + NEW met4 ( 200100 124100 450 ) ( * 124780 450 ) + NEW met1 ( 200330 129370 210 ) ( 204700 * 210 ) + NEW met1 TAPER ( 204700 129370 ) ( 206310 * ) + NEW met2 ( 206310 113050 210 ) ( * 123250 210 ) + NEW met2 ( 206310 123250 210 ) ( * 129370 210 ) + NEW met2 ( 205850 96730 210 ) ( * 107100 210 ) + NEW met2 ( 205850 107100 210 ) ( * 110500 210 ) NEW met2 ( 205850 110500 210 ) ( 206310 * 210 ) NEW met2 ( 206310 110500 210 ) ( * 113050 210 ) - NEW met2 ( 200330 126140 210 ) ( * 131100 210 ) - NEW met2 ( 199410 131100 210 ) ( 200330 * 210 ) - NEW met2 ( 199410 131100 210 ) ( * 137190 210 ) + NEW met1 ( 199870 131410 210 ) ( 200330 * 210 ) + NEW met1 ( 199870 131410 210 ) ( * 133110 210 ) + NEW met1 ( 199410 133110 210 ) ( 199870 * 210 ) + NEW met2 ( 199410 133110 210 ) ( * 137190 210 ) + NEW met1 ( 200330 131070 210 ) ( * 131410 210 ) NEW met2 ( 171350 118830 210 ) ( * 124100 210 ) - NEW met3 ( 171350 124100 450 ) ( 177100 * 450 ) - NEW met2 ( 156170 124780 210 ) ( * 129370 210 ) - NEW met3 ( 156170 124780 450 ) ( 158700 * 450 ) - NEW met3 ( 158700 124100 450 ) ( * 124780 450 ) - NEW met3 ( 158700 124100 450 ) ( 171350 * 450 ) + NEW met3 ( 171350 124100 450 ) ( 171580 * 450 ) + NEW met2 ( 156170 124270 210 ) ( * 129030 210 ) + NEW met1 ( 156170 124270 210 ) ( 162380 * 210 ) + NEW met1 ( 162380 124270 210 ) ( 165830 * 210 ) + NEW met1 ( 165830 123930 210 ) ( * 124270 210 ) + NEW met1 ( 165830 123930 210 ) ( 171350 * 210 ) NEW met3 ( 156170 129540 450 ) ( 157780 * 450 ) - NEW met2 ( 156170 129370 210 ) ( * 129540 210 ) - NEW met2 ( 178710 91290 210 ) ( * 91460 210 ) - NEW met3 ( 177100 91460 450 ) ( 178710 * 450 ) - NEW met4 ( 177100 91460 450 ) ( * 124100 450 ) - NEW met2 ( 164450 88230 210 ) ( * 89420 210 ) - NEW met3 ( 164450 89420 450 ) ( 172500 * 450 ) - NEW met3 ( 172500 89420 450 ) ( * 90100 450 ) - NEW met3 ( 172500 90100 450 ) ( 177100 * 450 ) - NEW met3 ( 177100 90100 450 ) ( * 91460 450 ) - NEW met1 TAPER ( 157090 101830 ) ( 158010 * ) - NEW met2 ( 157090 101660 210 ) ( * 101830 210 ) - NEW met3 ( 157090 101660 450 ) ( 158700 * 450 ) - NEW met4 ( 158700 89420 450 ) ( * 101660 450 ) - NEW met3 ( 158700 89420 450 ) ( 164450 * 450 ) - NEW met5 ( 177100 124100 2400 ) ( 200100 * 2400 ) - NEW met3 ( 152950 147220 450 ) ( 157780 * 450 ) - NEW met2 ( 152950 147220 210 ) ( * 148070 210 ) - NEW met4 ( 157780 129540 450 ) ( * 147220 450 ) - NEW met2 ( 200330 126140 ) M2M3_PR_R - NEW met3 ( 200100 126140 ) M3M4_PR_R + NEW met2 ( 156170 129030 210 ) ( * 129540 210 ) + NEW met2 ( 158010 102170 210 ) ( * 103020 210 ) + NEW met3 ( 157780 103020 450 ) ( 158010 * 450 ) + NEW met4 ( 157780 103020 450 ) ( * 124780 450 ) + NEW met3 ( 156170 124780 450 ) ( 157780 * 450 ) + NEW met2 ( 178710 91290 210 ) ( * 96390 210 ) + NEW met1 ( 165830 96390 210 ) ( 178710 * 210 ) + NEW met1 ( 165830 96390 210 ) ( * 96730 210 ) + NEW met1 ( 158010 96730 210 ) ( 165830 * 210 ) + NEW met2 ( 158010 96730 210 ) ( * 102170 210 ) + NEW met2 ( 164450 88570 210 ) ( * 96390 210 ) + NEW met2 ( 164450 96390 210 ) ( * 96730 210 ) + NEW met5 ( 171580 124100 2400 ) ( 200100 * 2400 ) + NEW met4 ( 157780 144500 450 ) ( * 145180 450 ) + NEW met3 ( 152950 145180 450 ) ( 157780 * 450 ) + NEW met2 ( 152950 145180 210 ) ( * 148070 210 ) + NEW met4 ( 157780 129540 450 ) ( * 144500 450 ) + NEW met1 ( 200330 131070 ) M1M2_PR_R + NEW met2 ( 200330 124780 ) M2M3_PR_R + NEW met3 ( 200100 124780 ) M3M4_PR_R NEW met4 ( 200100 124100 ) M4M5_PR_R - NEW li1 TAPER ( 206310 129030 ) L1M1_PR_R - NEW met1 ( 200330 129030 ) M1M2_PR_R + NEW li1 TAPER ( 206310 129370 ) L1M1_PR_R + NEW met1 ( 200330 129370 ) M1M2_PR_R NEW li1 TAPER ( 206310 113050 ) L1M1_PR_R NEW met1 TAPER ( 206310 113050 ) M1M2_PR_R - NEW met2 ( 206310 113220 ) M2M3_PR_R - NEW met3 ( 200100 113220 ) M3M4_PR_R + NEW met1 TAPER ( 206310 129370 ) M1M2_PR_R NEW li1 TAPER ( 205850 96730 ) L1M1_PR_R NEW met1 TAPER ( 205850 96730 ) M1M2_PR_R + NEW met1 ( 199410 133110 ) M1M2_PR_R NEW li1 TAPER ( 199410 137190 ) L1M1_PR_R NEW met1 TAPER ( 199410 137190 ) M1M2_PR_R NEW li1 TAPER ( 171350 118830 ) L1M1_PR_R NEW met1 TAPER ( 171350 118830 ) M1M2_PR_R NEW met2 ( 171350 124100 ) M2M3_PR_R - NEW met3 ( 177100 124100 ) M3M4_PR_R - NEW met4 ( 177100 124100 ) M4M5_PR_R - NEW li1 TAPER ( 156170 129370 ) L1M1_PR_R - NEW met1 TAPER ( 156170 129370 ) M1M2_PR_R - NEW met2 ( 156170 124780 ) M2M3_PR_R + NEW met3 ( 171580 124100 ) M3M4_PR_R + NEW met4 ( 171580 124100 ) M4M5_PR_R + NEW li1 TAPER ( 156170 129030 ) L1M1_PR_R + NEW met1 TAPER ( 156170 129030 ) M1M2_PR_R + NEW met1 ( 156170 124270 ) M1M2_PR_R + NEW met1 ( 171350 123930 ) M1M2_PR_R NEW met3 ( 157780 129540 ) M3M4_PR_R NEW met2 ( 156170 129540 ) M2M3_PR_R + NEW li1 TAPER ( 158010 102170 ) L1M1_PR_R + NEW met1 TAPER ( 158010 102170 ) M1M2_PR_R + NEW met2 ( 158010 103020 ) M2M3_PR_R + NEW met3 ( 157780 103020 ) M3M4_PR_R + NEW met3 ( 157780 124780 ) M3M4_PR_R + NEW met2 ( 156170 124780 ) M2M3_PR_R NEW li1 TAPER ( 178710 91290 ) L1M1_PR_R NEW met1 TAPER ( 178710 91290 ) M1M2_PR_R - NEW met2 ( 178710 91460 ) M2M3_PR_R - NEW met3 ( 177100 91460 ) M3M4_PR_R - NEW li1 TAPER ( 164450 88230 ) L1M1_PR_R - NEW met1 TAPER ( 164450 88230 ) M1M2_PR_R - NEW met2 ( 164450 89420 ) M2M3_PR_R - NEW li1 TAPER ( 158010 101830 ) L1M1_PR_R - NEW met1 TAPER ( 157090 101830 ) M1M2_PR_R - NEW met2 ( 157090 101660 ) M2M3_PR_R - NEW met3 ( 158700 101660 ) M3M4_PR_R - NEW met3 ( 158700 89420 ) M3M4_PR_R - NEW met3 ( 157780 147220 ) M3M4_PR_R - NEW met2 ( 152950 147220 ) M2M3_PR_R + NEW met1 ( 178710 96390 ) M1M2_PR_R + NEW met1 ( 158010 96730 ) M1M2_PR_R + NEW li1 TAPER ( 164450 88570 ) L1M1_PR_R + NEW met1 TAPER ( 164450 88570 ) M1M2_PR_R + NEW met1 ( 164450 96730 ) M1M2_PR_R + NEW met3 ( 157780 145180 ) M3M4_PR_R + NEW met2 ( 152950 145180 ) M2M3_PR_R NEW li1 TAPER ( 152950 148070 ) L1M1_PR_R NEW met1 TAPER ( 152950 148070 ) M1M2_PR_R - NEW met3 TAPER ( 200330 126140 ) RECT ( 0 -150 390 150 ) ; + NEW met3 TAPER ( 200330 124780 ) RECT ( 0 -150 390 150 ) + NEW met3 TAPER ( 171350 124100 ) RECT ( -390 -150 0 150 ) + NEW met3 TAPER ( 158010 103020 ) RECT ( 0 -150 390 150 ) ; - clknet_2_2__leaf_clk ( _411_ CLK ) ( _413_ CLK ) ( _415_ CLK ) ( _416_ CLK ) ( _417_ CLK ) ( _421_ CLK ) ( _430_ CLK ) ( _431_ CLK ) ( _433_ CLK ) ( _437_ CLK ) ( clkbuf_2_2__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met2 ( 125810 183770 210 ) ( * 183940 210 ) - NEW met3 ( 125810 183940 450 ) ( 130180 * 450 ) - NEW met4 ( 130180 183940 450 ) ( * 212500 450 ) - NEW met2 ( 130870 179690 210 ) ( * 183940 210 ) - NEW met3 ( 130180 183940 450 ) ( 130870 * 450 ) - NEW met1 TAPER ( 125810 199750 ) ( 126270 * ) - NEW met2 ( 125810 199580 210 ) ( * 199750 210 ) - NEW met3 ( 125810 199580 450 ) ( 130180 * 450 ) - NEW met2 ( 109250 183770 210 ) ( * 183940 210 ) - NEW met3 ( 109250 183940 450 ) ( 125810 * 450 ) - NEW met2 ( 96830 183770 210 ) ( * 186150 210 ) - NEW met1 ( 96830 183770 210 ) ( 107410 * 210 ) - NEW met1 TAPER ( 107410 183770 ) ( 109250 * ) - NEW met3 ( 96830 179860 450 ) ( 97060 * 450 ) - NEW met2 ( 96830 179860 210 ) ( * 183770 210 ) - NEW met1 TAPER ( 111090 199750 ) ( 111550 * ) - NEW met2 ( 111090 199580 210 ) ( * 199750 210 ) - NEW met3 ( 111090 199580 450 ) ( 125810 * 450 ) - NEW met3 ( 97060 151300 450 ) ( 100050 * 450 ) + + ROUTED met2 ( 96830 179860 210 ) ( * 186150 210 ) + NEW met3 ( 96830 179860 450 ) ( 99820 * 450 ) + NEW met1 ( 97060 183430 210 ) ( 107410 * 210 ) + NEW met1 TAPER ( 107410 183430 ) ( 109250 * ) + NEW met1 ( 96830 183430 210 ) ( 97060 * 210 ) + NEW met1 TAPER ( 110630 199750 ) ( 111550 * ) + NEW met2 ( 110630 187340 210 ) ( * 199750 210 ) + NEW met2 ( 110170 187340 210 ) ( 110630 * 210 ) + NEW met2 ( 110170 183260 210 ) ( * 187340 210 ) + NEW met2 ( 109250 183260 210 ) ( 110170 * 210 ) + NEW met2 ( 109250 183260 210 ) ( * 183430 210 ) + NEW met2 ( 125810 183770 210 ) ( * 186150 210 ) + NEW met1 ( 116150 186150 210 ) ( 125810 * 210 ) + NEW met1 ( 110170 186150 210 ) ( 116150 * 210 ) + NEW met2 ( 126270 197370 210 ) ( * 199750 210 ) + NEW met1 ( 118450 197370 210 ) ( 126270 * 210 ) + NEW met1 ( 110630 197370 210 ) ( 118450 * 210 ) + NEW met1 ( 125810 180370 210 ) ( 130870 * 210 ) + NEW met2 ( 125810 180370 210 ) ( * 183770 210 ) + NEW met2 ( 130870 200090 210 ) ( * 207230 210 ) + NEW met2 ( 130870 197370 210 ) ( * 200090 210 ) + NEW met1 ( 126270 197370 210 ) ( 130870 * 210 ) + NEW met4 ( 99820 151300 450 ) ( * 164390 450 ) + NEW met3 ( 99820 151300 450 ) ( 100050 * 450 ) NEW met2 ( 100050 151130 210 ) ( * 151300 210 ) - NEW met4 ( 97060 151300 450 ) ( * 179860 450 ) - NEW met2 ( 137770 210970 210 ) ( * 212500 210 ) - NEW met2 ( 150650 210970 210 ) ( * 212500 210 ) - NEW met3 ( 137770 212500 450 ) ( 150650 * 450 ) - NEW met1 ( 130870 179690 210 ) ( 131330 * 210 ) - NEW met3 ( 130180 212500 450 ) ( 137770 * 450 ) - NEW met2 ( 140990 159290 210 ) ( * 175270 210 ) + NEW met4 ( 99820 164390 450 ) ( * 179860 450 ) + NEW met1 ( 130870 179350 210 ) ( * 180370 210 ) + NEW met1 ( 130870 207230 210 ) ( 131100 * 210 ) + NEW met2 ( 137770 208250 210 ) ( * 210630 210 ) + NEW met1 ( 137770 208250 210 ) ( 143290 * 210 ) + NEW met1 ( 143290 208250 210 ) ( 150650 * 210 ) + NEW met2 ( 150650 208250 210 ) ( * 210630 210 ) + NEW met1 ( 131100 207230 210 ) ( * 207570 210 ) + NEW met1 ( 131100 207570 210 ) ( 137770 * 210 ) + NEW met1 ( 137770 207570 210 ) ( * 207910 210 ) + NEW met1 ( 137770 207910 210 ) ( * 208250 210 ) + NEW met2 ( 140990 167620 210 ) ( * 175270 210 ) + NEW met2 ( 140990 159290 210 ) ( * 167620 210 ) NEW met1 ( 140990 159290 210 ) ( 142140 * 210 ) NEW met1 TAPER ( 142140 159290 ) ( 143750 * ) NEW met1 TAPER ( 132710 172890 ) ( 134550 * ) - NEW met1 ( 134550 172890 210 ) ( 140990 * 210 ) - NEW met1 ( 131330 179350 210 ) ( 132710 * 210 ) + NEW met1 ( 134550 172890 210 ) ( 139380 * 210 ) + NEW met1 ( 139380 172890 210 ) ( 140990 * 210 ) NEW met2 ( 132710 172890 210 ) ( * 179350 210 ) - NEW met1 ( 131330 179350 210 ) ( * 179690 210 ) - NEW li1 TAPER ( 125810 183770 ) L1M1_PR_R - NEW met1 TAPER ( 125810 183770 ) M1M2_PR_R - NEW met2 ( 125810 183940 ) M2M3_PR_R - NEW met3 ( 130180 183940 ) M3M4_PR_R - NEW met3 ( 130180 212500 ) M3M4_PR_R - NEW met1 ( 130870 179690 ) M1M2_PR_R - NEW met2 ( 130870 183940 ) M2M3_PR_R - NEW li1 TAPER ( 126270 199750 ) L1M1_PR_R - NEW met1 TAPER ( 125810 199750 ) M1M2_PR_R - NEW met2 ( 125810 199580 ) M2M3_PR_R - NEW met3 ( 130180 199580 ) M3M4_PR_R - NEW li1 TAPER ( 109250 183770 ) L1M1_PR_R - NEW met1 TAPER ( 109250 183770 ) M1M2_PR_R - NEW met2 ( 109250 183940 ) M2M3_PR_R + NEW met1 ( 130870 179350 210 ) ( 132710 * 210 ) NEW li1 TAPER ( 96830 186150 ) L1M1_PR_R NEW met1 TAPER ( 96830 186150 ) M1M2_PR_R - NEW met1 ( 96830 183770 ) M1M2_PR_R - NEW met3 ( 97060 179860 ) M3M4_PR_R NEW met2 ( 96830 179860 ) M2M3_PR_R + NEW met3 ( 99820 179860 ) M3M4_PR_R + NEW li1 TAPER ( 109250 183430 ) L1M1_PR_R + NEW met1 ( 96830 183430 ) M1M2_PR_R NEW li1 TAPER ( 111550 199750 ) L1M1_PR_R - NEW met1 TAPER ( 111090 199750 ) M1M2_PR_R - NEW met2 ( 111090 199580 ) M2M3_PR_R - NEW met3 ( 97060 151300 ) M3M4_PR_R + NEW met1 TAPER ( 110630 199750 ) M1M2_PR_R + NEW met1 TAPER ( 109250 183430 ) M1M2_PR_R + NEW li1 TAPER ( 125810 183770 ) L1M1_PR_R + NEW met1 TAPER ( 125810 183770 ) M1M2_PR_R + NEW met1 ( 125810 186150 ) M1M2_PR_R + NEW met1 ( 110170 186150 ) M1M2_PR_R + NEW li1 TAPER ( 126270 199750 ) L1M1_PR_R + NEW met1 TAPER ( 126270 199750 ) M1M2_PR_R + NEW met1 ( 126270 197370 ) M1M2_PR_R + NEW met1 ( 110630 197370 ) M1M2_PR_R + NEW met1 ( 125810 180370 ) M1M2_PR_R + NEW met1 ( 130870 207230 ) M1M2_PR_R + NEW met1 ( 130870 197370 ) M1M2_PR_R + NEW met3 ( 99820 151300 ) M3M4_PR_R NEW met2 ( 100050 151300 ) M2M3_PR_R NEW li1 TAPER ( 100050 151130 ) L1M1_PR_R NEW met1 TAPER ( 100050 151130 ) M1M2_PR_R - NEW li1 TAPER ( 137770 210970 ) L1M1_PR_R - NEW met1 TAPER ( 137770 210970 ) M1M2_PR_R - NEW met2 ( 137770 212500 ) M2M3_PR_R - NEW li1 TAPER ( 150650 210970 ) L1M1_PR_R - NEW met1 TAPER ( 150650 210970 ) M1M2_PR_R - NEW met2 ( 150650 212500 ) M2M3_PR_R + NEW li1 TAPER ( 137770 210630 ) L1M1_PR_R + NEW met1 TAPER ( 137770 210630 ) M1M2_PR_R + NEW met1 ( 137770 208250 ) M1M2_PR_R + NEW met1 ( 150650 208250 ) M1M2_PR_R + NEW li1 TAPER ( 150650 210630 ) L1M1_PR_R + NEW met1 TAPER ( 150650 210630 ) M1M2_PR_R NEW li1 TAPER ( 140990 175270 ) L1M1_PR_R NEW met1 TAPER ( 140990 175270 ) M1M2_PR_R NEW met1 ( 140990 159290 ) M1M2_PR_R @@ -492,118 +532,127 @@ NETS 8 ; NEW met1 ( 140990 172890 ) M1M2_PR_R NEW met1 ( 132710 179350 ) M1M2_PR_R NEW met1 TAPER ( 132710 172890 ) M1M2_PR_R - NEW met4 TAPER ( 130180 199580 ) RECT ( -150 -620 150 0 ) - NEW met3 TAPER ( 97060 179860 ) RECT ( 0 -150 390 150 ) ; + NEW met3 TAPER ( 99820 151300 ) RECT ( -390 -150 0 150 ) ; - clknet_2_3__leaf_clk ( _412_ CLK ) ( _419_ CLK ) ( _420_ CLK ) ( _422_ CLK ) ( _435_ CLK ) ( _436_ CLK ) ( _438_ CLK ) ( _439_ CLK ) ( clkbuf_2_3__f_clk X ) + USE CLOCK + NONDEFAULTRULE NDR_3W_3S - + ROUTED met1 TAPER ( 191130 191590 ) ( 192050 * ) - NEW met2 ( 191130 191420 210 ) ( * 191590 210 ) - NEW met3 ( 191130 191420 450 ) ( 192740 * 450 ) - NEW met1 ( 192970 194310 210 ) ( 204010 * 210 ) + + ROUTED met2 ( 192050 186660 210 ) ( * 191590 210 ) + NEW met3 ( 191820 186660 450 ) ( 192050 * 450 ) + NEW met1 ( 193660 194310 210 ) ( 204010 * 210 ) NEW met1 TAPER ( 204010 194310 ) ( 205850 * ) - NEW met2 ( 192970 191420 210 ) ( * 194310 210 ) - NEW met3 ( 192740 191420 450 ) ( 192970 * 450 ) - NEW met2 ( 201250 164390 210 ) ( * 165580 210 ) - NEW met3 ( 201250 165580 450 ) ( 206310 * 450 ) - NEW met2 ( 206310 165580 210 ) ( 207230 * 210 ) - NEW met2 ( 207230 165580 210 ) ( * 177990 210 ) - NEW met3 ( 192740 165580 450 ) ( 201250 * 450 ) - NEW met1 TAPER ( 191130 153850 ) ( 192050 * ) - NEW met2 ( 191130 153850 210 ) ( * 154020 210 ) - NEW met3 ( 191130 154020 450 ) ( 192740 * 450 ) - NEW met4 ( 192740 154020 450 ) ( * 165580 450 ) - NEW met4 ( 192740 165580 450 ) ( * 191420 450 ) - NEW met3 ( 163990 207060 450 ) ( 164220 * 450 ) - NEW met2 ( 163990 207060 210 ) ( * 210630 210 ) - NEW met3 ( 154790 178500 450 ) ( 164220 * 450 ) - NEW met2 ( 154790 178330 210 ) ( * 178500 210 ) - NEW met2 ( 173190 175270 210 ) ( * 178500 210 ) - NEW met3 ( 164220 178500 450 ) ( 173190 * 450 ) - NEW met1 TAPER ( 170890 170510 ) ( 171810 * ) - NEW met2 ( 171810 170510 210 ) ( * 174420 210 ) - NEW met2 ( 171810 174420 210 ) ( 173190 * 210 ) - NEW met2 ( 173190 174420 210 ) ( * 175270 210 ) - NEW met2 ( 171810 168980 210 ) ( * 170510 210 ) - NEW met4 ( 164220 178500 450 ) ( * 207060 450 ) - NEW met3 ( 171810 168980 450 ) ( 192740 * 450 ) + NEW met1 ( 192050 194310 210 ) ( 193660 * 210 ) + NEW met2 ( 192050 191590 210 ) ( * 194310 210 ) + NEW met2 ( 201250 164730 210 ) ( * 164900 210 ) + NEW met3 ( 201250 164900 450 ) ( 206770 * 450 ) + NEW met2 ( 206770 164900 210 ) ( * 166940 210 ) + NEW met2 ( 206770 166940 210 ) ( 207230 * 210 ) + NEW met2 ( 207230 166940 210 ) ( * 177990 210 ) + NEW met3 ( 191820 179180 450 ) ( 202860 * 450 ) + NEW met3 ( 202860 179180 450 ) ( 207230 * 450 ) + NEW met2 ( 207230 177990 210 ) ( * 179180 210 ) + NEW met2 ( 192050 153850 210 ) ( * 158610 210 ) + NEW met1 ( 192050 158610 210 ) ( 196650 * 210 ) + NEW met1 ( 196650 158610 210 ) ( * 158950 210 ) + NEW met1 ( 196650 158950 210 ) ( 201250 * 210 ) + NEW met2 ( 201250 158950 210 ) ( * 164730 210 ) + NEW met1 ( 184690 158610 210 ) ( 192050 * 210 ) + NEW met4 ( 191820 179180 450 ) ( * 186660 450 ) + NEW met3 ( 164910 210460 450 ) ( 165140 * 450 ) + NEW met3 ( 163990 210460 450 ) ( 164910 * 450 ) + NEW met2 ( 163990 210460 210 ) ( * 210630 210 ) + NEW met1 TAPER ( 171350 169490 ) ( 172270 * ) + NEW met2 ( 172270 160140 210 ) ( * 169490 210 ) + NEW met2 ( 172270 158610 210 ) ( * 160140 210 ) + NEW met2 ( 173190 172550 210 ) ( * 175270 210 ) + NEW met1 ( 172270 172550 210 ) ( 173190 * 210 ) + NEW met1 ( 172270 172210 210 ) ( * 172550 210 ) + NEW met2 ( 172270 169490 210 ) ( * 172210 210 ) + NEW met3 ( 165140 175780 450 ) ( 170660 * 450 ) + NEW met3 ( 170660 175780 450 ) ( 173190 * 450 ) + NEW met2 ( 173190 175270 210 ) ( * 175780 210 ) + NEW met2 ( 154790 175780 210 ) ( * 177990 210 ) + NEW met3 ( 154790 175780 450 ) ( 160770 * 450 ) + NEW met3 ( 160770 175780 450 ) ( 165140 * 450 ) + NEW met4 ( 165140 175780 450 ) ( * 210460 450 ) + NEW met1 ( 172270 158610 210 ) ( 184690 * 210 ) NEW li1 TAPER ( 192050 191590 ) L1M1_PR_R - NEW met1 TAPER ( 191130 191590 ) M1M2_PR_R - NEW met2 ( 191130 191420 ) M2M3_PR_R - NEW met3 ( 192740 191420 ) M3M4_PR_R + NEW met1 TAPER ( 192050 191590 ) M1M2_PR_R + NEW met2 ( 192050 186660 ) M2M3_PR_R + NEW met3 ( 191820 186660 ) M3M4_PR_R NEW li1 TAPER ( 205850 194310 ) L1M1_PR_R - NEW met1 ( 192970 194310 ) M1M2_PR_R - NEW met2 ( 192970 191420 ) M2M3_PR_R - NEW li1 TAPER ( 201250 164390 ) L1M1_PR_R - NEW met1 TAPER ( 201250 164390 ) M1M2_PR_R - NEW met2 ( 201250 165580 ) M2M3_PR_R - NEW met2 ( 206310 165580 ) M2M3_PR_R + NEW met1 ( 192050 194310 ) M1M2_PR_R + NEW li1 TAPER ( 201250 164730 ) L1M1_PR_R + NEW met1 TAPER ( 201250 164730 ) M1M2_PR_R + NEW met2 ( 201250 164900 ) M2M3_PR_R + NEW met2 ( 206770 164900 ) M2M3_PR_R NEW li1 TAPER ( 207230 177990 ) L1M1_PR_R NEW met1 TAPER ( 207230 177990 ) M1M2_PR_R - NEW met3 ( 192740 165580 ) M3M4_PR_R + NEW met3 ( 191820 179180 ) M3M4_PR_R + NEW met2 ( 207230 179180 ) M2M3_PR_R NEW li1 TAPER ( 192050 153850 ) L1M1_PR_R - NEW met1 TAPER ( 191130 153850 ) M1M2_PR_R - NEW met2 ( 191130 154020 ) M2M3_PR_R - NEW met3 ( 192740 154020 ) M3M4_PR_R - NEW met3 ( 192740 168980 ) M3M4_PR_R - NEW met3 ( 164220 207060 ) M3M4_PR_R - NEW met2 ( 163990 207060 ) M2M3_PR_R + NEW met1 TAPER ( 192050 153850 ) M1M2_PR_R + NEW met1 ( 192050 158610 ) M1M2_PR_R + NEW met1 ( 201250 158950 ) M1M2_PR_R + NEW met3 ( 165140 210460 ) M3M4_PR_R + NEW met2 ( 163990 210460 ) M2M3_PR_R NEW li1 TAPER ( 163990 210630 ) L1M1_PR_R NEW met1 TAPER ( 163990 210630 ) M1M2_PR_R - NEW met3 ( 164220 178500 ) M3M4_PR_R - NEW met2 ( 154790 178500 ) M2M3_PR_R - NEW li1 TAPER ( 154790 178330 ) L1M1_PR_R - NEW met1 TAPER ( 154790 178330 ) M1M2_PR_R + NEW li1 TAPER ( 171350 169490 ) L1M1_PR_R + NEW met1 TAPER ( 172270 169490 ) M1M2_PR_R + NEW met1 ( 172270 158610 ) M1M2_PR_R NEW li1 TAPER ( 173190 175270 ) L1M1_PR_R NEW met1 TAPER ( 173190 175270 ) M1M2_PR_R - NEW met2 ( 173190 178500 ) M2M3_PR_R - NEW li1 TAPER ( 170890 170510 ) L1M1_PR_R - NEW met1 TAPER ( 171810 170510 ) M1M2_PR_R - NEW met2 ( 171810 168980 ) M2M3_PR_R - NEW met3 TAPER ( 192970 191420 ) RECT ( 0 -150 570 150 ) - NEW met4 TAPER ( 192740 168980 ) RECT ( -150 -620 150 0 ) - NEW met3 TAPER ( 164220 207060 ) RECT ( 0 -150 390 150 ) ; + NEW met1 ( 173190 172550 ) M1M2_PR_R + NEW met1 TAPER ( 172270 172210 ) M1M2_PR_R + NEW met3 ( 165140 175780 ) M3M4_PR_R + NEW met2 ( 173190 175780 ) M2M3_PR_R + NEW li1 TAPER ( 154790 177990 ) L1M1_PR_R + NEW met1 TAPER ( 154790 177990 ) M1M2_PR_R + NEW met2 ( 154790 175780 ) M2M3_PR_R + NEW met3 TAPER ( 192050 186660 ) RECT ( 0 -150 390 150 ) ; - ctrl.state.out\[1\] ( _412_ Q ) ( _290_ B2 ) ( _285_ A ) + USE SIGNAL - + ROUTED met2 ( 170890 205530 ) ( * 209950 ) - NEW met1 ( 167670 207910 ) ( 170890 * ) + + ROUTED met2 ( 170890 205530 ) ( * 208250 ) + NEW met2 ( 170890 208250 ) ( * 209950 ) + NEW met1 ( 167670 208250 ) ( 170890 * ) NEW li1 ( 170890 205530 ) L1M1_PR_MR NEW met1 ( 170890 205530 ) M1M2_PR NEW li1 ( 170890 209950 ) L1M1_PR_MR NEW met1 ( 170890 209950 ) M1M2_PR - NEW li1 ( 167670 207910 ) L1M1_PR_MR - NEW met1 ( 170890 207910 ) M1M2_PR ; + NEW li1 ( 167670 208250 ) L1M1_PR_MR + NEW met1 ( 170890 208250 ) M1M2_PR ; - ctrl.state.out\[2\] ( _413_ Q ) ( _297_ A ) ( _293_ A ) ( _290_ A1 ) ( _284_ A ) ( _279_ A ) + USE SIGNAL - + ROUTED met1 ( 158010 191590 ) ( 158470 * ) - NEW met1 ( 158470 191590 ) ( * 192610 ) - NEW met1 ( 158470 192610 ) ( 162150 * ) - NEW met1 ( 162150 192610 ) ( * 193630 ) - NEW met1 ( 162150 193630 ) ( 167210 * ) - NEW met1 ( 167210 193630 ) ( * 194650 ) - NEW met1 ( 160310 200090 ) ( * 200430 ) - NEW met1 ( 160310 200430 ) ( 165830 * ) - NEW met1 ( 165830 200090 ) ( * 200430 ) - NEW met2 ( 165830 193630 ) ( * 200090 ) + + ROUTED met1 ( 158010 191590 ) ( 165830 * ) + NEW met2 ( 165830 191590 ) ( * 194650 ) + NEW met1 ( 165830 194650 ) ( 167210 * ) + NEW met2 ( 158010 194650 ) ( * 200090 ) + NEW met2 ( 158010 191590 ) ( * 194650 ) NEW met1 ( 165830 207570 ) ( 166290 * ) NEW met2 ( 165830 207060 ) ( * 207570 ) NEW met2 ( 165370 207060 ) ( 165830 * ) NEW met2 ( 165370 200430 ) ( * 207060 ) - NEW met2 ( 158470 207060 ) ( * 209950 ) - NEW met2 ( 158470 207060 ) ( 158930 * ) - NEW met2 ( 158930 200430 ) ( * 207060 ) - NEW met1 ( 158930 200430 ) ( 160310 * ) - NEW met1 ( 158010 213350 ) ( 158470 * ) - NEW met2 ( 158470 209950 ) ( * 213350 ) + NEW met1 ( 160540 200430 ) ( 165370 * ) + NEW met1 ( 160310 200430 ) ( 160540 * ) + NEW met1 ( 160310 200090 ) ( * 200430 ) + NEW met1 ( 158470 209950 ) ( 164220 * ) + NEW met1 ( 164220 209950 ) ( 165830 * ) + NEW met2 ( 165830 207570 ) ( * 209950 ) + NEW met2 ( 158010 211650 ) ( * 213350 ) + NEW met1 ( 157550 211650 ) ( 158010 * ) NEW li1 ( 158010 191590 ) L1M1_PR_MR + NEW met1 ( 165830 191590 ) M1M2_PR + NEW met1 ( 165830 194650 ) M1M2_PR NEW li1 ( 167210 194650 ) L1M1_PR_MR - NEW li1 ( 160310 200090 ) L1M1_PR_MR - NEW met1 ( 165830 200090 ) M1M2_PR - NEW met1 ( 165830 193630 ) M1M2_PR + NEW li1 ( 158010 200090 ) L1M1_PR_MR + NEW met1 ( 158010 200090 ) M1M2_PR + NEW met1 ( 158010 191590 ) M1M2_PR NEW li1 ( 166290 207570 ) L1M1_PR_MR NEW met1 ( 165830 207570 ) M1M2_PR NEW met1 ( 165370 200430 ) M1M2_PR + NEW li1 ( 160310 200090 ) L1M1_PR_MR NEW li1 ( 158470 209950 ) L1M1_PR_MR - NEW met1 ( 158470 209950 ) M1M2_PR - NEW met1 ( 158930 200430 ) M1M2_PR + NEW met1 ( 165830 209950 ) M1M2_PR NEW li1 ( 158010 213350 ) L1M1_PR_MR - NEW met1 ( 158470 213350 ) M1M2_PR ; + NEW met1 ( 158010 213350 ) M1M2_PR + NEW met1 ( 158010 211650 ) M1M2_PR + NEW li1 ( 157550 211650 ) L1M1_PR_MR ; END NETS END DESIGN diff --git a/src/drt/test/obstruction.defok b/src/drt/test/obstruction.defok index e467afe317a..fa55754b2f4 100644 --- a/src/drt/test/obstruction.defok +++ b/src/drt/test/obstruction.defok @@ -35,14 +35,19 @@ BLOCKAGES 1 ; END BLOCKAGES NETS 1 ; - clk ( PIN clk ) ( clkbuf_0_clk A ) ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) + USE SIGNAL - + ROUTED met5 ( 2400 155030 0 ) ( 21600 * ) + + ROUTED met2 ( 145200 144855 ) ( * 147630 ) + NEW met5 ( 2400 155030 0 ) ( 21600 * ) + NEW met3 ( 21600 155030 ) ( 25680 * ) NEW met2 ( 112080 154845 ) ( * 155030 ) + NEW met3 ( 108960 155030 ) ( 112080 * ) NEW met1 ( 112080 158175 ) ( 135600 * ) NEW met2 ( 112080 155030 ) ( * 158175 ) - NEW met1 ( 135600 158175 ) ( 144240 * ) + NEW met1 ( 138720 158175 ) ( 144240 * ) + NEW met1 ( 135600 158175 ) ( 138720 * ) NEW met1 ( 144240 158175 ) ( 145200 * ) - NEW met2 ( 145200 144855 ) ( * 158175 ) - NEW met3 ( 21600 155030 ) ( 112080 * ) + NEW met2 ( 145200 147630 ) ( * 158175 ) + NEW met3 ( 25680 155030 ) ( 75360 * ) + NEW met3 ( 75360 155030 ) ( 108960 * ) NEW li1 ( 145200 144855 ) L1M1_PR_MR NEW met1 ( 145200 144855 ) M1M2_PR NEW met3 ( 21600 155030 ) M3M4_PR diff --git a/src/drt/test/single_step.defok b/src/drt/test/single_step.defok new file mode 100644 index 00000000000..43b1122a129 --- /dev/null +++ b/src/drt/test/single_step.defok @@ -0,0 +1,156 @@ +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN ispd18_sample ; +UNITS DISTANCE MICRONS 2000 ; +DIEAREA ( 83600 71820 ) ( 104400 91200 ) ; +ROW CORE_ROW_0 CoreSite 83600 71820 N DO 52 BY 1 STEP 400 0 ; +ROW CORE_ROW_1 CoreSite 83600 75240 FS DO 52 BY 1 STEP 400 0 ; +ROW CORE_ROW_2 CoreSite 83600 78660 N DO 52 BY 1 STEP 400 0 ; +ROW CORE_ROW_3 CoreSite 83600 82080 FS DO 52 BY 1 STEP 400 0 ; +ROW CORE_ROW_4 CoreSite 83600 85500 N DO 52 BY 1 STEP 400 0 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal9 ; +TRACKS Y 72770 DO 25 STEP 760 LAYER Metal9 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal8 ; +TRACKS Y 72580 DO 33 STEP 570 LAYER Metal8 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal7 ; +TRACKS Y 72580 DO 33 STEP 570 LAYER Metal7 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal6 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal6 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal5 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal5 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal4 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal4 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal3 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal3 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal2 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal2 ; +TRACKS X 83800 DO 52 STEP 400 LAYER Metal1 ; +TRACKS Y 72010 DO 51 STEP 380 LAYER Metal1 ; +GCELLGRID X 83600 DO 3 STEP 6000 ; +GCELLGRID Y 71820 DO 3 STEP 5700 ; +COMPONENTS 22 ; + - inst2015 NAND3X2 + PLACED ( 88000 78660 ) N ; + - inst2591 NAND4X2 + PLACED ( 100000 71820 ) N ; + - inst2908 OR4X1 + PLACED ( 85600 75240 ) FS ; + - inst3428 BUFX3 + PLACED ( 86000 82080 ) FS ; + - inst3444 BUFX3 + PLACED ( 96800 82080 ) FS ; + - inst3502 NOR4X2 + PLACED ( 92800 75240 ) FS ; + - inst4062 AOI222X1 + PLACED ( 96000 85500 ) N ; + - inst4132 NAND4X1 + PLACED ( 102000 85500 ) N ; + - inst4183 NOR4X4 + PLACED ( 96800 75240 ) FS ; + - inst4189 AOI22X2 + PLACED ( 85200 71820 ) N ; + - inst4382 NAND4X1 + PLACED ( 84000 78660 ) N ; + - inst4597 NAND4X1 + PLACED ( 94400 71820 ) N ; + - inst4678 NOR2X1 + PLACED ( 90800 82080 ) FS ; + - inst5195 AOI221X1 + PLACED ( 89600 71820 ) N ; + - inst5275 AOI22X1 + PLACED ( 89600 75240 ) FS ; + - inst5333 AOI221X1 + PLACED ( 89200 85500 ) N ; + - inst5638 BUFX6 + PLACED ( 96000 78660 ) N ; + - inst5821 NAND3X1 + PLACED ( 84400 85500 ) N ; + - inst6050 NAND4X1 + PLACED ( 97200 71820 ) N ; + - inst6286 AO22XL + PLACED ( 100000 78660 ) N ; + - inst6458 AOI221X2 + PLACED ( 99200 82080 ) FS ; + - inst7234 AO22XL + PLACED ( 93200 82080 ) FS ; +END COMPONENTS +NETS 11 ; + - net1230 ( inst7234 Y ) ( inst5195 C0 ) + USE SIGNAL + + ROUTED Metal2 ( 92200 73530 ) ( * 75810 ) + NEW Metal1 ( 92200 75810 ) ( 94200 * ) + NEW Metal1 ( 94200 75810 ) ( 94600 * ) + NEW Metal2 ( 94600 75810 ) ( * 78850 ) + NEW Metal2 ( 94600 78850 ) ( 95800 * ) + NEW Metal2 ( 95800 78850 ) ( * 83790 ) + NEW Metal1 ( 92200 73530 ) VIA12_1C_V + NEW Metal1 ( 92200 75810 ) VIA12_1C + NEW Metal1 ( 94600 75810 ) VIA12_1C + NEW Metal1 ( 95800 83790 ) VIA12_1C_V ; + - net1231 ( inst5821 B ) ( inst5275 Y ) + USE SIGNAL + + ROUTED Metal3 ( 85800 77710 ) ( 91000 * ) + NEW Metal2 ( 85800 77710 ) ( * 86450 ) + NEW Metal2 ( 85400 86450 ) ( 85800 * ) + NEW Metal1 ( 91000 77710 ) VIA12_1C_V + NEW Metal2 ( 91000 77710 ) VIA23_1C + NEW Metal2 ( 85800 77710 ) VIA23_1C + NEW Metal1 ( 85400 86450 ) VIA12_1C_V + NEW Metal2 ( 91000 77710 ) RECT ( -70 -442 70 0 ) ; + - net1232 ( inst4382 C ) ( inst4062 Y ) + USE SIGNAL + + ROUTED Metal3 ( 85400 79990 ) ( 98200 * ) + NEW Metal2 ( 98200 79990 ) ( * 86450 ) + NEW Metal1 ( 85400 79990 ) VIA12_1C_V + NEW Metal2 ( 85400 79990 ) VIA23_1C + NEW Metal2 ( 98200 79990 ) VIA23_1C + NEW Metal1 ( 98200 86450 ) VIA12_1C + NEW Metal2 ( 85400 79990 ) RECT ( -70 -442 70 0 ) ; + - net1233 ( inst6050 A ) ( inst4189 Y ) + USE SIGNAL + + ROUTED Metal2 ( 88200 72770 ) ( * 73150 ) + NEW Metal3 ( 88200 73150 ) ( 97800 * ) + NEW Metal1 ( 88200 72770 ) VIA12_1C + NEW Metal2 ( 88200 73150 ) VIA23_1C + NEW Metal1 ( 97800 73150 ) VIA12_1C + NEW Metal2 ( 97800 73150 ) VIA23_1C + NEW Metal2 ( 97800 73150 ) RECT ( -70 -442 70 0 ) ; + - net1234 ( inst6458 Y ) ( inst4597 B ) + USE SIGNAL + + ROUTED Metal3 ( 95400 73530 ) ( 101400 * ) + NEW Metal2 ( 101400 73530 ) ( * 83410 ) + NEW Metal1 ( 95400 73530 ) VIA12_1C_V + NEW Metal2 ( 95400 73530 ) VIA23_1C + NEW Metal2 ( 101400 73530 ) VIA23_1C + NEW Metal1 ( 101400 83410 ) VIA12_1C + NEW Metal2 ( 95400 73530 ) RECT ( -70 -442 70 0 ) ; + - net1235 ( inst4183 A ) ( inst4132 Y ) + USE SIGNAL + + ROUTED Metal2 ( 103000 84930 ) ( * 87590 ) + NEW Metal1 ( 100600 84930 ) ( 103000 * ) + NEW Metal1 ( 98600 84930 ) ( 100600 * ) + NEW Metal2 ( 98600 76950 ) ( * 84930 ) + NEW Metal1 ( 103000 87590 ) VIA12_1C + NEW Metal1 ( 103000 84930 ) VIA12_1C + NEW Metal1 ( 98600 84930 ) VIA12_1C + NEW Metal1 ( 98600 76950 ) VIA12_1C_V ; + - net1236 ( inst2908 D ) ( inst2591 Y ) + USE SIGNAL + + ROUTED Metal3 ( 85800 76950 ) ( 102600 * ) + NEW Metal2 ( 102600 72770 ) ( * 76950 ) + NEW Metal1 ( 85800 76950 ) VIA12_1C_V + NEW Metal2 ( 85800 76950 ) VIA23_1C + NEW Metal2 ( 102600 76950 ) VIA23_1C + NEW Metal1 ( 102600 72770 ) VIA12_1C + NEW Metal2 ( 85800 76950 ) RECT ( -70 -442 70 0 ) ; + - net1237 ( inst5638 A ) ( inst4678 Y ) + USE SIGNAL + + ROUTED Metal3 ( 92200 80750 ) ( 99000 * ) + NEW Metal2 ( 92200 80750 ) ( * 83030 ) + NEW Metal1 ( 99000 80750 ) VIA12_1C + NEW Metal2 ( 99000 80750 ) VIA23_1C + NEW Metal2 ( 92200 80750 ) VIA23_1C + NEW Metal1 ( 92200 83030 ) VIA12_1C_V + NEW Metal2 ( 99000 80750 ) RECT ( -70 -442 70 0 ) ; + - net1238 ( inst3444 Y ) ( inst3428 A ) + USE SIGNAL + + ROUTED Metal3 ( 87800 83410 ) ( 88600 * ) + NEW Metal3 ( 88600 83410 ) ( 97400 * ) + NEW Metal1 ( 87800 83410 ) VIA12_1C_V + NEW Metal2 ( 87800 83410 ) VIA23_1C + NEW Metal1 ( 97400 83410 ) VIA12_1C_V + NEW Metal2 ( 97400 83410 ) VIA23_1C + NEW Metal2 ( 87800 83410 ) RECT ( -70 -442 70 0 ) + NEW Metal2 ( 97400 83410 ) RECT ( -70 -442 70 0 ) ; + - net1239 ( inst6286 Y ) ( inst5333 C0 ) + USE SIGNAL + + ROUTED Metal3 ( 91800 80370 ) ( 102600 * ) + NEW Metal2 ( 91800 80370 ) ( * 86830 ) + NEW Metal1 ( 102600 80370 ) VIA12_1C_V + NEW Metal2 ( 102600 80370 ) VIA23_1C + NEW Metal2 ( 91800 80370 ) VIA23_1C + NEW Metal1 ( 91800 86830 ) VIA12_1C_V + NEW Metal2 ( 102600 80370 ) RECT ( -70 -442 70 0 ) ; + - net1240 ( inst3502 A ) ( inst2015 Y ) + USE SIGNAL + + ROUTED Metal2 ( 91000 80750 ) ( 91400 * ) + NEW Metal2 ( 91400 78090 ) ( * 80750 ) + NEW Metal1 ( 91400 78090 ) ( 93400 * ) + NEW Metal1 ( 93400 78090 ) ( 95400 * ) + NEW Metal2 ( 95400 78090 ) ( 95800 * ) + NEW Metal2 ( 95800 76950 ) ( * 78090 ) + NEW Metal2 ( 95800 76950 ) ( 96200 * ) + NEW Metal1 ( 91000 80750 ) VIA12_1C + NEW Metal1 ( 91400 78090 ) VIA12_1C + NEW Metal1 ( 95400 78090 ) VIA12_1C + NEW Metal1 ( 96200 76950 ) VIA12_1C_V ; +END NETS +END DESIGN diff --git a/src/drt/test/single_step.py b/src/drt/test/single_step.py index 06c4c866b18..de122217081 100644 --- a/src/drt/test/single_step.py +++ b/src/drt/test/single_step.py @@ -25,4 +25,4 @@ def_file = helpers.make_result_file("single_step.def") design.writeDef(def_file) -helpers.diff_files("ispd18_sample.defok", def_file) +helpers.diff_files("single_step.defok", def_file) diff --git a/src/drt/test/single_step.tcl b/src/drt/test/single_step.tcl index a83bbc1a29d..a524acd351b 100644 --- a/src/drt/test/single_step.tcl +++ b/src/drt/test/single_step.tcl @@ -17,4 +17,4 @@ drt::step_end set def_file [make_result_file single_step.def] write_def $def_file # Single stepping should produce the same result as a regular run -diff_files ispd18_sample.defok $def_file +diff_files single_step.defok $def_file diff --git a/src/drt/test/ta_ap_aligned.defok b/src/drt/test/ta_ap_aligned.defok index 6902c3ab8d9..de08baf9c58 100644 --- a/src/drt/test/ta_ap_aligned.defok +++ b/src/drt/test/ta_ap_aligned.defok @@ -105,11 +105,25 @@ COMPONENTS 4 ; END COMPONENTS NETS 2 ; - net_M2 ( inv_M2_2 A ) ( inv_M2_1 A ) + USE SIGNAL - + ROUTED metal2 ( 100130 21140 ) ( * 180460 ) + + ROUTED metal2 ( 100130 21140 ) ( * 25060 ) + NEW metal2 ( 100130 178780 ) ( * 180460 ) + NEW metal2 ( 100130 25060 ) ( * 44100 ) + NEW metal2 ( 100130 44100 ) ( * 73740 ) + NEW metal2 ( 100130 73740 ) ( * 103180 ) + NEW metal2 ( 100130 103180 ) ( * 132300 ) + NEW metal2 ( 100130 132300 ) ( * 161740 ) + NEW metal2 ( 100130 161740 ) ( * 178780 ) NEW metal1 ( 100130 21140 ) via1_4 NEW metal1 ( 100130 180460 ) via1_4 ; - net_M3 ( inv_M3_2 A ) ( inv_M3_1 A ) + USE SIGNAL - + ROUTED metal3 ( 20330 102060 ) ( 180310 * ) + + ROUTED metal3 ( 20330 102060 ) ( 24830 * ) + NEW metal3 ( 178410 102060 ) ( 180310 * ) + NEW metal3 ( 24830 102060 ) ( 43890 * ) + NEW metal3 ( 43890 102060 ) ( 73530 * ) + NEW metal3 ( 73530 102060 ) ( 103170 * ) + NEW metal3 ( 103170 102060 ) ( 132050 * ) + NEW metal3 ( 132050 102060 ) ( 162030 * ) + NEW metal3 ( 162030 102060 ) ( 178410 * ) NEW metal1 ( 20330 102060 ) via1_4 NEW metal2 ( 20330 102060 ) via2_5 NEW metal1 ( 180310 102060 ) via1_4 diff --git a/src/drt/test/ta_pin_aligned.defok b/src/drt/test/ta_pin_aligned.defok index d4e43f88e19..54e8bcc5571 100644 --- a/src/drt/test/ta_pin_aligned.defok +++ b/src/drt/test/ta_pin_aligned.defok @@ -119,11 +119,24 @@ PINS 4 ; END PINS NETS 2 ; - Metal2_in ( PIN Metal2_out ) ( PIN Metal2_in ) + USE SIGNAL - + ROUTED metal2 ( 97850 19740 0 ) ( * 180180 0 ) ; + + ROUTED metal2 ( 97850 19740 0 ) ( * 25060 ) + NEW metal2 ( 97850 178220 ) ( * 180180 0 ) + NEW metal2 ( 97850 25060 ) ( * 44100 ) + NEW metal2 ( 97850 44100 ) ( * 73740 ) + NEW metal2 ( 97850 73740 ) ( * 103180 ) + NEW metal2 ( 97850 103180 ) ( * 132300 ) + NEW metal2 ( 97850 132300 ) ( * 161740 ) + NEW metal2 ( 97850 161740 ) ( * 178220 ) ; - Metal3_in ( PIN Metal3_out ) ( PIN Metal3_in ) + USE SIGNAL - + ROUTED metal3 ( 176400 97580 ) ( * 97860 ) + + ROUTED metal3 ( 19790 97860 0 ) ( 24830 * ) + NEW metal3 ( 176400 97580 ) ( * 97860 ) NEW metal3 ( 180510 97580 ) ( * 97860 0 ) + NEW metal3 ( 24830 97860 ) ( 43890 * ) + NEW metal3 ( 43890 97860 ) ( 73530 * ) + NEW metal3 ( 73530 97860 ) ( 103170 * ) + NEW metal3 ( 103170 97860 ) ( 132050 * ) NEW metal3 ( 176400 97580 ) ( 180510 * ) - NEW metal3 ( 19790 97860 0 ) ( 176400 * ) ; + NEW metal3 ( 162030 97860 ) ( 176400 * ) + NEW metal3 ( 132050 97860 ) ( 162030 * ) ; END NETS END DESIGN diff --git a/src/drt/test/top_level_term.defok b/src/drt/test/top_level_term.defok index f82d8c58701..f06132a1bab 100644 --- a/src/drt/test/top_level_term.defok +++ b/src/drt/test/top_level_term.defok @@ -32,17 +32,24 @@ PINS 1 ; END PINS NETS 1 ; - clk ( PIN clk ) ( clkbuf_0_clk A ) ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) + USE SIGNAL - + ROUTED met3 ( 1440 155030 0 ) ( 6960 * ) + + ROUTED met2 ( 145200 144855 ) ( * 147630 ) + NEW met3 ( 1440 155030 0 ) ( 6960 * ) NEW met2 ( 6960 155030 ) ( * 155215 ) - NEW met1 ( 112080 154845 ) ( * 155215 ) - NEW met1 ( 127440 158175 ) ( 135600 * ) - NEW met1 ( 127440 155955 ) ( * 158175 ) - NEW met1 ( 112080 155955 ) ( 127440 * ) - NEW met1 ( 112080 155215 ) ( * 155955 ) - NEW met1 ( 135600 158175 ) ( 144240 * ) + NEW met1 ( 6960 155215 ) ( 23280 * ) + NEW met1 ( 100800 154845 ) ( * 155215 ) + NEW met1 ( 135600 157065 ) ( * 158175 ) + NEW met1 ( 114480 157065 ) ( 135600 * ) + NEW met1 ( 114480 156325 ) ( * 157065 ) + NEW met1 ( 114480 155955 ) ( * 156325 ) + NEW met1 ( 112080 155955 ) ( 114480 * ) + NEW met1 ( 112080 154845 ) ( * 155955 ) + NEW met1 ( 138720 158175 ) ( 144240 * ) + NEW met1 ( 135600 158175 ) ( 138720 * ) NEW met1 ( 144240 158175 ) ( 145200 * ) - NEW met2 ( 145200 144855 ) ( * 158175 ) - NEW met1 ( 6960 155215 ) ( 112080 * ) + NEW met2 ( 145200 147630 ) ( * 158175 ) + NEW met1 ( 100800 154845 ) ( 112080 * ) + NEW met1 ( 75360 155215 ) ( 100800 * ) + NEW met1 ( 23280 155215 ) ( 75360 * ) NEW li1 ( 145200 144855 ) L1M1_PR_MR NEW met1 ( 145200 144855 ) M1M2_PR NEW met2 ( 6960 155030 ) M2M3_PR diff --git a/src/drt/test/top_level_term2.defok b/src/drt/test/top_level_term2.defok index 3a478d0f691..16bb2f76e1c 100644 --- a/src/drt/test/top_level_term2.defok +++ b/src/drt/test/top_level_term2.defok @@ -40,29 +40,41 @@ PINS 3 ; END PINS NETS 1 ; - clk ( PIN reg ) ( PIN pin ) ( PIN clk ) ( clkbuf_0_clk A ) ( clkbuf_2_3__f_clk A ) ( clkbuf_2_2__f_clk A ) ( clkbuf_2_1__f_clk A ) + USE SIGNAL - + ROUTED met3 ( 1440 155030 0 ) ( 2160 * ) - NEW met2 ( 2160 155030 ) ( * 155215 ) - NEW met3 ( 480 148370 ) ( 1440 * 0 ) - NEW met3 ( 480 148370 ) ( * 149110 ) - NEW met3 ( 480 149110 ) ( 1440 * ) - NEW met3 ( 1440 149110 ) ( * 154290 ) + + ROUTED met3 ( 1440 155030 0 ) ( 6960 * ) + NEW met2 ( 6960 155030 ) ( * 155215 ) + NEW met1 ( 6960 155215 ) ( 16560 * ) + NEW met3 ( 1440 148370 0 ) ( 2400 * ) + NEW met3 ( 2400 148370 ) ( * 149110 ) + NEW met3 ( 1440 149110 ) ( 2400 * ) + NEW met3 ( 1440 149110 ) ( * 151885 ) + NEW met3 ( 1440 151885 ) ( * 154290 ) NEW met3 ( 1440 154290 ) ( 2400 * ) NEW met3 ( 2400 154290 ) ( * 155030 ) - NEW met3 ( 2160 155030 ) ( 2400 * ) - NEW met1 ( 112080 154845 ) ( * 155215 ) - NEW met1 ( 117360 158175 ) ( 135600 * ) - NEW met1 ( 117360 155955 ) ( * 158175 ) - NEW met1 ( 112080 155955 ) ( 117360 * ) - NEW met1 ( 112080 155215 ) ( * 155955 ) + NEW met1 ( 135600 157065 ) ( * 158175 ) + NEW met1 ( 116880 157065 ) ( 135600 * ) + NEW met1 ( 116880 156325 ) ( * 157065 ) + NEW met1 ( 116640 156325 ) ( 116880 * ) + NEW met1 ( 116400 156325 ) ( 116640 * ) + NEW met1 ( 116400 155955 ) ( * 156325 ) + NEW met1 ( 112080 155955 ) ( 116400 * ) + NEW met1 ( 112080 154845 ) ( * 155955 ) + NEW met1 ( 135600 158175 ) ( 136080 * ) NEW met3 ( 149280 370 0 ) ( 149520 * ) - NEW met1 ( 2160 155215 ) ( 112080 * ) - NEW met1 ( 145680 144855 ) ( 149520 * ) + NEW met2 ( 149520 370 ) ( * 17945 ) + NEW met1 ( 16560 155215 ) ( 36000 * ) + NEW met1 ( 36000 154845 ) ( * 155215 ) + NEW met1 ( 36000 154845 ) ( 112080 * ) + NEW met2 ( 149520 17945 ) ( * 61050 ) + NEW met2 ( 149520 61050 ) ( * 111555 ) + NEW met1 ( 145680 144855 ) ( 147360 * ) + NEW met1 ( 147360 144855 ) ( 149520 * ) NEW met2 ( 144720 144855 ) ( * 158175 ) NEW met1 ( 144720 144855 ) ( 145680 * ) - NEW met1 ( 135600 158175 ) ( 144720 * ) - NEW met2 ( 149520 370 ) ( * 144855 ) - NEW met2 ( 2160 155030 ) M2M3_PR - NEW met1 ( 2160 155215 ) M1M2_PR + NEW met1 ( 140640 158175 ) ( 144720 * ) + NEW met1 ( 136080 158175 ) ( 140640 * ) + NEW met2 ( 149520 111555 ) ( * 144855 ) + NEW met2 ( 6960 155030 ) M2M3_PR + NEW met1 ( 6960 155215 ) M1M2_PR NEW li1 ( 112080 154845 ) L1M1_PR_MR NEW li1 ( 135600 158175 ) L1M1_PR_MR NEW met2 ( 149520 370 ) M2M3_PR