Commit Graph

1374 Commits

Author SHA1 Message Date
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 f85159bdb4 More accurate error message in Python module importation. 2014-09-07 23:16:04 +02:00
Jean-Paul Chaput c26a36db88 In ChipPlugin, do not call the editor if it's not there. 2014-09-04 10:59:09 +02:00
Jean-Paul Chaput e6c809a12a Correct loading of clock buffer in ClockTree plugin.
* Bug: In ClockTree plugin, only the logical view of the clock buffer
    was loaded, so no external components where found on the I/O nets.
    The external components are loaded only when the *physical* view
    is loaded. Didn't show on sxlib because the buffer was fulled
    loaded *before* running the ClockTree.
* Bug: In PyHurricane, in the various LocatorNextMethod() macros,
    sometimes an empty collection can be returned by Hurricane
    (GenericCollection()), which has a NULL locator. So check
    if the locator is *not* NULL before trying to access it...
* Change: In Chip, more accurate error messages related to the clock
    detecttion.
2014-09-03 10:37:11 +02:00
Jean-Paul Chaput ae4d938553 Buffer cell configuration in ClockTree. More config parameters in Chip.
* New: In ClockTree plugin, select the name of the buffer cell through
    configuration (parameter: "clockTree.buffer"), and guess the I/O
    name of this buffer automatically.
      Put configuration parameters in plugin.conf and not mauka.conf.
      Bug: strangely triggers a coredump in components collection
    when used with <vsxlib>. Some debug printing still active until
    that is solved.
* New: In Chip plugin, make the size and numbers of the block rails
    configuration parameters (in plugin.conf).
2014-09-02 11:17:47 +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 fb4a7457a1 First basic version of ClockTree & Chip plugins.
* New: In Cumulus, first versions of the ClockTree and Chip plugins.
    Clock Tree plugin:
    - It is strongly advised to use have 4 metal routing layers for the
      tree to work. Otherwise, problems can arise with the detailed
      routing (fully obstructed terminals).
    - H-Tree can only be build (for now) for design with a form factor
      between 0.5 an 2.
    - The tree is created at the block top-level and only the leafs are
      trans-hierarchically created on the instances/models. The new
      cell with a clock tree, along with all it's sub-models is created
      with a "_clocked" suffix.
    - Leaf cells are connected through a simple Minimum Steiner Tree.
    - Shorts are avoided by a systematic shift of the wires according
      to their kind. No wire must pre-exist. When used as a sub-module
      of "chip" the wires cannot be moved. When created on a block,
      the wires can be loaded in the detailed router as manual global
      router.
    Chip Plugin:
    - Perform the pad placement and corona creation. Replacement at
      last of the clunky code from Wu Yifei.
    - Relies on a Python configuration file '<design>_chip.py' with
      a "chip" dictionnary.
2014-08-15 19:05:27 +02:00
Jean-Paul Chaput 20f8d004e2 In ACSII/GDS driver, process the complete hierarchy.
* Bug: In CRL Core, in agdsDriver, the flags of the Query where sets to
   process only the top-level Cell. Now process the whole hierarchy (the
   Cell is completly flattened by this operation). Secondary bug: the
   transformation was not applied to the bounding boxes, resulting of
   all the cells stacked in (0,0) ...
2014-08-15 11:48:41 +02:00
Jean-Paul Chaput 4cf6bef950 Replace, again HUGE by HUGE_VAL in Knik (for Cygwin). 2014-08-06 17:44:07 +02:00
Jean-Paul Chaput 6d7dad54d1 In CellView, correct signal/slot toggle parameter. 2014-08-03 17:20:44 +02:00
Jean-Paul Chaput 6588902780 Correct edge capacity display in debug mode. 2014-08-03 16:38:57 +02:00
Jean-Paul Chaput fbeef95c0f Added support for MOSIS 180nm SCMOS technology (SCN6M_DEEP).
* New: In CRL Core, added configuration for SCMOS_DEEP symbolic technology
   up to 180nm "scmos_deep_018". It is postfixed "_018" because it is not
   yet compliant with 130nm (asymetrical VIA metal extensions).
     Added the associated real technology SCN6M_DEEP (TSMC 180nm).
2014-08-03 16:36:21 +02:00
Jean-Paul Chaput e5f3f5d89a Unsolved bug, add_definitions() doesn't work in Etesian CMakeLists.txt
* Bug: In Etesian CMakeLists.txt cannot get add_definitions() to work
   to enable/disable Coloquinte. As a workaroud, it's moved into the
   FindCOLOQUINTE.cmake itself. Cannot make any sense of it.
2014-08-03 16:30:36 +02:00
Jean-Paul Chaput f434ea4faa cgt now returns correct success/failure value to the UNIX shell. 2014-08-03 16:27:19 +02:00
Jean-Paul Chaput 206309ddd9 No longer directly use C++ exported symbols in configuration files.
* Change: In CRL Core, in Alliance.py, no longer requires the
    configuration file to uses symbols from CRL.Environment or
    CRL.RoutingLayerGauge. This way the <alliance.conf> file can be
    parsed by a different parser.
      In <alliance.conf>, for the various technologies, make uses
    of the new C++ independent constants.
* New: In CRL Core, in helpers/__init__.py, provide a "Dots" class
    (rewrite the C++ one in pure Python).
2014-08-03 16:25:26 +02:00
Jean-Paul Chaput b081d07bfc More strict detection of the configuration files install directory.
* Change: In Bootstrap, in FindBoostrap.cmake, install in system-wide
    directories /etc or /opt only if the the installation path is
    exactly /usr or /opt and not only beginning with it.
2014-08-03 16:17:13 +02:00
Jean-Paul Chaput 51a1615d92 Do not display H/V edge capacity on one column/row design. 2014-08-01 17:22:06 +02:00
Jean-Paul Chaput e01f943367 Added ASCII/GDSII export capability in Unicorn.
* New: In Unicorn, in ExportCellDialog and UnicornGui add an entry to
    call the ASCII/GDSII export driver.
* New: In CRL Core, in AgdsDriver, checks for off-grid coordinates (that
    is non-integer one) and round them with a warning. This is most
    likely that the layout is flawed but it will at leat generate a
    readable ASCII/GDSII file.
2014-07-31 19:40:23 +02:00
Jean-Paul Chaput 0fab6087fa Start of Alliance/Python encapsulation layer.
* New: In Cumulus, new Alliance.py module (*not* a plugin) providing
    an encapsulation for Alliance command line tools. The other main
    feature is that it provides a "Makefile like" behavior. Based on
    the command dependencies a DAG is contructed, then a static
    ordering of the commands. Commands are then executed to rebuild
    outdated target.
      The Alliance environment supplied to the commands is read from
    the Coriolis configuration file <alliance.conf>.
      For this first evaluation version, only <boom>, <boog> and
    <loon> support are provided.
      It still not clear how to encapsulate the Coriolis tools in
    the same way.
* Change: In CRL Core, in helpers/__init__.py, change the way the static
    initialization (module) is done. All the commands are put inside
    a "staticInitialization()" function, which is then explicitly
    called by others. This is a better solution agains *no* or *twice*
    initialization. Modificate <coriolisInit.py> accordingly (as
    <Alliance.py> from Cumulus.
2014-07-27 16:23:27 +02:00
Jean-Paul Chaput a2ba6c2904 Support for Windows/Cygwin, part 3.
* Change: In CRL Core/Cyclop, Hurricane/PyHApplication and vlsisapd/ConfEditorMain,
    disable the use of GtkStyle under Cygwin.
2014-07-23 16:53:43 +02:00
Jean-Paul Chaput 09f515c62a Support for Windows/Cygwin, part 2.
* Change: In bootstrap, in ccb, builder and coriolisEnv.py, correct detection
    of the windows architecture (32 or 64 bits). Under Cygwin, add the
    directory of the dll into the PATH also. Uses "site-package" as the
    location of Python modules (*not* "dist-package").
      Use gnu++0x under Cygwin instead of c++11.
* Change: In Etesian, if Coloquinte is not found, do not stop the compilation,
    just disable the tool altogether.
* Change: In Hurricane, In Backtrace, disable backtrace under Cygwin as it
    uses features specific of the glibc.
* Change: In Knik, use HUGE_VAL instead of HUGE (not present under Cygwin),
    add the <cmath> header.
* Change: In Unicorn, Coloquinte no longer stops the compilation.
2014-07-23 00:55:50 +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 25e82fc701 Complete replacement of the Chip placement Python scripts.
Finally get rid of the demonic code from Wu Yifei...
* New: In Isobar, added encapsulation of Interval (don't know how have
    forgotten it for so long).
* Change: In Isobar, In PyLayer, new PyLink_LayerDerived() function to
    create/link the C++ object to the correct derived class and not the
    base one (PyLayer) which then prevent to use the specialized methods.
    Must replace PyLink_Layer() througout all the code.
* Change: In Isobar, in PyPoint the "setX()" & "setY()" methods where
    still capitalized.
* Change: In Isobar, in PyQuery, complete the exportation of the C++
    interface. remove the code belonging to a more "boost" way of
    building the Python interface (will do that in a far future).
* New: In CRL Core, In PyAllianceFramework, export isPad() method.
* Change: In Unicorn, in unicornInit.py, protect the loading of each
    single plugin by a "try" / "except" clause to the failing of one
    plugins do not stop the loading of the next one.
      Pass the same dictionnary argument to unicornHook() as for
    ScripMain(), this is more uniform this way.
* New: In Cumulus, complete replacement of the chip placement scripts
    from Wu Yifei (at last!). The clock-tree integration is still to
    be done.
________________________________________________________________________
2014-07-21 13:18:34 +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 e29221274e Add a Python hook into Kite. Python support for DebugSession.
* New: In Isobar, export the DebugSession mechanism.
* New: In Kite, In KiteEngine, add the ability to run a Python script
    (hook) after the initialization of the KiteEngine.
2014-07-05 18:02:51 +02:00
Jean-Paul Chaput 9e3f9e4082 Simplificate and generalize the way to pass arguments to Python scrips.
* New: In Isobar::Script, scripts arguments are now passed through a
    "keywords" argument (Python: **kw), that is a dictionnary.
    To add *any* Python object to that dictionnary, uses the new
    method Script::addKwArgument(const char* key, PyObject*).
      The "cell" and "editor" variables are now passed that way.
    This means that, for the editor, the old way of inserting
    a symbol in the module global dictionary is no longer used
    and the Python scripts must be modificateds.
* New: In Hurricane::PyCellViewer, create the Python link function
    for translation from Hurricane to Python.
* New: In Unicorn, modifications for the new argument passing for
    the Python scripts.
2014-07-05 15:49:32 +02:00
Jean-Paul Chaput 2b243fc0ca In protectCagedTerminal() check that the METAL3 track is free.
* New: In Kite, in protectCagedTerminal(), check that the perpandicular
    top METAL3 track is free before inserting the fixed protection.
    They are added *after* the Pre-Routed stage and therefore we have
    to check they do not cross.
* Change: In Kite, in NegociateWindow, print statistics before fixing
    segment in the pre-routed stage to get correct results.
* Change, In CRL Core, in Measures when an addMeasure is performed
    twice, let the new data erase the previous one (instead of keeping
    the previous one).
2014-07-03 00:26:15 +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 7296dcd6fb Make the Python interface closely mirroring the C++ one.
* Change: In Isobar, the Python interface was not exactly mirroring the
    C++ one, now it is the case. The Python code should look likes almost
    exactly like the C++ one, the only differences remaining being due
    to the languages respective syntaxes. Note that in the case of
    constructor functions, it leads to a slightly longer notation in
    Python that it could have been (mimic the ".create()" static
    member). Main modifications:
    1. Mirror the static constructor syntax with create():
          Cell( ... )   ==>  Cell.create( ... )
    2. Correct hierarchy for constants in Instance, Net, Pin
       & Transformation. For example:
          Hurricane.PlacementStatusFIXED
                     ==> Hurricane.Instance.PlacementStatus.FIXED
          Hurricane.OrientationID
                     ==> Hurricane.Transformation.Orientation.ID
          Hurricane.TypeLOGICAL  ==>  Hurricane.Net.Type.LOGICAL
          Hurricane.DirectionIN  ==>  Hurricane.Net.Direction.IN
* Change: In CRL Core, correction to match the improved Python API
    in the configutation helpers.
* Change: In Cumulus, correction to match the improved Python API.
* Change: In Stratus, correction to match the improved Python API.
* Change: In Documenation, update for the new Python interface
    (both user's guide & examples).
* Note: We must port those changes into Chams for it to continue
   to run.
* Change: In Documenation, update the Python script support part.
2014-06-29 14:26:59 +02:00
Jean-Paul Chaput 01b97626a8 Support for Python plugins in CellViewer/Unicorn. ClockTree plugin.
* New: In Hurricane, in CellViewer, create a simpler API to graft menu
    and actions into the menubar. Mainly addToMenu() which take care of
    the QAction creation but also locate the relevant QMenu, base on
    the Qt object name. Regroup all the widget & action creation inside
    the body of the constructor, this way almost all actions can be
    removed from the attributes of the CellViewer.
      addToMenu() is supplied in three flavors:
        1. For C++ callbacks in GraphicToolEngines (with a binded
           member function method).
        2. For running Python scripts to be used by the plugin system.
        3. To insert separator in menus (to give a more homogeneous
           look).
    Remove the last remnants of Stratus scripts (unificated with basic
    Python scripts).
* New: In Hurricane, in PyCellViewer, export the interface to graft
    Python scripts into the CellViewer menu tree.
* Change: In Etesian, in GraphicEtesianEngine, use the new API to
    graft menus & callbacks into the CellViewer.
* Change: In Mauka, in GraphicMaukaEngine, use the new API to
    graft menus & callbacks into the CellViewer.
* Change: In Kite, in GraphicKiteEngine, use the new API to
    graft menus & callbacks into the CellViewer.
* New: In Cumulus, install Python scripts as plugins for Unicorn under
    <PYTHON_SITE_PACKAGES>/cumulus/plugins/.
* New: In Unicorn, in UnicornGui, make uses of the new API for creating
    menus in the CellViewer. Creates the stem menu for the P&R tools.
      Add a Python initialization mechanism to read the plugins
    installeds into <PYTHON_SITE_PACKAGES>/cumulus/plugins/.
2014-06-25 19:50:34 +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 a6addb5c56 In Knik add support for excluded nets (not to be routeds).
* New: In Knik, in <KnikEngine>, the methods ::initGlobalRouting(), ::run()
    and ::Route() now accepts one argument, a reference to a map of not to
    be routed nets (the key being the name for fast search by name).
      This feature is introduced to prevent the routing of nets for which
    a global/detailed routing is already supplied by the designer. For now
    it applies to the clock tree.
2014-06-21 18:07:28 +02:00
Jean-Paul Chaput 7a6dcd1527 Correctly print the margin in error messages. Suppress annoying CR. 2014-06-21 17:59:56 +02:00
Jean-Paul Chaput 2e939e5355 Cell::flattenNets() checks for already flattened top nets.
* Change: In Hurricane, in Cell::flattenNets(), do not flatten a *top net*
    if at least one RoutingPad is present. In that case, we assumes that
    the net has already been completly flattened.
* New: In Hurricane, in Entity, add an accessor to unique id counter.
2014-06-21 17:57:15 +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 2af6e7eef1 Correct exception catching when creating invalid occurrence in Isobar.
* New: In CRL Core, in PyCellGauge, add the missing methods.
* Bug: In Isobar, PyOccurrence_create(), the HTRY/HCATCH block was not
    enclosing the constructor of Occurrence, which can throw exceptions.
    When an exception was thown the Python interpreter just terminate
    with the cryptic message:
      "Fatal Python error: Py_EndInterpreter: thread still has a frame"
    Reminder to myself: when such a message occurs, it means that the
    interpreter did encounter a problem, but it's related to the isobar
    interface.
2014-06-10 00:17:41 +02:00
Jean-Paul Chaput da5fb18971 Added support for Ninja in <ccb> (bootstrap). Minor fixes in CMakefiles. 2014-06-10 00:11:42 +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 1e1495e294 Correct a bug in the UpdateSession::close() mechanism.
* Bug: In Hurricane, UpdateSession::close(), when re-materializing, the
    cells must be notified <CellChanged> *after* all the Gos are
    re-materializeds. In fact they must also revalided according to the
    deepness of their instanciation (the deepest first). Has still to
    be done.
2014-05-27 15:41:32 +02:00
Jean-Paul Chaput 70b896fc96 More configuration sharing.
* Change: In CRL Core, .../etc/, put all that's shared under .../common/,
    all layouts and some settings not technologically dependant.
2014-05-27 15:40:42 +02:00
Jean-Paul Chaput db4c811d75 Added a common configuartion part for kite.conf (containing the layout) 2014-05-26 14:22:19 +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 8bc7bd38db Add a common/ to share the trunk of symbolic technologies configurations.
In CRL Core configuration files, "display.conf", "patterns.conf" and
"technology.conf" share most of their code. So that common part is put
into "common/" and sourced from the final configuration file.
Update the documentation according the the new initialization scheme.
2014-05-22 00:13:17 +02:00
Jean-Paul Chaput 4439d3a142 Added support for multiple symbolic+real technology in configuration.
In CRL Core, the layout of the files under "/coriolis2/etc" changes.
Instead of having them directly under "etc", they are now replicated,
in subdirectories. Each subdirectory having the name of the associated
symbolic or real technology (they are kept separated). We have, for
now:
* etc/cmos/    : symbolic, the Alliance original one.
* etc/vsc200/  : symbolic, for G. Petley vsclib.
* etc/hcmos9/  : real, generic fake (130nm).
To tell which pair (symbolic,real) technologies must be used we create
a *second* (sigh) configuration file "coriolis2_techno.conf", and it's
hidden counterpart in the user's account, to set it up. It needs to be
separate because it is read as early as possible and select which set
of configuration files would be read.

Also add support up to METAL8 and POLY2 in CRL core and it's Alliance
parser/drivers.
2014-05-21 14:50:22 +02:00
Jean-Paul Chaput b98afd8385 Small typo in coriolisEnv.py. 2014-05-19 18:00:20 +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