* ./mauka:
- New: In MaukaEngine::Construct(), do not try to initialize the slice height from a model with an empty AbutmentBox. Instead, signal an error (the model is likely to be missing, it has been initialized from the COMPONENT). - Change: In MaukaEngine::Construct(), clearer error message when there is duplicated instances. Show the full occurrence path of each conflicting instance.
This commit is contained in:
parent
9724cef332
commit
725cf8b2e6
|
@ -265,7 +265,7 @@ void BBPlacer::Save()
|
||||||
instanceOccurrence.getPath().getTransformation().invert().applyOn(instanceTransformation);
|
instanceOccurrence.getPath().getTransformation().invert().applyOn(instanceTransformation);
|
||||||
instance->setTransformation(instanceTransformation);
|
instance->setTransformation(instanceTransformation);
|
||||||
instance->setPlacementStatus(Instance::PlacementStatus::PLACED);
|
instance->setPlacementStatus(Instance::PlacementStatus::PLACED);
|
||||||
//setPlacementStatusRecursivelyToPlaced(instance);
|
//setPlacementStatusRecursivelyToPlaced(instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -184,9 +184,9 @@ void MaukaEngine::Construct()
|
||||||
// **************************
|
// **************************
|
||||||
{
|
{
|
||||||
typedef map<Occurrence, unsigned> InstanceOccurrenceMap;
|
typedef map<Occurrence, unsigned> InstanceOccurrenceMap;
|
||||||
typedef set<Instance*> InstanceSet;
|
typedef map<Instance*,Occurrence> OccurrencesLUT;
|
||||||
typedef map<Net*, unsigned> NetMap;
|
typedef map<Net*, unsigned> NetMap;
|
||||||
InstanceSet instanceSet;
|
OccurrencesLUT occurencesLUT;
|
||||||
NetMap netMap;
|
NetMap netMap;
|
||||||
unsigned instanceId = 0;
|
unsigned instanceId = 0;
|
||||||
unsigned netId = 0;
|
unsigned netId = 0;
|
||||||
|
@ -222,6 +222,14 @@ void MaukaEngine::Construct()
|
||||||
{
|
{
|
||||||
//cerr << "unplaced " << (*ioccurrence) << (*ioccurrence).getBoundingBox() << endl;
|
//cerr << "unplaced " << (*ioccurrence) << (*ioccurrence).getBoundingBox() << endl;
|
||||||
Cell* model = instance->getMasterCell();
|
Cell* model = instance->getMasterCell();
|
||||||
|
if (model->getAbutmentBox().isEmpty()) {
|
||||||
|
throw Error("Unplaced terminal instance <%s> of <%s> with an empty model abutment box.\n"
|
||||||
|
"(hint: the vst model may be missing)"
|
||||||
|
,getString(instance->getName()).c_str()
|
||||||
|
,getString(model->getName()).c_str()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
DbU::Unit insWidth = model->getAbutmentBox().getWidth();
|
DbU::Unit insWidth = model->getAbutmentBox().getWidth();
|
||||||
DbU::Unit insHeight = model->getAbutmentBox().getHeight();
|
DbU::Unit insHeight = model->getAbutmentBox().getHeight();
|
||||||
if (standardCellHeight == 0) {
|
if (standardCellHeight == 0) {
|
||||||
|
@ -239,16 +247,21 @@ void MaukaEngine::Construct()
|
||||||
_instanceOccurrencesVector.push_back(*ioccurrence);
|
_instanceOccurrencesVector.push_back(*ioccurrence);
|
||||||
//VerifyPathCellBox(*ioccurrence);
|
//VerifyPathCellBox(*ioccurrence);
|
||||||
_instanceWidths.push_back(insWidth);
|
_instanceWidths.push_back(insWidth);
|
||||||
InstanceSet::iterator isit = instanceSet.find(instance);
|
OccurrencesLUT::iterator duplicate = occurencesLUT.find(instance);
|
||||||
if (isit != instanceSet.end())
|
if (duplicate != occurencesLUT.end())
|
||||||
{
|
{
|
||||||
cerr << "Unplaced Instance : " << *isit << endl;
|
//cerr << "Unplaced Instance : " << *duplicate << endl;
|
||||||
cerr << "Unplaced Occurrence : " << (*ioccurrence) << endl;
|
//cerr << "Unplaced Occurrence : " << (*ioccurrence) << endl;
|
||||||
cerr << (*isit)->getPlacementStatus() << endl;
|
//cerr << (*duplicate)->getPlacementStatus() << endl;
|
||||||
throw Error("Each unplaced instance must have one occurrence only");
|
throw Error("Each unplaced instance must have one occurrence only.\n"
|
||||||
|
"Model <%s> is intanciated as:\n<b>. %s\n. %s</b>\n(at least)."
|
||||||
|
,getString(instance->getMasterCell()->getName()).c_str()
|
||||||
|
,(*ioccurrence).getCompactString().c_str()
|
||||||
|
,((*duplicate).second).getCompactString().c_str()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
_instanceOccurrencesMap[*ioccurrence] = instanceId++;
|
_instanceOccurrencesMap[*ioccurrence] = instanceId++;
|
||||||
instanceSet.insert(instance);
|
occurencesLUT.insert(make_pair(instance,*ioccurrence));
|
||||||
_instanceNets.push_back(UVector());
|
_instanceNets.push_back(UVector());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2006-2012, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2006-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
|
Loading…
Reference in New Issue