Fix topological bug in NetBuilderHV::_do_xG_1PinM2().

* Bug: In NetBuilderHV::_do_xG_1PinM2(), when the M2 pin is on the *east*
    side and there are three globals, we must swap htee1 & htee2.
      Otherwise, we the SW/NE contacts do not have the right numbers
    of free segments attach.
* New: In AnabaticEngine::cleanupGlobal(), check that no global component
    is left behind, sure sign that the global to detailed building went
    wrong.
This commit is contained in:
Jean-Paul Chaput 2021-04-17 13:03:15 +02:00
parent 445f5161da
commit 444cc777e5
2 changed files with 14 additions and 0 deletions

View File

@ -1074,6 +1074,17 @@ namespace Anabatic {
UpdateSession::open();
for ( GCell* gcell : _gcells ) gcell->cleanupGlobal();
UpdateSession::close();
for ( Net* net : getCell()->getNets() ) {
for ( Component* component : net->getComponents() ) {
if (getConfiguration()->isGLayer(component->getLayer())) {
cerr << Error( "AnabaticEngine::cleanupGlobal(): Remaining global routing,\n"
" %s"
, getString(component).c_str()
) << endl;
}
}
}
}

View File

@ -863,6 +863,9 @@ namespace Anabatic {
AutoContact* htee2 = AutoContactHTee::create( getGCell(), getNet(), Session::getContactLayer(1) );
AutoSegment::create( htee1, htee2, Flags::Horizontal );
if (pinDir == Pin::AccessDirection::EAST)
std::swap( htee1, htee2 );
setSouthWestContact( htee1 );
setNorthEastContact( htee2 );
}