Commit Graph

91 Commits

Author SHA1 Message Date
Jean-Paul Chaput bdc474d7fc Quieter helpers initialisation, isderived() alternative to isinstance().
* New: In CRL.python.helpers, all methods make use of the quiet mode to
    allow completly silent initialisation.
      Introduce isderived() function to check the derivation relationship
    of two C++ encapsulated classes by Isobar. The Python isinstance do
    not work, all C++ wrapped classes are of the base type 'type'.
    isderived() uses the MRO mechanism (Method Resolution Order) as a
    workaround. I can't find in the documentation if it's the expected
    behavior or if i did miss something in when building my classes.
2016-12-12 17:06:53 +01:00
Jean-Paul Chaput 8376d0c209 Remove GraphicAnabaticengine, temporarily made for debugging.
* Change: In Anabatic, remove GraphicAnabaticEngine, PyGraphicAnabaticEngine,
    PyAnabaticEngine (but keep PyAnabatic for constants exportation)
    and GlobalRoute (moved to Katana). Drawing methods for Edge & GCell
    are moved into GraphicKatanaEngine.
2016-09-07 11:21:36 +02:00
Jean-Paul Chaput 48f3a2bc3c Anabatic transient commit 18. Port of Kite (Katana), Yeah, Baby! Yeah!
* Bug: In Hurricane, in StaticObservable::getObserver(), if the slot
    pointer is NULL, do not try to access the owner. Returns NULL, so
    the caller can be aware of the situation...
* Change: In Hurricane, in BreakpointWidget & ExceptionWidget some
    cosmetic changes (fonts and window sizes).
* Bug: In Anabatic, In AutoHorizontal::getConstraints(), take into account
    the constraints from the source AutoContact, as it holds the constraints
    transmitted by the RoutingPads and sets up by propageConstraintsFromRp().
    It is likely to be a bug affecting the original Katabatic as well.
* Change: In Anabatic, in RawGCellsUnder(), check that the segment is not
    completly oustside the cell abutment box and truncate the coordinates
    to the part that is inside. Use the "shrink" if we reach the east/north
    border.
* Change: In Anabatic, in Configuration, no more decorator because we will
    use a true derived relationship. Katana *derives* from *Anabatic* and do
    not *decorate* it, so the Configuration can do the same. It also implies
    that we directly create a Katana engine, not an Anabatic one.
* Change: In Anabatic, in Session, do not allow the opening of the Session
    in a standalone fashion (with a static method). Instead it must be opened
    using the relevant method of the Anabatic/Katana engine. This ensure we
    are opening the right Session type.
* Change: In Anabatic, in AutoSegment_Aligneds() collection the seed segment
    is not part of the collection by default, but will be included if the
    Flags::WithSelf is set.
* Change: In Configuration, all the flags value are now defined in two steps.
    Declared in the header and initialized in the module. This is to prevent
    the fact that on some cases, in relation with the Python "extern C" part
    modules, we need a true allocated variable. It was causing weird linking
    problems.
      A side effect is that they can no longer be used as entry is switches,
    have to replace them by if/else.
* New: In Anabatic, new GCell::getNeighborAt() utility function.
* Bug: In Anabatic, in GCell::doGrid(), tag all the GCells of the grid with
    the grid type... Back annote all the edges capacity (north & east) with
    the reserved local capacity.
* New: Complete portage of Kite over Anabatic. The new engine is christened
    "Katana" for Kite-Analogic. When it's capabilities and performances
    will be on a part with Kite, it is to completly replace it (and take
    back the "Kite" name). Preliminary tests seems to show that, contrary
    to intuition (because built on a more complex/slower grid), it is even
    slightly faster than Kite 8-).
2016-08-15 16:30:13 +02:00
Jean-Paul Chaput 3835d6f7ad Diplay function, file & line number in the backtrace (like gdb).
* New: In Bootstrap, add cmake detection for libbfd.
* New: In Hurricane, in Backtrace, add BFD support to read debuginfo from
    the shared libraries (aka DSO) when compiled with "-g". This avoid the
    tedious step of running gdb after generating a core dump. It is also
    mandatory in ExceptioWidget to known from where an exception was thrown
    as Qt::notify() block all C++ exceptions.
      Currently works only under Linux (gcc or clang), may be extended in
    the future.
      The BFD reading is based on the small utility from:
          Don Hatch (hatch@plunk.org)
          http://www.plunk.org/~hatch/goodies/backtracefilt.C
      And small trinket: adjust the size of the window for high DPI screens.
* New: In CRL Core & Unicorn add link toward libbfd, if needed.
2016-08-06 18:15:06 +02:00
Jean-Paul Chaput 601e3d3da1 Anabatic transient commit 8. More Dijkstra bugs correcteds.
* Bug: In Anabatic:
    - In _propagate(), on reaching a target, forgot to remove it from
      the queue before pushing it back with the new distance. It also
      simplificate the core algorithm as target as treated normal nodes.
* New: In Anabatic:
    - Update cdebug to use the fastest macro version.
    - More readable drawings of GCells and Edges.
    - Added timer support.
    - The distance is now computed in DbU::Unit (aka long) and not in
      normalized float.
    - The distance function is now a callback (std::function<>) that
      can be changed (a default is provided at initialization).
    - New concept of branch in the agglomerated connex component.
      Each trace back part create a "branch" (tagged with a "branchId").
      When a node is reached with the same distance, but from two
      different branches, choose the the branch that was lastly created.
      This create a slightly different tree which grows outward from
      the newest branches.
    - Makes the horizontal edges *slightly* longer than the vertical ones
      to skew the tree to use vertical edges, as it is usually less
      congested than the horiontal one (due to metal1 cell terminals).
      It is also my understanding that it is useful to reduce the
      number of vias, whithout introducing a via cost.
* New: In Bootstrap:
    - Script sprof.py to perform sprof & demangle libraries execution
      profile.
* ToDo: In Anabatic:
    - Corner optimization. Sometimes when two corners are possible, the
      wrong one is choosen. That is, one of it's edge cannot be used for
      further grow of the tree.
2016-06-17 13:09:34 +02:00
Jean-Paul Chaput 36a982ce47 Merge branch 'devel' into devel_anabatic
Catch up the Lemon removal and cdebug correction.
2016-06-11 21:58:25 +02:00
Jean-Paul Chaput f68ac4d0e6 Argh. cdebug was slowing down the program too much.
* Change: In Hurricane Commons.h, even when cdebug print nothing, it slow
    down the program (three times for Kite!). Create a macro cdebug_log
    which calls cdebug *only* if the debug level is active.
2016-06-11 21:56:12 +02:00
Jean-Paul Chaput 61e9abddbd Anabatic transient commit 1.
* New: In Anabatic, basic support for GCell/Edge creation.
2016-05-23 16:15:25 +02:00
Jean-Paul Chaput f11be897ef Remove Anabatic from cgt. Index numbering in vector slot.
* Bug: In Unicorn, in cgt.py, do not import Anabatic as it is not present
    yet in the devel branch.
* Change: In Hurricane, in Commons.h, in the vector slot template, start
    index at 0 and not 1 (to closer to the internal representation).
* Change: In ExtensionGo, forgotten trace system calls to update.
2016-05-23 16:02:57 +02:00
Jean-Paul Chaput 82cff69d9f Complete rewrite of the trace system (now a stream).
* Change: In Hurricane, in Flags add operator overload for "int" type
    and not only "unsigned int". Otherwise the compiler complaints about
    ambiguous overload when using enum values which are considered as
    "int".
      Simpler code for the BaseFlags::contains() method.
      Added implicit conversion from BaseFlags toward bool type.
* Change: In Hurricane, in Commons, complete replacement of the previous
    two trace systems (trace & ltrace) by a stream-based one.
    As it is a true object it is much less fragile than the one based
    on defines (but maybe a little slower).
      Define a reservation table for the trace levels for all the
    Coriolis & Chams components.
* Change: All tools, use the new trace system.
2016-05-17 23:00:06 +02:00
Jean-Paul Chaput 1ef4bc122f Forgot to catch Bug exception. GCell manage 5 terminals of a Net.
* Bug: In Hurricane, in HApplication, ExceptionWidget ans PyHurricane.h,
    forgot to catch the Hurricane::Bug exception which was leading to
    terminate() without explanations.
* Change: In Katabatic, In GCellTopology, now support one GCell with
    five metal1 terminal of the same net. This unlikely configuration
    did appear in the SNX for the first time...
2016-03-17 16:54:53 +01:00
Jean-Paul Chaput 0efe75af00 Implementation of DataBase native save/restore in JSON (step 3).
* Test: post-receive hook on server should send mail [1].
* New: In VLSISAPD, in Parameter, callback have now a tag, which the
    pointer to the caller. This allow for the callback removal when
    the caller is destroyed.
* New: In VLSISAPD, in WidgetDescription, when associated to a parameter,
    the destructor must remove the associated callback function on
    the Parameter.
* New: In Hurricane, added JSON support for Configuration, separated
    from vlsisapd, as the support is not available at this point.
    JSON support for Configuration, Parameter & LayoutDescription.
* Change: In Hurricane, in JsonStack, the stack of JsonObjects has been
    displaced here from HurricaneHandler. This way, all
    JsonObject::toData() can access the JsonOjects in the context
    of the parser.
* New: In Hurricane, in DBo::toJson() added support for Entity by
    reference (ids).
* New: In Hurricane, added JSON support for all Layer sub-class types.
* New: In Hurricane, in Technology, export the Layers, but must be
   sorted by increasing mask value.
* New: In Hurricane, in Entity, added support for Entity by reference (ids).
* New: In Hurricane, in DataBase, added technology full support.
* New: In Hurricane, In JsonNet, move the ring rebuild management from
    JsonStack to JsonNet.
* New: In Hurricane, added JSON support for NetAlias, NetExternalcomponents
    (not cleanly implemented as a Relation).
* New: In Hurricane, new method Cell::fromJson() to load a cell from
    a JSON file.
* New: In Hurricane, In Graphics, make it an observable, for when JSON
    fully reload the graphic state, it must be able to notify other
    objects (namely the Controller).
* New: In Hurricane, in ControllerWidget, observe the Graphics to regenerate
    the palette as needed. New method ControllerTab::graphicsUpdated().
* New: In Hurricane, in RawDrawingStyle added a destructor to release the
    Qt pen/brush. Added JSON support for HSVr, DrawingStyle, DrawingGroup,
    & DisplayStyle.
* New: In Hurricane, in GraphicsWidget, rewrite correctly the readGraphics()
    to erase the previous widgets and re-create the new ones.
* New: In Hurricane, in PaletteWidget, correct re-creation of the layout/widgets
    in case of Graphics change.
* New: In CRL Core, in System, register the parameters callbacks with
    the address of the object, for later deletion.
* New: In CRL Core, in AllianceFramework, make it observable, to notify
    library changes. For the AllianceFramework creation, now allow to
    completly bypass the Python initialization system, when we expect
    to restore it from a full blob. Added methods to sets the default
    RoutingGauge & CellGauge.
* New: In CRL Core, added JSON suppport for CellGauge, RoutingLayerGauge
    & RoutingGauge.
* New: In CRL Core, in LibraryManager, oberver AllianceFramework, to update
    the list of libraries in case of change (for JSON full reload).
2016-02-21 11:02:50 +01:00
Jean-Paul Chaput 1b7bd9de36 Happy new year 2016! 2016-01-21 00:41:19 +01:00
Jean-Paul Chaput 5baddeb558 Implementation of DataBase native save/restore in JSON (step 2).
* New: In boostrap, in ccb.py, added support for the "support" project
    which contains external dependencies. Currently contains only
    RapidJSON. Those dependencies must be cloned here manually.
* New: In Hurricane, Initializer class for an ordered static initialization
    across different compilation modules.
* Change: In Hurricane, at DataBase level, no longer save the Cells in
    the libraries, but create and ordered list of Cell. Deepest cells
    (leaf cells) first. To avoid dependency problems.
* New: In Hurricane, JSON support for Property.
* New; In CRL, added JSON support for AllianceFramework, Environement &
    Catalog and their associated properties. Adjustment of the
    AllianceLibrary creation policy.
2016-01-21 00:25:39 +01:00
Jean-Paul Chaput f537a10d45 Implementation of DataBase native save/restore in JSON (step 1).
* New: In Hurricane, added first support for DataBase native import/export
    using JSON.
      We choose RapidJSON, in SAX mode, to manage the JSON format low level
    Read/Write. Thus, it's Git repository http://github.com/miloyip/rapidjson
    must be added under ~/coriolis-2.x/src and manually build and installed
    in the Coriolis installation tree (to be integrated in ccb later).
      Two mode are being supported:
        1. Cell mode: one Cell only is saved. In that mode, Entities
           referred by Occurrences are "outside" the file. They are coded
           through their "signature" (mostly, all the values of their
           attributes). The ids saved in the file cannot be restored
           identically as we cannot predict when and in which context the
           Cell will be reloaded.
        2. Design Blob mode: the whole design hierarchy, down and including
           the standard cells is saved. This way the design is completly
           self contained and Entities ared referred through their ids.
           A design blob can only be loaded immediatly after starting cgt
           as the DataBase *must* be empty. This way we restore the whole
           design hierarchy with *exactly* the same ids.
      Now, Hurricane object should provide a "toJson()" method for driving
    JSON, and be associated with a JsonObject derived class for parsing.
* New: In Hurricane, ability to force the next id that will be used for a
    DBo (used by Design Blob Mode).
* New: In Hurricane, in DataBase, added getCell() and getLibrary() functions
    to allow the hierarchical access of a Cell/Library in native mode
    (i.e. whithout the requirement of AllianceFramework).
* New: In Hurricane, In CellViewer, added menu entry for Save/Load of
    JSON Design Blobs. Added at this level because we consider it as the
    "native" format of Hurricane.
* New: In Unicorn, added support of import/export of JSON Cell.
* Bug: In Hurricane, in Instance, when cloning an Instance or uniquifying
    it's master Cell, we forgot about the Occurrences (through shared pathes).
    When an instance is cloned the Shared pathes still points toward the
    original Instance. And when it's the master Cell that is uniquifyed
    it's the Entities pointed to that remains in the original Cell.
    This is a software design problem. It is difficult to define what
    policy to adopt when uniquifying: basically that means that one
    Occurence is either moved onto the clone or duplicated. Furthermore,
    it is not trivial to known what Occurrence is pointing on the
    uniquifyed/cloned item. Have to think about it a little more.
* Bug: In Etesian, in EtesianEngine, build the flattened nets and their
    RoutingPads *after* uniquifying (through slaving bounding boxes).
    This way we avoid the Occurrences problem described above.
* Bug: In Etesian, in EtesianEngine, invalidate the RoutingPad after
    processing the placement so they are put into the right quadtree.
    This problem is due to the fact that the RoutingPads do not belong
    to the Instance that they refer. And when this instance is moved
    around, she doesn't inform the RoutingPad that is has moved.
    More software architecture design to review...
2016-01-07 13:15:33 +01: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 39567add06 Annoying errors in init script under RHEL6 (bad devtoolset2 check). 2015-06-12 15:22:16 +02:00
Jean-Paul Chaput d151038de9 Typo in Coloquinte library name. 2015-06-10 18:38:10 +02:00
Gabriel Gouvine fd994e51fe Merged bug fixes and improvements
* Steiner tree topology
* Install path detection
* Additional Alliance layer
* Blif parser presented first
2015-06-02 10:36:21 +02:00
Jean-Paul Chaput a2d4f01ca3 New Library Manager Widget. Access with Tools menu or CTRL+M.
* New: In CRL Core, created a LibraryManager widget. It provides a
    composite information based on what is present, for each
    Alliance library:
    1. - A Cell in memory, without Catalog::State.
    2. - A Catalog::State, with or whithout the Cell in memory.
    3. - The files of the Cell in the librariy's directory.
    4. - A file with a format referenced for one of the importers.
      File type recognition is based *only* on the file extension,
    so it may easily confused. Be careful about what you put in
    the library's directory.
      One of the big limitation is that it will not display Hurricane
    libraries that do not have the AllianceLibrary extension.
      This widget is put in a separate library <libmanager>, included
    in the default CRLCORE_LIBRARIES.
* Change: In CRL Core, in State (through the loader), now sets the
    InMemory flag (event if nobody uses it yet...). Display it in
    the state _getString().
      In AllianceFramework, new getAllianceLibraries() method.
      In CatalogExtension, make the static method "get()" publicly
    accessible, for sometimes we want the whole State.
* Bug: In vlsisapd, in Path, the pathcache was not rebuild when it
    should, leading to incorrect results.
* New: In vlsisapd, in Path, added a listdir() method to access the
    contents of a directory and a stat() method to poll the status
    of a file/directory.
      Rename the ".string()" method in ".toString()" to avoid
    tricky name resolution with std::string, refactor in all the
    other tools.
* Change: In Hurricane, in Controller, no longer oversize the fonts
    of the table's headers.
* New: In Unicorn, in UnicornGui, integrate LibraryManager.
2015-05-09 17:03:17 +02:00
Gabriel Gouvine dc0485935d Better error messages
* Error messages are more explicit in Ap and Blif parsers
* Warns when not using tie cells
* New layer synonym in ApParser for easier format conversion
* Blif import is now on top
2015-05-02 22:10:42 +02:00
Jean-Paul Chaput 693c05cf32 Added README and detection of 64 bits using /lib. 2015-04-25 18:27:04 +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
Jean-Paul Chaput ef9936e87c Support for Net alias names. Blif parser enhancements.
* New: In Hurricane, In Net & Cell, support for Net aliases names.
    Use a structure based on a simple ring of NetAliasHook. The Net
    holds a global map, sorted by names of all the aliases of all Nets.
    Elements NetAliasesHook of the map are slaves of ring whose master
    is an attribute of the Net (it is *not* in the map, as the primary
    name of the Net).
      In case of merge, the aliases of both Nets are merged and the
    name of the merged one become an alias.
      The Cell::getNet() looks in both the Net map and the aliases to
    find a Net by name.
* Bug: In CRL Core, in coriolisInit.py, reoder the loading of the
    configuration files so the real technology is read as early as
    possible to set up the <gridsPerLambda> factor before any lambda
    is actually computed...
* Bug: In CRL Core, in AcmSigda, do not try to fed the file when it
    has failed to be opened. Throw a clean exception instead.
* New: In CRL Core, in Toolbox, add a NamingScheme object to convert
    a design into VHDL compliant names (mainly from Blif/Verilog).
    This is extensible in any case.
* New: In CRL Core, in BlifParser, slightly more informative warning
    messages. Align the loading progress information on the other
    parsers.
      Add a capability to select which component of the design will
    be returned, if there are more than one. Use the "." as separator.
    For exemple you can request "Processor.Alu", which will load
    the "Alu" component from the design in "Processor.blif".
      To be able to save a Blif loaded design, systematically convert
    all the name for VHDL compliance, as it is the format used by
    the Coriolis native files (vst).
      Export the Blif parser to the Python interface.
* New: In Kite, In NegociateWindow, add a counter of the number of
    remaining events. Gives an idea of the ETA...
* New: In Unicorn, in cgt.by, add an option to load a Blif design from
    the command line.
* New: In Cumulus, new RSave plugin to save both netlist & layout.
    Partly redundant with the previous one. Have to better organize
    that later.
2015-04-16 15:40:02 +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
Gabriel Gouvine 18958d8f31 Basic BLIF parser for Yosys interface 2015-03-27 15:51:58 +01: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 69c75b9ea9 Rewrite the Unicorn ImportCell to allow new formats to be hooked in.
* New: In Hurricane, In CellWidget, add methods to emit CellPreModificated
    and CellPostModificated Qt signals (from non-Qt aware objects).
* New: In Unicorn, In ImportCell, parsers are now dynamically hooked
    in the importer, allowing third party application (i.e. Chams) to
    add their own. See the ImportCell::addImporter() method.
* Bug: In Unicorn, in FindUNICORN.cmake, seems to be unable to detect
    the UnicornGui.h. Not a blocking problem because the include dir
    is shared with other tools correctly detected. But still...
2015-03-21 17:29:04 +01:00
Jean-Paul Chaput f18922a0bb Implementation of placement effort in Etesian (G. Gouvine). 2015-03-18 15:55:08 +01:00
Jean-Paul Chaput 03fa9e8e0f Remove forgotten Mauka related options in cgt.py 2015-03-18 11:31:47 +01:00
Jean-Paul Chaput 393b5a735f Remove simulated annealing placer Nimbus/Metis/Mauka. 2015-03-17 22:50:00 +01:00
Jean-Paul Chaput 5dc60415e7 Happy new year 2015! 2015-03-17 16:56:55 +01:00
Jean-Paul Chaput 8566126acc Adding Configuration support to Etesian.
* Change: In Bootstrap & ccb, the coloquinte project is renamed into
    "importeds", it will be the home of all the externally
    devellopped softwares that are needed to build Coriolis.
      Add explicit support for Fedora ("Linux.fc") and uses
    site-packages, as everybody else.
* New: In CRL Core, in etc/, adds the configuration files for Etesian.
* New: In Etesian, activate the Configuration object. Now uses it's
    own configuration variables instead of borrowing those of
    Nimbus & Mauka.
* Change: In Documentation, updated User's Guide to present Etesian
    as the placer, instead of Mauka.
* Change: In Cumulus, slight change in ClokTreePlugin and ChipPlugin
    to match the new Etesian/Python interface.
2015-02-27 18:16:03 +01:00
Jean-Paul Chaput bd3984a313 Correctly manage clock net isolateds from the main clock.
* New: In Bootstrap, in ccb.py, check if cmake is installed and issue
    a warning, if not.
* New: In Hurricane, added Cell::getDeepNet() to search for a deepnet
    given a path and a leaf net. This method is slow and must not be
    used too often. Introduced for Kite::BuildPowerRails().
* Change: In CRL Core, in cmos/alliance.conf, modify the clock name
    pattern to match the sub-clock signals in the datapath operators.
* Bug: In Etesian, do not blindly reset the top cell abutment-box.
    Do it only if it's empty, otherwise keep it.
* Bug: In Kite, in buildPowerRails(), in getRootNet() the management
    of clock nets was incomplete. The case of unrouted clock nets
    that where not connected to the top core clock net, like the
    one in the datapath registers was faulty. They were partly
    recognized as unrouteds and partly as blockage generating a
    routing deadlock: routage impossible due to blockage generated
    from itself...
* New: In Stratus1, add a buildModel() utility function to automate
    the model generation and allow a call by the model name (string).
* Change: In Unicorn, in cgt.py, display the Alliance environement.
2015-02-25 22:22:16 +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 f85159bdb4 More accurate error message in Python module importation. 2014-09-07 23:16:04 +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 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 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 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 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 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 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 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 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 fee45ef117 Qt5 porting, cleanup & Tidy.
Cleanup:
* Cleanup: In <vlsisapd/src/bookshelf>, remove unused file Bookshelf.cpp
    (may have been a parser once upon a time).
* Cleanup: In <hurricane>, in Cell::flattenNets() use flags instead of
    booleans to be more readable. Allow occurrence placement checking.
* New: In <crlcore> add Python wrapper for the Ispd05 loader.
* New: In <unicorn> add option for direct loading of ISPD05 designs.
* Bug: In <hurricane/src/viewer>, RecordModel must emit
    layoutAboutToBeChanged() before changing the record contents (and
    layoutChanged() afterwards).
2014-03-26 14:47:17 +01:00
Jean-Paul Chaput 9501b88110 First barebone implementation of Etesian. Support for ISPD05 benchmark.
Details:
* New: In <vlsispad/utilities>, new objet Dots for displaying a kind
    of progress bar.
* Change: In <vlsisapd/bookshelf>, keywords are now case-insensitive.
    Added a "strict syntax" option (to be disabled for ISPD05).
* New: First working implementation of Etesian, at least for ISPD05
    "bigblue1".
* Change: In <hurricane>, in Cell::flattenNets(), no longer display
    a warning if an instance is unplaced, this does not make sense
    when the circuit is not placed.
* New: In <crlcore>, Added translator for ISPD05 bookshelf, the
    circuit is *not* placed, unlike in ISPD04 and terminal nodes
    *are* true cells.
* New: In <unicorn>, added entry in import cell for ISPD05 benchmarks.
2014-03-25 00:59:12 +01:00