diff --git a/cumulus/src/plugins/alpha/chip/configuration.py b/cumulus/src/plugins/alpha/chip/configuration.py index e25afd18..81bc18a6 100644 --- a/cumulus/src/plugins/alpha/chip/configuration.py +++ b/cumulus/src/plugins/alpha/chip/configuration.py @@ -94,6 +94,7 @@ class ChipConf ( BlockConf ): # trace( 550, '\tONE LAMBDA = %s\n' % DbU.getValueString(DbU.fromLambda(1.0)) ) self.validated = True # Block Corona parameters (triggers loading from disk). + self.cfg.chip.padCoreSide = None self.cfg.chip.supplyRailWidth = None self.cfg.chip.supplyRailPitch = None self.cfg.chip.block.rails.count = None @@ -112,6 +113,10 @@ class ChipConf ( BlockConf ): self.padsHavePosition = False trace( 550, '-' ) + @property + def padCoreSide ( self ): + return self.cfg.chip.padCoreSide + @property def railsCount ( self ): return self._railsCount diff --git a/cumulus/src/plugins/alpha/chip/pads.py b/cumulus/src/plugins/alpha/chip/pads.py index 53815756..e8fa53c9 100644 --- a/cumulus/src/plugins/alpha/chip/pads.py +++ b/cumulus/src/plugins/alpha/chip/pads.py @@ -16,6 +16,7 @@ from __future__ import print_function import sys import re +import copy from operator import itemgetter from Hurricane import DbU, Point, Transformation, Interval, Box, \ Path, Occurrence, UpdateSession, Layer, \ @@ -952,6 +953,7 @@ class Corona ( object ): , component.getLayer() , axis , width ) ) + self.padRails.sort( key=itemgetter(2) ) def _createCoreWire ( self, chipIntNet, padNet, padInstance, count ): trace( 550, ',+', '\tCorona._createCoreWire()\n' ) @@ -1136,8 +1138,13 @@ class Corona ( object ): chipLayer = self.conf.getRoutingLayer( self.conf.routingGauge.getPowerSupplyGauge().getDepth() - 1 ) coronaAb = self.conf.icorona.getAbutmentBox() chipAxis = coronaAxis + self.conf.icorona.getTransformation().getTx() + rails = [] trace( 550, '\tchipLayer={}\n'.format(chipLayer) ) for rail in self.padRails: + rails.append( [ rail[0], rail[1], rail[2], rail[3] ] ) + if self.conf.padCoreSide == 'North': + rails.reverse() + for rail in rails: net = rail[0] layer = rail[1] railAxis = rail[2] @@ -1145,6 +1152,7 @@ class Corona ( object ): if net != chipNet or chipLayer.getMask() != layer.getMask(): continue if side == North: + trace( 550, '\tNorth side supply\n' ) trace( 550, '\tcoronaAb={}\n'.format(coronaAb) ) trace( 550, '\tcoronaAxis={}\n'.format(DbU.getValueString(coronaAxis)) ) trace( 550, '\tchipAxis={}\n'.format(DbU.getValueString(chipAxis)) ) @@ -1180,7 +1188,14 @@ class Corona ( object ): ) trace( 550, '\tpin={}\n'.format(pin) ) self.powerCount += 1 + break elif side == South: + trace( 550, '\tSouth side supply\n' ) + trace( 550, '\tcoronaAb={}\n'.format(coronaAb) ) + trace( 550, '\tcoronaAxis={}\n'.format(DbU.getValueString(coronaAxis)) ) + trace( 550, '\tchipAxis={}\n'.format(DbU.getValueString(chipAxis)) ) + trace( 550, '\trailNet={} <-> {}\n'.format(net,chipNet) ) + trace( 550, '\trailAxis={}\n'.format(DbU.getValueString(railAxis)) ) Vertical.create( chipNet , supplyLayer , chipAxis @@ -1209,6 +1224,7 @@ class Corona ( object ): , DbU.fromLambda( 1.0 ) ) self.powerCount += 1 + break trace( 550, '-' ) def doLayout ( self ):