Commit Graph

19 Commits

Author SHA1 Message Date
Jean-Paul Chaput 43629a6c1c Tweaking Layer & RoutingGauge management. Allow negative track indexes.
* Bug: In Hurricane python module, forgot to add the Segment type.
* Change: In Isobar/layer.getEnclosure() wrapper check and cast the Layer
    argument into BasicLayer.
* Change: In CRL::RoutingGauge::getLayerGauge(Layer*), getLayerType() and
    getLayerDirection() no longer check layer identity based on layer
    mask instead of just Layer* pointer. To allow a unified call wether
    the layer is real or symbolic.
* Change: In CRL::RoutingLayerGauge::getTrackIndex() and getTrackPositon(),
    no longer consider negative indexes as invalid and reset them to
    zero. The check for out of bound index is now left to Anabatic &
    Katana.
* Change: In CRL/RoutingGauge.getRoutingLayer() and getContactLayer(),
    more detailed error message.
* Change: In CRL/RoutingLayerGauge.getTrackIndex() and getTrackPosition(),
    indexes are now signed long instead of unsigned.
2019-05-10 11:52:42 +02:00
Jean-Paul Chaput 3a2916b5e6 Improved clock-tree support for variable pitch routing gauges.
* New: In Hurricane::Isobar::PySegment, added wrapper for getOppositeAnchor().
* Bug: CRL::PyRoutingLayerGauge, Python wrapper of getTrackPosition() was
    in fact returning getTrackNumer().
* Bug: In Katana::PowerRailsPlanes::Rail::doLayout(), add the half minimum
    distance to the blockage segments extensions. Was causing too near
    VIAs is cmos45.
* Change: In cumulus/plugins/ClockTree, correctly manage routing gauge when
    the lower pitches (M2/M3) is different from the upper one (M4/M5).
    But we still can only do sxlib compliant gauges because we do not
    handle a switch in preferred routing directions.
2019-03-23 11:05:51 +01:00
Jean-Paul Chaput b53511ea83 Minor adjustements for analog device checker (test of AMS c35b4).
* Change: In CRL::GdsStream, no longer export empty Cells as structures,
    to avoid empty cells in Cadence. To prevent meta-transistors to be
    exported as real physical objects.
      Also put a hard-coded test to prevent exporting "control_r" model
    which is made of AMS standard cells for "amsOTA".
* Change: In CRL/PyRoutingGauge, export the isHV() and isVH() methods so
    the Stack can access it.
* Change: In Hurricane/PyCellViewer, export the removeHistory() method.
    When a Cell is deleted, it must be also removed from the editor
    history. This should be take care of automatically, but for now
    we make it manually through scripts.
* Bug: In Anabatic::NetBuilder::doRp_accessAnalog(), the gauge offset
    was not taken into account when creating initial Contact on
    RoutingPad. The program self corrected afterwards, but with the
    display of a disgraceful message.
* Change: In Anabatic::Configuration and Session, export the gauge offsets.
2018-09-20 18:24:30 +02:00
Jean-Paul Chaput cabbab5140 Correct interval capacity computation around zero in RoutingLayerGauge.
* Bug: In CRL::RoutingLayerGauge::divide() & getTrackNumber(), the number
    of traks crossing an edge was wrongly computed for GCells around the
    zero coordinate, this was due to the change in rouding direction
    around zero. It was starting to show for routing gauges with an offset.
      Note: to simplificate the computation of the capacity of an interval,
    all the track over a Cell are computed from (0,0). The Cell abutment
    box has to be choosen relative to that. The tracks positions are fixed
    all over the Cell (or chip if it is one).
2018-04-13 14:59:40 +02:00
Jean-Paul Chaput ba3ddafdf5 Adjustements for analog routing.
* Change: In Anabatic::GCell::doGrid(), remove the "3 slice height"
    limit (for small digital analog blocs).
* Bug: In Anabatic::NetBuilder::setStartHook(), perform a check for
    a RoutingPad still on a Plug. Diplay an error instead of crashing.
* Bug: In CRL::RoutingLayerGauge::getTrackIndex(), the upper bound
    of the track interval must be included instead of excluded.
* New: In Hurricane::Cell, add a StayOnPlugs flags for flattenNets().
    To keep the RoutingPad occurrences on Plug instead of selecting
    physical components.
* New: In Isobar::PyNet, add setAutomatic() and isAutomatic() to the
    interface.
* Bug: In Katana::protectRoutingPads(), do not create protections on
    PinOnly layers (mostly metal1).
2018-01-10 12:45:00 +01:00
Jean-Paul Chaput 95aba574a5 Happy New Year 2018 ! Update license years... 2018-01-06 17:55:44 +01:00
Jean-Paul Chaput cafced2bf8 Katana manage wide wires, and they can also be symmetric.
* New: In Anabatic::AutoContact and the derived classes, manages wide
    wires. The contact self dimension itself according to the segments
    it is connected to. Special case for the AutoContactTerminal which
    also read the size of the component it is anchored upon.
      New refresh method "updateSize()" and flag CntInvalidatedWidth.
    to compute the size.
      In AutoContactTerminal, compute the constraint box according to
    the width of the segment.
* New: In Anabatic::AutoSegment, flags are now implemented as "static const"
    attributes of the class. The flags are stored into a uint64_t as
    they are more than 32.
      Added new flag "SegWide" and associated predicates.
* Change: In GCellTopology::_doHChannel() and GCellTopology::_doVChannel(),
    uses the simpler overload of AutoSegment::create() in order to detect
    the wire width automatically.
* New: In Katana::Manipulator, split insertToTrack() and forceToTrack()
    into a one-track method and a segment level method that iterate over
    the track span of the segment.
* New: In Katana::SegmentFsm, for each cost in the table, now allow access
    to a specific track. So the base functions have now two parameters:
    "icost" and "itrack" (has a cost can have multiple tracks in the case
    of wide segments).
* Change: In Katana::TrackElement, remove the index of the element inside
    it's track, as for a wide segment it will not be meaningful for the
    non-base track. This means that we have to use the Track::find()
    method each time instead.
      Remove the wide flag, as it is a duplicate of the one in AutoSegment.
      Added a getTrackCount() method to tell the number of track the
    segment is inserted into. Needed in the Track destroy step to delete
    a segment only when the last track that refers it is destroyed.
      Added getSymmetricAxis() to correct the computation of the symmetric
    base track in case of wide segment as the base track is not centered
    but the the leftmost one.
* Change: In Track::insert() insert wide segments in their whole track span.
* Change: In TrackCost, create an array of costs according to the segment
    track span.
* Change: In TrackSegment::create(), now activate the factory and create
    wide segments.
* Bug: In Katana::AutoSegments_Perpandicular, correct the debug indentation
    problem (ever shifting to the right).
2017-07-28 15:30:22 +02:00
Jean-Paul Chaput 47c9961ef3 First intergration of the Analogic router parts.
* New: In Anabatic::AutoSegment, introduce a the kind (associated to a
    flag) "LongLocal". Analog GCells can be very wide, so at least some
    carefuly choosen long local segments must be took into account as
    attractors in the computation of the optimal axis.
* New: In Anabatic::AutoSegment::computeOptimal(), take LongLocal into
    account as attractors.
* Change: In ::GCellTopology constructors compare the layers of the
    RoutingPads using layer masks instead of Layer pointers. Allows to
    find both "METALx" (symbolic) and "metalX" (real).
* Change: In ::GCellTopology::_doHChannel(), _doChannel(), _doStrut()
    and _doDevice(), tag long locals as "LongLocal". This need to be
    reviewed as it as bind done a bit too quickly.
* Change: In Anabatic::AutoSegment, due too a much bigger span of the
    analogic GCells the _optimalMin & _optimalMax bitfields must use
    16 bits instead of 8 (they where overflowed).
* New: In Katana, reorganisation of the initialization procedure to fit
    both digital and analogic cases. Create an analogInit() method.
* Change: In Katana::RoutingEvent, the _tracksNb and _tracksFree bitfields
    where too short for the Analog GCell size, now uses 16 bits instead of
    6.
* Bug: In Katana::GraphicKatanEngine::drawGCell(), skip drawing of a
    GCell if *both* width and height are under 150 pixels.
* New: In Katana::Session, add a new isOpen() method.
2016-10-04 17:12:58 +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 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 2a40fa7d92 New "obstacleDw" for Kite.
* New: In CRL Core, in RoutingLayerGauge, adds a new parameter "obstacleDw".
    It represents the distance to add from the *edge* of a blockage segment
    to the next *axis* of a routing track. This was previously computed as
    the pitch minus the mimimum half wire width. This works if the pitch
    is *equal* to the wire width plus the minimal distance (edge to edge).
    But if the wire width is less, than it leads to too great a distance
    around obstacles, making them bigger than they are. And potentially
    blocking everything. To summarize:
         before:  obstacleDw = pitch - wireWidth/2  (deduced)
         after:   obstacleDw = explicitly setup, usually:
                               pitch - max(wireWidth)/2
      Modify the Alliance configuration helper and the various kite.conf
    file accordingly.
* New: In Kite, in BuildPowerRails, make use of "obstacleDw" to compute
    the footprint of a blockage.
2016-04-13 18:21:09 +02: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 5dc60415e7 Happy new year 2015! 2015-03-17 16:56:55 +01: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 c87d59256d * All Tools:
- A complete sweep of cleanup to suppress allmost all compiler warnings.

  * ./crlcore:
    - New: Extented Python support for all objects needed to configure Coriolis.
    - New: Configuration files and load helpers completly written in Python.
        An XML emulation mode is still avalaible.
    - New: UsersGuide, as a replacement for README, written in ReST.
    - New: Start of Doxygen documentation (mostly for documenting the initialisation
        objects & methods).
2012-11-16 12:49:47 +00:00
Jean-Paul Chaput 10682d9c7c * ./crlcore:
- Change: In RoutingLayerGauge, no longer throw exception when the position
        requested it outside the track grid. Instead returns first/last track
        index.
2011-01-25 17:15:56 +00:00
Jean-Paul Chaput 605eeff9e4 * All tools:
- Change: Correction to suppress all g++ warnings. Except thoses comming
        from bad Python system includes...
2010-05-17 14:40:39 +00:00
Jean-Paul Chaput c5d8077730 * ./hurricane/src/hviewer,
./coriolis/src/crlcore,
     ./coriolis/src/knik,
     ./coriolis/src/katabatic,
     ./coriolis/src/kite,
     ./coriolis/src/equinox,
     ./coriolis/src/solstice,
     ./coriolis/src/ispd:
     - SVN MOVE: Source tree simplification & uniformisation. Now all tools
         are at the same level, directly under the root of the repository.
         No more "coriolis/src".
2010-03-09 15:20:13 +00:00