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.
This commit is contained in:
Jean-Paul Chaput 2021-06-11 11:47:02 +02:00
parent 68812fa0ca
commit 4e7dbee831
1 changed files with 8 additions and 6 deletions

View File

@ -26,7 +26,8 @@ from helpers.io import ErrorMessage, WarningMessage
from helpers.overlay import UpdateSession from helpers.overlay import UpdateSession
import plugins import plugins
import plugins.chip 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' ] __all__ = [ 'Builder' ]
@ -489,11 +490,6 @@ class Builder ( object ):
raise ErrorMessage( 1, message ) raise ErrorMessage( 1, message )
with UpdateSession(): with UpdateSession():
coronaAb = self.conf.cellPnR.getAbutmentBox() 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: if coronaPin.getAccessDirection() == Pin.Direction.NORTH:
isVertical = True isVertical = True
axis = coronaAb.getYMax() axis = coronaAb.getYMax()
@ -508,6 +504,10 @@ class Builder ( object ):
elif coronaPin.getAccessDirection() == Pin.Direction.WEST: elif coronaPin.getAccessDirection() == Pin.Direction.WEST:
isVertical = False isVertical = False
axis = coronaAb.getXMin() 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: if isVertical:
pitch = self.conf.hRoutingGauge.getPitch() pitch = self.conf.hRoutingGauge.getPitch()
yaxis = axis + 2 * pitch * trackNb yaxis = axis + 2 * pitch * trackNb
@ -537,6 +537,8 @@ class Builder ( object ):
self.conf.createVertical ( contact1, contact2, xaxis , 0 ) self.conf.createVertical ( contact1, contact2, xaxis , 0 )
self.conf.createHorizontal( contact2, pinRp , yaxisPin, 0 ) self.conf.createHorizontal( contact2, pinRp , yaxisPin, 0 )
trace( 550, '\txaxis(track)={}\n'.format(DbU.getValueString(xaxis)) ) trace( 550, '\txaxis(track)={}\n'.format(DbU.getValueString(xaxis)) )
self.conf.expandMinArea( bufferRp )
self.conf.expandMinArea( pinRp )
return return
def connectHTrees ( self, hTrees ): def connectHTrees ( self, hTrees ):