Commit Graph

19 Commits

Author SHA1 Message Date
Jean-Paul Chaput dd4a01fe70 Validating channel routing mode (two metals) on SNX.
* New: In Hurricane::Entity, add an id counter limit and a memory size
    limit. The two limits are checked only when a new Entity object is
    created. This should help avoiding massive memory links.
* New: In CRL Core, add a "crlcore.groundName" and a "crlcore.powerName"
    parameter to specify the name of the ground/power signals to be
    created if they are missing in a Cell. For Alliance libraries it
    would be "vss" & "vdd" (default values), but for real technologies,
    it is often "gnd!" & "vdd!".
      The Blif parser is modificated to make use of it.
* Bug: In AnabaticEngine::unify(), set the resulting unified segment in
    the  center of the GCells common side. Gcells under a segment are
    found by using the edge that cover the segment axis. When we have
    a "bend" GCell stack and the axis is wrong, they could be ommited.
      This was causing deleted segments to be not removed from some
    Edges, then core dump.
* Change: In Anabatic::AutoSegment::create(), smarter choosing of the
    reference contact, select the fixed or terminal one instead of
    always the source one.
* New: In Anabatic::Edge::isEnding(), new function to check if a
    segment going through an Edge is starting/ending in either source
    or target GCell of the edge (active only when running in channel
    mode).
* New: In Anabatic::Edge::add(), a segment takes part in the occupancy
    only if it is not ending in either source or target (channel mode
    only). The occupancy due to terminal is pre-computed in Katana.
* New: In Anabatic::Edge::ripup(), in channel mode, never ripup a
    segment which is ending in either source or target (we *have* to
    access this edge to connect to the terminal).
* Bug: In Anabatic::GCell::hcut() and vcut(), force the update of
    the Edge which is on the side that will get splitted by the cut.
    It's capacity will be reduced to it must be updated.
* Change: In Anabatic::GCell::updateGContacts() add a flag to conditionnally
    update horizontals or verticals only. We may require only a partial
    update when resizing the GCell in only one direction.
      This, again, related to the fact that we compute the GCells under
    a segment thanks to it's axis position, so we need to be very careful
    when modificating axis.
* Change: In Katana::Block::resizeChannels(), only update GContact vertical
    position. Do not disturb X positions of segments.
* Bug: In Katana::GlobalRoute::DigitalDistance, in channel mode, some
    Edges can have a zero capacity, but still be reachable if the net has
    a terminal in either source or target. Look for this case and return
    a distance of zero instead of "unreachable". This was causing the
    global routing not to complete in channel mode.
      For computing the edge distance, makes the vertical edges much more
    long (10 times) than the horizontal ones as the vertical capacity is
    very limited. Hard coded for now, should make it a parameter in the
    future.
* Change: In KatanaEngine::annotateGlobalGraph(), decrease the capacity
    of edges with reserveCapacity for each terminal inside a GCell.
    Both north and south edges are decreased as we a terminal will
    block both north and south edges.
      As a counterpart, the Edge capacity is not decreased when the
    global router connect to a terminal.
* Change: In Katana::RoutingEvent::revalidate(), when in repair stage,
    do not expand the slack for horizontal segments in channel mode.
    So they may not overlap the standard cell row.
* Bug: In Stratus documentation, do not use the french option in babel,
    the documentation is in english!
* New: In Documentation, added Hurricane/Python tutorial, part for drawing
    layout.
2018-03-16 16:20:04 +01:00
Jean-Paul Chaput 592c098ab2 Basic support for FreePDK 45 completed.
* New: In Commons, inspector support for std::pair<T,U>.
* New: In Hurricane::Layer, ContactLayer & ViaLayer, support for non
    square VIAs. The hole (cut) remains square, but the various metal
    extensions can now be different in X and Y. The ::getEnclosure()
    method now takes a flag EnclosureH / EnclosureV.
* New: In Hurricane::DbU, inspector support for:
         std::pair<DbU::Unit,DbU::Unit>
	 std::array<DbU::Unit,3>
     Must be defined here as DbU do not exists yet in Commons.h
* Bug: In Hurricane::Interval::getSize(), when the interval is "full span",
    do not return the difference between min and max, but directly DbU::Max.
    (the previous result was -1 !)
* New: In CRL Core Python/Technology.py, support for non square VIAs in
    the configuration files. Applied to FreePDK 45.
* New: In CRL::RoutingGauge, added a "symbolic" flag to tell if a gauge
    is for symbolic layout or not. Exported to Python.
* New: In Anabatic::AutoHorizontal::updatePosition(), differentiated
    computation for soure or target taking account of the VIA extension
    in the right segment metal (due to non-square VIAs).
* Change: In Anabatic::AutoHorizontal::_makeDogleg(), the dogleg is
    UP for HV gauges and DOWN for VH.
* New: In Anabatic::AutoSegment::_initialize(), create a cache of the
    various extension length for each layer (viaToTop, viaToBottom,
    viaToSame).
      New implementation of getExtensionCap() using the previous cached
    extension table. See updatePositions().
      New static functions to access the extension cache in the header:
    getViaTotopCap() ...
* Change: In Anabatic::AutoSegment, in various update methods, updateOrient()
    must always be called *before* updatePositions() as extensions are
    dependant on source/target.
* New: In Anabatic::AutoSegment::getEndAxes() compute the position of the
    first source and last target position (center/axes) on an *aligned*
    set of segments.
* New: In Anabatic::AutoSegment, add a new state flag SegAxisFixed to
    signal segments that can be put on only one track. Specific case
    to VH gauge for a M1 vertical terminal with a M2 vertical segment.
    The M2 is effectively bound to the M1 axis position.
* Bug: In Anabatic::NetBuilderVH::_do_xG_xM1_xM3(), in case of E/W global
    and only one RoutingPad the connexion to the RoutingPad was duplicated.
    It was valid, but totally stupid.
* Bug: In Anabatic::Session::_canonize(), for an aligned segment set,
    intersect the user constraints from all segments instead of only
    considering the canonical one.
      Issue a warning about too tight constraints only for symbolic
    gauges. It may be correct for the real ones.
* New: In Katata::DataNegociate::update(), more accurate computation
    of the perpandicular free interval. Use segment extension cap
    calculation. Create a special case for fixed axis segments allowing
    them to find alternative free interval, try under source and under
    target as they are likely to be draggable segments.
* Change: In Katana::Manipulator::relax(), use the extension cap value
    to compute the axis of the perpandicular segemnts.
* Change: In Katana::Manipulator::moveUp(), now move up the whole set
    of aligned segments instead of just the canonical one.
* Change: In Katana::NegociateWindow::loadRoutingPads(), more accurate
    TrackMarkers insertions for fixed terminals.
* New: In Katana::RoutingEvent::Key::Compare::operator(), segments with
    fixed axis are processed prior to any others.
* New: In Katana::RoutingEventLoop, store segment pointers instead of
    ids to generate more accurate error messages.
* Change: In Katana::RoutingPlane::create(), perform local track
    assignment only for HV gauges.
* Change: In Katana::SegmentFsm::_slackenLocal(), add a "dragMinimize"
    step in the automaton. Mutliple states transitions can occurs in
    a row if an action fails.
* New: In Katana::Session::_toIntervalAxis(), normalize interval
    bounds so they are on track positions (by shrinking the interval).
* Bug: In Katana::TrackMarker CTOR, the weigh computation was wrong.
2018-02-17 20:27:38 +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 8d4fdf3471 TrackCost clean support for symmetric and wide segments.
* New: In Katana::TrackCost, the TrackElement and it's optional
    symmetric are now kept as attribute of a TrackCost. The cost
    is completly computed inside the constructor.
      TrackCost now support any mix of symmetric event and wide
    segments.
      The cost is now computed by adding directly to the current
    one instead of creating secondaries that are merged afterwards.
    As a consequence, remove all copy construction and merge
    capabilities.
      All the various methods used to compute the cost are renamed
    "addOverlapcost()" in all the various related objects.
      As a reminder, the overal cost method call is as follow:
        1. TrackCost constructor on a TrackElement.
           2. Call TrackElement::addOverlapcost()
              3. For all Track under the TrackElement, call
                 Track::addOverlapCost()
                 4. For all other TrackElement intersecting with
                    the overlap interval call:
                    TrackElement::incOverlapCost()
                    5. The callback overlap function for segments
                       is called (defined in NegociateWidow).
      Don't confuse:
      - TrackElement::addOverlapCost(), which compute the cost of
          inserting the segment inside a track (or a set of).
      - TrackElement::incOverlapCost(), which compute the cost of
          overlaping with this already inserted segment. It is the
          other way around of the previous one.
* Change: In Katana::SegmentFsm, use a vector of pointer to TrackCost
    instead of an object to avoid copy construction.
2017-06-10 12:27:25 +02:00
Jean-Paul Chaput 8a73b03fd8 Synchronize priority of TrackSegments connecteds through doglegs.
* Bug: In Anabatic::Dijsktra, correct the indentation in cdebug calls
    (lots of them causing a big shift right).
* New: In Anabatic::TrackSegment, new helper structure SideStack to
    manage a set of aligned GCells and their various sides sizes.
* Change: In Anabatic::TrackSegment::computeOptimal(), more accurate
    computation of attractors from global segments and variable size
    GCells using SideStack.
* Change: In Katana::DataSymmetric::checkPairing(), increase the tolerance
    for misaligned symmetrics from 2 to 5 tracks (should be enough for our
    narrow channel routing).
* New: In Katana::TrackSegment, add a first flag to enable locking of
    priority. If it is set, calls to either "computePriority()" or
    "forcePriority()" will have no effect. Added the uint32_t flags
    paraphernalia.
* New: In ::computeNetPriority(), overall function to control the call
    of TrackSegment::computeAlignedPriority(). The call is done from
    NegociateWindow::run().
* New: Katana::TrackSegment::computeAlignedPriority(), order the
    TrackSegments aligneds through doglegs to the one with the highest
    priority is routed first and others progressively from him. Done by
    forcing an ever decreasing priority on the aligneds ones.
      The amount of decrease is small so the aligned segments got routed
    (ordered) in close, if not contiguous, sequence. Priority is locked
    for the order to remain.
* Bug: In Katana::TrackSegment::computePriority(), correct computation
    of the priority when there is more than 10 free tracks
    (a DbU::toLambda() call was missing, leading to very big priorities).
* Change: In katana::TrackCost CTOR, do not compute a distance to fixed
    in the case of analog segments, this is backfiring.
      Slight change of the compare function when delta differs. Seems
    to improve a little.
2017-05-30 22:33:06 +02:00
Jean-Paul Chaput 1e49da1976 Select S/T in AutoSegments_Aligneds. Priority moved to TrackSegment.
* In Katana::AutoSegments_Aligneds, allow the the caller to select
    if we are propagating through source or target only (or both).
    Note that if no flag is given, it is assumed that we want to
    propagate the old way on both source and target.
* In Katana::TrackElement, Katana::TrackSegment and Katana::RoutingEvent,
    move the event priority from RoutingEvent to TrackSegment.
    Add accessor and mutators associated in TrackElement (virtual
    methods).
2017-05-27 20:35:28 +02:00
Jean-Paul Chaput 3e825cc228 Katana routing algorithm adjustements for analog routing.
* Bug: In Hurricane::Interval, the ::getSize() method was returning a negative
    length when the Interval was empty. Now return zero. This was causing
    slight cost functions side effect when computing the overlap of a segment
    with another one belonging to the same net (i.e. shareDelta)
* Bug: In Katana::AutoSegment::computeOptimal(), checks that the optimal
    position for the axis is indeed inside the GCell interval.
* Bug: In Katana::DataSymmetric::getSymmetrical(Interval&), reverse the shrink
    applied to GCells sides. Interval are of the type [min:max[ so after
    symmetric transformation they become ]smax:smin]. Apply a correction so
    that they are [smax:smin[ and could be merged with the paired interval
    (the one without symmetry applied).
* Bug: In katana::TrackCost::consolidate(), the overlap (now) always positive,
    and must be *substracted* to the "delta" (not *added*).
* Bug: In Katana::_computeNetOptimals(), now skip the already processeds
    AutoSegments instead of re-processing them.
* New: In Katana::AutoSegment::computeOptimal(), improved computation of
    the axis hint:
      - For analog net, propagate through the simple doglegs to find
        attractors.
      - Restrict the allowed interval to the union of GCell sides and
        segments constraints that are terminals.
      - Consider a local as "long" if it's length exceed 20 the P-pitch.
        (maybe make that a tool parameter).
2017-05-23 00:20:31 +02:00
Jean-Paul Chaput e78c3f21ef Added analog type on segment NetRoutingProperty.
* New: In Anabatic_AutoSegments collection, added a Flag to the constructors
    to allow different behavior between digital and analog modes.
      For "Aligneds" and "Perpandiculars" collections, now manage a new
    Flag WithDoglegs to follow aligned globals through local doglegs
    (for analog nets).
      Adjust the log level of collections to 144 (formerly 145).
* New: In Anabatic::AutoSegment, new flag SegAnalog for segments that are
    part of an analog net.
      Note that with this flag, we reach the 32 bits limit...
* Change: In Anabatic::Constants, Flags are now declared as BaseFlags
    objects and *not* uint64_t. This avoids overload resolution problems with
    arithmetical overload of the operators.
      The BaseFlags/Flags types are now completly "isolated" from the
    uint64_t, it has the advantage of showing where unwanted previous implicit
    conversions where occuring.
* Change: In Katana::Constants, Flags values are now of BaseFlags type instead
    of uint64_t.
* Change: In Anabatic::Dijkstra, lots of log cleanup.
* Change: In Anabatic::GCell::getSide(), make the "shrink" parameter visible
    to allow to substract the topmost and rightmost track for axis span
    computation in AutoSegment::computeOptimal(). Used for analog mode.
* Change: In NetRoutingState, added a flag for analog mode. Use uint32_t
    for the flags type.
* New: In Isobar, export the NetRoutingState and NetRoutingExtension objects.
2017-05-20 12:33:12 +02:00
Jean-Paul Chaput d07cdf03e9 Replace "unsigned int" by "Flags" in all AutoSegments collections.
* Change: In Anabatic::AutoSegments collections, change the type of all
    the flags that where in "unsigned int" (32 bits) to Flags (uint64_t)
    as there is now more than 32 flags for functions.
* New: In Ababatic::Constants, added new flag Flags::WithPerpands, which
    makes the number of flags tip over 32 bits, thus making mandatory
    to uses Flags and not unsigned int.
* New: In Anabatic::AutoSegments_Perpandiculars, manage a new flag
    Flags::WithDoglegs to allow to propagate through global segments that
    are connecteds via doglegs on local segments. Meaning that there is
    a good chance that they could be aligned.
      Slighly change the way we propagate on aligned segments: no longer
    check for VTee or HTee, but only for same direction and layer as
    master.
* New: In Anabatic & Katana, replace all the "int", "long" and their
    variants by the less implementation ambiguous "int32_t", "int64_t"
    (and variant). This should help to better detect bit trucation in
    flags.
      Use the type to give a hint about the flags kind:
        - Type "Flags", for flags shared among Anabatic & Katana
          functions/methods (may also appear in some objects states).
        - Type "uint32_t" for flags belonging to an object internal
          state of from Hurricane functions flags (those should be
          grouped in a Flag subclass in a perfect world).
2017-05-16 14:53:33 +02:00
Jean-Paul Chaput c44c6b13f3 Adjust Katana event sort. CMake detection of Python 2.7 only.
* Change: In all top CMakeLists.txt, force the use of Python 2.7 as
    we do not compile against 3.x flavors. Do not use the "EXACT"
    flags as it will not recognize 2.7.x versions.
* Change: In Katana::RoutingEvent::Key::Compare(), preliminary
    experiments shows that the best sorting order is:
      - Lower layer first (i.e. M2 -> M3 -> M4 -> ... )
      - Longer segments first.
      The later seems to be counter-intuitive. Guess is that placing
    the small ones first generate a more important fragmentation of
    the big ones. They are placed too early and are difficult to move
    afterwards.
      Another feature to test is *not* inserting pushed left/right
    segments if they are not *already* routed.
* Change: In PyKatanaEngine.runNegociate() now takes a flag argument,
    provided through the new PyKatanaFlags exported object.
    (doChip.py must be changed accordingly)
2017-05-11 17:26:56 +02:00
Jean-Paul Chaput f1b2035cb0 Support for profiling the priority of events in Kite & Katana.
* New: In Katana::Configuration, added "katana.profileEventCosts" to
    triggers the event's profiling.
* New: In Katana::NegociateWindow::_negociate(), save a profiling
    trace of all the events and their priority, separated by metal,
    for later analysis (see doChip.py in alliance-check-toolkit).
* New: In Katana::RoutingEvent::Key::Compare(), start implementing
    new segment freedom degree functions.
* Change: In Hurricane::Net::_getString(), put a more complete
    information about the Net instead of just only it's name.
* Bug: In Katana, reorder the various stages so that they are
    executed in the exact same sequence as in "doChip.py" so now
    routing in graphic mode and text mode gives exactly the same
    results.
* Bug: In Katana::PyKatanaEngine, runGlobalRouter do not take any
    argument.
2017-05-09 18:33:55 +02:00
Jean-Paul Chaput ef69a6d586 Support for symmetric routing in Anabatic/Katabatic.
* New: In Katana::SegmentFsm, the object is now able to handle two events
    at the same time. The master and it's symmetric. When there is no
    symmetric, the corresponing data is just left blank. This makes a
    bigger object, but as there is only one when running, it is not an
    issue.
      Candidates tracks are now an vector of array<2> (pairs), the
    TrackCost::Compare() functor has to be wrapped through CompareCostArray.
    The compined TrackCost of the two tracks is accumulated into the first
    element.
      Everything related to events gets duplicated: _event is now _event1
    and _event2, and so on.
      As there can be now two Manipulator actions done with SegmentFsm,
    this class now completly hide the Manipulator level from the
    RoutingEvent processing.
      New function ::bindToTrack() to perform the track insertion.
* New: In Katana::TrackCost, add a new ::merge() function.
* New: In Katana::TrackElement and Katana::TrackSegment, add symmetric
    management. Allows to know if a TrackElement has a symmetric and to
    access it.
* New: In Katana::DataSymmetric, add new overload for ::getSymmetrical()
    to handle DbU::Unit and intervals.
* Change: In Katana::RoutingEvent, remove all direct uses of Manipulator
    objects. Now any change to the event associated segment must go through
    call to Segment Fsm.
* Change: In Katana, adjust the debug level so internal informations are
    put below level 156.
* New: In Hurricane::DbU, in ::getValueString(), special display when the
    value is Min or Max (more helpful than a gigantic number).
2017-04-30 23:46:33 +02:00
Jean-Paul Chaput 3598c6d8f7 Disjksta::setDistance() now return a pointer to the copied object.
* Change: In Anabatic::Dijkstra the _distanceCb attribute got copied
    from the setDistance() argument. To be able to access the duplicated
    distance (and therefore access/modify it) the function now return a
    pointer to it. Done with the "target()" accessor of std::function<>.
* Change: In Katana::GlobalRouting::runGlobalRouter() use the new
    Disjkstra::setDistance() to be able to call setNet() on the right
    object.
2017-02-06 21:59:15 +01:00
Jean-Paul Chaput f8b9957d20 Bug: reduced segments where axis was not set when placed.
* Bug: In Kite::RoutingEvent::_processNegociate(), on insertion in free
    space of a reduced segment (less than one pitch) no insert event
    was generated, but the axis was not set to the selected track, leaving
    the segment at it's former place.
      Now, generate an insert event, but in Kite::Session::_revalidate()
    filter them so that reduced segments are not inserted in tracks but
    only have their axis set.
      Correction also applied on Katana.
* Bug: In Kite::wipeoutRouting(), the removal was incomplete. We need to
    remove anchored Contacts, but in a second stage. This is a fragile
    workaround as it require that there is only one level of anchoring.
2017-02-06 20:58:57 +01: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 bff9a38742 Forgot to perform Track re-order after removing zero-length segments.
* Change: In Anabatic::Autocontact, replace getMinDepth() and
    getMaxDepth() by getDepthSpan().
* New: In Anabatic::AutoSegment::canMoveUp(), add an optional check of
    low up density (Flags::CheckLowUpDensity). Allows to move up a
    segment if the up density is (very) low, and in this case it's more
    efficient than breaking it to fit in the lower layer.
      canMoveUp() is now able to perform the same work as canPivotUp()
    if *not* supplied the flag Flags::IgnoreContacts.
* New: In Katana, in GlobalRouting::DigitalDistance() now take into
    account the cost of a VIA (currently set to 2.5). Need to known the
    Net currently routed in the DigitalDistance object itself.
* Change: In Katana::Track::Element::canPivotUp(), now also takes a flag
    parameter.
* Change: In Katana::Manipulator, new flag IgnoreContacts to mirror the
    one of Anabatic.
* Change: In Katana::SegmentFsm, allocate once a Manipulator object instead
    of many times on the fly.
      In SegmentFsm::_slackenGlobal(), in the slacken state, if the up
    density is (very) low, bypass to move up instead of slackening.
    This solve better the routing of the control part of the register file.
    The register file having a pathological case of terminal placement:
    many punctual terminals aligneds in METAL2 *and* a grid of METAL2 and
    METAL3 blockages near below...
* Bug: In Katana::Session::_revalidate(), after removing the zero-length
    segments, forgot to re-order the track, leading to many stranges effects
    as the indexes where no longer coherent in the Track.
2016-09-20 11:30:45 +02:00
Jean-Paul Chaput 92522fef0b Solved more problems related to GCell not owning north/east boundary.
* Bug: In Anabatic, in AutoHorizontal & AutoVertical, native constraints
    must use GCell::getConstraintsUMax().
* Bug: In Anabatic::GCell, correct terribly bad implementation of
    both getConstraintUmax().
      In getSide(), use getConstraintUMax().
* Bug: In Anabatic::AutoContact, setCBUMax() must be set using the GCell
    getContraintUMax().
2016-08-30 16:05:15 +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