More debug information in chip pad & corona generation.

* Change: In cumulus/plugins.chip.configuration, do not add an extra
    slice height to the minHCorona & minVCorona. Now seems a bit overkill
    on small chips.
This commit is contained in:
Jean-Paul Chaput 2023-01-09 09:26:44 +01:00
parent bdb0091043
commit 3e921ff07a
5 changed files with 21 additions and 4 deletions

View File

@ -1398,8 +1398,8 @@ class BlockConf ( GaugeConf ):
@property
def coreAb ( self ):
if not hasattr(self,'coreSize'): return Box()
#trace( 550, '\tcoreAb:[{} {}]\n'.format( DbU.getValueString(self.coreSize[0])
# , DbU.getValueString(self.coreSize[1]) ))
trace( 550, '\tcoreAb:[{} {}]\n'.format( DbU.getValueString(self.coreSize[0])
, DbU.getValueString(self.coreSize[1]) ))
return Box( 0, 0, self.coreSize[0], self.coreSize[1] )
@property

View File

@ -141,8 +141,12 @@ class CoreWire ( object ):
trace( 550, '\tbbSegment: {}\n'.format(self.bbSegment) )
self.symSegmentLayer = None
for layerGauge in rg.getLayerGauges():
trace( 550, '\tTrying: {}\n'.format(layerGauge) )
if layerGauge.getType() == RoutingLayerGauge.Unusable: continue
if layerGauge.getType() == RoutingLayerGauge.BottomPowerSupply: continue
if layerGauge.getDepth() > self.conf.topLayerDepth: break
if layerGauge.getLayer().getMask() == mask:
trace( 550, '\tUsing: {}\n'.format(layerGauge) )
self.symSegmentLayer = layerGauge.getLayer()
if self.preferredDir:
self.symContactLayer = self.symSegmentLayer
@ -155,11 +159,15 @@ class CoreWire ( object ):
, DbU.getValueString(self.symContactSize[1]) ))
else:
depth = layerGauge.getDepth()
trace( 550, '\tChoosing PP layer, {}+1 > top={}\n' \
.format(layerGauge.getDepth(),self.conf.topLayerDepth) )
if layerGauge.getDepth() + 1 > self.conf.topLayerDepth:
self.symSegmentLayer = rg.getLayerGauge( depth-1 ).getLayer()
depth -= 1
trace( 550, '\tUsing below layer {}\n'.format( self.symSegmentLayer ))
else:
self.symSegmentLayer = rg.getLayerGauge( depth+1 ).getLayer()
trace( 550, '\tUsing above layer {}\n'.format( self.symSegmentLayer ))
self.symContactLayer = rg.getContactLayer( depth )
if self.side & (West|East):
self.symContactSize = ( self.bbSegment.getHeight(), self.bbSegment.getHeight() )

View File

@ -94,6 +94,8 @@ class Chip ( Block ):
self.validate()
minHCorona = self.conf.minHCorona
minVCorona = self.conf.minVCorona
trace( 550, '\tminHCorona={}\n'.format(DbU.getValueString( minHCorona )))
trace( 550, '\tminVCorona={}\n'.format(DbU.getValueString( minVCorona )))
else:
self.padsCorona = plugins.alpha.harness.pads.Corona( self )
self.padsCorona.doLayout()

View File

@ -153,13 +153,15 @@ class ChipConf ( BlockConf ):
self.railsCount = self.cfg.chip.block.rails.count + len(clockNets)
trace( 550, '\tself.railsCount: {}\n'.format(self.railsCount) )
hRailsSize = self.railsCount*(self.hRailWidth + self.hRailSpace) + self.hRailSpace
trace( 550, '\thRailsSize={}\n'.format(DbU.getValueString( hRailsSize )))
if hRailsSize % self.sliceHeight:
hRailsSize += self.sliceHeight - (hRailsSize % self.sliceHeight)
self.minHCorona = hRailsSize + self.sliceHeight
trace( 550, '\thRailsSize (sliceHeight)={}\n'.format(DbU.getValueString( hRailsSize )))
self.minHCorona = hRailsSize #+ self.sliceHeight
vRailsSize = self.railsCount*(self.vRailWidth + self.vRailSpace) + self.vRailSpace
if vRailsSize % self.sliceHeight:
vRailsSize += self.sliceHeight - (vRailsSize % self.sliceHeight)
self.minVCorona = vRailsSize + self.sliceHeight
self.minVCorona = vRailsSize #+ self.sliceHeight
def chipValidate ( self ):
#self.checkPads()

View File

@ -774,6 +774,7 @@ class Corona ( object ):
self.northSide.gap = self.southSide.gap
self.eastSide.gap = self.southSide.gap
self.westSide.gap = self.southSide.gap
trace( 550, '\tMinimum gap: {}\n'.format(DbU.getValueString( self.southSide.gap )))
for coronaPlug in self.conf.icorona.getPlugs():
chipIntNet = coronaPlug.getNet()
if not chipIntNet:
@ -802,6 +803,10 @@ class Corona ( object ):
raise ErrorMessage( 1, 'PadsCorona._placeInnerCorona(): Chip net "{}" is not connected to a pad.' \
.format(chipIntNet.getName()) )
self.conf.setupCorona( self.westSide.gap, self.southSide.gap, self.eastSide.gap, self.northSide.gap )
trace( 550, '\tWest side gap: {}\n'.format(DbU.getValueString( self.westSide.gap )))
trace( 550, '\tEast side gap: {}\n'.format(DbU.getValueString( self.eastSide.gap )))
trace( 550, '\tSouth side gap: {}\n'.format(DbU.getValueString( self.southSide.gap )))
trace( 550, '\tNorth side gap: {}\n'.format(DbU.getValueString( self.northSide.gap )))
self.coreSymBb = self.conf.getInstanceAb( self.conf.icorona )
self.coreSymBb.inflate( self.conf.toSymbolic( self.westSide.gap //2, Superior )
, self.conf.toSymbolic( self.southSide.gap//2, Superior )