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:
Jean-Paul Chaput 2021-05-09 11:03:09 +02:00
parent e50426a5bc
commit c137c1ac5b
1 changed files with 5 additions and 0 deletions

View File

@ -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() );
} }