diff --git a/anabatic/src/AnabaticEngine.cpp b/anabatic/src/AnabaticEngine.cpp index abba3634..909a4edc 100644 --- a/anabatic/src/AnabaticEngine.cpp +++ b/anabatic/src/AnabaticEngine.cpp @@ -810,7 +810,8 @@ namespace Anabatic { throw Error( badMethod, "Anabatic::loadGlobalRouting()", method, getString(_cell).c_str() ); } cleanupGlobal(); - relaxOverConstraineds(); + + if (not getConfiguration()->isTwoMetals()) relaxOverConstraineds(); _state = EngineActive; } diff --git a/anabatic/src/NetBuilder.cpp b/anabatic/src/NetBuilder.cpp index 6924827f..2b2b087c 100644 --- a/anabatic/src/NetBuilder.cpp +++ b/anabatic/src/NetBuilder.cpp @@ -619,18 +619,19 @@ namespace Anabatic { case Conn_2G_1M1_1M2: _do_xG_1M1_1M2(); break; case Conn_2G_1PinM2: _do_xG_xM2 (); break; default: - throw Bug( "Unmanaged Configuration [%d] = [%d+%d+%d+%d,%d+%d] %s in %s\n" - " The global routing seems to be defective." - , _connexity.connexity - , _connexity.fields.globals - , _connexity.fields.M1 - , _connexity.fields.M2 - , _connexity.fields.M3 - , _connexity.fields.Pin - , _connexity.fields.Pad - , _net->_getString().c_str() - , getString(_gcell).c_str() - ); + if (not isTwoMetals()) + throw Bug( "Unmanaged Configuration [%d] = [%d+%d+%d+%d,%d+%d] %s in %s\n" + " The global routing seems to be defective." + , _connexity.connexity + , _connexity.fields.globals + , _connexity.fields.M1 + , _connexity.fields.M2 + , _connexity.fields.M3 + , _connexity.fields.Pin + , _connexity.fields.Pad + , _net->_getString().c_str() + , getString(_gcell).c_str() + ); _do_xG(); } diff --git a/anabatic/src/anabatic/AnabaticEngine.h b/anabatic/src/anabatic/AnabaticEngine.h index 452d9fcb..ea5be0d6 100644 --- a/anabatic/src/anabatic/AnabaticEngine.h +++ b/anabatic/src/anabatic/AnabaticEngine.h @@ -280,6 +280,7 @@ namespace Anabatic { inline void _add ( GCell* ); inline void _remove ( GCell* ); inline void _updateLookup ( GCell* ); + inline void _updateGContacts (); inline void _resizeMatrix (); inline bool _inDestroy () const; // Inspector support. @@ -352,6 +353,7 @@ namespace Anabatic { inline const NetDatas& AnabaticEngine::getNetDatas () const { return _netDatas; } inline void AnabaticEngine::_updateLookup ( GCell* gcell ) { _matrix.updateLookup(gcell); } inline void AnabaticEngine::_resizeMatrix () { _matrix.resize( getCell(), getGCells() ); } + inline void AnabaticEngine::_updateGContacts () { for ( GCell* gcell : getGCells() ) gcell->updateGContacts(); } inline bool AnabaticEngine::_inDestroy () const { return _flags & Flags::DestroyMask; } inline void AnabaticEngine::_add ( GCell* gcell ) diff --git a/anabatic/src/anabatic/NetBuilder.h b/anabatic/src/anabatic/NetBuilder.h index fbacd458..c3b7ce26 100644 --- a/anabatic/src/anabatic/NetBuilder.h +++ b/anabatic/src/anabatic/NetBuilder.h @@ -238,6 +238,8 @@ namespace Anabatic { , Conn_2G = CONNEXITY_VALUE( 2, 0, 0, 0, 0 , 0 ) , Conn_3G = CONNEXITY_VALUE( 3, 0, 0, 0, 0 , 0 ) , Conn_4G = CONNEXITY_VALUE( 4, 0, 0, 0, 0 , 0 ) + , Conn_5G = CONNEXITY_VALUE( 5, 0, 0, 0, 0 , 0 ) + , Conn_6G = CONNEXITY_VALUE( 6, 0, 0, 0, 0 , 0 ) , Conn_0G_2M1 = CONNEXITY_VALUE( 0, 2, 0, 0, 0 , 0 ) , Conn_1G_1M1 = CONNEXITY_VALUE( 1, 1, 0, 0, 0 , 0 ) , Conn_1G_2M1 = CONNEXITY_VALUE( 1, 2, 0, 0, 0 , 0 ) diff --git a/katana/src/Block.cpp b/katana/src/Block.cpp index ba964d82..a54820aa 100644 --- a/katana/src/Block.cpp +++ b/katana/src/Block.cpp @@ -342,7 +342,7 @@ namespace Katana { cmess2 << Dots::asString( rowName.str(), rowTracks.str() ) << endl; } - + _katana->_updateGContacts(); _katana->invalidateRoutingPads(); if (not sessionReUse) Session::close();