From af8ef6120214b12f8078d9b43e8b3ef66f3a30af Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 28 Sep 2023 19:47:51 +0200 Subject: [PATCH 1/8] The upper routing layer in gf180mcu is Metal5, not MetalTop (power). --- crlcore/python/technos/node180/gf180mcu_c4m/StdCell3V3Lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crlcore/python/technos/node180/gf180mcu_c4m/StdCell3V3Lib.py b/crlcore/python/technos/node180/gf180mcu_c4m/StdCell3V3Lib.py index 947397d0e..d7bcb0a4a 100644 --- a/crlcore/python/technos/node180/gf180mcu_c4m/StdCell3V3Lib.py +++ b/crlcore/python/technos/node180/gf180mcu_c4m/StdCell3V3Lib.py @@ -139,7 +139,7 @@ def _routing(): cfg.anabatic.globalLengthThreshold = 1450 cfg.anabatic.saturateRatio = 0.90 cfg.anabatic.saturateRp = 10 - cfg.anabatic.topRoutingLayer = 'MetalTop' + cfg.anabatic.topRoutingLayer = 'Metal5' cfg.anabatic.edgeLength = 48 cfg.anabatic.edgeWidth = 8 cfg.anabatic.edgeCostH = 9.0 From e8e89389fa10296bdbbc8e1367c4246f43345cc5 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 29 Sep 2023 00:58:59 +0200 Subject: [PATCH 2/8] Protect Python accessor wrapper from C++ thrown exceptions. --- .../src/isobar/hurricane/isobar/PyHurricane.h | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h index 6d79829ce..69ae20c8b 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h +++ b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h @@ -337,8 +337,10 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ + HTRY \ if (cobject->FUNC_NAME()) \ Py_RETURN_TRUE; \ + HCATCH \ Py_RETURN_FALSE; \ } @@ -383,7 +385,11 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ - return Py_BuildValue ("I",cobject->FUNC_NAME()); \ + PyObject* rvalue = NULL; \ + HTRY \ + rvalue = Py_BuildValue ("I",cobject->FUNC_NAME()); \ + HCATCH \ + return rvalue; \ } @@ -394,7 +400,11 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ - return Isobar::PyDbU_FromLong(cobject->FUNC_NAME()); \ + PyObject* rvalue = NULL; \ + HTRY \ + rvalue = Isobar::PyDbU_FromLong(cobject->FUNC_NAME()); \ + HCATCH \ + return rvalue; \ } @@ -405,7 +415,11 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ - return Py_BuildValue ("d",cobject->FUNC_NAME()); \ + PyObject* rvalue = NULL; \ + HTRY \ + rvalue = Py_BuildValue ("d",cobject->FUNC_NAME()); \ + HCATCH \ + return rvalue; \ } @@ -416,7 +430,11 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ - return Py_BuildValue ("s",cobject->FUNC_NAME().c_str()); \ + PyObject* rvalue = NULL; \ + HTRY \ + rvalue = Py_BuildValue ("s",cobject->FUNC_NAME().c_str()); \ + HCATCH \ + return rvalue; \ } @@ -427,14 +445,18 @@ extern "C" { static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self ) \ { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \ - return Py_BuildValue ("s",getString(cobject->FUNC_NAME()).c_str()); \ + PyObject* rvalue = NULL; \ + HTRY \ + rvalue = Py_BuildValue ("s",getString(cobject->FUNC_NAME()).c_str()); \ + HCATCH \ + return rvalue; \ } # define accessorLayerFromVoid(FUNC_NAME,PY_SELF_TYPE,SELF_TYPE) \ static PyObject* PY_SELF_TYPE##_##FUNC_NAME ( PY_SELF_TYPE* self ) \ { \ - cdebug_log(20,0) << #PY_SELF_TYPE "_" #FUNC_NAME "()" << endl; \ + cdebug_log(20,0) << #PY_SELF_TYPE "_" #FUNC_NAME "()" << endl; \ \ Layer* rlayer = NULL; \ \ From 18dd31b03970393a2d7742ef36bd516980676028 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 29 Sep 2023 01:48:28 +0200 Subject: [PATCH 3/8] 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). --- crlcore/src/ccore/gds/GdsParser.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crlcore/src/ccore/gds/GdsParser.cpp b/crlcore/src/ccore/gds/GdsParser.cpp index 6ce5c66c4..76d2c9dc4 100644 --- a/crlcore/src/ccore/gds/GdsParser.cpp +++ b/crlcore/src/ccore/gds/GdsParser.cpp @@ -810,6 +810,8 @@ namespace { if (cell) return cell; if (not Gds::getTopCellName().empty() and (cellName != Gds::getTopCellName())) { + cellName.insert( 0, "." ); + cellName.insert( 0, Gds::getTopCellName() ); workLibrary = _library->getLibrary( Gds::getTopCellName() ); if (workLibrary) { cell = workLibrary->getCell( cellName ); From b85254c2709ec2d498fa483583aa0efecbeeaa57 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 30 Sep 2023 21:55:49 +0200 Subject: [PATCH 4/8] In designflow.blif2vst, add the ".spi" file to the target list (for cleanup). --- cumulus/src/designflow/blif2vst.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cumulus/src/designflow/blif2vst.py b/cumulus/src/designflow/blif2vst.py index 7ee5b7112..3690d6c4f 100644 --- a/cumulus/src/designflow/blif2vst.py +++ b/cumulus/src/designflow/blif2vst.py @@ -36,10 +36,11 @@ def mkRule ( rule, targets, depends=[], flags=0 ): def __init__ ( self, rule, targets, depends, flags ): super().__init__( rule, targets, depends ) - self.flags = flags + self.flags = flags if not self.targets[0].suffix == '.vst': raise TargetNotVst( 'Blif2Vst.__init__(): First target *must* "{}" be a vst file.' \ .format( self.targets[0] )) + self.targets.append( Path(self.file_depend(0).stem + '.spi') ) self.addClean( self.targets ) def __repr__ ( self ): From 438afa880d22446c9880c5f001781ae9657e4a5b Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 30 Sep 2023 21:58:44 +0200 Subject: [PATCH 5/8] In designflow.technos.setupCMOS(), more relaxed clock name pattern. --- cumulus/src/designflow/technos.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cumulus/src/designflow/technos.py b/cumulus/src/designflow/technos.py index dca4a276f..f807780d4 100644 --- a/cumulus/src/designflow/technos.py +++ b/cumulus/src/designflow/technos.py @@ -69,7 +69,7 @@ def setupCMOS ( checkToolkit=None ): Viewer.Graphics.setStyle( 'Alliance.Classic [black]' ) af = CRL.AllianceFramework.get() env = af.getEnvironment() - env.setCLOCK( '^ck$|m_clock|^clk$' ) + env.setCLOCK( '^ck$|m_clock|^clk' ) env.addSYSTEM_LIBRARY( library=(Where.checkToolkit / 'cells' / 'niolib').as_posix() , mode =CRL.Environment.Append ) From 9c79b38d5dc1c6186a24efcab8de59c5d0a4f178 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 30 Sep 2023 22:16:40 +0200 Subject: [PATCH 6/8] In BlockConf.useHTree(), must set the useClockTree flag (for chip mode). --- crlcore/python/technos/node180/gf180mcu_c4m/iolib.py | 1 - cumulus/src/plugins/block/configuration.py | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crlcore/python/technos/node180/gf180mcu_c4m/iolib.py b/crlcore/python/technos/node180/gf180mcu_c4m/iolib.py index b02330691..bc10197ab 100644 --- a/crlcore/python/technos/node180/gf180mcu_c4m/iolib.py +++ b/crlcore/python/technos/node180/gf180mcu_c4m/iolib.py @@ -59,7 +59,6 @@ def _loadIoLib ( pdkDir ): io.vprint( 1, ' o Setup GF180MCU I/O library in {}.'.format( ioLib.getName() )) cellsDir = pdkDir / 'libraries' / 'gf180mcu_fd_io' / 'latest' / 'cells' for lefFile in cellsDir.glob( '*/*_5lm.lef' ): - print( lefFile ) gdsFile = lefFile.with_suffix( '.gds' ) if gdsFile.is_file(): Gds.setTopCellName( gdsFile.stem[:-4] ) diff --git a/cumulus/src/plugins/block/configuration.py b/cumulus/src/plugins/block/configuration.py index 6fb7f0f42..b010c83e4 100644 --- a/cumulus/src/plugins/block/configuration.py +++ b/cumulus/src/plugins/block/configuration.py @@ -1564,7 +1564,10 @@ def useHTree ( self, netName, flags=0 ): .format(netName)) ) return self.hTreeDatas.append( [ netName, flags ] ); - self.useClockTree = True + net = self.cell.getNet( netName ) + trace( 550,'\tBlockConf.useHTree() on "{}" -> {}\n'.format( netName, net )) + if net and net.isClock(): + self.useClockTree = True def addTrackAvoid ( self, trackAvoid ): if self.cfg.anabatic.netBuilderStyle == 'VH,2RL': From aeafa0d6eccd458af52aa380718a37c5911ff822 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 5 Oct 2023 17:28:46 +0200 Subject: [PATCH 7/8] Update the doc for gitlab & github. --- documentation/content/pages/github.rst | 28 ++++++++++++++++++++++++++ documentation/pelicanconf.py | 9 ++++----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 documentation/content/pages/github.rst diff --git a/documentation/content/pages/github.rst b/documentation/content/pages/github.rst new file mode 100644 index 000000000..6f4967ef8 --- /dev/null +++ b/documentation/content/pages/github.rst @@ -0,0 +1,28 @@ +.. -*- Mode: rst -*- + + +=================== +Gitlab Repositories +=================== + + +:slug: github +:date: 2023-10-05 16:00 +:author: Jean-Paul Chaput +:Contact: +:Version: October 5, 2023 (jpc) +:status: hidden + + +.. include:: ../../etc/definitions.rst + + +The |git| repositories of all the components of the project: + +================================ ======================================================= +Component Repository +================================ ======================================================= +|Alliance| https://github.com/lip6/alliance.git +|Coriolis| https://github.com/lip6/coriolis.git +:cb:`Alliance Check Toolkit` https://github.com/lip6/alliance-check-toolkit.git +================================ ======================================================= diff --git a/documentation/pelicanconf.py b/documentation/pelicanconf.py index b7250078e..f23e526a3 100644 --- a/documentation/pelicanconf.py +++ b/documentation/pelicanconf.py @@ -69,12 +69,11 @@ #SOCIAL = (('Pelican' , 'http://getpelican.com/' ), # ('Python.org', 'http://python.org/' ), # ('Jinja2' , 'http://jinja.pocoo.org/'),) -SOCIAL = None +SOCIAL = (('Matrix', 'element://vector/webapp/#/room/%23coriolis%3Amatrix.org?via=matrix.or'),) # Social widget LINKS = (('Alliance/Coriolis' , 'https://coriolis.lip6.fr/'), - ('CIAN Team Website' , 'https://www-soc.lip6.fr/' ), - ('Free Silicon Foundation', 'https://f-si.org' ),) + ('CIAN Team Website' , 'https://largo.lip6.fr/' ),) DEFAULT_PAGINATION = 10 @@ -138,8 +137,8 @@ NEST_HEADER_IMAGES = 'common/layout-motif-faded-4.png' NEST_LINKS_COLUMN_TITLE = u'Links' NEST_SOCIAL_COLUMN_TITLE = u'Social' -NEST_SITEMAP_COLUMN_TITLE = u'Social' +NEST_SITEMAP_COLUMN_TITLE = u'Map' NEST_COPYRIGHT = u'Copyright © 2020-2020 Sorbonne Universite' -MENUITEMS = [ ('Git' , '/pages/gitlab.html' ) +MENUITEMS = [ ('Git' , '/pages/github.html' ) , ('Documentation', '/pages/documentation.html' ) ] From 0d42952631af443f760cba3d5420ad59adb086e2 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 20 Oct 2023 10:43:18 +0200 Subject: [PATCH 8/8] Install CRL gf180mcu_c4m techno files. --- crlcore/python/meson.build | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crlcore/python/meson.build b/crlcore/python/meson.build index e5dcfab05..c06b82c0c 100644 --- a/crlcore/python/meson.build +++ b/crlcore/python/meson.build @@ -36,6 +36,14 @@ py.install_sources( subdir: 'coriolis/technos/node180/gf180mcu', ) +py.install_sources( + 'technos/node180/gf180mcu_c4m/__init__.py', + 'technos/node180/gf180mcu_c4m/techno.py', + 'technos/node180/gf180mcu_c4m/iolib.py', + 'technos/node180/gf180mcu_c4m/StdCell3V3Lib.py', + subdir: 'coriolis/technos/node180/gf180mcu_c4m', +) + py.install_sources( 'technos/node180/scn6m_deep_09/__init__.py', 'technos/node180/scn6m_deep_09/alliance.py',