From 51b3a1173958845eefd390332637a88fcfc2c5f5 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 17 Nov 2017 11:17:21 +0100 Subject: [PATCH] In Kite & Katana, segments may have been moved outside terminals. * Bug: In Kite::NegociateWidow and Katana::NegociateWindow, when creating the TrackSegment from the AutoSegment, we put it on the nearest track from its current position. But it may happens that the nearest track is outside the terminal constraint interval (in the case of "nsxlib"). Add the terminal constraint interval check. This was not affecting the routing result because the segment was put inside the right interval afterwards. It was only generating disgraceful transient error messages... --- katana/src/NegociateWindow.cpp | 4 ++++ kite/src/NegociateWindow.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/katana/src/NegociateWindow.cpp b/katana/src/NegociateWindow.cpp index 955bf8ee..7cebd503 100644 --- a/katana/src/NegociateWindow.cpp +++ b/katana/src/NegociateWindow.cpp @@ -316,6 +316,10 @@ namespace Katana { Track* track = plane->getTrackByPosition ( autoSegment->getAxis() ); Interval uside = autoSegment->getAutoSource()->getGCell()->getSide( perpandicularTo(autoSegment->getDirection()) ); + Interval constraints; + autoSegment->getConstraints( constraints ); + uside.intersection( constraints ); + cdebug_log(159,0) << "* Nearest " << track << endl; if (track->getAxis() > uside.getVMax()) track = track->getPreviousTrack(); diff --git a/kite/src/NegociateWindow.cpp b/kite/src/NegociateWindow.cpp index 7cbb3f8e..038f23aa 100644 --- a/kite/src/NegociateWindow.cpp +++ b/kite/src/NegociateWindow.cpp @@ -283,6 +283,10 @@ namespace Kite { Track* track = plane->getTrackByPosition ( autoSegment->getAxis() ); Interval uside = autoSegment->getAutoSource()->getGCell()->getSide( perpandicularTo(autoSegment->getDirection()) ); + Interval constraints; + autoSegment->getConstraints( constraints ); + uside.intersection( constraints ); + if (track->getAxis() > uside.getVMax()) track = track->getPreviousTrack(); if (track->getAxis() < uside.getVMin()) track = track->getNextTrack();