Commit Graph

113 Commits

Author SHA1 Message Date
Jean-Paul Chaput 51a3236962 Add management of fixed wires to Kite (for chip ClockTree)
* Change: In Hurricane, in Plug::setNet(), more informative error messages.
* Change: In Hurricane, In Segment, more informative error messages.
* Change: In Hurricane, In DeepNet, accessor for the Net occurrence.
* Bug: In Katabatic, in AutoSegment::create(), error message uses correct
    variables (vertical was using horizontal)...
* Change: In Kite, in BuildPowerRails, already existing wiring in instances
    is copied up as blockage. Uses blockage layer instead of true layer
    (it was a bug).
* Change: In Kite, in BuildPreRouted, consider as manual global routing
    nets with only default wiring (default size wire & contacts).
    Non-default routing is flagged as fixed (with the NetRoutingState
    property).
2014-08-15 19:26:49 +02:00
Jean-Paul Chaput 520b9ae382 Restore support for both Qt4 & Qt5.
* Change: In bootstrap, in ccb & builder, build by default with Qt4 and
    provide a --qt5 command line switch to enable Qt5.
      FindBootstrap.cmake now provides a qtX_wrap_cpp() macros to be
    independant of the version of Qt being used.
      Add all thoses options to the graphical interface to the builder.
* Change: In all the tools using Qt, switch to the qtX_*() macros from
    FindBootstrap.cmake.
* Change: In Hurricane, in CellViewer, revert to the Qt4 way of connecting
    signal/slots for backward compatibility.
2014-07-22 11:06:26 +02:00
Jean-Paul Chaput d0d045b55b Starting to implement support for Windows/Cygwin.
* New: In all to CMakeLists.txt, disable the warning about deprecated
   WIN32 under cygwin.
* New: In boostrap, in ccb.py, coriolisEnv.py and builder/Configuration.py
   add recognition in uname for the values returned under Windows/Cygwin.
* New: In Documenation, in UsersGuide.rst add some informations about
   Cygwin and a section for the devel branch.
2014-07-13 13:14:49 +02:00
Jean-Paul Chaput 0cced62851 Kite is now deterministic, given a global routing.
* Bug: In Kite, in TrackCost, the boolean attribute "_forGlobal" was not
    initialized in the constructor causing the non-deterministic behavior.
    Arrrrgggghhhhhh.
* Bug: In Kite, in PyKiteEngine, forgot to perform the
    "balanceGlobalDensity()" in the layer assign Python wrapper, another
    cause for non-determinism.
* Change: In Kite, In KiteEngine, print the configuration at the same
    point as in the python script (to get identical output).
2014-07-07 00:42:38 +02:00
Jean-Paul Chaput 20d25b2053 Add NetRoutingState (Property) on Nets to tell Kite what to do.
* New: In Katabatic, add the ability to decorate some (i.e. few) nets
    with a state that indicate to Katabatic & Kite what to do with it.
    The possible states are:
    1. Fixed : all the wire are in fixed positions. The router cannot
       move them and account them as obstacles.
    2. ManualGlobalRoute : a user-defined topology is supplied. The
       wires still have to be detailed route in "Detailed Pre-Route"
       but will be skipped for the global routing and fixed for the
       general Detailed route.
    3. AutomaticGlobalRoute : ordinary nets, to be global routed then
       detail routed.
    4. Excluded : do not try to global or detail route thoses nets.
    5. MixedPreRoute : mask combining Fixed and ManualGlobalRoute.
      Not all nets have this property, only those that needs a special
    processing.
      To ease the access to the state, it is nested inside a
    PrivateProperty in the net (NetRoutingProperty), with an extension
    access class (NetRoutingExtension).
* New: In Kite, take account of NetRoutingState. Pointers to the
    net's states are strored inside an internal map for faster access.
    The property is *not* deleted when Kite is destroyed. The property
    will remains until the Net itself is destroyed.
      As a consequence, the lists that where passed to high level
    function are removed as the information can now be accessed directly
    through the net NetRoutingProperty.
* New: In Unicorn, in CgtMain, comply with the update interface.
* New: In documentation, update the User's Guide to explain the Pre-routed
    step of Kite.
2014-07-02 14:36:58 +02:00
Jean-Paul Chaput ff21d3c8a2 Implementation of pre-routing support (for clock-tree compliance).
* New: In Katabatic, in <AutoContact>, this class is no longer derived
    from ExtentionGo. With the simplificated AutoContacts, there is no
    reason to do so, and it will save some QuadTree insertions/deletions.
      New factory function AutoContact::createFrom(Contact*) which try to
    build an AutoContact on top of a Hurricane::Contact. Of course that
    base contact *must fit* into one of the predefined Contact
    configurations (Terminal, Turn, HTee or VTee).
      NOTE: This implies that the pre-routed segments & contacts *are*
    correctly articulated, which is not the case when a Cell is read
    from disk in "ap" format. The pre-routing feature must be used for
    now without any re-read from disk. We will implement a re-articulating
    pre-process in the future.
* Change: In Katabatic, in <AutoContact> derived classes, the ::updateCache()
    method now display an accurate error message if a segment is connected
    but has no AutoSegment conterpart (i.e. the lookup fails).
* New: In Katabatic, in <AutoSegment>, the ::computeOptimal() method is
    short-circuited for pre-routed segments, the optimal axis position is
    considered to be the one it is currently on (i.e. we trust the designer).
* New: In Katabatic, in <KatabaticEngine>, the ::loadGlobalRouting()
    method now accept a map of excluded nets (same as Knik). This map is
    the one of pre-routed nets.
* New: In Katabatic, in layer assignment, do not try to displace fixed
    segments...
* New: In Katabatic, in <AutoSegment>, new flag SegUserDefined and related
    methods to know if a segment comes from the global router (Knik) or
    is pre-routed (supplied by the user).
* New: In Kite, In <BuildPowerRails>, support (exclusion) for pre-routed
    nets.
* New: In Kite, In <GraphicKiteEngine> new menu entry for running the
    router on pre-routed nets ("Detailed Pre-Route"), also integrated
    in the all-on-one route command.
* New: In Kite, In KiteEngine, new method ::_initDataBase() that group
    all the initialisation steps. It is a mix of calls between Knik and
    Kite initializations which are intertwinneds (may have to devellop
    a shared common base at a later point). It creates the Knik grid,
    then the Katabatic grid, then load pre-routed wires and power rails
    and protect isolated RoutingPads.
      Add support for a map of pre-routed nets (to be excluded for
    Knik calls).
      The method "::run()" now uses function flags, firstly to know if
    it is managing pre-routed wires or general purposes ones.
* New: In Kite, in <NegociateWindow>, the "::run()" methods has now two
    modes. The normal one and the 'KtPreRoutedStage' that is for routing
    pre-routed nets. When in pre-route stage, the wires are fixed at the
    end of this step.
* New: In Kite, in <TrackElement> add decorator for AutoSegment
    isUsedDefined().
* New: In Kite, in <TrackSegment>, the various ::canDogleg() methods
    returns false for a pre-routed (user-defined segment).
* New: In Kite, in PyKiteEngine, added new method runNegociatePreRouted().
2014-06-21 20:16:47 +02:00
Jean-Paul Chaput 2a1c7e181e Express "xEdgeCapacity" ratio as "xTracksReservedLocal" a number of tracks.
* Change: In Kite, Katabatic & Knik, express the number of tracks truly
    available to the global router by the number of tracks reserved to
    the local routage inside a GCell. Replace the ratio parameter
    "hEdgeCapacity" by an integer parameter "hTracksReservedLocal"
    (duplicate for verticals).
      It is more explicit to give directly the number of tracks that
    are to be used locally, and potentially saves us from rouding
    problems when calculating the number of availables tracks.
      Note: we cannot do that for the layer saturateRatio as it
    uses the density ratio that take account local wires, leading
    to fractional results.
* Change: In Katabatic, in <GCellGrid>, rename checkEdgeSaturation()
    into checkEdgeOverflow(), more explicit.
* Change: In Knik, in <Graph>, display the computed capacities of the
    lower left node edges (should be the same througout all the grid).
* Change: In Unicorn, in <cgt.py>, uses the new parameters names for
    edge density.
2014-06-10 16:58:52 +02:00
Jean-Paul Chaput 6939025a0d Correction of SoC.css, adjust the look of the class index big letters. 2014-06-10 00:04:48 +02:00
Jean-Paul Chaput cd9d3fc4b6 ExtensionCap support and source/target terminal flags in Katabatic & Kite.
Placement management:
* Change: In <metis>, always disable the hMetis support regardless of
    it being detected or not as the placer is still unable manage the
    final bin contents.

Routing gauge management:
* Bug: In CRL Core, <vsclib/alliance.conf>, set the correct pitches and
    size for the routing layers and the cell gauge.
* Change: In Katabatic & Kite, extract the correct extension cap for each
    routing layer from the layers characteristics (cache then in
    Katabatic::Configuration).
* Change: In Katabatic, <AutoSegment>, create segment with the wire width
    defined in the gauge. For AutoSegment created on already existing
    Segment from the global routing, adjust the width.
* Change: In Katabatic, <AutoSegment>, more accurate information about how
    a segment is connected to terminal via source and/or target.
    The flag SegStrongTerminal is splitted into SegSourceTerminal and
    SegSourceTarget (but still used as a mask). So now we can know by
    which end an AutoSegment is connected to a terminal.
* Change: In Katabatic, ::doRp_Access(), create constraint freeing segments
    not only when HSmall but also when VSmall (more critical for <vsclib>).
    Otherwise we may see AutoSegments with incompatible source/target
    constraints.
* Change: In Kite, BuildPowerRails, do not create blockage on PinOnly
    layers *but* still create power rails planes. This is a temporary
    workaround for <vsclib> where the METAL1 blockages overlaps the
    terminals (it was fine for Nero, but they shouldn't for Kite).
* Change: In Kite, <RoutingEvent>, if a TrackSegment is overconstrained,
    directly bybass it's slackening state to DataNegociate::Slacken.
    Also rename the flag "_canHandleConstraints" to "_overConstrained",
    seems clearer to me.

Miscellaneous:
* Change: In CRL Core, <Utilities>, add a "pass-though" capability on the
    mstream to temporarily make them print everything.
2014-05-25 15:00:35 +02:00
Jean-Paul Chaput 2dd36b9624 Support of RoutingGauge, part 2.
In Katabatic & Kite, remove all hard-coded values related to track pitches.
* New: In <Session>, add more convenience function to access RoutingGauge
    characteristics.
* New: In <AutoSegment>, <AutoContact>, add support for the "depth spin",
    that is, if the source/target contacts are going "top" or "down".
    Used to compute the perpandicular pitch. Need a small modification
    of the revalidation mechanism. The observers of <AutoSegment> are
    notified when the spin changes.
* New: In <AutoSegment>, the getPPitch() method allow to compute the
    "perpandicular pitch". For now it is simply the greatest from the
    source perpandicular pitch and the target perpandicular pitch.
    Make uses of the "depth spin".
* New: In <TrackElement>, <TrackSegment>, cache the perpandicular pitch.
    Updated through the notification from the observable.
2014-05-19 17:58:38 +02:00
Jean-Paul Chaput 65d2cc98b8 Small correction for latest gcc compiler (Fedora). 2014-05-14 10:44:14 +02:00
Jean-Paul Chaput dda3f99fd8 Update documentation for compliance with doxygen 1.8.5.
When upgrading from doxygen 1.5.x to 1.8.5 the way the documentation
is generated has underwent many changes, particularly in the headers.
* Change: In <header.html>, must include the javascripts <jquery.js>
    and <dynsections.js>.
* In <CMakeLists.txt>, as the header is customized, doxygen seems not
    copy some files like the javascripts and some images (open.png,
    closed.png). So we copy them from doxygen installation and make
    the CMakeLists.txt install them. I hope they will not change too
    much in the future.
* In <doxyfile>, disable markdown support as it do not interpret
    correctly the formating we already adopted (with a left margin
    to put command into). Use HTML_EXTRA_STYLESHEET instead of
    HTML_STYLESHEET. Enable the index (DISABLE_INDEX=NO), for the
    top header. Enable dot for inheritance diagram. Set the
    EXAMPLE_PATH=. to include the synthetic hierarchy.
    Correct the tag inclusion (faulty path in some places).
* In <SoC.css>, create style for the new header generated by doxygen.
* In the documentation, move the synthetic hierarchy into a module.
2014-05-13 16:30:41 +02:00
Jean-Paul Chaput c8bcfdf174 Improved UpdateSession & exception catching. Start of RoutingGauge implem.
Miscellaneous:
* Change: In <crlcore>, in display.conf use the same display threshold
    for both METAL2 & METAL3.
      In alliance.conf, the side of VIAs in the gauge is 2l (not 3l).
      In kite.conf, separate edge densities for H/V.
* Change: In <Cell>, in flattenNets() use flag as argument, not a
    boolean. Do not create rings for clock or supply nets.
* Change: In <DeepNet>, in _createRoutingPads() do not create rings
    for clock or supply net (duplicated policy as in Cell::flattenNets()).
* Bug: In <ControllerWidget>, at last find the bad signal disconnect
    that was causing ungraceful messages.
* Change: In <knik>, in Edge display occupancy/capacity in the string
    name. Improved display progress and debugging capabilities.

Improved exception catch & breakpoint managment:
* Bug: In <PaletteWidget>, in updateExtensions() replace the calls to
    deleteLayer() by delete. This cause the widget to be immediatly
    erased instead of waiting for the event queue to be completly
    processed. This was causing the widget to be left in a incoherent
    state when stoping at a breakpoint.
* Bug: In <BreakpointWidget>, in execNoModal(), flush the main event
    loop (QApplication::flush()) *before* lauching the *local* event
    loop. This is to ensure all widgets are in their final state when
    waiting (especially <PaletteWidget>).
* Change: In <ExceptionWidget>, new method catchAllWrapper() to
    execute any std::function< void() > function/method with a "try"/
    "catch" wraparound and lauch the widget in case something is catch.
* New: In <hurricane>, support for a oberver pattern, backported from
    <katabatic> with an Obervable capable of being linked to any
    number of Obervers.
* New: In <Cell>, made it observable to detect Cell change, currently
    emit two kind of signals:
    - Cell::CellAboutToChange : *before* any change.
    - Cell::CellChanged : *after* the change has been completed.
* New: In <UpdateSession>, in Go::invalidate() add the Cell owning the
    Go to the UPDATOR_STACK (of course the cell is added only once).
    In addition, when the Cell is added, send a notification of
    Cell::CellAboutToChange to all it's observers. The slave instances
    are also invalidated.
      Conversely in UpdateSession::_preDestroy() for each invalidated
    Cell send a Cell::CellChanged notification to all observer.
      The UPDATOR_STACK has been slightly amended to accept Cell which
    are not Gos. Prior to this, the Cell where completly excluded from
    the UpdateSession mechanism, so it's instances where never actualised
    of anything referring to the Cell for that matter.
      Note: we use two different mechanisms to transmit a Cell change,
    observers and the slave instance map. I think at some point it
    should be unificated.
* Change: In <CellViewer>, make it a Cell observer to redraw when the
    cell is modificated (also update the palette).
      Uses the catchAllWrapper() to protect all critical actions.
* Change: In <GraphicTool>, no longer need of cellPreModificated and
    cellPostModificated signals. Now done through the Cell obersvers.
* Change: In <mauka>, <etesian> & <kite> now uses the catchAllWrapper
    method for protection (need to split methods in two, to be able
    to pass it as argument). No longer emit cellPreModificated and
    cellPostModificated.

Support for RoutingGauge in P&R:
* Bug: In <placeandroute.py>, the connection from the internal power
    ring to the connectors was not done correctly. Wrong contact layers
    leading to a gap.
* Change: In <BuildPowerRails>, detection of the corona signals based
    on how the "pck_px" pad is connected. No longer based on name
    matching.
* Change: In <placeandroute.py>, support for 2 routing metal only
    (3 metal in the technology).
* Change: In <katabatic> & <kite> support for a "top layer" limitation
    on the routing gauge, this allows to use only two routing metals
    (METAL2 & METAL3). Work in progress.
2014-04-20 19:30:07 +02:00
Jean-Paul Chaput 4842f21a2e Update to Qt 5, requires cmake 2.8.9. New placer: Etesian.
Update to Qt 5:
* Change: Now requires at least cmake 2.8.9.
* Change: CMakeLists.txt needs small changes. Qt modules must be found
    one by one (Core, Gui, Widgets). Must add "set(CMAKE_AUTOMOC ON)"
    in the top file and replace "qt4" prefix in macros by "qt5".
    Added simpler macro "setup_qt()" in FindBootstrap.cmake.
* Change: No longer need to include <QGtkStyle> is is choosen by default
    according to the current desktop environment.
* Change: In <hurricane>, In HApplication, launch ExceptionWidget when
    a std::exception is catched instead of silently discarting it.

New placer Tool: Etesian
* New: <etesian> analytical placer. Encapsulate Coloquinte from
   Gabriel Gouvine.
* New: in <documentation>, add stub demonstration ToolEngine <smurf>.
   Needs to be commented.

Miscellaneous:
* New: in <boostrap> and <unicorn>, added support for Etesian, the new
    analytic placer. The tool itself will be added in the next commit.
* Bug: in <CellWidget>, when shifting the display buffer, we no longer
    can copy the buffer on itself (we should never have). Now go through
    a temporary one (PlaneId::AutoCopy) which is added to the
    DrawingPlanes. Affect "goLeft()" and "goUp()".
* Bug: In <CellWidget>, remove the WA_PaintOnScreen flag/attribute.
    When it's on, no PaintEvent is transmitted to the CellWidget
    when it's the central widget of the <CellViewer> (QMainWindow).
    It's something I still don't understand from the doc of Qt.
* Change: In <AreaCommand>, use the PlaneId enumeration instead of a
    anonymous numerical index.
* Change: In <HApplication>, no longer catch and silently discard
    standartd exceptions but launch the ExceptionWidget...
    Suppress the now deprecated constructor with "Type" argument.
* Change: In <SelectionModel>, the "reset()" method is deprecated in
    Qt5, instead enclose the "clear()" by a "beginResetModel()" and
    "endResetModel()" pair.
* New: In <crlcore>, add support for ISPD05 benchmarks (in Bookshelf
    format). Forked from ISPD04 and not finished yet.
* Change: In <Mauka>, distinguish the Action string identifier from
    <Etesian>
* New: In <unicorn>, add entry for ISPD05 loader. Add entry for
    <Etesian> analytic placer.
2014-03-22 11:50:36 +01:00
Jean-Paul Chaput f6ab7b87f0 Compliance with g++ 4.8.1, support for devtoolset-2
Details:
* New: in <bootstrap>: add support for devtoolset-2 in ccb. Run the
    cmake commands through 'scl', set shell environment variables
    BOOST_INCLUDEDIR & BOOST_LIBRARYDIR and disable the default
    system path search.
* Change: In various flex scanners add the %nounput to suppress
    compiler warnings.
* Change: Little cleanup for g++ 4.8.1 as it's more strict.
* Change: In various top CMakeLists.txt, suppress extraneous '/'
    after DESTDIR.
2014-03-15 10:47:37 +01:00
Jean-Paul Chaput 14a5f5f7ef Documentation restructuration
Documentation restructuration:
* Bug: in <hurricane>: bad figure for transf-R1.
* Change, in <kite>: Remove deprecated configuration variables.
* New: documentation <tool> to regroup all documentation not directly
  related to one tool.
* Change, in <crlcore>, move the user's guide and the top doc index
  into <documentation>.
* New, in <documenation>: added Python script demo based on AM2901.
2014-03-11 12:21:31 +01:00
Jean-Paul Chaput 34e0edfd61 Cleanup after SVN importation, <ccb> builder script adaptation.
Project hierarchy reorganisation:
* With svn, we were doing a tool by tool checkout, suppressing the
  whole repository hierarchy level.
* The tools were also grouped, inside one repository, into multiple
  projects (<bootstrap>, <vlsisapd>, <coriolis>).
* We do not want to split up each tool into a separate repository,
  given their tight integration (except for vlsisapd).
* We choose to simplify, and consider all tools in a svn repository
  one project. Due to the way Git clone repositories, the directory
  containing the project is now to be seen under "src/".

CMake modifications:
* Now that the <vlsisapd> and <bootstrap> projects are merged into
  coriolis, modificate the top CMakeLists.txt of each tool to uses
  only Coriolis (and bootstrap hard wired).

CCB compile script modifications:
* Uses the new source tree hierarchy, with the project directory
  inserted.
* Remove (comment) all parts relateds to svn managment.
* Git is sufficiently simple so that we do not want to integrate
  command shortcut into the script.

SVN cleanup:
* Remove the obsolete <chamsin> tool, that has become the full fledged
  <chams> project long time ago.
2014-02-26 18:24:41 +01:00
Jean-Paul Chaput 8634114021 * ./katabatic:
- In Session::_canonize(): if the canonical segment has never had it's axis
        sets, put it into *optimal* position instead of simply constraint 
        compliant. Force realignment of the segment sets as rounding errors
        may introduce slight misalignment on the axis (causing error laters
        in the various contact topological updates).
          This also seems to solve the ludicrous problem of negative ratio of
        expansion wires... (segments *not* at their optimal position at the
        start).
    - In LayerAssign, KatabaticEngine::layerAssign(), suppress the triple loop
        enclosign the desaturation. Now desaturate each layer exactly once and
        from bottom to top.
2013-12-20 14:54:34 +00:00
Jean-Paul Chaput 00975e1ad1 * ./katabatic:
- New: Whole replacement by Katabatic3.
2013-12-04 00:58:58 +00:00
Jean-Paul Chaput 2913d8aea1 * ./katabatic:
- Change: In KatabaticEngine, change messages of unmanaged nets from warning
        to info.
2012-12-22 18:22:38 +00:00
Jean-Paul Chaput 6a7e664087 * All Tools:
- New: Added FreeBSD/Ubuntu patches from Otacilio De Araujo
       (<otaciliodearaujo@gmail.com>).

  * ./katabatic:
    - New: Makes use of cbug to display the (scary) debug messages.
2012-12-03 08:28:43 +00:00
Jean-Paul Chaput e8935c099f * All Tools:
- A complete sweep of cleanup to suppress allmost all compiler warnings.

  * ./katabatic:
    - New: Added Python support, for configuration & Unicorn.
2012-11-16 12:53:33 +00:00
Jean-Paul Chaput ec6f65ef73 * <All Tools>/CMakeLists.txt:
- Change: Added versioning to library.
2011-02-02 22:25:23 +00:00
Jean-Paul Chaput 8ebce6079f * <All Tools>/CMakeLists.txt:
- Bug: During the packaging stage, DESTDIR must be appended to the
        pathes prepended to CMAKE_MODULE_PATH.
2011-02-02 11:20:05 +00:00
Jean-Paul Chaput cbccf9e2a4 * ./katabatic:
- New: In LayerAssignement & GCell, perform layer assignment on whole net
        trunk, instead on a segment by segment basis.
    - New: In GCell, fragmentation analysis. When a layer change is requested,
        it allows to check if the additionnal perpandiculars created to
        maintain connexity will not over fragment the layer. This is particu-
        larly critical for M3->M5 which create M4 in perpandiculars, and M4
        may be subject to very dense configuration.
    - New: In AutoSegment & LoadGrByNet, adds a flags telling if the net's
        degree equal 2. Has not proven to be useful yet.
    - New: In AutoSegment, adds a flag telling if the segment is the perpan-
        dicular part of a dogleg. Has not proven useful yet.
2011-01-25 17:16:27 +00:00
Jean-Paul Chaput 0df293655a * ./katabatic:
- New: In GCell, compute a "fragmentation" indice, the average free track
        length, the more fragmented, the smaller the indice.
    - New: In AutoSegment::canMoveUp(), when requested, not only check for free
        (parallel) track in the up layer but also check that the begin/end 
        local segments created to maintain layer connexity do not creates too
        much fragmentation. This fragment could prove critical in higly dense
        GCells.
    - Change: In LayerAssign, disable the ::rpDesaturate() steps, after optimization
        the router can handle 10 terminals per GCells in M2 without problem.
        And ::rpDesaturate() must uses GCell::stepNetDesaturate() and *not*
        directly ::stepDesaturate().
2011-01-09 18:08:31 +00:00
Jean-Paul Chaput 8faade8bc6 * ./katabatic:
- New: In AutoSegment, adds a "_parent" attribute to keep track of the fragmentation
        processus. Currently used only for strap segments, points to the original
        segment in the appropriate direction (before the split).
    - New: In GCell & LayerAssign, new method of layer assignment. Move up
        the whole net trunk if only one of it's segment is inside an over-saturated
        GCell. AutoSegment are moved up only if there is at least 2 free tracks
        remaining on the upper level.
    - Change: In Session::_canonize(), uses the lowest segment Id as canonical.
        More reliable than geometricals criterions in the end. Assuming that the
        segments are being created in deterministic order, which *should* be the
        case consediring the way we are walking through the global routing.
    - Change: In AutoSegment, completly suppress the CompareCanonical(), replace
        it by the much simpler CompareId().
    - Change: In GCell::rpDesaturate(), stops desaturation when bottom density
        is under 0.5, otherwise we are causing a severe imbalance in M2/M4
        densities. All wires pushed up to M4...
    - Change: In ChipTools, for the Pad's RoutingPad, reslect the best component
        using the one in the lowest layer. To avoid problem when splitting
        AutoContact as we expect the base Contact to be on the lower layer.
    - Bug: In GCellConfiguration::_GCell_xG_xL1_xL3(), add H/V alignement constraints
        in fork case. This allow NE/SW contact to be splitted correctly later.
    - Bug: In AutoContact::split(), the connexity on the splitted contacts was
        not correctly restored, leading to canonization and parentage looping
        errors. This was concealed by the Kite Track::_check() bug (incomplete
        individual TrackSegment checking).
2010-12-30 18:41:19 +00:00
The Coriolis Project 49af37f6a4 Once more, overload problem under 64 bits and unsigned int/size_t. 2010-12-12 22:35:40 +00:00
Jean-Paul Chaput 629452dcc6 * ./katabatic:
- Change: In GCell & GCellGrid, unificated way of computing all the GCell's
        densities.
    - Change: In GCell::stepDesaturate(), uses shearUp() instead of moveUp().
    - Change: In AutoSegment, new method ::shearUp() to avoid moveUp() saturating
        GCells as side-effect.
2010-12-12 21:43:25 +00:00
Jean-Paul Chaput cf9a7a7911 * ./katabatic:
- New: ChipTools, regroup all datas and utilities to manage a full-chip
        design.
    - Change: In LoadGrByNet/GCellConfiguration::_GCell_xG_1Pad(), uses straight
        perpandicular wires on top & right pads. The GCells under those connectors
        are fully saturated, wires must go out as straight as possible.
    - Change: In AutoHorizontal/AutoVertical, update the "terminal" flag after
        slackening. This is to avoid global that are no longer connected to
        terminals behave as such.
    - Change: In AutoSegment::canMoveUp() & canPivotUp(), prevent all local segments
        to go up. This is to avoid cluttering upper levels with small segments.
    - Change: In GCellConfiguration, for xG_xL3, detect straight vertical topologies
        and for them to be fixed (new flag FIXED_GLOBAL set by the topological
        builder instead of the constructor). This prevent the router to do
        stupid things...
          To sets the "Fixed" flag *after* the axis of global segments have been
        positionned correctly adds a "_toFixGlobals" static table lookup.
    - Change: In GCell::stepDesaturate(), if less than one free track remains in
        the upper layer, do not move up the segment. This allows from a minimum
        free room for expansion.
    - Change: In GCell::_getString(), display indexes and layer names in various
        saturation tables.
    - Change: In AutoSegment, allow move up of local Segment. ::moveUp() and
        ::canMoveUp() arguments go from booleans to flags, which are more
        explicits.
2010-12-04 15:25:18 +00:00
Jean-Paul Chaput 36a99a53ae * ./katabatic:
- Change: In loadGlobalRouting(), more exlicit message as to why a net is
        filtered out the routing set (POWER, GROUND, CLOCK or BLOCKAGE).
    - New: ChipTool, module with utilities specific to chip routing. Containing
        a function to pre-break wires around a block.
    - New: In loadGlobalRouting/GCellConfiguration, adds supports for RoutingPad
        connected on chip's pad.
    - New: In GCellGrid/GCell, can compute the density in three modes: average,
        max of H/V and max of layer. Currently implemented in getMaxHVDensity(),
        should be unificated with getDensity(). Used for display purposes.
    - Bug: In AutoContact, when splitting a contact, add a specific check for
        "one layer span".
    - Bug: In AutoSegment::canMoveUp(), do not move up fixed segments.
2010-11-16 13:59:38 +00:00
Jean-Paul Chaput 1d525fec35 * ./katabatic:
- Change: In LayerAssign, desaturate until the last two top layers are reacheds
        instead of only METAL2 & METAL3.
    - Change: In Configuration/GCellGrid/GCell, correct computation of the edges
        capacity (based on the numbers of avalaibles layers and not hard-wired to
        4).
2010-08-22 12:37:48 +00:00
Jean-Paul Chaput 38fb1dfdfb * ./katabatic:
- New: To pass the ibmXX, new parameter "katabatic.saturateRp" which allows
        to sets the threshold above which a GCell has too much RoutingPads in
        it and must be further desaturated. Must be 8 for FPGA, and 10 for ibm.
    - Bug: In LoadGrByNet(), when looking for the starting GCell, the computation
        of unconnecteds RoutingPads was incorrect, too great and letting the
        router believe that the routage was incomplete.
2010-08-18 20:24:30 +00:00
Sophie Belloeil f20863ad6e Adding Boost_INCLUDE_DIRS & CORIOLIS_LIBRARIES 2010-07-21 12:51:50 +00:00
Jean-Paul Chaput 765ba00f60 * All Tools:
- Change: Using more Bootstrap macros. Simpler way of setting the
        CMAKE_MODULE_PATH.
2010-07-15 14:31:23 +00:00
Jean-Paul Chaput 307f1fec5f * All Tools:
- Change: Switch from "goodies" to "bootstrap".
2010-07-14 19:39:43 +00:00
Jean-Paul Chaput dba1cc52a8 All tools: using the new Goodies macro.
Suppress loops in Hurricane libraries.
2010-07-13 16:25:31 +00:00
Jean-Paul Chaput e19378e8f0 * 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:11:56 +00:00
Jean-Paul Chaput 125a38c3c7 * 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:07 +00:00
Jean-Paul Chaput ca836e6673 * ./katabatic, ./kite:
- Bug: In Configuration, discrepencies of parameter types.
2010-06-22 13:58:55 +00:00
Jean-Paul Chaput 4b39e1ed6a * ./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:16 +00:00
Jean-Paul Chaput 8bab63c864 * ./katabatic:
- Change: In LoadGrByNet, no longer display each net name in cmess2.
2010-06-08 12:03:02 +00:00
Jean-Paul Chaput 67a5ecae40 * ./katabatic:
- New: Adds support to restrict the number of routing layers.
2010-05-27 16:12:28 +00:00
Jean-Paul Chaput e84e237816 Prepend DESTDIR to CMAKE_MODULE_PATH 2010-05-22 14:14:25 +00:00
Jean-Paul Chaput 9cced8eff8 * All tools:
- Change: Adds ${LIB_SUFFIX} to all library search paths.
2010-05-19 14:31:08 +00:00
Jean-Paul Chaput a480662e65 * All tools:
- Change: take account of the renaming "io" -> "vlsisapd".
2010-05-18 15:04:38 +00:00
Jean-Paul Chaput 8697a7cde6 * 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:08 +00:00
Jean-Paul Chaput a4ed87714b 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:12 +00:00
Jean-Paul Chaput a67d6ecf63 * 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:08 +00:00
Jean-Paul Chaput 660c4fde49 * ./katabatic:
- New: In LoadGrByNet, display the design saturation (informative).
2010-05-13 09:46:14 +00:00
Jean-Paul Chaput 966de8279c * ./katabatic:
- Change: In KatabaticEngine, the containers used to store the "nets to
        route" is changed from a vector<> to a set<> sorted by the Nets names.
        Uses more memory but allows much faster Net deletion.
    - New: In _loadNetGlobalRouting(Net*), detect non-routed Nets. A Net is
        considered as unrouted if it's 10 first RoutingPads have no slave
        Segment. The Net is withdrawn from the set of Nets to route.
    - Bug: In GCellConfiguration::_GCell_1G_1L1(), correctly compute the
        access flag passed to _GCell_rp_Access().
    - Change: In AutoContact::restrictConstraintBox() adds "warnOnError"
        parameter to shut down warnings.
    - New: KatabaticEngine::_computeNetConstraints() now also returns a set<>
        of segments on which constraints are incompatibles. All the NetConstraints
        related functions are modificateds accordingly.
    - Change: In KatabaticEngine::_loadNetGlobalRouting(), create dogleg
        on overconstrained Segments computed by a call to _computeNetConstraints().
          Overconstraineds Segments can occurs when a global is directly
        connecting two punctual RoutingPads (see "ieee_division").
          As a side effect, and to avoid looping each Net is revalidated
        *before* making any dogleg. So Nets are revalidated one by one instead
        of alltogether.
    - Change: In AutoSegment::_toConstraintAxis(), do nothing if constraint
        interval is empty.
2010-05-11 11:04:23 +00:00
Jean-Paul Chaput 234175fa23 * ./katabatic:
- Bug: In KatabaticEnginge::_desaturate() (part of LayerAssign), reset
        the moved up Segment pointer between iterations. Suppress the warning
        about the GCell's DyKeyQueue beeing not revalidated on deletion.
    - Change: In LoadGrByNet, manage the 4G+3L1 configuration with the generic
        _GCell_xG_xL1_xL3(). Needed for "dct_lvl2".
2010-05-03 09:16:28 +00:00
The Coriolis Project fd9500d77e Correct pathes detection. 2010-04-28 21:54:58 +00:00
Jean-Paul Chaput 388b8b3ce0 * 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.

  * ./katabatic:
    - Change: In Configuration/KatabaticEngine, introduce a static Configuration
        object (singleton) to handle the default configuration. Configuration are
        now created only through cloning operations. In KatabaticEngine, the
        _configuration becomes a pointer (previoulsy an value).
          Confifuration becames a singleton and a decorator.
          Also adds a print method to nicely display configurations values on
        the terminal.
2010-04-28 15:43:30 +00:00
Jean-Paul Chaput e7b1a5de6e * ./katabatic:
- Change: In Grid/BaseGrid, add an Abutment Box attribute (to facilitate
        segment truncation in Kite::TrackFixedSegment.
    - Change: In Grid/BaseGrid::Axis, when computing a row/column index using
        the graduation table, if the coordinate is exactly on the last
        graduation, return the last GCell instead of "out of bound".
    - Change: In GCell::hasFreeTrack(), AutoSegment::canMoveUp() &
        AutoSegment::canPivotUp() adds a "reserve" parameter to modify the
        amount of wirelength to remains free after the insertion.
2010-04-23 13:13:54 +00:00
Jean-Paul Chaput d98b31a856 * ./katabatic:
- Bug: In GCell, bad cast between <size_t> and <unsigned int>, showed only
        under 64 bits.
    - New: In KatabaticEngine::printMeasures(), adds a support for measurments,
        both time and memory size in Mb are stored for each tag.
    - New: Adds measurements "Gates", "GCells", "load" & "assign".
2010-04-17 10:14:22 +00:00
Jean-Paul Chaput 3069af8a63 * ./katabatic:
- New: In GCell & LayerAssign, adds a supplemental desaturation steps when
        a GCell containts too many (more than 7) RoutingPads in M1. This is
        especially useful for the eFPGA matrix with it's custom made cells.
2010-04-12 11:22:11 +00:00
Jean-Paul Chaput 3637f1c0cf The DyKeyQueue::pop() method was not returning anything. 2010-03-26 18:02:37 +00:00
Jean-Paul Chaput 15a61c5f96 * ./katabatic :
- Change: Uses a map instead of a sorted vector in the layer assignment
        steps. It was used to order GCells by density, and causing terrific
        slowdown on big examples. Namely the eFPGA 16x16 took 1h20, now it's
        down to  21 seconds...
          Devellop a new object <DyKeyQueue> to handle map with elements
        whose key *can* change. Next step is to normalize the key caching
        mechanism and to templatize.
    - Change: In LayerAssign, account the number of globals AutoSegments
        moved up.
2010-03-23 09:25:15 +00:00
Jean-Paul Chaput 59266afd74 * 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:31 +00:00
Jean-Paul Chaput ff68159214 * 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:36 +00:00
The Coriolis Project 8aaa904724 * 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:00:58 +00:00
Jean-Paul Chaput 360ff0424e * ./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:29 +00:00