From f7b2a4f5bb1ca90fee4f1d73d3cca4dbc97065fc Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 19 Jan 2023 14:54:00 +0100 Subject: [PATCH] The previous fix for low metal tech, must apply only for them in htree. --- crlcore/src/pyCRL/PyRoutingGauge.cpp | 3 +++ cumulus/src/plugins/alpha/block/configuration.py | 2 ++ cumulus/src/plugins/alpha/block/htree.py | 11 ++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/crlcore/src/pyCRL/PyRoutingGauge.cpp b/crlcore/src/pyCRL/PyRoutingGauge.cpp index b19fbe10..1a22cc99 100644 --- a/crlcore/src/pyCRL/PyRoutingGauge.cpp +++ b/crlcore/src/pyCRL/PyRoutingGauge.cpp @@ -492,6 +492,7 @@ extern "C" { accessorVectorFromVoid(getLayerGauges,PyRoutingGauge,RoutingGauge,RoutingLayerGauge) DirectGetBoolAttribute(PyRoutingGauge_isSymbolic ,isSymbolic ,PyRoutingGauge,RoutingGauge) DirectGetBoolAttribute(PyRoutingGauge_isSuperPitched,isSuperPitched,PyRoutingGauge,RoutingGauge) + DirectGetBoolAttribute(PyRoutingGauge_isTwoMetals ,isTwoMetals ,PyRoutingGauge,RoutingGauge) DirectSetBoolAttribute(PyRoutingGauge_setSymbolic ,setSymbolic ,PyRoutingGauge,RoutingGauge) DirectGetBoolAttribute(PyRoutingGauge_isHV ,isHV ,PyRoutingGauge,RoutingGauge) DirectGetBoolAttribute(PyRoutingGauge_isVH ,isVH ,PyRoutingGauge,RoutingGauge) @@ -508,6 +509,8 @@ extern "C" { , "The RoutingGauge is for symbolic technology." } , { "isSuperPitched" , (PyCFunction)PyRoutingGauge_isSuperPitched , METH_NOARGS , "The RoutingGauge is super-pitched." } + , { "isTwoMetals" , (PyCFunction)PyRoutingGauge_isTwoMetals , METH_NOARGS + , "The RoutingGauge has only two routing metal layers." } , { "isHV" , (PyCFunction)PyRoutingGauge_isHV , METH_NOARGS , "The first routing layer (metal2) is horizontal." } , { "isVH" , (PyCFunction)PyRoutingGauge_isVH , METH_NOARGS diff --git a/cumulus/src/plugins/alpha/block/configuration.py b/cumulus/src/plugins/alpha/block/configuration.py index cf0c02aa..fae3162c 100644 --- a/cumulus/src/plugins/alpha/block/configuration.py +++ b/cumulus/src/plugins/alpha/block/configuration.py @@ -119,6 +119,8 @@ class GaugeConf ( object ): @property def routingBb ( self ): return self._routingBb + def isTwoMetals ( self ): return self._routingGauge.isTwoMetals() + def getRoutingLayer ( self, depth ): return self._routingGauge.getRoutingLayer( depth ) diff --git a/cumulus/src/plugins/alpha/block/htree.py b/cumulus/src/plugins/alpha/block/htree.py index 0d3cb4b4..6ba5bf22 100644 --- a/cumulus/src/plugins/alpha/block/htree.py +++ b/cumulus/src/plugins/alpha/block/htree.py @@ -151,11 +151,12 @@ class HTree ( object ): leftContact = None rigthContact = None driverY = None - if (qt.bl and len(qt.bl.buffers) > 1) \ - or (qt.tl and len(qt.tl.buffers) > 1) \ - or (qt.br and len(qt.br.buffers) > 1) \ - or (qt.tr and len(qt.tr.buffers) > 1): - leafFlags |= GaugeConf.HAccess + if gaugeConf.isTwoMetals(): + if (qt.bl and len(qt.bl.buffers) > 1) \ + or (qt.tl and len(qt.tl.buffers) > 1) \ + or (qt.br and len(qt.br.buffers) > 1) \ + or (qt.tr and len(qt.tr.buffers) > 1): + leafFlags |= GaugeConf.HAccess if not qt.isRoot(): ckParentNet = qt.bInputPlug(0).getNet() driverContact = gaugeConf.rpAccessByPlugName( qt.buffers[0], bufferConf.input, ckParentNet )