Commit Graph

621 Commits

Author SHA1 Message Date
Jean-Paul Chaput 0ef3f64f5a Rename tabs.css into custom_tabs.css to avoid doxygen overwrite. 2023-11-23 12:38:04 +01:00
Rob Taylor 6f3e6ca6d3 Add meson build infrastructure for doxygen based content 2023-11-18 17:31:17 +00:00
Rob Taylor fc93118fd3 Update doxyfiles to latest doxygen 2023-11-18 17:31:17 +00:00
lanserge 500d4446c2
Filter out redundant plugs that have no connection inside cell while export Verilog netlist. (#84)
Co-authored-by: Serge Rabyking <serge.rabyking@chipflow.io>
2023-11-10 13:56:58 +00:00
lanserge 44ce8dd162
Added Verilog driver for netlist export (#80)
CRL.Verilog.save(cell, 0) -> exports cell into Verilog netlist file

Co-authored-by: Serge Rabyking <serge.rabyking@chipflow.io>
2023-11-02 14:09:33 +00:00
Jean-Paul Chaput 2ffbdbf3eb In BlockConf.useHTree(), must set the useClockTree flag (for chip mode). 2023-10-20 10:52:58 +02:00
Jean-Paul Chaput c4f65be096 Add a prefix to GDS sub-cell isolated in a "per cell" library.
The GDS file write all the cell names (SREF) in one namespace, so cells
with identical names, coming from different libraries may clash. When
a GDS is read *and* contains sub-cell, we isolate them in a sub-library,
but we must *also* give the cells in them unique names, we prefix by
the library name (which in turn is the top cell name).
2023-10-20 10:52:58 +02:00
Jean-Paul Chaput a665a1bcfc The upper routing layer in gf180mcu is Metal5, not MetalTop (power). 2023-10-20 10:52:58 +02:00
Rob Taylor 9f48884d10 Enable using lefdef 2023-10-18 11:55:43 +01:00
Jean-Paul Chaput f60739a8e0 Move back PyErrorWidget & PyCellViewer into viewer.
Script was needlessly including PyCellViewer.h it seems. Removed it.
This reverts commit 6963a0baa6a19f538e822d4b254b91123dd1dc66.
2023-10-10 00:58:27 +01:00
Jean-Paul Chaput 1693241302 Fix linking/compile problems in the meson configuration.
* The Hurricane python module was not compiled at all. The name of
  Python module wrappers is a bit inconsistent:
     isobar   -->  Hurricane
     crlcore  -->  CRL
     anabatic -->  Anabatic
     katana   -->  Katana
* Use "py_mod_deps" and not only "py_deps" so the __PYTHON_MODULE__
  flag is used for py.extension_module().
* In cumulus, the "cumulus" directory is not used for the installation
  in site-packages/coriolis/.
* In designflow/pnr.py, temporarily disable Tramontana & Tutorial,
  until they are ported to meson.
2023-10-10 00:58:27 +01:00
Jean-Paul Chaput 366855c9bd Move ErrorWidget & CellViewer from Viewer to Hurricane module (complete). 2023-10-10 00:58:27 +01:00
Rob Taylor 710117f566 Add support for building with Meson
This is quite a large change that adds meson build files and tweaks
wheel building to use meson and meson-python
2023-10-06 16:50:35 +01:00
Rob Taylor 0dbc9cba9e Move Script, PyErrorWidget and PyCellViewer into isobar to match namespace and resolve dependency order 2023-10-06 16:50:35 +01:00
Rob Taylor 2c5493c90b Remove etc directory usage in crlcore 2023-10-06 16:50:35 +01:00
Robert Taylor c481eb77bf Make sure we know CORIOLIS_TOP in System ctor 2023-10-06 16:50:35 +01:00
Rob Taylor a032bdd9ee Convert PyCRL to multiphase initialisation, fetch the module location, and setCORIOLIS_TOP 2023-10-06 16:50:35 +01:00
Rob Taylor d7652a7ebc Reinstate coriolis_top system path 2023-10-06 16:50:35 +01:00
Rob Taylor d373afeffd Remove all usage of etc/SYS_CONF_PATH and any assumptions about the installation location 2023-10-06 16:50:35 +01:00
Jean-Paul Chaput 9274c21c14 Support for gf180mcu native I/O pads.
* Bug: In CRL/technos.node180.gf180mcu_c4m.iolib.py, remove the VDD and
    VSS ring terminals in the pad as only *some* of the have it.
    Assume that it is a bug from GF. The power rail will still be ok
    as it connect by abutment (with the filler & other I/O pads).
* New: In cumulus.plugins.block.configuration.py, added support for
    iterable I/O pad specifications in ioPads argument.
* New: In cumulus.plugins.core2chip.core2chip.py, add support for
    any number of control signals on I/O pads. Not fully implemented
    yet, as we only allow to hard-wire them either to one or zero.
      Raise an error if _connect() fails to find a master net, so
    we don't fail strangely later...
2023-09-25 23:50:20 +02:00
Jean-Paul Chaput 8604f4a26d Fix, again, the extensions of PATHTYPE 4 in GdsParser.
Even when we were creating Contacts of null width or height, they where
bumped to the minimal size by the constructor, hence bits sticking out
at the end with Gds PATHTYPE 4. Now, allow null size for non-composite
(which contains a cut) and non-cut Contacts.

* Fix: In GdsParser::readStructure(), always use the bounding box as
    abutment box if the later is empty (case of small sub-components).
    This was making the sub-component seemingly diseapear in the
    viewer...
* Fix: In GdsParser::xyToPath(), slight change in xadjust & yadjust.
* Change: In Contact::create(), force the contact width and height to
    the minimal size *only* if it's a composite layer *or* a basic layer
    of "cut" material.
2023-09-09 12:46:42 +02:00
Jean-Paul Chaput cebfd60f16 Fix managment of layer 0 as bounding box in GdsParser.
* Bug: In GdsParser::readStructure(), the Gds::Layer_0_IsBoundary flag
    was not taken into account. The abutment box was always forced to
    the bounding box, resulting in incorrect cell size (and placement).
2023-09-08 22:01:33 +02:00
Jean-Paul Chaput 06a7f82cc7 In GdsParser::xyToPath(), bad management of extension for PATHTYPE 4. 2023-09-02 23:00:01 +02:00
Jean-Paul Chaput ab0ce5562e Fix bug in LefImport that was preventing loading the GDS file (FOREIGN). 2023-09-02 22:57:04 +02:00
Jean-Paul Chaput ef57ed9da1 Add support for GF180MCU, borrowed from Chips4Makers.
Original source:
    https://gitlab.com/Chips4Makers/c4m-pdk-gf180mcu.git
Duplicated because I needed to do some patches and combine it with
the vendor I/O pads.
2023-08-31 16:14:08 +02:00
Jean-Paul Chaput c21afeef8b Better handling of GDS sub-models, now put into separate library.
In order to better handle colliding cell names coming from multiple
GDS files, now, if a topCell is defined, create a sub-library with
the name of that top cell and put any other model from *that* GDS
file into it. This way, only the top cell will be shown in the
library and sub-cells with common names will be separateds.
Work needed for loading GF180MCU I/O pads.

* New: In Gds::setTopCellname(), specify the name of the top cell
    we specifically wants to load from the GDS file.
* New: In GdsStream::getCell(), function to find/create a Cell in
    the current library and, if any, the "top cell" dedicated
    sub-library.
* Change: In GdsStream::readTextBody(), if the layer material of
    the label is "other", do not create a Net with the name of
    the label. This should be a pure text label. Use the new
    Hurricane::Text Go for that.
      Compute the text box in a approximative way. Have to make
    it smarter in the future.
* Change: In LefImport::_macroForeignCbk(), change of policy for
    loading associated GDS. First, we look if a cell with the
    right name exists, in which case we use it. If not, *only*
    then, do we try to load from GDS.
      This allows to load by ourselves, in a separate way the
    GDS. This is more flexible when there are naming issues.
* New: Hurricane::Text Go class, to display text label without the
    need of a Net.
* New: In Hurricane::CellWidget, add support to display
    Hurricane::Text. Add a new mode to drawDisplayText() : FillBox
    so the text is resized to exactly fill the box it is in
    (in width).
2023-08-31 16:12:56 +02:00
Jean-Paul Chaput 826bc0dd2e Do not try to install the doc when not generated. 2023-08-04 15:37:08 +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
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
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 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
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 9d98c9aafd Allow Rectilinear to be tagged as external components in GdsParser. 2023-07-15 21:24:38 +02:00
Jean-Paul Chaput 947026cced Add technology description for the new LSxLib symbolic layout. 2023-07-14 12:33:03 +02:00
Jean-Paul Chaput 3243b12abb Try VH topologies for G180MCU. Not working either... 2023-07-03 20:02:33 +02:00
Jean-Paul Chaput 73265c2d68 Quick and DRC unclean hack to manage rectilinear in LefImport. 2023-07-03 20:00:58 +02:00
Jean-Paul Chaput 30b92ff33a Add a flag througout all the build system to manage manylinux (PyPI).
* New: In boostrap/FindBootstrap.cmake, add a macro setup_qt() to
    share Python detection across the various tools.
      This macro takes into account the USE_MANYLINUX variable to
    slightly change the Python detection. On a "normal" system we
    look for "Development" (search for dynamic libraries) while under
    manylinux we look for "Development.Module"(static linking).
* Change: In bootstrap/ccb.py, add a new option --manylinux.
* Change: Cleanup in the various CMakeLists.txt to use setup_qt().
2023-07-03 19:54:01 +02:00
Jean-Paul Chaput 014ec72652 First merge of coloquinte2 & tramontana branches.
Needed to merge thoses two branches as I needed to to uses features
from each other to implement GF180MCU.
2023-06-25 18:11:18 +02:00
Jean-Paul Chaput 007677353f Using the right cell gauge name in GF180MCU techn o file. 2023-06-25 15:29:35 +02:00
Jean-Paul Chaput b8f15a2c8f Set patterns to account the DFF in cmos & cmos 45 technologies. 2023-06-25 11:51:31 +02:00
Jean-Paul Chaput 72b906cb68 Forgor configuartion files for GF180MCU. 2023-06-22 17:38:03 +02:00
Jean-Paul Chaput 04410f1cc2 Added support for GF180MCU, part 1.
* New: In LefImport::LefParser, add support for LEF Polygons that are
    translated into Hurricane Rectilinears.
* Change: In LefImport::setMergeLibrary(), the default behavior for the
    LEF parser is to create a new separate library under LEF/<lib_name>
    for each file. But if the various cells are put each one in it's own
    cell, this is suitable. So we can now set a library beforehand into
    which they will be all put.
* New: in CRL/technos.node180.gf180mcu, configuration files for the
    GF180MCU open PDK.
* New: in cumulus/designflow.technos, added a setupGF180MCU_GF() to
    initialize the GF PDK.
2023-06-22 14:13:19 +02:00
Gabriel Gouvine 6f793665c2 Remove uniform density option, replaced by densityVariation 2023-06-10 14:45:07 +02:00
Gabriel Gouvine 7f0ab625d2 New densityVariation option to replace uniformDensity 2023-06-10 14:35:55 +02:00
Gabriel Gouvine e497a4d48f Rename tabs in CGT 2023-06-10 13:41:41 +02:00
Gabriel Gouvine 052df5d1c8 Introduce a new parameter to handle uniform density 2023-06-10 13:29:56 +02:00