Commit Graph

78 Commits

Author SHA1 Message Date
Jean-Paul Chaput 9db97608cb More clever way of taking into account constraints on caged terminals.
* Change: In vlsispad, in Dots, add an enable/disable flag because when printing
    into a cmess, it is only the base class ostream which is took into account
    as none of it's methods are virtuals (silly me).
* Bug: In Etesian, print into cmess instead of cout and make use of the Dots
    enabling feature.
* New: In Katabatic, added AutoContact::migrateConstraintBox() to transfert
    constraint from one contact to another.
      New flag for AutoContact, CntWeakTerminal for AutoContact which are at
    the other of a segment directly connected to a terminal. They may hold
    special constraints in case of caged terminals (computed in Kite).
      In AutoHorizontal & AutoVertical, in ::_makeDogleg(), transfert flags
    and constraints when breaking a segment directly connected to a terminal.
* New: In Kite, in protectCagedTerminals(), uses cross constraint on the
    AutoContact opposite to the ContactTerminal (CntWeakTerminal) instead
    of moving up one terminal over two consecutives. This is simpler without
    degrading the routing quality.
2015-08-18 15:42:28 +02:00
Jean-Paul Chaput ed557d9027 Added support for "same layer" dogleg. Big fix for pad routing.
* Change: In Knik, in Vertex, add a "blocked" flag to signal disabled
    vertexes in the grid (must not be used by the global router).
      Modificate the Graph::getVertex() method so that when a vertex
    is geometrically queried, if is a blocked one, return a non-blocked
    neighbor. This mechanism is introduced to, at last, prevent the
    global router to go *under* the pad in case of a commplete chip.
* New: In Katabatic, in AutoSegment, a new state has been added: "reduced".
    A reduced segment is in the same layer as it's perpandiculars.
    To be reduced, a segments has to be connected on source & target to
    AutoContactTurn, both of the perpandiculars must be of the same layer
    (below or above) and it's length must not exceed one pitch in the
    perpandicular direction.
      To reduce an AutoSegment, call ::reduce() and to revert the state,
    call ::raise(). Two associated predicates are associated:
    ::canReduce() and ::mustRaise().
      Note: No two adjacent segments can be reduced at the same time.
* Bug: In Katabatic, in GCellTopology, add a new method ::doRp_AccessPad()
    to connect to the pads. Create wiring, fixed and non managed by
    Katabatic, to connect the pad connector layer to the lowest routing
    layers (depth 1 & 2). The former implementation was sometimes leading
    to gaps (sheared contact) that *must not* occurs during the building
    stage.
      Remark: This bug did put under the light the fact that the initial
    wiring must be created without gaps. Gaps are closed by making doglegs
    on contacts. But this mechanism could only work when the database if
    fully initialised (the cache is up to date). Otherwise various problems
    arise, in the canonization process for example.
* New: In Katabatic, in AutoContactTerminal::getNativeConstraintBox(),
    when anchored on a RoutingPad, now take account the potential rotation
    of the Path's transformation. Here again, for the chip's pads.
* New: In Kite, support for reduced AutoSegment. TrackSegment associateds
    to reduced AutoSegment are *not* inserted into track to become
    effectively invisibles. When a segment becomes reduced, a TrackEvent
    is generated to remove it. Conversely when it is raised a RoutingEvent
    is created/rescheduled to insert it. All this is mostly managed inside
    the Session::revalidate() method.
* New: In Kite, in KiteEngine::createGlobalGraph(), in case of a chip,
    mark all global routing vertexes (Knik) that are under a pad, as blockeds.
* Bug: In Cumulus, in PadsCorona.Side.getAxis(), inversion between X and
    Y coordinate of the chip size. Did not show until a non-square chip
    was routed (i.e. our MIPS R3000).
* Change: In Stratus1, in st_placement.py add the ClockBuffer class for
    backward compatibility with the MIPS32 bench. Have to review this
    functionnality coming from the deprecated placeAndroute.py.
      In st_instance.py, no longer creates the Plug ring of a Net.
    In my opinion it just clutter the display until the P&R is called.
    Can re-enable later as an option (in Unicorn).
* Change: In Unicorn, in cgt.py, more reliable way of loading then running
    user supplied scripts. Borrowed from alliance-checker-toolkit doChip.py	.
2015-08-16 23:29:28 +02:00
Jean-Paul Chaput 6ecdaf2539 More accurate routing guiding under a block corona.
* New: In Kite, in BuildPowerRails more accurate GCell density computation
    under the pad area, to limit the overloaded messages.
* New: In Cumulus, In BlockCorona, remove the vertical METAL3 blockages
    and replace them by horizontal blockages completly enclosing the
    corona big vias in all layers. This way the I/O wires that goes
    through the corona are guided to be straight and do not creates
    unsolvable doglegs due to the presence of big vias.
* Change: In Kite & Etesian, small typo: refactor the method
    "::wipeOutRouting()" into "::wipeoutRouting()" (indulge me, I'm a
    code maniac).
2015-06-06 18:22:48 +02:00
Jean-Paul Chaput 731d435a35 Merge the routing-driven version of Etesian (github/RoutingDriven) 2015-04-25 17:24:53 +02:00
Jean-Paul Chaput 770b1fbbbc Support for Uniquification. Rewrite of the Blif parser.
* New: In Hurricane, In NetAlias & Net, add an AliasList collection to
    iterate over all the aliases names (this *not* include the main
    net name).
* New: In Hurricane, In Cell, Instance & Net add support for cloning and
    uniquification (update documentation).
      All Cells that are uniquified from a given model are kept in an
    Uniquify relation. This relation allows to get all the clones and
    generate unique clone names by adding a "_uXX" suffix.
* Bug: In Hurricane, the Cell::_isFlattenLeaf attribute was not initialized
    in the constructor.
* Change: In CRL Core, in AllianceFramework::getCell(), no longer destroy
    a partially loaded Cell in case of parser failure, let the incomplete
    Cell be.
* New: In CRL Core, in ApParser, if all the instances are placed, sets the
    Cell::Placed flag.
* Change: In CRL Core, in BlifParser, complete rewrite of the parser.
    Not so good an idea afterwards...
* New: In Etesian, uniquify the design before placing.
* Change: In Kite, display the list of unrouted wired after all other
    statistics.
2015-04-25 16:52:18 +02:00
Gabriel Gouvine ef671cb944 Initial draft for routing-driven placement
* Uses density restrictions rather than cell inflation
* Will fail brutally if the congestion is too high; does not attempt to balance the densities
2015-04-20 14:14:41 +02:00
Jean-Paul Chaput db60fe0aa6 New coriolis launcher. Configuration files cleanup.
* Change: In CRL Core, simplify the loading sequence. The technology,
    both symbolic and real is now loaded directly from coriolisInit.py
    and not through the Alliance loader. This was a leftover from the
    time configuration was in XML. Remove others traces of XML loading.
      Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
    environement, as they was no longer used.
      Note that technology *still* need to be loader *after* Alliance
    framework has been initialized.
      Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
    must not be inlined. Generate a problem when linking in debug mode
    (seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
    the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
    automatically take cares of all environement setup, then run a command
    by default, it's <cgt>, but it can be anything. For example: <zsh>.
2015-04-13 18:54:09 +02:00
Jean-Paul Chaput 1e73466199 Added new CMake macro add_python_module() and some cleanup. 2015-03-22 19:12:45 +01:00
Jean-Paul Chaput 5dc60415e7 Happy new year 2015! 2015-03-17 16:56:55 +01:00
Jean-Paul Chaput 3b343f08cf Bug in Python proxy deallocation. Update to latest Coloquinte.
* Bug: In Bootstrap, in coriolisEnv.py, check if devtoolset-2 is already
    active before launching it as a sub-shell.
* Bug: In Isobar, In PyHurricane.h, DBoDestroyAttribute() set the proxy
    pointer toward the C++ object to NULL. So when the Python object is
    deleted no double-deletion occurs on the C++ object.
      Add some more trace information in Python link/dealloc.
* Change: In CRL Core, in cyclop, make CMakeLists.txt automatically
    choose the right rule for linking the binary wether we use Qt 4 or
    Qt 5. Very irksome problem.
* New: In EtesianEngine::addFeed(), do not take into account instances
    that are not placed entirely inside the top cell abutment box (was
    causing a core dump).
* Bug: In Katabatic, in GCellQueue, correct a mismatch between a GCell
    set and the iterators used upon it.
* Bug: In Mauka, in Row & Surface correct a mismatch between a container
    and it's iterator.
* New: In Etesian, updated to work with the latest Coloquinte, patch
    contributed by G. Gouvine.
      Added EtesianEngine::setDefaultAb() to compute an abutment box if
    the Cell is completly unplaced.
* New: In cumulus, in ClockTree, now the placer can be configured to be
    either Mauka (slow simulated annealing) or Etesian (fast analytic).
    New setting 'clockTree.placerEngine' in plugin settings.
2015-02-13 23:38:55 +01:00
Jean-Paul Chaput 978315c017 Compliance with Clang 3.4 (RHEL7, MacOS).
* New: In Bootstrap, added support for RHEL7 in ccb.py & coriolisEnv.py.
   In coriolisEnv.py, under RHEL6, directly launch a shell under
   devtoolset-2 (do not put it in .bashrc).
* Change: All tools, compliance with Clang 3.2.
   - Call using namespace std *after* at least one include of std has
     been used.
   - In Utilities.h define both const and non-cont overload for operator<<
     of mstream (this was the true cause of the Banner display problem).
   - No longer use defaults arguments in templates, instead create two
     separated overloads.
   - Put template static attributes allocation outside of namespaces
     (this one I'm not sure how to justify).
   - Protect by NDEBUG variables that are only needed in assert().
   - In PyInterval getUnion() & getIntersection() we where silently
     overwriting the "self" object (interval).
   - In Mauka, *do no* overload _postCreate() and add an argument, breaks
     the virtual function mechanism. Rename it into _maukaPostCreate().
     Idem for SubRow().
   - In Katabatic::GCell(), invalidate() overload a Go funtion but is
     used for different purpose at this level. Rename it invalidateCt()
     (invalidate *ConTents*).
   - Miscellaneous small cleanup.
2014-12-09 23:49:46 +01:00
Jean-Paul Chaput fddf11516a More accurate tests in Katabatic to stop whining about bad doglegs.
* Change: In Katabatic, in AutoSegment::canonize() and
    Session::_canonize() no longer tag Global as WeakGlobal also.
    This avoid to try to make dogleg on them when we shouldn't.
    They where staying WeakGlobal even when there were no longer
    connected to a global.
* Change: In Katabatic, in AutoSegment::makeDogleg(), suppress the
    bug for pad message when we are in the global routing stage.
    At that point it is allowed to make doglegs under the pads are
    they are "layer change" ones.
2014-10-03 19:00:02 +02:00
Jean-Paul Chaput 1f9ae36554 Bug fixes for MOSIS SCMOS_DEEP support.
* Change: In Hurricane, the NetRoutingProperty is moved into Hurricane
    from Katabatic. Needed for Knik to be able to access thoses
    informations.
* Change: In Hurricane, in RoutingPad::setOnBestComponent(), now in
    case of identical area, select the component of lowest id.
    This should not be needed if the component ordering was fully
    deterministic as it should be (will investigate later).
      This is to ensure that the choosen component is always the
    same, especially between save/load of a global routing.
* Bug: In Katabatic, in AutoContactHTee::updateTopology(), invalidate
    the segments only if the topology is valid (no NULL in the
    cached segments).
* Bug: In Katabatic, in GCellTopology::construct(), throw an error
    if the topology is bad instead of trying to continue (and core
    dump later... ).
* Bug: In Kite, in BuildPowerRails, distinguish the name of the master
    net in the pad (for vddi, vssi, vdde, vsse, ck, cki & cko) and the
    name of the net in the *chip* netlist. Must use the later to make
    comparison as they may differs.
* Change: In Knik, in save/load solution, exclude nets that are not
    globally routed by Knik. That is which NetRoutingProperty is not
    *Automatic*.
* Bug: In Cumulus, in chip.BlockPower take account of the layer
    width extention to sligthy shrink the connector thus avoiding a
    notch with standart cell in some cases.
* Change: In Cumulus, in chip.ClockTree disable the use of fixed Steiner
    trees for the leaf clocks, as it seems overconstrained for the
    router. First move was to lower them in M2/M3 (instead of M3/M4)
    but that was not sufficent.
* New: In Cumulus, RSavePlugin for recursively saving a physical
    hierarchy.
* New: In documentation, first embryo for RDS file. Should have been
    in Alliance git, but I prefer to keep newest doc in Coriolis.
2014-09-21 16:44:37 +02:00
Jean-Paul Chaput 2c345c9033 Various improvement & bug correction in Katabatic & Kite.
* Bug: In Katabatic, in AutoContactTurn::cacheAttach() unset the
    "cache invalidated" flag *only* if the h1 & v1 component are
    sets. This is needed because we can attach *before* the first
    cache revalidation (in the initial building stage).
* Bug: In Katabatic, in AutoSegment::getPPitch() out of bound access
    of the top of the RoutingGauge, in case of a top layer segment
    with a spin top flag (maybe this shouldn't happen?).
* Change: In Kite, in SegmentFsm::conflictSolveByPlaceds() take
    account as conflicting other global, global, blockage *and*
    now fixeds.
* Change: In Cumulus, in px2mpx.py more accurate way of transforming
    the pad blockages.
2014-09-14 18:54:10 +02:00
Jean-Paul Chaput a3963716b1 Correction in plugins to support msxlib compatible pads.
* New: In CRL Core, in helpers & alliance.conf, set and read a "PAD"
    variable to define the pad model name extension ("px" for "sxlib
    and "pxr" for vsxlib, this is provisional).
* New: In CRL Core, in plugin.conf, add parameters to define the name
    of used for power & clock supply. We may remove the extention in
    the future (to be more coherent with the previous modification).
* New: In Cumulus, in chip.Configuration.GaugeConf._rpAccess(), no
    longer place the accessing contact *at the center* of the
    RoutingPad. It works under sxlib because buffers & registers all
    have same size terminals. But this is not true under vsxlib,
    leading to misaligned contacts & wires. Now systematically place
    on the slice midlle track (maybe with one pitch above or below).
      This is still very weak as we do not check if the terminal
    reach were the contact is being put. Has to be strenthened in
    the future.
* New: In Cumulus, in chip.Configuration.ChipConf, read the new
    clock & power pad parameters.
* Change: In Isobar (and all other Python wrappers), uses PyLong instead
    of PyInt for DbU conversions. In PyHurricane argument converter,
    automatically check for both PyLong and then PyInt.
* Change: In Cumulus, in chip.PadsCorona, more accurate error message
    in case of discrepency in global net connections (i.e. no net
    of the same name in instance model and instance model owner.
* Change: In Kite, in BuildPowerRails, when looking up at the pads
    model name to find "pck_" or "pvddeck_", do not compare the
    extension part. But we still use hard-coded stem pad names,
    maybe we shouldn't.
* Bug: In Katabatic, in GCellConfiguration::_do_xG_xM1_xM3(), there
    was a loop in the search of the best N/E initial RoutingPad.
* Bug: In Kite, in KiteEngine::protectRoutingPads(), *do not* protect
    RoutingPads of fixed nets, they are already through the
    BuildPowerRails stage (and it's causing scary overlap warning
    messages).
* Bug: In Cumulus, in ClockTree.HTreeNode.addLeaf(), do not create
    deep-plug when the core is flat (not sub-modules). All the new
    nets are at core level.
* Bug: In Cumulus, in ChipPlugin.PlaceCore.doFloorplan(), ensure
    that the core is aligned on the GCell grid (i.e. the slice
    grid of the overall chip).
* Bug: In Kite, in GCellTopology::_do_xG_xM1_xM3(), infinite loop
    while looking for the bigger N-E RoutingPad. Forgot to decrement
    the index...
2014-09-13 17:45:30 +02:00
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