From 38cc00005d36d1ffa2244d19d107c3bb553034a9 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 19 Jan 2023 13:57:35 +0100 Subject: [PATCH] Fix missing VIA & bad offset in htree for low metal techs. --- cumulus/src/plugins/alpha/block/htree.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/cumulus/src/plugins/alpha/block/htree.py b/cumulus/src/plugins/alpha/block/htree.py index 92b2932b..0d3cb4b4 100644 --- a/cumulus/src/plugins/alpha/block/htree.py +++ b/cumulus/src/plugins/alpha/block/htree.py @@ -143,6 +143,7 @@ class HTree ( object ): hLeafDepth = gaugeConf.horizontalDepth if gaugeConf.horizontalDepth > 2 and (gaugeConf.horizontalDepth > gaugeConf.verticalDepth): hLeafDepth = gaugeConf.horizontalDepth - 2 + leafFlags = GaugeConf.OffsetLeft1 blContact = None brContact = None tlContact = None @@ -150,6 +151,11 @@ 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 not qt.isRoot(): ckParentNet = qt.bInputPlug(0).getNet() driverContact = gaugeConf.rpAccessByPlugName( qt.buffers[0], bufferConf.input, ckParentNet ) @@ -157,19 +163,19 @@ class HTree ( object ): trace( 550, '\tdriverContact={}\n'.format( driverContact )) if qt.bl: trace( 550, '+,', '\tblContact\n' ) - blContact = gaugeConf.rpAccessByPlugName( qt.bl.buffers[0], bufferConf.input, ckNet, GaugeConf.OffsetLeft1 ) + blContact = gaugeConf.rpAccessByPlugName( qt.bl.buffers[0], bufferConf.input, ckNet, leafFlags ) trace( 550, ',-', '\tblContact={}\n'.format(blContact) ) if qt.br: trace( 550, '+,', '\tbrContact\n' ) - brContact = gaugeConf.rpAccessByPlugName( qt.br.buffers[0], bufferConf.input, ckNet, GaugeConf.OffsetLeft1 ) + brContact = gaugeConf.rpAccessByPlugName( qt.br.buffers[0], bufferConf.input, ckNet, leafFlags ) trace( 550, ',-', '\tbrContact={}\n'.format(brContact) ) if qt.tl: trace( 550, '+,', '\ttlContact\n' ) - tlContact = gaugeConf.rpAccessByPlugName( qt.tl.buffers[0], bufferConf.input, ckNet, GaugeConf.OffsetLeft1 ) + tlContact = gaugeConf.rpAccessByPlugName( qt.tl.buffers[0], bufferConf.input, ckNet, leafFlags ) trace( 550, ',-', '\ttlContact={}\n'.format(tlContact) ) if qt.tr: trace( 550, '+,', '\ttrContact\n' ) - trContact = gaugeConf.rpAccessByPlugName( qt.tr.buffers[0], bufferConf.input, ckNet, GaugeConf.OffsetLeft1 ) + trContact = gaugeConf.rpAccessByPlugName( qt.tr.buffers[0], bufferConf.input, ckNet, leafFlags ) trace( 550, ',-', '\ttrContact={}\n'.format(trContact) ) flags = GaugeConf.OffsetTop2 yoffset = -2 @@ -203,14 +209,14 @@ class HTree ( object ): if qt.br or qt.tr: gaugeConf.createHorizontal( rightSourceContact, rightContact, rightSourceY, 0 ) if tlContact: - tlY = gaugeConf.getTrack( tlContact.getY(), hLeafDepth, 0 ) + tlY = gaugeConf.getTrack( tlContact.getY(), hLeafDepth, -1 ) elif trContact: - tlY = gaugeConf.getTrack( trContact.getY(), hLeafDepth, 0 ) + tlY = gaugeConf.getTrack( trContact.getY(), hLeafDepth, -1 ) if blContact: - blY = gaugeConf.getTrack( blContact.getY(), hLeafDepth, 0 ) + blY = gaugeConf.getTrack( blContact.getY(), hLeafDepth, 2 ) trace( 550, '\tblY:{}\n'.format( DbU.getValueString(blY) )) elif brContact: - blY = gaugeConf.getTrack( brContact.getY(), hLeafDepth, 0 ) + blY = gaugeConf.getTrack( brContact.getY(), hLeafDepth, 2 ) trace( 550, '\tblY:{}\n'.format( DbU.getValueString(blY) )) if qt.tl: self._connectLeaf( qt.tl, ckNet, leftContact, tlContact, leftX, tlY )