From 2084a3bde27676bd6d6dab05efa056ab8eccd4a7 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sun, 18 Apr 2021 20:36:44 +0200 Subject: [PATCH] Bad computation of the track axis for fixed in NetBuilderHV::_do_xG_1PinM2(). * Bug: In NetBuilderHV::_do_xG_1PinM2(), for METAL2 pins on the EAST side, we were computing the track from the XMax position of the GCell. Now, with complete discoupling of the routing pitches and GCell size, this is most of the time false. Replace with a true computation of the last track of routing area. --- anabatic/src/NetBuilderHV.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/anabatic/src/NetBuilderHV.cpp b/anabatic/src/NetBuilderHV.cpp index 5dd8e2a2..4a815593 100644 --- a/anabatic/src/NetBuilderHV.cpp +++ b/anabatic/src/NetBuilderHV.cpp @@ -805,9 +805,17 @@ namespace Anabatic { AutoSegment* vertical = AutoSegment::create( rpSourceContact, turn, Flags::Vertical ); rpSourceContact = turn; - DbU::Unit axis = getGCell()->getXMax() - Session::getDVerticalPitch(); + Box cellAb = getAnabatic()->getCell()->getAbutmentBox(); + RoutingLayerGauge* lgM3 = Session::getLayerGauge( 2 ); + DbU::Unit axis = lgM3->getTrackPosition( cellAb.getXMin() + , cellAb.getXMax() + , getGCell()->getXMax() - Session::getDVerticalPitch() + , Constant::Superior ); if (pinDir == Pin::AccessDirection::WEST) - axis = getGCell()->getXMin() + Session::getDVerticalPitch(); + axis = lgM3->getTrackPosition( cellAb.getXMin() + , cellAb.getXMax() + , getGCell()->getXMin() + Session::getDVerticalPitch() + , Constant::Inferior ); cdebug_log(145,0) << "axis:" << DbU::getValueString(axis) << endl; vertical->setAxis( axis, Flags::Force );