In Etesian, check for unplaced intermediate models with AB.
* Bug: In Etesian::EtesianEngine::toColoquinte(), when the master Cell of an instance has an abutment box, this instance *must* be placed so we can compute the positions of its own instances. Throw an error if it's not the case.
This commit is contained in:
parent
d175e1b27a
commit
d86527d384
|
@ -2,6 +2,7 @@
|
||||||
#include "coloquinte/rough_legalizers.hxx"
|
#include "coloquinte/rough_legalizers.hxx"
|
||||||
#include "coloquinte/optimization_subproblems.hxx"
|
#include "coloquinte/optimization_subproblems.hxx"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -10,6 +11,9 @@
|
||||||
namespace coloquinte{
|
namespace coloquinte{
|
||||||
namespace gp{
|
namespace gp{
|
||||||
|
|
||||||
|
using std::cerr;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
namespace{
|
namespace{
|
||||||
const capacity_t default_density_mul = 256;
|
const capacity_t default_density_mul = 256;
|
||||||
}
|
}
|
||||||
|
|
|
@ -477,6 +477,15 @@ namespace Etesian {
|
||||||
occurrence.makeInvalid();
|
occurrence.makeInvalid();
|
||||||
instance->slaveAbutmentBox();
|
instance->slaveAbutmentBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (not masterCell->getAbutmentBox().isEmpty()
|
||||||
|
and ( (instance->getPlacementStatus() != Instance::PlacementStatus::PLACED)
|
||||||
|
or (instance->getPlacementStatus() != Instance::PlacementStatus::FIXED ) ) ) {
|
||||||
|
throw Error( "EtesianEngine::toColoquinte(): Non-leaf instance \"%s\" of \"%s\" has an abutment box but is *not* placed."
|
||||||
|
, getString(instance ->getName()).c_str()
|
||||||
|
, getString(masterCell->getName()).c_str()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UpdateSession::close();
|
UpdateSession::close();
|
||||||
|
|
||||||
|
@ -590,7 +599,9 @@ namespace Etesian {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EtesianEngine::preplace (){
|
|
||||||
|
void EtesianEngine::preplace ()
|
||||||
|
{
|
||||||
using namespace coloquinte::gp;
|
using namespace coloquinte::gp;
|
||||||
|
|
||||||
// Perform a very quick legalization pass
|
// Perform a very quick legalization pass
|
||||||
|
|
Loading…
Reference in New Issue