In Etesian, do not reset the placement if we are using a sub-block.
* Bug: In EtesianEngine::place(), reset the placement *only* if we are *not* placing a sub-block *and* the top cell abutment box is empty. * Bug: In EtesianEngine::place(), set the instance placement status of all intermediate instances to PLACED, so the AP driver will save them (we were having partially saved layout when using hierarchical designs). * Bug: In EtesianEngine::resetPlacement(), reset the PLACED flag and the abutment box on the top cell or sub-block to be placed.
This commit is contained in:
parent
e4041d5e26
commit
8ce2a7e318
|
@ -519,8 +519,8 @@ namespace Etesian {
|
||||||
|
|
||||||
// if (not getBlockCell()->getAbutmentBox().isEmpty() )
|
// if (not getBlockCell()->getAbutmentBox().isEmpty() )
|
||||||
// setFixedAbHeight( getBlockCell()->getAbutmentBox().getHeight() );
|
// setFixedAbHeight( getBlockCell()->getAbutmentBox().getHeight() );
|
||||||
// getBlockCell()->setAbutmentBox( Box() );
|
getBlockCell()->setAbutmentBox( Box() );
|
||||||
// getBlockCell()->resetFlags( Cell::Flags::Placed );
|
getBlockCell()->resetFlags( Cell::Flags::Placed );
|
||||||
UpdateSession::close();
|
UpdateSession::close();
|
||||||
|
|
||||||
dots.finish( Dots::Reset );
|
dots.finish( Dots::Reset );
|
||||||
|
@ -1002,8 +1002,10 @@ namespace Etesian {
|
||||||
|
|
||||||
getConfiguration()->print( getCell() );
|
getConfiguration()->print( getCell() );
|
||||||
adjustSliceHeight();
|
adjustSliceHeight();
|
||||||
resetPlacement();
|
if ( (getCell() == getBlockCell()) and getCell()->getAbutmentBox().isEmpty() ) {
|
||||||
if (getBlockCell()->getAbutmentBox().isEmpty()) setDefaultAb();
|
resetPlacement();
|
||||||
|
setDefaultAb();
|
||||||
|
}
|
||||||
|
|
||||||
findYSpin();
|
findYSpin();
|
||||||
toColoquinte();
|
toColoquinte();
|
||||||
|
@ -1020,7 +1022,6 @@ namespace Etesian {
|
||||||
|
|
||||||
preplace();
|
preplace();
|
||||||
|
|
||||||
|
|
||||||
float_t minPenaltyIncrease, maxPenaltyIncrease, targetImprovement;
|
float_t minPenaltyIncrease, maxPenaltyIncrease, targetImprovement;
|
||||||
int detailedIterations, detailedEffort;
|
int detailedIterations, detailedEffort;
|
||||||
unsigned globalOptions=0, detailedOptions=0;
|
unsigned globalOptions=0, detailedOptions=0;
|
||||||
|
@ -1085,9 +1086,14 @@ namespace Etesian {
|
||||||
rp->invalidate();
|
rp->invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateSession::close();
|
|
||||||
|
|
||||||
getCell()->setFlags( Cell::Flags::Placed );
|
getCell()->setFlags( Cell::Flags::Placed );
|
||||||
|
for ( Occurrence occurrence : getCell()->getNonTerminalNetlistInstanceOccurrences(getBlockInstance()) ) {
|
||||||
|
Instance* instance = static_cast<Instance*>(occurrence.getEntity());
|
||||||
|
if (instance->getPlacementStatus() == Instance::PlacementStatus::UNPLACED)
|
||||||
|
instance->setPlacementStatus( Instance::PlacementStatus::PLACED );
|
||||||
|
}
|
||||||
|
UpdateSession::close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -419,6 +419,7 @@ namespace Katana {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KatanaEngine::openSession ()
|
void KatanaEngine::openSession ()
|
||||||
{ Session::_open(this); }
|
{ Session::_open(this); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue