Commit Graph

10 Commits

Author SHA1 Message Date
Jean-Paul Chaput 17f3207d71 * ./kite:
- New: In NegociateWindow/RoutingEvent, adds a more comprehensive stage
        "Repair". Perform in three stage: first try to place with a relaxed
        constraint (one GCell on each side). Second try to minimize the faulty
        segment. Third perform another "repack perpandicular" but this time
        the faulty segment is re-inserted *before* any of it's perpandiculars.
    - New: In RoutingEvent::cacheAxisHint(), when a segment has a parent, that
        is comes for a "moveUp()", uses the parent axis hint as it's own.
    - New: In State::slackenTopology(), in the global FSM, adds a special
        operation when reaching MaximumSlack: forceOverLocals(), try to insert
        the global on track containing only local segments. Should tend to
        concentrate locals on a small set of shared tracks. Most useful on the
        highest layers.
    - New: In State::slackenTopology(), in the "MoveUp" state, try to find the
        more appropriate segment to move up (Manipulator::desaturate()).
        Effectively move up the longest segment fully enclosing the one we are
        processing.
    - New: In State::slackenTopology(), add a check for fully blocked segments
        in the local segment FSM. Calls State::solveFullBlocked().
    - New: In KiteEngine::createGlobalGraph(), decrease the vertical capacity
        of one track inside the core. Helps smooth the vertical density.
    - Change: In Manipulator::insertInTrack(), when a track is freed for a
        to be inserted changes the priorities so that the segment is immediatly
        inserted. Parallels ripeds and theirs perpandiculars are replaced
        only *after*. This is the opposite of the previous behavior.
    - Change: In NegociateWindow::NegociateOverlapCost(), account the costs
        of terminals only for deep depth layers (M1, M2 & M3).
    - Change: In RoutingEvent::insertInTrack(), expand the excluded interval
        by a half-pitch (2.5l) instead of one lambda.
    - Change: In State::State(), do not uses DiscardGlobal if the ripup count
        exceed 5. Case of the "Strap" segments that can be ripped a lot
        before changing state.
    - Change: In State::_processNegociate(), no longer lock into position
        (fixed) the local terminal segments as a last resort.
    - Change: In RoutingEvent::_processNegociate(), no longer ripup perpandiculars
        when a segment is inserted in a free space. Reduce the number of
        events whithout degrading the routing quality.
    - Change: In State::conflictSolve1_v1b(), if getLongestConflict() is nul,
        ignore the track, the conflict must occurs on another track.
    - Change: In TrackCost, add a flag support. First uses, a flags to prevent
        a local of the topmost layer to ripup a global which is in moveUp
        state.
    - Bug: In State::solveFullBlockage(), after have been freed, reset the
        segment state to "moveUp".
    - Bug: In manipulator::minimize(), the axisHint was miscalculated if the
        punctual span was empty.
2011-01-25 17:16:50 +00:00
Jean-Paul Chaput 3c9d064fd8 * ./Kite:
- New: In BuildPowerRails, special processing for the power ring segments.
        The "diagonal" of vias at each corner is causing a misbehavior of the
        routing algorithm (due to fully saturated GCells in one direction).
        As a temporary fix, extend the segments so they form a "square corner".
        (problem arise on "d_in_i(22)").
    - New: In RoutingEvent::_processNegociate, disable the "isForcedToHint()"
        feature. No noticeable loss of quality or speed.
    - New: In TrackElement/TrackSegment, wraps the AutoSegment parent's mechanism.
        Allows to gets the DataNegociate of either the segment or it's parent.
    - New: State::solveFullBlockages(), dedicated method to solves the case when
        all the allowed tracks of a segment are blocked, tries to moves up
        local segments and to break-up global ones.
    - New: RoutingEventLoop, a more sophisticated way to detect looping.
        Maintain a dynamic histogram of the last N (default 10) segments routeds,
        with the count of how many times they have occurred. If that count
        exeed 40, we *may* be facing a loop.
    - Change: In State::conflictSolve1, implement new policy. The global segments
        no more can be broken by local ones. The idea behind is that breaking
        a global on the request of a local will only produce more cluttering
        in the GCell. Globals must be keep straigth pass through, especially
        inside near-saturated GCells. Globals breaking however can occurs at
        another global's request.
    - Change: In TrackCost, implement the new policy about locals segments that
        cannot break globals segments. The sorting class now accept flags to
        modulate the sorting function. Two options avalaibles: IgnoreAxisWeigth
        (to uses for strap segments) and DiscardGlobals (to uses with locals).
    - Change: In TrackCost, the "distance to fixed" have now an upper bound of
        50 lambdas (no need to be greater because it means it's outside the
        begin & en GCells). Take account not only of fixed segment, but also
        of placed segments which makes bound.
    - Bug: In Track::_check(), while calling each individual TrackSegment check,
        uses it as the *first* argument of the "or", otherwise it may not be
        called.
    - Bug: In ProtectRoutingPad, loop over segment Collections while modificating
        it was producing non-deterministic results. The fact that a collection
        must be not modificated while beeing iterated is becoming a more and more
        painful problem.
2010-12-30 18:42:17 +00:00
Jean-Paul Chaput c9e1c3101a * ./kite:
- Change: Big cleanup. Supress all the GCell level: GCell, GCellGrid,
        GCellRoutingSet. Blockages now managed inside the BuildPower.
    - New: In NegociateWindow, Histogram of GCell densities in Gnuplot
        format.
2010-12-12 21:42:57 +00:00
Jean-Paul Chaput 23fc3e7b79 * ./kite:
- Change: Propagate renaming "obstacle" -> "blockage".
    - Bug/Change: In Configuration, the value of the extensionCap was too big
        (1.5 lambda), reduce to 0.5 lambda. This is a problem, the extension
        should be coupled to the layer as it is not the same for each METAL.
    - Bug: When using TrackElement, always uses the virtual "->isFixed()" method
        instead of trying to access to "->base()->isFixed()" as the base may be
        NULL in case of blockage/fixed segment.
    - Change: Merge PowerRails & Blockage trans-hierarchical construction (into
        PowerRails). All blockages are groupeds under "blockagenet".
          Allows to remove TrackBlockage & BuildBlockages.
    - Change: In KiteEngine::annotateGloblalGraph(), when routing a full chip,
        ring power segments around the core must completly saturate the edges
        in their segment direction. This is to prevent the global router to
        use paths under the power/ground ring (may generate unsolvable configs).
    - Change: In KiteEngine::annotateGloblalGraph(), when routing a full chip,
        distinguish three areas: the core (65%), the corona (90%) and the pads
        (100%). Capacities on the edges are sets accordingly.
    - Change: In RoutingEvent, introduce an alternative algorithm for
        conflictSolve1, FindPath which try to deduce the breakpoints from a
        truly explorated path. Unfortunatly this gives worst results than the
        Cs1Candidates method. The why should be investigated as it's a critical
        point in the algorithm.
    - Change: In Manipulator::ripupPerpandicular(), when a caged perpandicular
        is encountered, instead of just "stopping", rip it up and change is
        axis hint (actually increase) it's axis hint so it stands a chance to
        go outside the track with an obstacle.
    - Change: In RoutingEvent/State::slackenTopology(), allow move up of local
        segments when they are tightly constrained *and* blocked (cageds).
        Partial modification of functions calls from booleans to flags.
    - Bug: In NegociateWindow::NegociateOverlapCost, check for fixed segments
        before trying to get DataNegociate. The lack of DataNegociate cause the
        TrackElement to be discarted. It's a failsafe behavior, but it leads to
        overlaps.
    - Bug: In ProtectRoutingPad, in Pad Cells only, *do not* protect RoutingPad
        to avoid the edge capacity over the pad to decrease to zero. This is
        due to unused RoutingPads being accounted as blockages.
2010-12-04 15:25:48 +00:00
Jean-Paul Chaput 3b11ca116c * ./kite:
- New: In BuilPowerRails & BuildBlockage, specific support for chip-level
        design. The Alliance "top chip" design hierarchical structure is
        hard-coded. Top level POWER/GROUND/CLOCK nets must always have the
        <vsse>, <vdde>, <ck>, <vssi>, <vddi>, <ckc>, <cki> names.
          Specific method to get trans-hierarchical root nets, espcially in
        case of global ones (POWER/GROUND). Clock is *not* global.
          Some correction in the manner obscured tracks are computeds.
    - New: ProtectRoutingPad module that perform a more clean work for protecting
        unused RoutingPad.
    - Bug: In BuildPowerRails, uses stable_sort<> instead of sort<>, which
        causes unexplained core dumps (seems to try to perform a comparison
        using the "end" pseudo element). Already occured in Knik, no explanation
        other than a STL bug.
    - Change: Slight changes in the weights to move up. Now needs a full empty
        track instead of a half one.
2010-11-16 14:00:03 +00:00
Jean-Paul Chaput e310b3ff36 Added missing <limits> header. 2010-05-28 09:17:29 +00:00
Jean-Paul Chaput b2c3c68601 * ./kite:
- Change: In TrackFixedSegment, when the source/target coordinates of the
        fixed segment are outside the grid (i.e. the Cell Abutment Box) truncate
        them.
    - Change: In GCell::addTrackSegment, when looking for overlap between the
        to be inserted TrackSegment and Blockage segment, shrink the Blockage
        span by one DbU to avoid false overlap when they are just edges connexes.
    - Bug: In RoutingEvent::slackenTopology, in the local segment FSM, looping
        on the MaximumSlack state. Now also checks the state count.
    - Change: In TrackSegment::canMoveUp() & canPivotUp() adds the "reserve"
        parameter and uses it in RoutingEvent to prevent over saturated GCells.
    - Change: In Configuration, parameters adjustements: expandStep increased to
        0.40. Makes RoutingSets biggers but no noticeable slow down.
2010-04-23 13:14:17 +00:00
Jean-Paul Chaput 3f8e8459fc * ./kite:
- Bug: In RoutingEvent::Manipulator::forceToTrack(), wrong return code,
        was always return true, blocking the explorations of least good
        Track.
    - Bug: In RoutingEvent::_processNegociate(), must reset the "insert state"
        while looping on candidate. This bug was having the same effect as
        (and masking) the previous one!
    - Bug: In TrackSegment::moveUp(), reset the ripup count after the move
        up...
    - Change: At various DebugSession opening points, sets the debug level to
        200 to avoid extraneous debugging output.
    - New: KiteEngine::dumpMeasures() to create a data file for later uses
        by gnuplot. In interactive mode, this function is called in the
        "finalize layout" stage.
    - New: Adds measurments "algo", "fin" & "Segs".
2010-04-17 10:14:46 +00:00
Jean-Paul Chaput 974b29b8a7 * ./kite:
- Change: In TrackSegment, _postDogLeg() & _postModify(), add segments to
        "Ring" if they are directly connected to a RoutingPad. To maintain the
        "border effect" after a topological slackening.
    - Change: In GraphicKiteEngine, in the global routing relateds menus, suppress
        the mention of "solution" as it might be unclear for an average user.
        (just "Save Global Routing" or "Load Global Routing").
    - Change: In RoutingEvent, conflictSolve1() tries to move up "other" blocking
        segment before trying to break "self".
    - Bug: In TrackSegment::reschedule(), remove from Track segments that are
        now in a greater order than the current one. This bug was shown in the
        TrackSegment::_postModify() method after a desalignate.
          It was causing overlaps and/or routing completion false reports.
2010-04-12 11:24:57 +00:00
Jean-Paul Chaput 5dd8cb502a * ./hurricane/src/hviewer,
./coriolis/src/crlcore,
     ./coriolis/src/knik,
     ./coriolis/src/katabatic,
     ./coriolis/src/kite,
     ./coriolis/src/equinox,
     ./coriolis/src/solstice,
     ./coriolis/src/ispd:
     - SVN MOVE: Source tree simplification & uniformisation. Now all tools
         are at the same level, directly under the root of the repository.
         No more "coriolis/src".
2010-03-09 15:24:55 +00:00