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.
This commit is contained in:
Jean-Paul Chaput 2021-04-18 20:36:44 +02:00
parent 2019fa25d7
commit 2084a3bde2
1 changed files with 10 additions and 2 deletions

View File

@ -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 );