Bug fix: Bad topology in NetBuilderHV::_do_2G_xM1_1PinM2().
* Bug: In Anabatic::NetBuilderHV::_do_2G_xM1_1PinM2(), in the case of a bend of global wires, the topology was faulty. Badly connected HTees.
This commit is contained in:
parent
de6308d8d4
commit
a971f6f91b
|
@ -1081,6 +1081,7 @@ namespace Anabatic {
|
||||||
rpM1Contact = doRp_Access( getGCell(), rpsM1[0], NoFlags );
|
rpM1Contact = doRp_Access( getGCell(), rpsM1[0], NoFlags );
|
||||||
|
|
||||||
if (north() and south()) {
|
if (north() and south()) {
|
||||||
|
cdebug_log(145,0) << "Case north & south." << endl;
|
||||||
AutoContact* htee = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* htee = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
AutoContact* vtee = AutoContactVTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* vtee = AutoContactVTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
|
|
||||||
|
@ -1089,6 +1090,7 @@ namespace Anabatic {
|
||||||
AutoSegment::create( htee , vtee, Flags::Horizontal );
|
AutoSegment::create( htee , vtee, Flags::Horizontal );
|
||||||
setBothCornerContacts( vtee );
|
setBothCornerContacts( vtee );
|
||||||
} else if (east() and west()) {
|
} else if (east() and west()) {
|
||||||
|
cdebug_log(145,0) << "Case east & west." << endl;
|
||||||
AutoContact* htee1 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* htee1 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
AutoContact* htee2 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* htee2 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
AutoContact* turn = AutoContactTurn::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* turn = AutoContactTurn::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
|
@ -1099,18 +1101,17 @@ namespace Anabatic {
|
||||||
AutoSegment::create( htee2 , turn , Flags::Vertical );
|
AutoSegment::create( htee2 , turn , Flags::Vertical );
|
||||||
setBothCornerContacts( htee2 );
|
setBothCornerContacts( htee2 );
|
||||||
} else {
|
} else {
|
||||||
|
cdebug_log(145,0) << "Case bend." << endl;
|
||||||
AutoContact* htee1 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* htee1 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
AutoContact* htee2 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
AutoContact* htee2 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
||||||
AutoContact* turn = AutoContactTurn::create( getGCell(), getNet(), Session::getContactLayer(1) );
|
|
||||||
|
|
||||||
AutoSegment::create( pinM2Contact, htee1, Flags::Horizontal );
|
AutoSegment::create( pinM2Contact, htee1, Flags::Horizontal );
|
||||||
AutoSegment::create( rpM1Contact , htee1, Flags::Vertical );
|
AutoSegment::create( rpM1Contact , htee1, Flags::Vertical );
|
||||||
AutoSegment::create( htee1 , htee2, Flags::Horizontal );
|
AutoSegment::create( htee1 , htee2, Flags::Horizontal );
|
||||||
AutoSegment::create( htee2 , turn , Flags::Vertical );
|
setBothCornerContacts( htee2 );
|
||||||
setNorthEastContact( htee2 );
|
|
||||||
setSouthWestContact( turn );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cdebug_log(145,0) << "Wiring all M1 together." << endl;
|
||||||
for ( size_t i=1 ; i<rpsM1.size() ; ++i ) {
|
for ( size_t i=1 ; i<rpsM1.size() ; ++i ) {
|
||||||
AutoContact* leftContact = doRp_Access( getGCell(), getRoutingPads()[i-1], HAccess );
|
AutoContact* leftContact = doRp_Access( getGCell(), getRoutingPads()[i-1], HAccess );
|
||||||
AutoContact* rightContact = doRp_Access( getGCell(), getRoutingPads()[i ], HAccess );
|
AutoContact* rightContact = doRp_Access( getGCell(), getRoutingPads()[i ], HAccess );
|
||||||
|
|
Loading…
Reference in New Issue