From 4e7dbee83113273239d427ffc03f537a89a01034 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 11 Jun 2021 11:47:02 +0200 Subject: [PATCH] Fix HTree to corona's edge wiring in horizontal direction. * Bug: In cumulus/plugins.chip.powerplane.Builder._connectHTree(), when building the stacked VIAs over the corona Pin and the root buffer RoutingPad, pass the GaugeConf.HAccess flag so the stack stops at METAL4 (top horizontal layer). Before we where also adding a VIA up to METAL5 which was unused and caused a minimal area violation. --- cumulus/src/plugins/alpha/chip/powerplane.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cumulus/src/plugins/alpha/chip/powerplane.py b/cumulus/src/plugins/alpha/chip/powerplane.py index 888f49fe..b85feff7 100644 --- a/cumulus/src/plugins/alpha/chip/powerplane.py +++ b/cumulus/src/plugins/alpha/chip/powerplane.py @@ -26,7 +26,8 @@ from helpers.io import ErrorMessage, WarningMessage from helpers.overlay import UpdateSession import plugins import plugins.chip -from plugins.alpha.block.bigvia import BigVia +from plugins.alpha.block.bigvia import BigVia +from plugins.alpha.block.configuration import GaugeConf __all__ = [ 'Builder' ] @@ -489,11 +490,6 @@ class Builder ( object ): raise ErrorMessage( 1, message ) with UpdateSession(): coronaAb = self.conf.cellPnR.getAbutmentBox() - bufferRp = self.conf.rpAccessByOccurrence( Occurrence(htPlugs[0], Path()), coronaNet, 0 ) - pinRp = self.conf.rpAccessByOccurrence( Occurrence(coronaPin , Path()), coronaNet, 0 ) - trace( 550, '\tpinRp={}\n'.format(pinRp) ) - self.conf.expandMinArea( bufferRp ) - self.conf.expandMinArea( pinRp ) if coronaPin.getAccessDirection() == Pin.Direction.NORTH: isVertical = True axis = coronaAb.getYMax() @@ -508,6 +504,10 @@ class Builder ( object ): elif coronaPin.getAccessDirection() == Pin.Direction.WEST: isVertical = False axis = coronaAb.getXMin() + flags = 0 if isVertical else GaugeConf.HAccess + bufferRp = self.conf.rpAccessByOccurrence( Occurrence(htPlugs[0], Path()), coronaNet, flags ) + pinRp = self.conf.rpAccessByOccurrence( Occurrence(coronaPin , Path()), coronaNet, flags ) + trace( 550, '\tpinRp={}\n'.format(pinRp) ) if isVertical: pitch = self.conf.hRoutingGauge.getPitch() yaxis = axis + 2 * pitch * trackNb @@ -537,6 +537,8 @@ class Builder ( object ): self.conf.createVertical ( contact1, contact2, xaxis , 0 ) self.conf.createHorizontal( contact2, pinRp , yaxisPin, 0 ) trace( 550, '\txaxis(track)={}\n'.format(DbU.getValueString(xaxis)) ) + self.conf.expandMinArea( bufferRp ) + self.conf.expandMinArea( pinRp ) return def connectHTrees ( self, hTrees ):