Commit Graph

45 Commits

Author SHA1 Message Date
Jean-Paul Chaput c19429108e * ./kite:
- New: In RoutingEvent, while routing a full chip, transient full blockages
        may happens due to the initial position of some perpandiculars on theirs
        optimal positions. Check for it and perform a "ripupPerpandicular" with
        the perpandiculars re-routed first (on normal operation, this is the
        reverse).
    - Change: In NegociateWindow::NegociateOverlapCost(), do not account terminals
         if the layer is *above* METAL3 as it is unlikely that it's truly directly
         connected to a terminal (true at least for our designs).
    - Change: In RoutingEvent::State, add a "fullBlocked" flag to perform the
        full blockage direction while building the state object.
    - Change: In RoutingEvent::cacheAxisHint(), when the TrackSegment has parent,
        uses the parent current axis position and not it's axis hint.
    - Change: In Manipulator::insertInTrack(), when the overlapped segment is a
        Local and is completly enclosed (shrinkLeft & shrinkRight), no longer
        rip it up but force a shrink left/right instead. 
    - Bug: In RoutingEvent, the event sorting function was sorting in the *wrong*
        order! The less prioritary first! With the correct sort, we won an
        additionnal 30% in speed (total: 69%). From the "reference" time we have
        a 3.2 speed-up. And we can successfully process denser designs...
2011-01-09 18:08:57 +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 3d28803fed Oups. Forgot to remove the throw used to test ExceptionWidget, lanched
after ten RoutingEvents...
2010-12-15 16:08:33 +00:00
Jean-Paul Chaput 37d2483443 * ./kite:
- Change: Removed Histogram, moved into crlcore.
    - Change: In GraphicKiteEngine, add a menu entry to dump the measurments.
2010-12-15 15:12:00 +00:00
The Coriolis Project 80bf4027fb Last minutes corrections. 2010-12-12 22:15:44 +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 f3593289da * ./kite:
- Change: In GraphicKiteEngine, simplificate the normal menu, put
        everything else in the "step by step" sub-menu.
2010-08-26 15:02:26 +00:00
Jean-Paul Chaput 551adf4213 * ./kite:
- New: In Configuration & RoutingEvent, adds support for minimal break length
        by layer (METAL1 through METAL7).
    - New: Added measures for final detailed wirelength, wirelength expansion ratio,
        failed wirelength, number of processeds events and number of unique events.
2010-08-22 12:38:27 +00:00
Jean-Paul Chaput 4dadeb3f63 * ./kite:
- New: Parameter "kite.globalMinBreak" (in lambda) telling the minimal size
        under wich a global segment will not be broken, used in "conflictSolve1()".
2010-08-18 20:25:02 +00:00
Jean-Paul Chaput 988cf5f674 * All Tools:
- Change: Using more Bootstrap macros. Simpler way of setting the
        CMAKE_MODULE_PATH.
2010-07-15 14:31:25 +00:00
Jean-Paul Chaput dc569a1eb9 * All Tools:
- Change: Switch from "goodies" to "bootstrap".
2010-07-14 19:39:46 +00:00
Jean-Paul Chaput c7d1b460d1 All tools: using the new Goodies macro.
Suppress loops in Hurricane libraries.
2010-07-13 16:25:33 +00:00
Jean-Paul Chaput 350950cff8 * All tools:
- Bug: target_link_libraries() must be put back for OSX Snow Leopard
        (doesn't seems to affect Leopard). As I do not have an OSX under
        my hand it's untested and is likely to fail at that point.
2010-07-12 15:12:20 +00:00
Jean-Paul Chaput 0d9f40e720 * All tools:
- Library linking: there must not be "target_link_library()" for libraries,
        only when building binaries. Avoid clashes between static module
        or class variables, and strange reinitialisation of those variables.
    - Change: Boost is now always linked staticly.
2010-07-01 11:50:15 +00:00
Jean-Paul Chaput e16a7f24de * ./kite:
- Change: In GraphicKiteEngine, re-enable drawing of Knik::Edges & Knik::Vertex
        by directly using the static callbacks from GraphicKnikEngine.
2010-06-22 20:38:41 +00:00
Jean-Paul Chaput 5705929dc8 * ./katabatic, ./kite:
- Bug: In Configuration, discrepencies of parameter types.
2010-06-22 13:59:22 +00:00
Jean-Paul Chaput 05095032a2 * ./nimbus,
./metis,
    ./mauka,
    ./katabatic,
    ./kite :
    - Change: switch toward the XML configuration system. Suppress the need
        of a default static configuration (now built on demand from the XML
        database).
          In Mauka and Kite, suppress the ConfigurationWidget, wich are
        obsoleted by the generic XML configuration widget.
2010-06-18 14:03:38 +00:00
Jean-Paul Chaput 0c7878df11 * ./kite:
- Bug: In CMakeLists.txt, local include directories *first*.
    - Change: In Configuration::setRipupLimit(), swap the two parameters,
        more natural ordering.
    - New: In ConfigurationWidget, adds an "apply" button to register the
        new parameters values.
2010-06-08 12:03:24 +00:00
Jean-Paul Chaput 7e8bf7ef0b * ./kite:
- Bug: In RoutingEvent, Cs1Candidate::getConflicts() uses of out of bound index.
        Strangely shows only under recent distributions (Fedora 13).
2010-06-01 21:35:20 +00:00
Jean-Paul Chaput 0d66fc6eb4 * ./hurricane:
- Change: When static linking is required, also switch Boost libraries in static
        mode. Automatically done is modules using FindHURRICANE through
        SET_LIB_LINK_MODE(). Note: FindBoost must be called *after* SET_LIB_LINK_MODE().
2010-05-31 12:28:55 +00:00
Jean-Paul Chaput e310b3ff36 Added missing <limits> header. 2010-05-28 09:17:29 +00:00
Jean-Paul Chaput f29ec72d80 * ./kite:
- New: Adds support to restrict the number of routing layers. Not enabled yet
        because the router needs some more tweak if using only two routing layers.
2010-05-27 16:12:44 +00:00
Jean-Paul Chaput b47b2ae674 Prepend DESTDIR to CMAKE_MODULE_PATH 2010-05-22 14:14:28 +00:00
Jean-Paul Chaput 0111e2f559 * All tools:
- Change: Adds ${LIB_SUFFIX} to all library search paths.
2010-05-19 14:31:10 +00:00
Jean-Paul Chaput 5a3adf2236 * All tools:
- Change: take account of the renaming "io" -> "vlsisapd".
2010-05-18 15:04:40 +00:00
Jean-Paul Chaput db3df319ed * All tools:
- Change: adopt a tree layout compliant with the UNIX FHS.
        * includes under      TOP/include/coriolis2.
        * shared datas under  TOP/shared/coriolis2.
        * docs under          TOP/share/doc/coriolis2.
        * configuration under TOP/etc/coriolis2

  * ./crlcore:
    - Change: In Environment, comply to the new tree layout, search configuration
        files under TOP/etc/coriolis2/.

  * ./knik:
    - Change: In flute, comply to the new tree layout, get the "POW*.dat" files
        from TOP/share/coriolis2/flute-2.4.
2010-05-18 12:53:10 +00:00
Jean-Paul Chaput 18e534f73a Adds LIB_SUFFIX to all CMakeLists install "lib" targets, so that 64 bits
libraries gets installed in "lib64" instead of "lib".

buildCoriolis.py sets automatically LIB_SUFFIX for cmake.
coriolis2.spec modificated to uses lib64 on 64 bits.
2010-05-17 21:19:14 +00:00
Jean-Paul Chaput 48d1487d7b * All tools:
- Change: In the CMakeLists.txt, in all the install commands remove all
        the leading "/" as they prevents the CMAKE_INSTALL_PREFIX to be took
        into account. It was nevertheless working because buildCoriolis.py was
        using DESTDIR which is prepended anyway.
  * ./goodies:
    - Change: In buildCoriolis.py, no longer uses the DESTDIR but instead
        CMAKE_INSTALL_PREFIX.
2010-05-16 16:34:11 +00:00
Jean-Paul Chaput ac40b49d13 * ./kite:
- New: In KiteEngine, export GWL, Area & Sat measurements.
2010-05-13 09:46:32 +00:00
Jean-Paul Chaput 22f8a25ced * ./kite:
- Change: In Configuration, sets the default expandStep parameter to
        0.99 (gives better results).
    - Change: In KiteEngine::_computeCagedConstraints(), detect and build
        a list of segments on which caged constraints are incompatibles
        (tearing effect shown in ieee_division). All caged constraints
        functions are modificated accordingly.
    - Change: In Session::_revalidate(), makes doglegs on Segment with
        incompatible caged constraints.
    - Mark: vld & ieee_division works.
2010-05-11 11:04:47 +00:00
Jean-Paul Chaput 37b4e5b423 * ./kite:
- Change: In TrackCost, the ripup cost is now computed from a mix between
        the number of ripup *and* the data state. Restore a correct balance
        of the ripping up between segments.
    - New: In RoutingEvent::State::conflictSolve1(), when a very long Segment
        enters in conflictSolve1(), still prefers to move it up in one piece,
        but if it's not possible, it is unlikely that it will overlap with
        only one or two other Segment. In that cases, blindy break it up in
        the middle.
    - New: In RoutingEvent::Manipulator, another overload of makeDogLeg to
        allow break up at one precise point.
    - Change/Bug: In RoutingEvent::Manipulator::Relax(), reset the state of
        the non-overlapping Segment fragments instead of inheriting blindly
        of the state of the breaked up one. Gives some supplemental slack
        that allows to converge.
    - Note: Now the strategy is to disable the uses of GCellRoutingSet by
        setting the expand step to 0.99. This induces only a slight slow
        dow and memory increase and passes all the tests...
    - Mark: This revision passes all the benches except for idct, vld &
        ieee_division.
2010-05-03 09:16:50 +00:00
The Coriolis Project 29dd5a96fa Correct pathes detection. 2010-04-28 21:55:00 +00:00
Jean-Paul Chaput ef1a6f6cd2 Forgot to add souce files... 2010-04-28 15:45:06 +00:00
Jean-Paul Chaput 6a3440f4e6 * Most of tools:
- Bug: In top CMakeLists.txt the SETUP_PROJECT_PATHS was not inserting
        X_USER_TOP *before* X_TOP, thus potentially allowing an obsolete
        system-wide configuration to shadow an up-to-date local one.

  * ./kite:
    - Change: In Configuration/KiteEngine, propagate changes in Configuration
        in Kite. Note that a *second* singleton is created at Kite level.
    - New: KiteEngine::printConfiguration() method to allow quick checks of
        the router's main parameters.
    - New: ConfigurationWidget to display/sets all the revelant Katabatic/
        Kite configuration parameters. To be used with the TabSettings from
        the ControllerWidget.
          The ConfigurationWidget is bound to the default (static) Kite
        configuration, as once it has been run you obviously cannot change the
        router's settings.
2010-04-28 15:44:07 +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 a515d42757 * ./kite:
- Cleanup: In GCell, remove the DyKeyQueue support as it's been moved
        to Katabatic level.
    - Change: In NegociateWidow, increase the event stop thresold to 4M events
        to be able to process the eFPGA matrix 16x16 (150K gates).
2010-03-26 18:03:01 +00:00
Jean-Paul Chaput 42391218bc * All Tools:
- Change: <PROJECT>_SEARCH_PATH are put back into the *first* tool of
         a project.
     - Bug: In HURRICANE_CHECK_MACRO(), the quiet flag was not correctly
         implemented. User ARGV instead of argv (case sensitivity!).
2010-03-19 14:22:34 +00:00
Jean-Paul Chaput b044a3e8a6 * All Tools:
- Change: New structure for the installation & CMake system.
         * Tools are now grouped in "projects". There are three projects:
           1. - IO: Standalones parsers/drivers (IO_USER_TOP, IO_TOP).
           2. - Coriolis: Base & digital tools (CORIOLIS_USER_TOP, CORIOLIS_TOP).
           3. - Chams: Analogic tools (CHAMS_USER_TOP, CHAMS_TOP).
           Each *project* has a two "TOP" environement variables, for
         example: IO_TOP and IO_USER_TOP. Thoses variables are the only
         ones useds to locate the tool (CMake modules, headers & libraries).
           The local path always takes precedence over the global one.
           The localisation process occurs in each tool top CMakeLists.txt
         where the macro SETUP_PROJECT_PATH is to be defined. There is no
         way to put it in a shared includes file as it's the macro precisely
         used to locates the includes... You have to call the macro once for
         each project you wants to uses:
             SETUP_PROJECT_PATHS(IO)
             SETUP_PROJECT_PATHS(CORIOLIS)
         * In FindTOOL.cmake, supress the <TOOL>_DIR_SEARCH and uses the
         <PROJECT>_DIR_SEARCH instead (example: CORIOLIS_DIR_SEARCH).
         * buildCoriolis.py modificated according to the new "TOP" scheme.
2010-03-18 15:32:50 +00:00
Jean-Paul Chaput 5c592b18ce Transient commit.
Kite is not in a stable state, juste doing so to allow working
on automated build script.
2010-03-16 12:28:32 +00:00
The Coriolis Project edd85db787 * All tools:
- Change: Adaptation to cmake 2.8. No more "add_subdirectory()" when
       the sub directory doesn't hold a CMakeList.txt.
         For "add_definition()", set policy 00005 to NEW.
   - Change: Integrate IO extenal libraries.
   - Change: Small compatibilities between "size_t" and "unsigned int"
       under 64 bits.
   - Change: Temporarily disable Equinox/Solstice in unicorn.
2010-03-11 16:01:10 +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