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() )
|
||||
// setFixedAbHeight( getBlockCell()->getAbutmentBox().getHeight() );
|
||||
// getBlockCell()->setAbutmentBox( Box() );
|
||||
// getBlockCell()->resetFlags( Cell::Flags::Placed );
|
||||
getBlockCell()->setAbutmentBox( Box() );
|
||||
getBlockCell()->resetFlags( Cell::Flags::Placed );
|
||||
UpdateSession::close();
|
||||
|
||||
dots.finish( Dots::Reset );
|
||||
|
@ -1002,8 +1002,10 @@ namespace Etesian {
|
|||
|
||||
getConfiguration()->print( getCell() );
|
||||
adjustSliceHeight();
|
||||
resetPlacement();
|
||||
if (getBlockCell()->getAbutmentBox().isEmpty()) setDefaultAb();
|
||||
if ( (getCell() == getBlockCell()) and getCell()->getAbutmentBox().isEmpty() ) {
|
||||
resetPlacement();
|
||||
setDefaultAb();
|
||||
}
|
||||
|
||||
findYSpin();
|
||||
toColoquinte();
|
||||
|
@ -1020,7 +1022,6 @@ namespace Etesian {
|
|||
|
||||
preplace();
|
||||
|
||||
|
||||
float_t minPenaltyIncrease, maxPenaltyIncrease, targetImprovement;
|
||||
int detailedIterations, detailedEffort;
|
||||
unsigned globalOptions=0, detailedOptions=0;
|
||||
|
@ -1085,9 +1086,14 @@ namespace Etesian {
|
|||
rp->invalidate();
|
||||
}
|
||||
}
|
||||
UpdateSession::close();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
void KatanaEngine::openSession ()
|
||||
{ Session::_open(this); }
|
||||
|
||||
|
|
Loading…
Reference in New Issue