Commit Graph

292 Commits

Author SHA1 Message Date
Jean-Paul Chaput 1ae4eb71e2 Fix the support if "iolib" I/O pad.
In CoreToChip, the "iolib" I/O pad library an alternative to the "cmos"
one. "cmos" uses the pxlib library while iolib uses a symbolic abstract
version of the C4M (real) I/O pad.
  The initialization is a bit split as the "cmos" library are part of
Alliance, while "iolib" is in alliance-check-toolkit. So "iolib" is
added at designflow.technos.setupCMOS().
  Setup additional configuration parameter directly in:
    core2chip.niolib.CoreToChip.__init__().
2023-09-28 00:18:10 +02: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 ad53372253 Fix stupid mistake in designflow.pnr.doTask(), not executing script. 2023-09-21 12:18:18 +02:00
Jean-Paul Chaput c8d98a304e Always check that coreAb fit into coronaAb while building a chip. 2023-09-20 20:15:24 +02:00
Jean-Paul Chaput 6fb0215742 Add the capability to pass a topName to the P&R script in designflow.pnr 2023-09-19 17:51:06 +02:00
Jean-Paul Chaput 8f69fa668d More trials on SystemVerilog to Verilog translators.
* New: In designflow.surelog, support for the Synlig Surelog/UHDM plugin
    for Yosys.
* Fix: In designflow.svase, remove the transient file "slang-args.txt".
* Change: In designflow.yosys, remove the direct SystemVerilog support
    that is delegated to Surelog and just load the resulting UHDM.
      Merge with yosysnp and automatically detect if we can load the
    Python plugin or go through a script.
2023-09-19 16:01:00 +02:00
Jean-Paul Chaput 4398770432 Add SystemVerilog support to designflow.yosys. Merge with YosysNp.
* New: In designflow.yosys, add support to load SystemVerilog with the
    synlig plugin (CHIPS Alliance).
      Integrate back the "non-Python" version of the task. Now switch
    automatically between Python & Non-Python based on the availability
    of the plugin. Also select between "yosys" & "yowasp-yosys".
* Change: In svase & sv2v, suppress the requirement of the *first*
    dependency file to be used as the default target. Now use the
    "top module" argument.
2023-09-16 18:12:10 +02:00
Jean-Paul Chaput 10c550593e Fix ordering of pad spec in cumulus.plugins.chips.pads.Side._placePads().
* Bug: In cumulus.plugins.chips.pads.Side._placePads(), when pads have
    positions they must be reorder *prior* to recomputing the pad
    final position? In order to avoid overlap and ensuring that they are
    on pitch, according to the I/O pad routing gauge.
2023-09-08 22:02:27 +02:00
Jean-Paul Chaput 662b0124b8 Add partial support for SVase and sv2v to the DesignFlow. 2023-08-31 16:14:51 +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 9846330b91 Remove non-needed Python Development.Module requirement in CMakeLists.txt. 2023-08-09 10:11:54 +02:00
Jean-Paul Chaput 258bd053c4 Various bug fixes on blockages & H-Tree managment under Katana.
* Change: In Katana::PowerRailsPlanes::Rail::doLayout(): change the delta
    computation. Extend of the pitch *minus* the half wire-width *minus* 1.
    So a wire at minimal with will reach exactly the previous and next
    track axis. And will not be insterted in them due to the "minus 1".
      TrackFixedSegments created at this stage must be flagged as
    TElemBlockageNet, so that any overlap between them is not seen as an
    error by the track overlap checker.
      This was a problem for the clock tree wires which partly uses
    pre-fixed wires, but the driver of the H-Tree is a normal signal that
    must abide the usual checking.
* Change: In Katana::TrackFixedSegment::getNet(), no longer rely on the
    kind of net to choose to return the actual net or the blockage one,
    but uses the TElemUseBlockageNet flag.
2023-08-08 00:59:48 +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 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 3cddf2f3ae More bug fix in cumulus trackAvoid. 2023-07-19 22:04:58 +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 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 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
Robert Taylor c0c0e873c2 Only use Development.Module for python dependency, necessary for manylinux build 2023-07-16 06:13:45 +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 947026cced Add technology description for the new LSxLib symbolic layout. 2023-07-14 12:33:03 +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 d019c6aab5 In designflow, re-export LD_LIBRARY_PATH only if there is an ALLIANCE_TOP. 2023-06-25 11:53:26 +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 4fe1436e1f Remove uniform density option, replaced by densityVariation 2023-06-20 12:18:06 +02:00
Jean-Paul Chaput 21eedbcc2b Change in strategy for guessing Alliance top cells directory.
* In cumulus.designflow.technos.setupCMOS(): export back the guessed
    ALLIANCE_TOP *before* importing technos.symbolic.cmos so it is
    used for the CELLS_TOP. This avoid defaulting to /soc/alliance
    which does exists only on LIP6 computers...
2023-05-28 15:31:47 +02:00
Jean-Paul Chaput a31cf3d334 Fix SRAM import hierarchy for new coriolis namespace. 2023-04-26 11:46:53 +02:00
Jean-Paul Chaput e5d9c8808b Reduce the default pixel threshold to 5. 2023-03-26 21:12:49 +02:00
Jean-Paul Chaput 090c13663e Create stub for Tramontana, reimplementation of the extractor/LVX. 2023-03-16 15:06:11 +01:00
Jean-Paul Chaput 1e8c304ac5 Fix: designflow/klayout.py rule forgot to add targets. 2023-03-07 11:52:52 +01:00
Jean-Paul Chaput 842c2dfffc Late import of pyosys to not block if N/A in designflow/yosys.py. 2023-03-06 14:58:39 +01:00
Jean-Paul Chaput 3fdef7aa8d Remove deprecated Kite reference in designflow/pnr.py. 2023-03-03 15:40:42 +01:00
Jean-Paul Chaput 57b5cca27f Downgrade CMake requirements to 3.16. Detects correctly Python 3.
Fix courtesy of N. Shimizu.
2023-03-03 15:36:40 +01:00
Jean-Paul Chaput 50937d69c7 Add basic yosys (nopy), klayout scripts and command support to designflow.
* New: In cumulus.designflow: add yosysnp to manage Yosys without
    Python support enabled.
      Add klayout support for running scripts in batch mode.
      Add generic system command support.
* Change: In cumulus.designflow.task.TaskFlow, systematically
    convert pathes (str) into pathlib.Path in targets and depends.
* New: In cumulus.designflow.clean.Clean, add cleaning by glob.
2023-03-01 23:57:55 +01:00
Jean-Paul Chaput c68932c813 Policy change for NDA/third party modules loading ("addons.coriolis").
* Change: In cumulus/plugins/__init__.py, new behavior for loading
    plugins supplied as third party. In order to avoid messing up
    with the "site-packages/coriolis/" main package tree (with
    modules named "coriolis.<MODULE>", they have to be under
    "site-packages/addons/coriolis/" (so modules will be named
    "addons.coriolis.<MODULE>"). This should prevent *overwritting*
    standard modules by third party ones.
      Now uses pathlib for module loading.
      Had a conflict between Hurricane.Path and pathlib.Path, now do
    not import the Hurricane one into the module globals...
2023-02-28 13:32:11 +01:00
Jean-Paul Chaput 1557d613ae Comprehensive reorganisation of the Python part of Coriolis.
* Move all Python stuff under a common Python namespace "coriolis".
* Instead of having a series subtrees for each tool, integrate
  everything in one common tree. So now, all components can be
  located either with an absolute path from "coriolis" or, inside
  cross-reference themselves through relatives imports.
* As a consequence, we only need to add ".../site-packages/coriolis/"
  to the PYTHONPATH, and not a whole bunch of subdirectories.
  And nothing, if installed in-system.
* The tree of free technologies configuration files is also moved
  below "coriolis/technos" instead of "/etc".
* Supressed "cumulus" level for the plugins.
* All python modules are rewritten using relative imports except
  for the configuration files that uses absolute import as they
  can be cloned outside of the tree to serve as templates.

* Change: In boostrap/FindPythonSitePackages, include "/coriolis" in
    Python_CORIOLISARCH and Python_CORIOLISLIB.
      Provide a Python_SITELIB *without* "/coriolis" appended.
* Change: In cumulus/plugins/__init__.loadPlugins(), must prefix modules
    read in the plugins directory by "coriolis.plugins.". No longer need
    to add their path to sys.path.
* Change: In crlcore/python/technos/nodeX/*/devices.py, the scripts of
    the layouts generators must be prefixed by "coriolis.oroshi.".
* Change: In CRL::System CTOR, no longer add the pathes of the various
    plugins to sys.path. Only "site-packages/coriolis/".
* New: In Utilities::Path::toPyModePath(), new method to convert a
    filesystem path into a python module path.
      Examples:
        "coriolis/plugins/block"    --> "coriolis.plugins.block".
        "coriolis/plugins/rsave.py" --> "coriolis.plugins.rsave".
* Change: In katanaEngine::_runKatanaEngine(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In BoraEngine::_runBoraEngine(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In UnicornGui::_runUnicornInit(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In cumulus.plugins.chip.constants, put the constants
    outside __init__.py to avoid a loop at initialization.
2023-02-27 22:14:32 +01:00
Jean-Paul Chaput 3d9e86303e Final deprecation of Katabatic, Knick & Kite. 2023-02-21 17:04:38 +01:00
Robert Taylor a02c88a893 Don't link libpython, it isn't there in manylinux 2023-02-21 16:10:55 +01:00
Robert Taylor eb26bb1f87 fix to build on manylinux 2023-02-21 16:10:55 +01:00
Jean-Paul Chaput db56681025 More tweaking in the H-Tree Y offset, to avoid stacked VIAs. 2023-02-15 15:17:28 +01:00
Jean-Paul Chaput 77afb7cba4 Quick for H-Tree driver Y offset (account for root & symmetry). 2023-01-23 14:46:30 +01:00
Jean-Paul Chaput f7b2a4f5bb The previous fix for low metal tech, must apply only for them in htree. 2023-01-19 14:54:00 +01:00
Jean-Paul Chaput 38cc00005d Fix missing VIA & bad offset in htree for low metal techs. 2023-01-19 13:57:35 +01:00
Jean-Paul Chaput 2116e181de Add a breakpoint *before* global routing loading in cumulus/block.py. 2023-01-18 23:20:28 +01:00
Jean-Paul Chaput 7598485a4f Allow the BigVia to stack the cuts in some cases. 2023-01-14 22:38:36 +01:00
Jean-Paul Chaput 181b2e1080 Re-enable and check the building of I/O ring with pad spacers.
* New: In cumulus/block.bigvia, add a getBoundingBox() method.

* New: In cumulus/block.configuration.GaugeConf.rpAccess(),
    add a vertical strap segment in case the RP is not high enough to
    accomodate the potential offset of the contact.
      In case of gauge with only two routing layers, if the RP
    is vertically accessed, do not put a VIA12 but just a METAL2
    contact (there will be *no* turn).

* Change: In cumulus/chip.CoreWire.drawWire(), the wire at *chip level*
    going to the pad was shrunk of 3 pitch when *not* in the preferred
    routing direction. Removing it as it creates gaps in some cases.
      This was likely needed for a specific kind of I/O pad so should
    be re-enabled on targeted cases in the future.

* Change: In cumulus/chip.corona.VerticalRail, manage in a smarter way
    the conflicts when a rail is accessed from both sides overlapping
    on an Y position. That is, from the supply I/O pads *and* from the
    *core* supply lines.
      Formerly, we just didn't connect the core power line, which was
    a mistake potentially leaving power rails unconnected (it it did
    occur on both sides).
      Also checks if the conflict really arise, that is, the power lines
    are both on top or bottom.

* Change: In cumulus/chip.pads.Side._placePad(), manage I/O pads with
    a bottom left corner of abutment box *not* at (0,0). Argh!

* Bug: In cumulus/chip.pads, create the filler pad instances in the
    chip, not in the corona.
2023-01-14 12:39:22 +01:00
Jean-Paul Chaput 3e921ff07a More debug information in chip pad & corona generation.
* Change: In cumulus/plugins.chip.configuration, do not add an extra
    slice height to the minHCorona & minVCorona. Now seems a bit overkill
    on small chips.
2023-01-09 09:26:44 +01:00
Jean-Paul Chaput bdb0091043 Just a little indentation for my autistic self. 2023-01-09 09:21:56 +01:00