Commit Graph

6 Commits

Author SHA1 Message Date
Jean-Paul Chaput 35c2e18f39 Implement AutoContact restriction using DbU instead of deltas (8 bits). 2016-09-22 14:16:53 +02:00
Jean-Paul Chaput bff9a38742 Forgot to perform Track re-order after removing zero-length segments.
* Change: In Anabatic::Autocontact, replace getMinDepth() and
    getMaxDepth() by getDepthSpan().
* New: In Anabatic::AutoSegment::canMoveUp(), add an optional check of
    low up density (Flags::CheckLowUpDensity). Allows to move up a
    segment if the up density is (very) low, and in this case it's more
    efficient than breaking it to fit in the lower layer.
      canMoveUp() is now able to perform the same work as canPivotUp()
    if *not* supplied the flag Flags::IgnoreContacts.
* New: In Katana, in GlobalRouting::DigitalDistance() now take into
    account the cost of a VIA (currently set to 2.5). Need to known the
    Net currently routed in the DigitalDistance object itself.
* Change: In Katana::Track::Element::canPivotUp(), now also takes a flag
    parameter.
* Change: In Katana::Manipulator, new flag IgnoreContacts to mirror the
    one of Anabatic.
* Change: In Katana::SegmentFsm, allocate once a Manipulator object instead
    of many times on the fly.
      In SegmentFsm::_slackenGlobal(), in the slacken state, if the up
    density is (very) low, bypass to move up instead of slackening.
    This solve better the routing of the control part of the register file.
    The register file having a pathological case of terminal placement:
    many punctual terminals aligneds in METAL2 *and* a grid of METAL2 and
    METAL3 blockages near below...
* Bug: In Katana::Session::_revalidate(), after removing the zero-length
    segments, forgot to re-order the track, leading to many stranges effects
    as the indexes where no longer coherent in the Track.
2016-09-20 11:30:45 +02:00
Jean-Paul Chaput 44500a2329 Correct management of last E/N GCell boundaries.
* Bug: In Anabatic::GCell, new functions getConstraintUMax() to return the
    correct bounding box for the last north/east GCell. The GCells do not
    own their north/east edges, except for the last ones. Thoses functions
    must distinct from getUMax() because for them, the shrink is always
    applied. getConstraintBox() uses the "getConstraintUMax()" functions.
* Bug: In Anabatic::AutoContact, initialize the constraint box from the
    new GCell::getConstraintUMax(), to manage correctly the boundaries
    of the nothernmost & easternmost GCells. The problem was showing for
    pins on the north/east side of a circuit, the constraint
* Bug: In Anabatic::AutoContactHTee, Anabatic::AutoContactVTee and
    Anabatic::AutoContactTerminal forgot to call the _preCreate() function
    in the various create().
* Bug: In Matrix::getUnder(), if on the N/E boundary, decrease by one to
    be enclosed in it.
2016-08-27 15:59:12 +02:00
Jean-Paul Chaput 84dad2249e Anabatic transient commit 14. Change model for long wires.
* Change: In Anabatic:
    - Long wires, going straight accross multiple GCells were splitted
      into a long sequence of segment+contact, one for each gone-through
      GCell. It was memory-consuming and algorithmically inefficient.
      Now there is only one straight wire.
        As a consequence, Edges now store the list of all segments
      going through them. That way we do not need to load a Net into
      Dijkstra before riping up some of it's segment. The ripup mechanims
      can now be implemented right at AnabaticEngine level, without
      dependencies over Dijkstra. Note that long wires are automatically
      broken in two if we need to attach a new branch on it (breakAt()).
      And fused back into one if a branch is removed (unify()).
2016-07-30 12:15:49 +02:00
Jean-Paul Chaput 9808fb12b2 Solve the template lookup problem in tstream.
* Bug: In Hurricane, in tstream (Commons.h), in the *template* overload of
    operator<<(), do not use the operator<<() of ostream as it will be
    looked up in "stage 1" (template definition) and so will miss all the
    overloads added later and built over getString<>(). Instead, make use
    of getString<>(), which, as another template will be looked up in
    "stage 2" (template instanciation) and at that point will have all the
    needed template specialisation of getString<>().
      We also need to define new stream manipulators to be able to create
    a matching template overload not dependant from the implementation.
    To avoid name clashes, we prefix a 't'. For now, only 'tsetw()' is
    refined.
      As a side effect, we cannot directly print bit-fields into the stream,
    we must go through an intermediate variable (happens once in AutoContact).
2016-07-19 16:02:55 +02:00
Jean-Paul Chaput 9114766129 Anabatic transient commit 11. Merge Katabatic into Anabatic.
* New: In Anabatic, merge in the Katabatic tool. The merge is not complete
    yet. Only basic capabilities have been moved.
2016-07-18 14:48:37 +02:00