From d0f0cdc47d8f16f4f2573ebc2886074525993c45 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 15 Jul 2023 21:26:13 +0200 Subject: [PATCH] In cumulus/chip.pads, now support non-square corner I/O pads. --- cumulus/src/plugins/block/configuration.py | 5 ++++- cumulus/src/plugins/chip/pads.py | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cumulus/src/plugins/block/configuration.py b/cumulus/src/plugins/block/configuration.py index f9d62f1a..7f58ee47 100644 --- a/cumulus/src/plugins/block/configuration.py +++ b/cumulus/src/plugins/block/configuration.py @@ -744,7 +744,10 @@ class IoPadConf ( object ): else: if self._datas[5] is not None: self.flags |= IoPadConf.BIDIR elif self._datas[6] is not None: self.flags |= IoPadConf.TRISTATE - trace( 550, '\tIoPadConf._datas: {}\n'.format(self._datas) ) + sPos = '' + if self._datas[1]: + sPos = DbU.getValueString(self._datas[1]) + trace( 550, '\tIoPadConf._datas: @{} {}\n'.format(sPos,self._datas) ) @property def side ( self ): return self._datas[0] diff --git a/cumulus/src/plugins/chip/pads.py b/cumulus/src/plugins/chip/pads.py index 5bc05f54..0c58b0bb 100644 --- a/cumulus/src/plugins/chip/pads.py +++ b/cumulus/src/plugins/chip/pads.py @@ -169,7 +169,7 @@ class Side ( object ): self.type = sideType self.corona = corona self.pins = [] - self.u = self.conf.ioPadHeight + self.u = 0 self.spacerCount = 0 self.gap = 0 self.coreWires = [] @@ -370,6 +370,10 @@ class Side ( object ): return def _placePads ( self ): + if self.type in (North,South): + self.u = self.corona.padCornerWidth + else: + self.u = self.corona.padCornerHeight padLength = 0 for pad in self.pads: padLength += pad[1].getMasterCell().getAbutmentBox().getWidth() padSpacing = (self.sideLength - 2*self.conf.ioPadHeight - padLength) // (len(self.pads) + 1) @@ -551,6 +555,8 @@ class Corona ( object ): self.padCorner = [] self.padRails = [] # [ , [net, layer, axis, width] ] self.powerCount = 0 + self.padCornerWidth = self.conf.ioPadHeight + self.padCornerHeight = self.conf.ioPadHeight self.conf.cfg.chip.padCoreSide = None if self.conf.cfg.chip.padCoreSide.lower() == 'south': self.padOrient = Transformation.Orientation.MY @@ -567,7 +573,9 @@ class Corona ( object ): raise ErrorMessage( 1, 'Corona.__init__(): Missing spacer cell "{}"'.format(spacerName) ) self.padSpacers = sorted( self.padSpacers, key=_cmpPad, reverse=True ) if self.conf.cfg.chip.padCorner is not None: - self.padCorner = self.padLib.getCell( self.conf.cfg.chip.padCorner ) + self.padCorner = self.padLib.getCell( self.conf.cfg.chip.padCorner ) + self.padCornerWidth = self.padCorner.getAbutmentBox().getWidth() + self.padCornerHeight = self.padCorner.getAbutmentBox().getHeight() if self.conf.cfg.chip.minPadSpacing is None: self.conf.cfg.chip.minPadSpacing = 0