Commit Graph

3022 Commits

Author SHA1 Message Date
Jean-Paul Chaput a4db64014c Update the name of the virtualenv to ignore in git. 2023-08-03 17:17:43 +02:00
Jean-Paul Chaput 49a37addae Add the ability to specify the H-track position of a H-Tree.
Formerly, the H-Track could be shifted *relative* to the position of
the center of the RoutingPad. Which may become fragile in case of a
change in the standard cell library. So we create a new feature allowing
to specify the H-track as an offset *from the bottom of the slice*.
Two offset can be specified:
  * spares.htreeOffsetDriver : for the main H part, connected to the
      driver.
  * spares.htreeOffsetSink : for the small parts connecting to every
      fours sinks of the tree.
  This to avoid those two to overlap. The sink of the "N" stage with
the driver of the "N+1" stage (so input & ouput of the same buffer).
2023-08-03 17:13:37 +02:00
Jean-Paul Chaput f29e65d908
Build doc pelican (#11)
* Switch back to a generated version of the documentation.

Dependencies for the documentation generation have been added to poetry.
As Pelican is a Python tool, that makes sense.

Note to myself: To generate the doc with ccb.py we *need* to be inside
                the Python virtual env generated by Poetry. Instead of
		relying of a default one, provide one of our own
		(coriolis-venv) and make poetry run in it.

* Top builder.py now generated the doc.

* Forgot to remove generated PDFs in the documentation.

* A bit of cleanup on the README.rst

* Forgot the logo. Try to use code-block directive in README.

* Still typo in the logo path.

* One more trial at setting the image position.

* OK. That's enough for the logo.

* Problems with code-block.

* Voila!

* Build inside a venv and use poetry in the top level Makefile.

* Remove doxygen generated docs.

* More doc cleanup in oroshi.
2023-08-01 15:43:21 +02:00
Rob Taylor ae084b7431
Merge pull request #10 from lip6/small-fixes 2023-07-29 12:23:33 +01:00
Jean-Paul Chaput a11e2a4a7d Move the creation of I/O spacer cells from chip.pads to core2chip.
* Change: In cumulus.plugins.core2chip.CoreToChip, add new methods:
      * hasCornerCell()   (return False)
      * hasFillerCells()  (return False)
      * getCornerCell()   (raise NotImplementedError)
      * createSpacer()    (raise NotImplementedError)
      * createCorner()    (raise NotImplementedError)
    Those methods needs to be overloaded in derived classes when I/O spacers
  and corner cells are supplied.
    In IoPad, add a NON_CONNECT case for dummy pad that are not connected.
* New: In cumulus.plugins.chip.pads, delegate spacer & corner creation to
    the coreToChip concrete class.
* New: In cumulus.plugins.block.configuration.IoPadConf, add support for
    non-connected (dummy) pads.
2023-07-28 18:50:58 +02:00
Jean-Paul Chaput 0bd39fa839 In cumulus, integrate CoreToChip inside Chip.
Formerly, CoreToChip was seen as building the top-level netlist of the
chip only. But, when using special spacer pads, we need to have access
to that specific information from inside the Chip pads builder.
So we now move CoreToChip as an internal part of Chip. The right
CoreToChip to use (techno dependant) must be given as a configuration
parameter:

  "conf.coreToChipClass"

It is the class, not an object that must be suplied.
2023-07-28 10:45:07 +02:00
Jean-Paul Chaput a8d0371990 In RoutingPad, prefer Segment over Pad at constant area.
This case may arise with cells created from GDS+LEF.
2023-07-28 10:45:07 +02:00
Jean-Paul Chaput c5827877f6 Fix: the position of a Pad is it's center. Not (0,0) ... 2023-07-28 10:45:07 +02:00
Jean-Paul Chaput 9c7770806c Change of loading order in LefImport, now GDS first then LEF.
* Bug: In LefImport::_macroCbk(), the GDS file must be loaded *before*
    we start putting nets & components from the LEF file. The GDS parser
    must find an blank slate and not try to modifies nets already
    created by LEF.
      This way, we really can modify the GDS layout to suit the LEF
    statements.
      Note that we may end up with two set of terminal exactly overlapping,
    a Pad from the GDS and a Segment from LEF.
2023-07-28 10:45:07 +02:00
Jean-Paul Chaput bec7bba938 Prevent the GdsParser to create rubbers.
* Change: In GdsParser::xyToPath(), we were creating articulated layout
    segments over contacts using the "all_nets_merged_in_gds" common net.
    But some segment may later be promoted to interface, that means
    deleting the previous one and re-creating it with the right
    external net.
      The deletion was automatically creating a rubber between it's two
    Contact anchors. And we there is no way to get rid of it (other than
    also removing the Contacts).
2023-07-28 10:45:07 +02:00
Robert Taylor c552d36a55 Fix Matrix link and add Github Discussions 2023-07-27 22:51:34 +02:00
Rob Taylor 4df8421016
Merge pull request #5 from lip6/status-badge
Add wheel build status badge
2023-07-23 15:47:14 +01:00
Robert Taylor a7fda1b46a Simplify release naming 2023-07-23 01:33:36 +00:00
Robert Taylor a38bea28ac Add wheel build status badge 2023-07-23 00:12:42 +00:00
Jean-Paul Chaput 7768a32395 Merge branch 'main' of github.com:lip6/coriolis 2023-07-22 19:13:00 +02:00
Jean-Paul Chaput a70382d9f9 We have a semantic issue with the blockages layers. Two meanings are possibles:
1. They represent an exact area where no metal should be put, and that area
   has been computed by the standard cell abstractor and *do not* need to be
   expanded. This is the forbidden area, period!

2. They match the shapes of the components inside the standard cell (say an
   horizontal segment). In that case, the blockage *must be expanded* by the minimal
   spacing rules as any fixed wiring already present.

It is not clear to me what is the accepted norm. This commit stays on semantic [1].

The semantic is implemented in PowerRailsPlanes::Rail::doLayout().
2023-07-22 18:56:14 +02:00
Jean-Paul Chaput 96f41776a8 In GdsStream & LefImport, thorough verification that coordinates are on foundry grid. 2023-07-22 16:40:00 +02:00
Jean-Paul Chaput e470ca8375 In RoutingLayerGauge::getTrackIndex() display position as physical unit. 2023-07-22 16:34:41 +02:00
Jean-Paul Chaput a270243bbc
Merge pull request #4 from lip6/fix-matrix-link
Fix link to matrix room
2023-07-21 23:49:07 +02:00
Robert Taylor 0110dcee23 Fix link to matrix room 2023-07-21 20:42:10 +00:00
Jean-Paul Chaput 3cddf2f3ae More bug fix in cumulus trackAvoid. 2023-07-19 22:04:58 +02:00
Jean-Paul Chaput 1e2c88fad8 In Katana, do not try to repair tracks that are of default type. 2023-07-19 21:57:16 +02:00
Jean-Paul Chaput 01b0489f58 Various bug fixes in the cumulus trackAvoid system. 2023-07-19 21:56:13 +02:00
Jean-Paul Chaput 6b1f57d7f1
Merge pull request #3 from ChipFlow/github-me-harder
Set up parallellised and cached builds for python wheels
2023-07-19 16:48:34 +02:00
Jean-Paul Chaput 8a45ed1e9e Merge branch 'master' of github.com:lip6/coriolis 2023-07-19 16:30:01 +02:00
Jean-Paul Chaput a14a96f9ed Allow the Y position of the H-Tree horizontal branch to be set.
* Change: In cumulus.block.configuration and cumulus.block.htree, two new
    configuration parameters allow to specify the offset of the horizontal
    branch of the H-Tree manually:
        cfg.spares.htreeRootOffset (first level of the tree)
        cfg.spares.htreeOffset     (subsequent levels)
      The offset is given in number of tracks.
2023-07-19 16:15:22 +02:00
Jean-Paul Chaput d819d46031 Allow weak default values in helpers.overlay.CachedParameter.
* New: In helpers.overlay.CfgDefault, new class that can be used to give
    a default value to a cached configuration parameter. The default
    value will be used as a last ditch fallback and used *only if* no
    default value can be fetched from the C++ database (disk).
2023-07-19 16:10:27 +02:00
Jean-Paul Chaput 892661ca2a Support of the FOREIGN directive in LEF files (using GDS view).
* New: In LefImport, add setGdsForeignDirectory() to point out from where
    to load the extra GDS file in case a FOREIGN directory is present
    in MACRO.
      Also add support for merging the supply nets. It may happens that
    the supply nets have different names in the GDS ("vdd!") and LEF files
    ("pvdd"), in that case, the LEF name supersede the GDS one.
      The GDS file will be loaded *first* then completed by the LEF contents.
      Blockage in the GDS file are *not* loaded.
* Change: In GdsParser, perform an early recognition of supply nets. For now
    it's hardwired to names starting by "vdd" and "gnd", but should be
    parametrized in the future.
      Needed for the LefImport to merge, if needed, the power supplies.
      In GdsStream::xyToComponent(), skip the blockage if required.
2023-07-19 16:06:43 +02:00
Gabriel Gouvine 68f56c1361
Merge pull request #2 from ChipFlow/robtaylor/room-link
Add chat room link
2023-07-18 11:22:42 +02:00
Rob Taylor c9cbf87c10
Merge branch 'master' into robtaylor/room-link 2023-07-17 18:57:44 +01:00
Jean-Paul Chaput d5f25940a4 Merge branch 'master' of github.com:lip6/coriolis 2023-07-17 15:22:32 +02:00
Jean-Paul Chaput 46d81c5cb0 Change policy for vertical track protection of the H-Tree.
Formerly we were using Placement::Area::TrackAvoid() to shift cells terminals
out of the way of the reserved vertical track. With double height cells,
this is coming more complex and due to heavy tracks uses in some cells,
the shift required may becomes too great. Instead, we place filler cells
just underneath the reserved track to prevent their usage. This is a
supplemental constraint on the router, but the new version manage it
correctly.

* New: In cumulus/block.spares.Spares.trackAvoid() to place filler cells
    under a given vertical area.
2023-07-17 15:12:56 +02:00
Jean-Paul Chaput 6401f0d455 In SubSlice::getUsedVTRacks() only consider obstacles in the first V gauge. 2023-07-17 15:06:51 +02:00
Jean-Paul Chaput bf5d4e881d More aggressive detection of supply pin in LefImport.
* Change: In LefImport::_pinCbk(), if a pin has "USE POWER" or "USE GROUND"
    make it a global signal (previously flagged only "!" appended to name).
* Change: In LefImport::_pinStdPostProcess() do not try to find "on grid"
    components for supply nets, just make all their components externals.
2023-07-17 15:04:12 +02:00
Jean-Paul Chaput 32a4b426b9
Merge pull request #1 from ChipFlow/robtaylor/update-readme
Update repo locations for github move
2023-07-17 11:05:20 +02:00
Robert Taylor c1e94c5d98 build-verbosity=2 gave warnings with build frontend, remove 2023-07-16 19:45:34 +00:00
Robert Taylor 9982f21f56 Update repo references in code to point to github 2023-07-16 19:24:53 +00:00
Robert Taylor fe37bb1552 Update readme for new project location 2023-07-16 19:24:53 +00:00
Robert Taylor 6c3361632c Parallelise build
Currently just fixed at -j4
2023-07-16 06:13:46 +00:00
Robert Taylor edafd1d200 Revert "Fix missing libraries problems (seen on Cygwin)."
This reverts commit 881e97bbd3.
2023-07-16 06:13:46 +00:00
Robert Taylor c0c0e873c2 Only use Development.Module for python dependency, necessary for manylinux build 2023-07-16 06:13:45 +00:00
Robert Taylor b482abc34d Add missing dependencies to cibuildwheel environment
liblemon and eigen3
2023-07-16 06:13:44 +00:00
Robert Taylor 6499f00020 Update for new poetry builder interface 2023-07-16 06:11:54 +00:00
Robert Taylor ab99ab1099 Add cache key 2023-07-16 06:11:53 +00:00
Robert Taylor d77950de65 Use ccache to speed up build 2023-07-16 06:11:43 +00:00
Robert Taylor abf08d443d Set up parallel github CI based off Numpy's actions 2023-07-16 05:50:05 +00:00
Jean-Paul Chaput d0f0cdc47d In cumulus/chip.pads, now support non-square corner I/O pads. 2023-07-15 21:26:13 +02:00
Jean-Paul Chaput 9d98c9aafd Allow Rectilinear to be tagged as external components in GdsParser. 2023-07-15 21:24:38 +02:00
Jean-Paul Chaput 77463c4803 New Rectilinear::getNearestHSide() function.
* New: In Rectilinear::getNearestHSide(), returns the *horizontal* side
    of a polygon which is closest to a given Y coordinate.
      Unused for now.
2023-07-15 21:23:42 +02:00
Robert Taylor fc3def2df9 Add link to matrix room 2023-07-15 00:24:42 +00:00