Do not account self-segment in track cost calculation.
* Change: In Katana::Track::addOverlapCost(), if an overlaping segment is owned by the net *and* is the one we want to insert, do not take it into account in the shared length. This case never occured before we introduced the "realign" stage, as a to be inserted segment, was, by definition, not already inserted in a track. But in the realign stage, it is. So we should not account it when computing the insertion cost in the track it is already in. This was preventing short segments (less than a pitch) to be correctly re-aligned. And, as a side effect, preventing the antenna/diodes to work as intended (diode connected at METAL3 layer while the antenna occur at METAL2 layer).
This commit is contained in:
parent
e50426a5bc
commit
c137c1ac5b
|
@ -561,6 +561,11 @@ namespace Katana {
|
||||||
if ( (_segments[begin]->getNet() == cost.getNet())
|
if ( (_segments[begin]->getNet() == cost.getNet())
|
||||||
and ((cost.getRefElement()->getAxis() != getAxis())
|
and ((cost.getRefElement()->getAxis() != getAxis())
|
||||||
or not _segments[begin]->isNonPref() ) ) {
|
or not _segments[begin]->isNonPref() ) ) {
|
||||||
|
if ( (_segments[begin] == cost.getRefElement())
|
||||||
|
or (_segments[begin] == cost.getSymElement())) {
|
||||||
|
cdebug_log(155,0) << "Segment istself in track, skip." << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
cdebug_log(155,0) << "Same net overlap, increase delta shared." << endl;
|
cdebug_log(155,0) << "Same net overlap, increase delta shared." << endl;
|
||||||
cost.incDeltaShared ( overlap.getSize() );
|
cost.incDeltaShared ( overlap.getSize() );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue