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.
This commit is contained in:
Jean-Paul Chaput 2023-07-19 16:15:22 +02:00
parent d819d46031
commit a14a96f9ed
2 changed files with 7 additions and 5 deletions

View File

@ -25,7 +25,7 @@ from ...CRL import AllianceFramework, RoutingLayerGauge, Catalog,
Gds, Spice Gds, Spice
from ...helpers import trace, l, u, n from ...helpers import trace, l, u, n
from ...helpers.io import ErrorMessage, WarningMessage, catch from ...helpers.io import ErrorMessage, WarningMessage, catch
from ...helpers.overlay import CfgCache, UpdateSession from ...helpers.overlay import CfgCache, CfgDefault, UpdateSession
from .. import getParameter from .. import getParameter
from ..rsave import rsave from ..rsave import rsave
from ..utils import getPlugByName from ..utils import getPlugByName
@ -80,7 +80,7 @@ class GaugeConf ( object ):
self._plugToRp = { } self._plugToRp = { }
self._rpToAccess = { } self._rpToAccess = { }
self._loadRoutingGauge() self._loadRoutingGauge()
self._routingBb = Box() self._routingBb = Box()
return return
@property @property
@ -1403,6 +1403,8 @@ class BlockConf ( GaugeConf ):
self.cfg.block.spareSide = None self.cfg.block.spareSide = None
self.cfg.block.vRailsPeriod = None self.cfg.block.vRailsPeriod = None
self.cfg.katana.dumpMeasures = None self.cfg.katana.dumpMeasures = None
self.cfg.spares.htreeRootOffset = CfgDefault(3)
self.cfg.spares.htreeOffset = CfgDefault(5)
self.chipConf = ChipConf( self ) self.chipConf = ChipConf( self )
self.etesian = None self.etesian = None
self.katana = None self.katana = None

View File

@ -45,7 +45,7 @@ def unbitify ( rawName ):
class HTree ( object ): class HTree ( object ):
""" """
Build a H-Tree on a net occurrene. Build a H-Tree on a net occurrence.
""" """
def __init__ ( self, spares, treeNetOcc, index, flags ): def __init__ ( self, spares, treeNetOcc, index, flags ):
@ -159,12 +159,12 @@ class HTree ( object ):
or (qt.br and len(qt.br.buffers) > 1) \ or (qt.br and len(qt.br.buffers) > 1) \
or (qt.tr and len(qt.tr.buffers) > 1): or (qt.tr and len(qt.tr.buffers) > 1):
leafFlags |= GaugeConf.HAccess leafFlags |= GaugeConf.HAccess
yoffset = 3 yoffset = gaugeConf.cfg.spares.htreeRootOffset
if not qt.isRoot(): if not qt.isRoot():
ckParentNet = qt.bInputPlug(0).getNet() ckParentNet = qt.bInputPlug(0).getNet()
driverContact = gaugeConf.rpAccessByPlugName( qt.buffers[0], bufferConf.input, ckParentNet ) driverContact = gaugeConf.rpAccessByPlugName( qt.buffers[0], bufferConf.input, ckParentNet )
driverY = driverContact.getY() driverY = driverContact.getY()
yoffset = 5 yoffset = gaugeConf.cfg.spares.htreeOffset
trace( 550, '\tdriverContact={}\n'.format( driverContact )) trace( 550, '\tdriverContact={}\n'.format( driverContact ))
if qt.bl: if qt.bl:
trace( 550, '+,', '\tblContact\n' ) trace( 550, '+,', '\tblContact\n' )