Commit Graph

219 Commits

Author SHA1 Message Date
Jean-Paul Chaput 6bc2c1b94d Small correction after merge with E. Lao latest commit.
Conflicts:
	anabatic/src/Dijkstra.cpp
	anabatic/src/anabatic/Dijkstra.h
	anabatic/src/anabatic/GCell.h
2016-06-26 14:55:34 +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
EricLaoGitHub d16d6d1988 - (Remove) Restrictions rules for analog devices are now set in hurricaneAMS 2016-06-22 13:36:17 +02:00
EricLaoGitHub da423ab308 in CMakeLists:
- (Add) HurricaneAMS includes

in Dijkstra:
- (Add+Modify) Handle restriction rules in Vertex for analog devices

in GCell:
- (Add) Check neighboring cells (North/South/East/West)
2016-06-20 18:36:00 +02:00
EricLaoGitHub fbfeb2eec1 Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic
Conflicts:
	anabatic/src/anabatic/Dijkstra.h
2016-06-17 17:50:06 +02:00
EricLaoGitHub 3038d09b27 Another temporary commit to merge with last version. 2016-06-17 17:47:48 +02:00
Jean-Paul Chaput 379effd92c Anabatic transient commit 9. Dijkstra::_traceback() replaces _toWires().
* Change: In Anabatic:
    - In Dijkstra, replace _toWires() by _trackback() which is called
      immediatly on reaching a target.
    - In Constants & GCell, added flags for typing the GCells. We now
      have:
        * DeviceGCell, for analogic devices.
        * ChannelGCell, for resizable routing channels.
        * StrutGCell, for fixed spaces in analog designs.
        * MatrixGCell, for square tile in digital designs.
2016-06-17 17:45:32 +02:00
EricLaoGitHub c196e42fdf Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic
Conflicts:
	anabatic/src/anabatic/Dijkstra.h
2016-06-17 16:32:25 +02:00
EricLaoGitHub 8016157500 Temporary commit to pull and merge last commit. 2016-06-17 16:26:27 +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 c5a9e0b617 Anabatic transient commit 7. More Dijkstra bugs correcteds.
* Bug: In Anabatic:
    - Activate the searchArea to limit the area explored by the Dijkstra.
      Uses the bounding boxes of the vertexes/gcells instead of the ones
      the RoutingPads.
    - Always detach contacts from the rings in load(), even if the vertex
      is already marked as target.
    - On reaching a target (non-negative connexId), do not forget to update
      the distance to source.
    - In Edges locator, added support for side selection (needed by the
      monotonic feature).
* New: In Anabatic:
    - Hide the atomic Dijkstra methods (made private).
    - Implementation of the monotonic mode in Dijkstra (for bipoints only).
    - Added a separate function for distance computation between two vertexes,
      now take account of the VIAs costs.
2016-06-10 18:27:06 +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 aa20813342 Anabatic transient commit 5.
* Bug: In Anabatic:
    - In Dijkstra/Vertex, use the new Observer for fast access from the GCells.
    - In Dijktra::propagate() loop detection.
    - In Dijkstra, reset the "_from" of vertexes between two propagates on
      the same Net (otherwise: loops...).
    - In Matrix, there must be two different way of calculating an index from
      a position. One for the min, which is rounded to superior. And one for
      the max which is rounded to inferior.
    - In Matrix::updateArea(), checks for invalid indexes.
2016-06-03 17:29:22 +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 d7bd8a4bf4 Anabatic transient commit 3.
* New: In Anabatic:
    - AnabaticEngine now have a valid destructor and a "reset()" method.
2016-05-26 18:30:03 +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