Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various fixes for IHP SG13G2 node. #139

Draft
wants to merge 33 commits into
base: main
Choose a base branch
from
Draft

Various fixes for IHP SG13G2 node. #139

wants to merge 33 commits into from

Conversation

jpc-lip6
Copy link
Collaborator

No description provided.

…nsion.

* Move updatePosition() & checkPosition() from AutoVertical & AutoHorizontal
  into AutoSegment, as it appears now to be generic code.
* Fix: In AutoSegment::updatePosition(), for very short segment the
    duSource (resp. duTarget) can exceed the contact cap size. When
    source and target contact are close (or at the exact same position)
    we check that the target cap extension is not smaller than the
    source cap extention (on case of different VIAs on source and
    target, with target bigger than source). We must check the overload
    with the VIAs extension, not the duTarget, which, in some case *may*
    be bigger (for minimal area wires). Same apply to target.
* Change: In TrackSegment::revalidate(), merge confitional code (stupid).
* Change : In AutoSegment::_getString(), display the source/target
    track footprint interval.
Copy link

github-actions bot commented Oct 20, 2024

A preview of ff9d736 is uploaded and can be seen here:

https://lip6.github.io/coriolis/pull/139/

Changes may take a few minutes to propagate. Since this is a preview of production, content with draft: true will not be rendered. The source is here: https://github.com/lip6/coriolis/tree/gh-pages/pull/139/

* Promote means changing a segment in non-preferred direction, say a
  vertical in M2 (in a HV scheme) up to M3. This was only possible
  for segments not conecteds to terminals (short jogs, usually for
  terminal access in M1). This was done by moveUpToPref().
    Now add a full support able to manage non-pref directly conecteds
  to terminal. This allows to solve some bad configurations occuring
  with IHP SG13G2. The previous function is now replaced by a
  promoteToPref().
* We partially reuse the _makeDogleg mechanism has it can be
  understood as an "incomplete" dogleg (no extra parallel is made).
* This is a tricky change because we need to *re-create* the
  TrackSegment build upon the AutoSegment, from a TrackSegmentNonPref
  to TrackSegmentRegular.
* Bug: In AutoSegment::getEndAxes(), this function may be called
    *before* updateOrient(), so source axis *may* be greater than
    target axis. Just check and re-order them so we always get a
    positive or null length...
* Bug: In AutoVertical::updateOrient(), check the segment S/T
    ordering with S/T axis, not sourceU/TargetU. If by some other
    bug they are inverted (minimum area segment), then we got
    incoherency.
* Change: In AutoVertical::setDuSource() and the three others
    variant, issue a warning when the extension are positive
    (source) or negative (target), that is, the segment is
    shrunk. Should never occur.
* Change: In AutoSegment::unexpandToMinLength(), with IHP SG13G2
    we hit a borderline case. The minimum length to ensure minimum
    area of a segment *is equal* to the pitch. So, in the special
    case where the segment is lengthened to *one* pitch *after*
    it was a minimal length the S/T du are *not* reset to zero.
    Change the test for "<" instead of "<=" and hope it do not
    occur in some other tech (pitch *smaller* than minimal length
    to ensure minimum area).
* Should use a "<=" and *not* "<" when looking for the leftmost (first)
  overlapping tile in an IntervalTree. This was causing, under certain
  case, egde-touching wires being seen as disconnected.
    Example: and2_x0/i0 on GatPoly for IHPSG13G2.
…es").

* The GDS could be contained in one single GDS file, aka "gallery", instead
  of a set of individual ones. In that case, we can now preload the GDS
  gallery inside a sub-library, then, when a foreign directive is encountered,
  create an instance of the GDS model. This is much easier than performing
  an "on the fly" merge of the GDS and LEF cell contents.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant