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:
parent
bdb0091043
commit
3e921ff07a
|
@ -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
|
||||
|
|
|
@ -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() )
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 )
|
||||
|
|
Loading…
Reference in New Issue