In RoutingPad::setOnBestComponent() improved selection.
* Change: In Hurricane, in RoutingPad::setOnBestComponent(), in case of area equality, do not choose on id but the geometrically lowest one. Between two runs of the global router, it is not possible to maintain identical ids. This may leading to a change to the selected component, and a change of the GCell it in, which cause bad topologies when read by Katabatic.
This commit is contained in:
parent
1f9ae36554
commit
8e5ec7f8b7
|
@ -343,8 +343,20 @@ namespace Hurricane {
|
||||||
double bestArea = getArea(bestComponent);
|
double bestArea = getArea(bestComponent);
|
||||||
|
|
||||||
if (compArea == bestArea) {
|
if (compArea == bestArea) {
|
||||||
if (icomponent->getId() < bestComponent->getId())
|
Box compBox = icomponent->getBoundingBox();
|
||||||
bestComponent = *icomponent;
|
Box bestBox = bestComponent->getBoundingBox();
|
||||||
|
|
||||||
|
if (compBox.getXMin() == bestBox.getXMin()) {
|
||||||
|
if (compBox.getYMin() == bestBox.getYMin()) {
|
||||||
|
if (icomponent->getId() < bestComponent->getId())
|
||||||
|
bestComponent = *icomponent;
|
||||||
|
} else
|
||||||
|
if (compBox.getYMin() < bestBox.getYMin())
|
||||||
|
bestComponent = *icomponent;
|
||||||
|
} else {
|
||||||
|
if (compBox.getXMin() < bestBox.getXMin())
|
||||||
|
bestComponent = *icomponent;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (compArea > bestArea)
|
if (compArea > bestArea)
|
||||||
bestComponent = *icomponent;
|
bestComponent = *icomponent;
|
||||||
|
|
Loading…
Reference in New Issue