From 7777d03f3af4f2a6d811f5fdc718e5a81a0ed6c7 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 6 Aug 2020 15:04:45 +0200 Subject: [PATCH] Correct too rigid topology in NetBuilderHV::_do_1G_xM1_1PinM2 (E/W). * Change: In Anabatic::NetBuilderHV::_do_1G_xM1_1PinM2(), the M2 pin (horizonal) was directly aligned with the outgoing global through a H-Tee. This was too rigid. Now it can be misaligned. --- anabatic/src/NetBuilderHV.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/anabatic/src/NetBuilderHV.cpp b/anabatic/src/NetBuilderHV.cpp index 090cf2eb..4bac6586 100644 --- a/anabatic/src/NetBuilderHV.cpp +++ b/anabatic/src/NetBuilderHV.cpp @@ -1032,7 +1032,7 @@ namespace Anabatic { AutoContact* pinM2Contact = NULL; AutoContact* rpM1Contact = NULL; doRp_AutoContacts( getGCell(), pinM2, pinM2Contact, rpM1Contact, NoProtect ); - rpM1Contact = doRp_Access( getGCell(), rpsM1[0], HAccess ); + rpM1Contact = doRp_Access( getGCell(), rpsM1[0], (north() or south()) ? HAccess : NoFlags ); if (north() or south()) { turn = AutoContactTurn::create( getGCell(), getNet(), Session::getContactLayer(1) ); @@ -1041,15 +1041,18 @@ namespace Anabatic { AutoSegment::create( rpM1Contact , tee , Flags::Horizontal ); AutoSegment::create( pinM2Contact, turn, Flags::Horizontal ); AutoSegment::create( tee , turn, Flags::Vertical ); + + setBothCornerContacts( tee ); } else { turn = AutoContactTurn::create( getGCell(), getNet(), Session::getContactLayer(1) ); - tee = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) ); + tee = AutoContactVTee::create( getGCell(), getNet(), Session::getContactLayer(1) ); - AutoSegment::create( rpM1Contact , turn, Flags::Horizontal ); + AutoSegment::create( rpM1Contact , tee , Flags::Vertical ); AutoSegment::create( pinM2Contact, tee , Flags::Horizontal ); AutoSegment::create( tee , turn, Flags::Vertical ); + + setBothCornerContacts( turn ); } - setBothCornerContacts( tee ); for ( size_t i=1 ; i