Manage a minimum spacing between I/O pads at chip level.
* Change: In Cumulus/plupins.chip.pads.Side, in some case (LibreSOCIOPads), when not put side by side, the I/O pads must be separated by a minimal distance. Introduce the new configuration parameter: cfg.chip.minPadSpacing Disabled if zero or non-defined. Fix NWELL DRC errors for TSMC.
This commit is contained in:
parent
a2525f2260
commit
df4201e1fe
|
@ -362,9 +362,17 @@ class Side ( object ):
|
|||
pad[0] = self.toGrid( pad[0] )
|
||||
position = pad[0] + pad[1].getMasterCell().getAbutmentBox().getWidth()
|
||||
else:
|
||||
position = self.u
|
||||
print( 'padSpacing:{}'.format(DbU.getValueString(padSpacing) ))
|
||||
spacing = 0
|
||||
minSpacing = self.corona.minPadSpacing
|
||||
position = self.u
|
||||
for i in range(len(self.pads)):
|
||||
position += padSpacing
|
||||
spacing += padSpacing
|
||||
nextPosition = self.toGrid( position + spacing )
|
||||
if nextPosition - position >= minSpacing:
|
||||
print( 'add spacing @{}:{}'.format(i,DbU.getValueString(spacing) ))
|
||||
position += spacing
|
||||
spacing = 0
|
||||
self.pads[i][0] = self.toGrid( position )
|
||||
position += self.pads[i][1].getMasterCell().getAbutmentBox().getWidth()
|
||||
for pad in self.pads:
|
||||
|
@ -817,8 +825,9 @@ class Corona ( object ):
|
|||
self.padOrient = Transformation.Orientation.MY
|
||||
trace( 550, '\tchip.padCoreSide: {}\n'.format(self.conf.cfg.chip.padCoreSide) )
|
||||
self._allPadsAnalysis()
|
||||
self.conf.cfg.chip.padSpacers = None
|
||||
self.conf.cfg.chip.padCorner = None
|
||||
self.conf.cfg.chip.minPadSpacing = None
|
||||
self.conf.cfg.chip.padSpacers = None
|
||||
self.conf.cfg.chip.padCorner = None
|
||||
if self.conf.cfg.chip.padSpacers is not None:
|
||||
for spacerName in self.conf.cfg.chip.padSpacers.split(','):
|
||||
spacerCell = self.padLib.getCell( spacerName )
|
||||
|
@ -828,12 +837,17 @@ class Corona ( object ):
|
|||
self.padSpacers.sort( _cmpPad )
|
||||
if self.conf.cfg.chip.padCorner is not None:
|
||||
self.padCorner = self.padLib.getCell( self.conf.cfg.chip.padCorner )
|
||||
if self.conf.cfg.chip.minPadSpacing is None:
|
||||
self.conf.cfg.chip.minPadSpacing = 0
|
||||
|
||||
@property
|
||||
def supplyRailWidth ( self ): return self.conf.cfg.chip.supplyRailWidth
|
||||
|
||||
@property
|
||||
def supplyRailPitch ( self ): return self.conf.cfg.chip.supplyRailPitch
|
||||
|
||||
@property
|
||||
def minPadSpacing ( self ): return self.conf.cfg.chip.minPadSpacing
|
||||
|
||||
def toGrid ( self, u ): return u - (u % self.conf.ioPadPitch)
|
||||
|
||||
|
|
Loading…
Reference in New Issue