Commit Graph

25 Commits

Author SHA1 Message Date
Jean-Paul Chaput 9e6463c217 Support for density estimation for the global router.
* Bug: In Anabatic::Edge::getDistance(), remove the additionnal 0.1
    added to horizontal edges. This was for testing before the hScaling
    parameter was added (to the distance computation in GlobalRoute).
* New: Anabatic::Path_Edges, collectio to walkthrough all the edges
    between two node. More complex than in Knik as we are no longer
    using a regular grid. We may request the north bound path or south
    bound path.
      Collection returned by AnabaticEngine::getEdgesUnderPath().
* New: In Anabatic::NetData, add a new flag GlobalEstimated to tell if
    the net RMST has been computed (using FLUTE).
* New: In Anabatic::PriorityQueue, used to sort Vertexes by increasing
    distances, add a new criterion to be used in case of distance
    equality. The attractor which should be the center of the search
    area. In case of equality, we choose the Vertex which is closest
    to the attractor. Give a small improvement, and more "dendritic"
    trees.
      For a more simple implementation of the comparison function it is
    made as a static member (so no two Dijkstra objects at the same
    time...).
* Change: In Anabatic::Edge, make the estimate occupance a floating
    point number instead of an integer.
* New: In Katana::GlobalRoute, finally implement the estimated congestion
    driven router. Net RMST estimated using FLUTE.
      Use the historic cost from Knik implementation and not the one
    given in Damien's thesis, which seems not be the same and a bit
    strange.
* New: In KatanaEngine, add the ability to exclude nets from routing,
    and export it to Python.
2019-02-26 20:03:53 +01:00
Jean-Paul Chaput fcd6d69a2f Analog integration part II. Analog place & route (slicing tree).
* Change: In Hurricane::CellWidget, set the minimal size to 350 pixels
    to fit my normal DPI secondary screen...
* Change: In Hurricane::Error(), reactivate the backtrace generation by
    default. Seriously slow down the program each time an Error is to
    be constructed.
* Bug: In Analog::Device::preCreate(), check for NULL Technology before
    attempting to use it.
* Change: In Hurricane/Analog, remove all '*Arguments*' classes and their
    Python interface. It was an obsoleted way of passing devices parameters
    to the Python layout generators (located in Oroshi). Now we just get
    them straight from the Device with the getParamter() method.
* Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze.
* Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove
    all uses of the "Arguments". Directly access the parameters through
    the device itself. Make the checkCoherency() with identical arguments
    as of layout().
* New: Bora tool that performs analog place & route. Based on a slicing
    tree representation. It is the thesis work of Eric Lao.
      Code beautyfication and some programming cleanup.
* New: Karakaze tool, provide the Python base class AnalogDesign used
    to build an analog design. Create/configure devices and assemble
    them in a slicing tree.
* Change: In Unicorn/cgt.py, display the stack trace in case of an
    ImportError exception as well as for other exceptions.
      Add Bora to the set for included tool engines.
2018-10-18 18:10:01 +02:00
Jean-Paul Chaput 1a338f620c Corrections in the Dijkstra global routing (ripup) mechanism.
* Bug: In Anabatic::Dijkstra, the degree of a vertex (the number of neighbors
    belonging to the same net) was miscalculated. This was leading, in the
    materialize step to some feed-through vertexes not being broken.
    Leading in turn to incomplete transformation of the detailed routing.
      Also in _trackback(), the degree of the first vertex we were backtracking
    from was not incremented.
* Bug: In Anabatic::Dijkstra::materialize(), systematically use
    GCell::breakGoThrough() on both source and target. This is needed when
    we are in the ripup phase as both source and target can be go-through.
      This was also leading to incomplete detailed routing transformation.
* Change: In Anabatic::Edge::ripup(), ripup one third of the segments instead
    of thoses exeeding the global length threshold. This way we are sure to
    desaturate an edge. Needs to be further calibrated.
* Change: In Aanabatic::GCell::breakGoThrough(), no longer return NULL.
    Return existing gcontact if any. Break if it is a go-through and create
    a new gcontact in last resort. Maybe rename this function.
* New: In Anabatic::Configuration, new parameters:
    - anabatic.edgeHScaling, to adjust the length of the horizontal edges
        relative to the vertical ones (this is a ratio).
    - anabatic.globalIterations, set the maximum number of ripup passes
        of the global router.
* New: In CRL/etc/*/kite.conf, added new parameters anabatic.edgeHScaling
    and anabatic.globalIterations.
* New: In Katana::GlobalRoute::DigitalDistance, take into account the new
    edgeHScaling factor. Must be used when the capacity of V-edges differs
    greatly for H-edges (case of AMS 350nm c35b4 for instance).
* Bug: In Katana::GlobalRoute::DigitalDistance, the historic cost is
    computed for an edge length of "1". Must be multiplicated by the
    current edge length to have any measurable effect.
      This bug is finally explaining why the ripup was producing the
    same solutions over and over, the historical cost was negligible!
2018-04-16 12:10:48 +02:00
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 8f25b97271 Improve Edge ripup method. Improve two-metal terminal management.
* New: In Anabatic::Edge::ripup(), sort edges to ripup by decreasing
    length so the longest gets riped up first.
      In two metals mode, ripup all segments *except* those who have
    terminal contact in the GCell, because they must use it anyway.
* Bug: In Anabatic::GCell::getEdgeAt(), the size hint flag was not
    correctly selected, leading to the use of an edge in the wrong
    side. So deleted segments where not deleted from their edges,
    leading to core dump. Don't understand how it can have not shown
    until now.
* New: In KatanaEngine::annotateGlobalGraph(), for two metal gauges,
    decrease the edge capacity on both north and south side for each
    terminal in the GCell. As a terminal must be accessed through
    north or south it blocks the whole vertical track (hence both
    edges).
2018-03-06 01:48:44 +01:00
Jean-Paul Chaput 793dbb26b2 Capacity managment by layer in Edges & GCells (plus fixes).
* New: In Anabatic::EdgeCapacity, dedicated object to manage the capacities
    of an edge by layer. This needed now because with real technologies
    layers capacities differs (unlike with symbolic technologies).
      This object is separated to be shared between Edges with identical
    characteristics (direction+interval). Deletion is automatic and
    done through refcounting. All the already allocateds EdgeCapacity
    are kept into a set in the AnabaticEngine (key is (direction,interval)).
* New: In Anabatic::Edge, capacities are stored in a shared EdgeCapacity
    object. The total capacity can be annotated (i.e. decreased).
      EdgeCapacity attribute is created during the materialize() call.
    The capacities are computed at this time.
      The incCapacity() function is renamed in reserveCapacity().
* New: In Anabatic::AnabaticEngine, added attribute _edgeCapacitiesLut
    to store the shared EdgeCapacity.
      Lookup/Creation of an EdgeCapacity is done through _createCapacity().
* Change: In Anabatic::Constants, rename Flags::IllimitedCapacity into
    Flags::InfiniteCapacity. Add Flags::NullCapacity (both for Edges).
* Change: In Anabatic::GCell, implement a by depth (for layer) getCapacity().
    This modification did expose a bug in the density calculation :
    per depth density where divided by the complete density instead of the
    density's depth. This was leading to greatly underestimated densities.
    Thoses underestimations where preventing Dijkstra and layer assignement
    to manage congestion correctly (in fact, it was acting as if there
    never was congestion).
      Also avoid a divide by zero (thus -NAN showing in densities).
* Change: In Anabatic::GCell, rename setEdgeOccupancy() into the more
    accurate forceEdgesCapacities().
      Note for Eric: only the first Edge on each side has it's capacity
    forced. What if there's more than one Edge ?
2018-02-21 00:16:50 +01:00
Jean-Paul Chaput 95aba574a5 Happy New Year 2018 ! Update license years... 2018-01-06 17:55:44 +01:00
Jean-Paul Chaput 9b2648241d In Anabatic/Katana, add support for VH gauges (real technos).
* Change: In Anabatic::AutoContactTerminal::getNativeConstraintBox(),
    when the anchor is a RoutingPad (which must be always the case),
    perform the true computation of it's position based on the
    segment occurrence. It is a important change, previously the
    area was in fact the "center line" of the connector while now
    it is really an area (mandatory for "half-offgrid" terminals of
    real technologies).
      The change is not complete yet, the area should be shrinked
    by the half size of a VIA, because the area applies to the center
    coordinate of the VIA (to be done quickly).
* Bug: In Anabatic::AutoContactTurn::updateTopology(), when a dogleg
    is created (restore connexity after a layer change) the layer of
    the VIA, based on the segments it connects to must be re-computed
    *after* the dogleg has been made.
* Change: In all files of Anabatic, when comparing two layers, no longer
    use the Layer pointer itself, but the layer mask. This allow a
    transparent management of both real and symbolic layers (which
    do share the same mask). Real metal layers (not VIAs) will be
    BasicLayer and symbolic metal layers will be RegularLayer.
* New: Anabatic::Configuration::selectRpComponent(), select the best
    RoutingPad component for metal1 terminals. Look for the metal1
    component with the biggest accessibility on-grid.
      RoutingPad using other metals are left untoucheds.
* New: New function Anabatic::Vertex::getNeighbor(Edge*) to get the
    neighbor Vertex through an Edge*. This method allows to write
    clearer code as we no longer need to access the neighbor through
    the underlying GCell.
      Also add proxies for GCell methods in Vertex.
* Bug: In Anabatic::Dijkstra::_toSources(), in the ripup stage, when
    a component with multiples vertexes is reached *and* two of it's
    vertexes are reached *at the same time* (one from which we backtrack
    and one still in the queue) extraneous edges may be created by
    _materialize(). Case occurs on snx/c35b4, "abc_5360_n903_1".
      To solve this, Dijkstra::_toSource() is modificated, the "from"
    edges of the newly reacheds vertexes are reset to NULL, *except*
    for the one we will be backtracking from. That is, the one given
    in the source argument.
* Change: In Anabatic::NetBuilder class, put the various Hooks and
    RoutingPad sorting functions as class ones.
* Bug: In AutoSegment::setLayer(), raise the SegInvalidatedFayer flag.
    This unset flag was causing AutoContactTurn::updateTopology()
    to not work as expected and making gaps, this was the cause of
    the last remaining warnings about layer connexity.
2018-01-06 16:55:53 +01:00
Jean-Paul Chaput eae5d6bf83 Added support for 2-Metal block routing in Anabatic & Katana.
* New: In AnabaticEngine::invalidateRoutingPads() this method is a temporary
    workaround for a Hurricane problems. When an instance is moved, the
    RoutingPads that use it must be moved accordingly, but they are not
    invalidated so they stay in the wrong QuadTree.
      New method ::_resizeMatrix() to be called when the associated Cell
    is resized.
* Bug: In AutoHorizontal::getConstraints() and AutoVertical::getConstraints(),
    the *target* constraints where never merged.
* Change: In AutoHorizontal::getCells() and AutoVertical::getGCells(),
    now return a boolean to tell if it was ok (must not encounter a NULL
    GCell while progessing from source to target).
* New: In Anabatic::Configuration and Anabatic:Session, create new methods:
     - getDHorizontalLayer()
     - getDhorizontalDepth()
     - getDHorizontalWidth()
     - getDHorizontalPitch()
     And so on for Vertical and Contact.
       They supply depth-independant informations about the H/V layers to
     build the initial detailed routing.
        The AutoSegment::create() methods have been modificated accordingly.
* New: In Anabatic::GCell, add two new types "StdCellRow" and "ChannelRow"
    for implementing 2-Metal blocks.
      Rename the GCell::setXY() method in GCell::setSouthWestCorner(),
    move the contents of GCell::updateContactsPosition() into it and
    suppress it.
      WARNING: In case of a GCell shrink this may cause problems. But for
    now we only expand...
      New method GCell::getNetCount() to count the number of Net going
    though the GCell.
* Change: In Anabatic::Edge, add specific support for capacity of 2-Metal
    routing channels.
* Change: In Anabatic::Dijsktra various methods, replace the "gcell->isMatrix()"
    calls by "not gcell->isAnalog()". Add more check so that the methods
    pertaining to the analog routing (GRData) are not called in digital
    mode.
* New: In Anabatic::Dijkstra::materialize(), add support for 2-Metal specific
    cases. That is, always break in case of vertical pass-through or
    U-turn. The global routing must always be broken in H-Channel.
* New: In Anabatic::GCell & Anabatic::Edge, make use of the Session mechanism
    to ensure the revalidation. The "::revalidate()" method is then moved
    as "::materialize()" (overload of Go) and "::_invalidate()" becomes
    "::invalidate()"
* Change: In LoadGlobalRouting, cosmetic rename of SortHkByX in SortHookByX.
* New: In GCellTopology, added support for building 2-Metal topologies.
    * ForkStack is now an object attribute as many methods do need it.
    * To push segments/hook on the stack, a new method "push()" is
      available. Perform NULL and fromHook checking. Can also setup
      _southWestContact or _northEastContact if it is the "from" edge.
    * N/S/E/W edges are now vector as in digital channel mode there
      can be more than one.
    * Added build topological build methods:
      - doRp_2m_Access() RoutingPad stem access.
      - _do_2m_1G_1M1() North or south access.
      - _do_2m_2G_1M1() North AND south access.
      - _do_2m_xG() H-Channel routing.
* New: In Anabatic::Matrix, new ::resize() function, as Cell can be resizeds.
* New: In Anabatic::Vertex, new static method ::getValueString() for a
    friendly text rendering.
* New: In Katana::DigitalDistance, support for channel routing.
* Change: In KatanaEngine::digitalSetup() and KatanaEngine::runGlobalrouter(),
    for channel routing, calls to setupPowerRails() and
    protectRoutingPads() must be called after the core block has
    been fully dimensionned.
      ::runGlobalrouter() contains the code tasked with the grid creation
    and channel sizing.
* New: In KatanaEngine: Added support for core block, for 2-Metal routing.
    May be expanded for over-the-cell routing in the future.
      Added methods :
      - isDigitalMode()
      - isAnalogMode()
      - isMixedMode()
      - isChannelMode()
      - getBlock() / addBlock()
      - setupChannelMode()
      - createChannel()
* New: In Katana, new class Block to manage core blocks and perform
    channel routing.
* New: In Katana::Session, new convenience method "isOpen()".
2017-08-18 23:56:23 +02:00
EricLaoGitHub e1724ca785 Dijkstra and Net can manage different wire width.
in Dijkstra.cpp/.h, Edge.cpp/.h, GCell.cpp/.h:
*Change: GlobalRouting wires can have different wires' width. One Net's wires has one width only.

in NetRoutingProperty.cpp/.h, PyNetRoutingProperty.cpp/.h:
*New: A wire width parameter is added. It can be set through python script.
2017-06-14 10:46:54 +02:00
Jean-Paul Chaput db8e51524f Deterministic destruction of Components.
* Change: In Hurrican::Component::_preDestroy(), the cascaded destruction
    of slaves Components and subsequent ring merge and Rubber creation
    was using set<> sorted on pointer values. This was making the order
    of destruction of the slaves components non-deterministic. Now the
    sets are sorted according to their id (see Entity).
* Change: In Hurricane::SharedProperty, the _ownerSet is now a vector<>
    instead of a set<>. This will slow the search process, but hopefully
    this is needed only during construction/destruction of a Property
    so the slow down shouldn't be too much.
      This has also an impact on Hurricane::Relation.
2017-05-03 18:09:51 +02:00
Jean-Paul Chaput ce00b37cbf Enable the display of GCells as a density map (and not boundaries).
* Bug: In Anabatic::RawGCellsUnder, *again*, the north and east borders
    of the whole area *are* includeds (shut up disgraceful warning).
* New: In Anabatic::GCell, add a display mode to select between boundary
    display (for analogic) and density display (for numeric).
* Bug: In KatanaEngine::runGlobalRouter(), do not check if an Edge cannot
    be desatured when the vector or overloaded Edges is empty.
    (one less disgraceful warning)
* New: In GraphicKatanaEngine::drawGCell(), support for drawing the GCells
    in density mode. Use the fire scale and the MaxDensity mode.
      Setup the GCell drawing mode in GraphicKatanaEngine::initGCell().
* Change: In GraphicKatanaEngine::drawEdge(), adjust the various thresholds
    for showing the Edge and its label.
* New: In CRL Core, adds "anabatic.gcell.displayMode" to the set of Anabatic
    parameters.
      Adjust the showing threshold for GCells in "display.conf" so when the
    zoom level is low, we still can see the density map.
2016-09-10 18:49:48 +02:00
Jean-Paul Chaput 248704c61c Anabatic transient commit 17. Ripup long wires only. 2016-08-11 11:05:11 +02:00
Jean-Paul Chaput d29cbe976a Anabatic transient commit 16. First implementation of edge's historical cost. 2016-08-10 23:48:06 +02:00
Jean-Paul Chaput 84dad2249e Anabatic transient commit 14. Change model for long wires.
* Change: In Anabatic:
    - Long wires, going straight accross multiple GCells were splitted
      into a long sequence of segment+contact, one for each gone-through
      GCell. It was memory-consuming and algorithmically inefficient.
      Now there is only one straight wire.
        As a consequence, Edges now store the list of all segments
      going through them. That way we do not need to load a Net into
      Dijkstra before riping up some of it's segment. The ripup mechanims
      can now be implemented right at AnabaticEngine level, without
      dependencies over Dijkstra. Note that long wires are automatically
      broken in two if we need to attach a new branch on it (breakAt()).
      And fused back into one if a branch is removed (unify()).
2016-07-30 12:15:49 +02:00
Jean-Paul Chaput 9808fb12b2 Solve the template lookup problem in tstream.
* Bug: In Hurricane, in tstream (Commons.h), in the *template* overload of
    operator<<(), do not use the operator<<() of ostream as it will be
    looked up in "stage 1" (template definition) and so will miss all the
    overloads added later and built over getString<>(). Instead, make use
    of getString<>(), which, as another template will be looked up in
    "stage 2" (template instanciation) and at that point will have all the
    needed template specialisation of getString<>().
      We also need to define new stream manipulators to be able to create
    a matching template overload not dependant from the implementation.
    To avoid name clashes, we prefix a 't'. For now, only 'tsetw()' is
    refined.
      As a side effect, we cannot directly print bit-fields into the stream,
    we must go through an intermediate variable (happens once in AutoContact).
2016-07-19 16:02:55 +02:00
Jean-Paul Chaput 9114766129 Anabatic transient commit 11. Merge Katabatic into Anabatic.
* New: In Anabatic, merge in the Katabatic tool. The merge is not complete
    yet. Only basic capabilities have been moved.
2016-07-18 14:48:37 +02:00
Jean-Paul Chaput abf58190eb Anabatic transient commit 10. Ripup & reroute support in Dijsktra.
* New: In Anabatic:
    - In AnabaticEngine, keep track of overflowed edges.
    - In AnabaticEngine, getNetsFromedge() to lookup all nets going
      through an Edge.
    - In Configuration, read the Kite "reserved local" parameter to
      decrease the Edge capacity (it's a guessing of the cost of the
      local routing).
    - In Edge, add an attribute to know if there is an associated
      segment of the current net (set by Dijkstra::_traceback()).
      Transparently manage the overflowed edges.
    - In GCell_Edges, correct a filtering bug when not all sides are
      selecteds.
    - New GCell::getEdgeTo() to find the edge between two adjacent
      GCells.
    - New GCell::unrefContact() to automatically removes global contacts
      no longer used by any global segments (used during the ripup
      step).
    - In Dijkstra::load(), now able to "reload" and already partially
      or completly routed net (look for Contact of "gcontact" layer
      and their attached segments).
    - In Dijkstra, keep the last net loaded until the next one is.
      Put the cleanup operations in an isolated function "_cleanup()".
    - In Dijkstra::_selectFirstsource() and run(), load first source
      component made of multiple vertexes.
    - In Dijkstra::_trackback(), link the Net segments to the Edges.
    - New Dijkstra::ripup(), Dijkstra::_propagateRipup() to perform
      the ripup of one edge of a Net (must be loaded in Dijkstra first).
      Dijkstra::_tagConnecteds() setup the connexId of a set of Vertexes
    - that are connecteds through edges *with* segments.
    - In GraphicAnabaticengine & GlobalRoute.cpp, embryo of a global
      routing tool with ripup & reroute.
2016-06-26 14:32:32 +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 d9e124797b Anabatic transient commit 6 "Somatoline, ca marche!".
* Bug: In Anabatic:
    - In Dijktra::load(), do not create Contact while looping over the Net's
      components (for RoutingPads).
    - In Dijkstra::propagate(), reset the connexId of reached Vertexes
      on updating the stamp to avoid using connexId from previous runs.
        Push the vertexes on the queue while backtracking (with a distance
      of 0.0). Do not reset the "_from" as we need it in Dijkstra::toWires()
      to know how were the routing is.
    - In Edge::getDistance(), convert to float more early so the normalisation
      do not always end up in zero.
    - In GCell::_add(), when the axis of the new edge is equal to one already
      on the given side, adds it *after* the existing edge and not before.
      (to be coherent with the way GCells are split in two)
    - In GCell::hcut() and GCell::vcut(), create an Edge if is equal to X/Y Max,
      *but* the new chunk is flat. The new chunk is then expected to expand
      "below".
    - In GraphicsAnabaticEngine::drawGCell(), display the id of the GCell in
      a small box at the center of it's bounding box. Nothing displayed for
      flat GCells, to avoid cluttering.
2016-06-05 18:38:09 +02:00
Jean-Paul Chaput fac3474d55 Anabatic transient commit 4.
* Bug: In Anabatic:
    - In Edge, materialize was done before the Edge get it's final position.
      Must be invalidated afterwards for the UpdateSession to put him in
      the correct QuadTree.
    - Functional (debugged) Dijkstra skeleton.
2016-05-30 18:52:38 +02:00
Jean-Paul Chaput 1f4d6b7e83 Anabatic transient commit 4.
* New: In Anabatic:
    - A Dijkstra skeleton, not debugged yet.
2016-05-30 11:30:29 +02:00
Jean-Paul Chaput 6ef5819310 In getCapacity(), check for empty intervals. 2016-05-26 18:54:57 +02:00
Jean-Paul Chaput a4655aec8b Anabatic transient commit 2.
* Change: In Hurricane, in CellWidget, enable the drawing of ExtensionGos
    according to the the threshold paramaters (as layers do).
* Change: In CRL Core, provide DrawingStyle for Anabatic::GCell &
    Anabatic::Edge. Use the exact name of the ExtensionGo.
      In kite.conf, add settings for the size of an edge as the optimal
    size may change between analog & digital designs.
* New: In Anabatic:
    - Support for fast position query using a matrix.
    - Computation of the Edge capacity, based on the routing gauge parameters.
    - Graphic display of the edges capacity. Added configuration
      parameters to size the bounding box of an Edge.
* Bug: In Anabatic:
    - GCell::_moveEdges was both too complex (some cases never arise the
      way we divide GCells) and bugged.
2016-05-26 13:56:16 +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