Bug: reduced segments where axis was not set when placed.
* Bug: In Kite::RoutingEvent::_processNegociate(), on insertion in free space of a reduced segment (less than one pitch) no insert event was generated, but the axis was not set to the selected track, leaving the segment at it's former place. Now, generate an insert event, but in Kite::Session::_revalidate() filter them so that reduced segments are not inserted in tracks but only have their axis set. Correction also applied on Katana. * Bug: In Kite::wipeoutRouting(), the removal was incomplete. We need to remove anchored Contacts, but in a second stage. This is a fragile workaround as it require that there is only one level of anchoring.
This commit is contained in:
parent
4163fc044a
commit
f8b9957d20
|
@ -476,8 +476,7 @@ namespace Katana {
|
|||
_axisHistory = _segment->getAxis();
|
||||
_eventLevel = 0;
|
||||
cdebug_log(9000,0) << "Deter| addInsertEvent() @" << fsm.getCost(itrack).getTrack() << endl;
|
||||
if (not _segment->isReduced())
|
||||
Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() );
|
||||
Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() );
|
||||
fsm.setState( SegmentFsm::SelfInserted );
|
||||
} else {
|
||||
// Do ripup.
|
||||
|
|
|
@ -153,11 +153,12 @@ namespace Katana {
|
|||
|
||||
_doRemovalEvents();
|
||||
|
||||
for ( size_t i=0 ; i<_insertEvents.size() ; ++i ) {
|
||||
if (_insertEvents[i]._segment) {
|
||||
_insertEvents[i]._track->insert( _insertEvents[i]._segment );
|
||||
for ( const Event& event : _insertEvents ) {
|
||||
if (event._segment) {
|
||||
if (event._segment->isReduced()) event._segment->setAxis( event._track->getAxis() );
|
||||
else event._track->insert( event._segment );
|
||||
}
|
||||
if (_insertEvents[i]._marker) _insertEvents[i]._track->insert( _insertEvents[i]._marker );
|
||||
if (event._marker) event._track->insert( event._marker );
|
||||
}
|
||||
_insertEvents.clear();
|
||||
|
||||
|
|
|
@ -218,6 +218,7 @@ namespace Kite {
|
|||
UpdateSession::open();
|
||||
|
||||
for ( Net* net : cell->getNets() ) {
|
||||
if (net->isClock() or net->isSupply()) continue;
|
||||
if (NetRoutingExtension::isManualGlobalRoute(net)) continue;
|
||||
|
||||
// First pass: destroy the contacts
|
||||
|
@ -227,8 +228,14 @@ namespace Kite {
|
|||
if (contact and not contact->getAnchorHook()->isAttached())
|
||||
contacts.push_back( contact );
|
||||
}
|
||||
for ( Contact* contact : contacts )
|
||||
contact->destroy();
|
||||
for ( Contact* contact : contacts ) contact->destroy();
|
||||
|
||||
contacts.clear();
|
||||
for ( Component* component : net->getComponents() ) {
|
||||
Contact* contact = dynamic_cast<Contact*>(component);
|
||||
if (contact) contacts.push_back( contact );
|
||||
}
|
||||
for ( Contact* contact : contacts ) contact->destroy();
|
||||
|
||||
// Second pass: destroy unconnected segments added by Knik as blockages
|
||||
std::vector<Component*> segments;
|
||||
|
|
|
@ -476,8 +476,7 @@ namespace Kite {
|
|||
_axisHistory = _segment->getAxis();
|
||||
_eventLevel = 0;
|
||||
cdebug_log(9000,0) << "Deter| addInsertEvent() @" << fsm.getCost(itrack).getTrack() << endl;
|
||||
if (not _segment->isReduced())
|
||||
Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() );
|
||||
Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() );
|
||||
fsm.setState( SegmentFsm::SelfInserted );
|
||||
} else {
|
||||
// Do ripup.
|
||||
|
|
|
@ -155,11 +155,12 @@ namespace Kite {
|
|||
|
||||
_doRemovalEvents();
|
||||
|
||||
for ( size_t i=0 ; i<_insertEvents.size() ; ++i ) {
|
||||
if (_insertEvents[i]._segment) {
|
||||
_insertEvents[i]._track->insert( _insertEvents[i]._segment );
|
||||
for ( const Event& event : _insertEvents ) {
|
||||
if (event._segment) {
|
||||
if (event._segment->isReduced()) event._segment->setAxis( event._track->getAxis() );
|
||||
else event._track->insert( event._segment );
|
||||
}
|
||||
if (_insertEvents[i]._marker) _insertEvents[i]._track->insert( _insertEvents[i]._marker );
|
||||
if (event._marker) event._track->insert( event._marker );
|
||||
}
|
||||
_insertEvents.clear();
|
||||
|
||||
|
|
Loading…
Reference in New Issue