Commit Graph

60 Commits

Author SHA1 Message Date
EricLaoGitHub 44fa865b6c * Bug: Debug message indentation correction. 2016-11-17 17:31:36 +01:00
EricLaoGitHub 9d63612661 Debug correction:
* Bug: Indentation adjusted for debug print.
2016-11-09 12:20:55 +01:00
Jean-Paul Chaput dc46340d6a Redesigning access to analog terminals in devices.
* New: In Anabatic::AutoContact, added forceOnGrid() method to allow
    a AutoContactTerminal to be set (and fixed) outside it's constraint
    Box. Be aware that this may generate gaps in the routing.
      Stored using the UserNativeConstraints mechanism.
* New: In Anabatic::Session() new method getNearestgridpoint() to
    easily compute the nearest grid point from a position.
* Change: In Anabatic::AutoSegment::_revalidate(), use layer mask to
    compute the spin of the segment instead of the layers (more robust
    for analogic).
* New: In ::GCellTopology::doRp_Access() new method to create terminal
    contacts in _doDevice(). Issue more warnings and force the terminal
    to on grid (even if it create gaps). This a temporary hack.
2016-10-05 23:43:07 +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
EricLaoGitHub 5f25ba349f * Change: Dijkstra, GCell
Restriction on vertex are now correctly done.

* Change: Constants
  There is only one type of Strut.

* New: LoadGlobalRouting
  Detailed Routing can be performed for analog circuits.
  The router does not take into account analog constraints yet.
  Warnings on "metal2" should be corrected in the future.
  Types of GCell considered by the router are: Device, VChannel/HChannel and Strut.
  The analog circuit MUST be organized in a slicing structure.
2016-09-30 18:09:05 +02:00
EricLaoGitHub e5d423a61c Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic 2016-09-22 18:53:06 +02:00
EricLaoGitHub 38f2b43dc8 For merging purpose 2016-09-22 18:52:53 +02:00
Jean-Paul Chaput 6db4ae542b Correct bug in AutoHorizontal::getGCells() line probing.
* Bug: In Anabatic::AutoHorizontal::getGCells(), the y coordinate used
    to perform the line probing for neighboring GCells, cannot use the
    segment constraints because they are not correctly set this early.
    Instead we have to rely on the global router having put them in the
    correct position (i.e. at the center of the GCell side).
      The y position must also be epsilon-decreased if it is on the
    border of the nothernmost GCell.
      This apply to AutoVertical as well.
* Change: In Anabatic::GCellTopology CTOR, when counting the RoutingPads
    of a GCell, compare gauge layers using their masks instead of the
    Layer itself. This allow for Analogic layers to be recognizeds.
2016-09-22 16:59:24 +02:00
EricLaoGitHub afc3f7428a Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic 2016-09-22 14:44:27 +02:00
Jean-Paul Chaput 35c2e18f39 Implement AutoContact restriction using DbU instead of deltas (8 bits). 2016-09-22 14:16:53 +02:00
EricLaoGitHub 6e4bfc4952 Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic 2016-09-20 11:34:09 +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
EricLaoGitHub c51c9c6d6f Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic 2016-09-12 10:12:41 +02:00
EricLaoGitHub e7e13de525 Commit to merge:
- minor comments
2016-09-12 10:11:18 +02:00
Jean-Paul Chaput 5435ca1933 Added missing UpdateSession in Stratus & Plugins.
* Bug: In Cumulus & Stratus, now that creation of Hurricane objects must be
    enclosed in UpdateSession, has to adds them into Python code.
* Bug: In Anabatic & Katana, in the global routing stage suspend the timed
    bewteen ripup steps instead of resetting it.
2016-09-11 13:20:05 +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 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 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 cbb5e8781d In AutoSegment slackening, bad positioning of the perpandicular. 2016-08-28 19:09:07 +02:00
Jean-Paul Chaput 22bf92af2c Forgot to switch terminal flags when orienting AutoSegments (again!). 2016-08-28 16:12:05 +02:00
Jean-Paul Chaput ebc4a0cdbf Complete Python support.
* New: In PyAnabatic, export the various Engine constants.
* Change: In Katana, in TrackElement and derived classes, add a getSegment()
    method for easier access to the underlying Hurricane segment.
* New: In PyKatanaEngine, export the loadGlobalRouting method which was
    missing (for use by Unicorn/cgt).
2016-08-27 16:02:22 +02:00
Jean-Paul Chaput 0a488d16af Add not managed yet configuration 2G+1Pin M2 in GCellTopology.
* Change: In Anabatic::GCellTopology, take into account new topology
    2G+1Pin M2.
2016-08-27 16:01:05 +02:00
Jean-Paul Chaput c5f60dc3d8 Correct multiple backtrack from same connex components (pathological).
* Bug: In Dijkstra::_materialize(), in some special case a connex component
    can is reached by two (or more) vertexes. But of course it will be
    connected only through one, all others must be discarteds. The right
    one will have it's connex id set, all the others will stay to -1.
    So stop any backtrack when the first neighbor of a starting point
    has it's connex id *not* set.
2016-08-27 16:00:14 +02:00
Jean-Paul Chaput 44500a2329 Correct management of last E/N GCell boundaries.
* Bug: In Anabatic::GCell, new functions getConstraintUMax() to return the
    correct bounding box for the last north/east GCell. The GCells do not
    own their north/east edges, except for the last ones. Thoses functions
    must distinct from getUMax() because for them, the shrink is always
    applied. getConstraintBox() uses the "getConstraintUMax()" functions.
* Bug: In Anabatic::AutoContact, initialize the constraint box from the
    new GCell::getConstraintUMax(), to manage correctly the boundaries
    of the nothernmost & easternmost GCells. The problem was showing for
    pins on the north/east side of a circuit, the constraint
* Bug: In Anabatic::AutoContactHTee, Anabatic::AutoContactVTee and
    Anabatic::AutoContactTerminal forgot to call the _preCreate() function
    in the various create().
* Bug: In Matrix::getUnder(), if on the N/E boundary, decrease by one to
    be enclosed in it.
2016-08-27 15:59:12 +02:00
Jean-Paul Chaput 41b1b72b7c In Anabatic, forgot to update S/T invalidation in updateOrient(). 2016-08-18 21:54:33 +02:00
EricLaoGitHub 128f654ecf Matrix:
- Modified: Matrix is now correctly updated for irregular floorplans.
Dijkstra:
   - Modified: Source and Target contacts are now correctly chosen in _materialize.
2016-08-18 11:59:19 +02:00
EricLaoGitHub 6d0b26b956 Merge branch 'devel_anabatic' of ssh://bop.soc.lip6.fr/users/largo2/git/coriolis into devel_anabatic
Conflicts:
	anabatic/src/LoadGlobalRouting.cpp
2016-08-15 17:35:34 +02:00
EricLaoGitHub b0364957da Commit for pulling: Starting developing global routing for analog GCells 2016-08-15 17:23:26 +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
EricLaoGitHub fe73199b06 in Dijkstra:
- Bug: in _propagate, the GCell's bounding box intersection with the search area is now the way to check if the GCell should be treated.
2016-08-11 15:40:21 +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 e19893ac32 Fix divide by zero in GCells of null size.
* Bug: In Anabatic::GCell, when width and/or heigh is null, do not try to
    compute densities as it will trigger a divide by zero (and do not make
    much sense anyway).
* Change: In CRL Core, in cmos/alliance.conf, honor the ALLIANCE_TOP variable
    if it is found in the user's environement.
2016-08-06 18:19:22 +02:00
Jean-Paul Chaput db098db351 Anabatic transient commit 15. Introduce Net ordering for global route.
* New: In Anabatic:
    - In AnabaticEngine, create a new NetData information for storing
      the static ordering of nets (for the global routing). The order
      is the half perimeter of the search area divided by the number
      of RoutingPads. The order is static once it as been computed in
      the first place (even through ripup stages).
2016-07-31 18:43:44 +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 3265c3ddcb Anabatic transient commit 13. Pre-load wires, imported from Katabatic. 2016-07-22 00:14:17 +02:00
Jean-Paul Chaput 4ed2308e53 Anabatic transient commit 12. Create entries for non-matrix GCells. 2016-07-19 16:05:37 +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 18641c31c2 Merge branch 'devel_anabatic' of ssh://bop-t/users/largo2/git/coriolis into devel_anabatic
Conflicts:
	anabatic/src/GCell.cpp
	anabatic/src/anabatic/GCell.h

In GCell, attribute _contacts becomes _gcontacts.
Small indentation problems.
2016-07-18 14:57:58 +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
EricLaoGitHub 07935d2872 GCell.h:
- Add: set new xmin and ymin, update contact position accordingly.
2016-07-13 14:53:07 +02:00
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