Fix, again, the save procedure in cumulus/plugins.chip & block.

* Bug: In cumulus/plugins.chip.Chip.save(), now completely delegate the
    saving procedure to the base class (i.e. Block.save() which is
    BlockConf.save()).
* Bug/Change: In cumulus/plugins.block.configuration.BlockConf.save(),
    Now manage all the configutation, whether it is a simple block or
    a whole chip.
      In the case of a whole chip we must force the saving on both
    chip and corona as the later, being P&R will be seen as a terminal
    block and not recursively saved.
This commit is contained in:
Jean-Paul Chaput 2021-05-12 12:12:52 +02:00
parent c80e99c0a1
commit 7ffe75110b
2 changed files with 12 additions and 30 deletions

View File

@ -1207,24 +1207,6 @@ class BlockConf ( GaugeConf ):
trace( 550, '\tNew cloned cell: "{}"\n'.format(masterCell) )
self.cloneds.append( masterCell )
return
#def rsave ( self, cell, depth ):
# """
# Save the complete cell hierarchy. Saves only the physical view, except
# for the ones that has been cloned (their names should end up by "_cts"),
# for which logical and physical views are to be saved. They are completely
# new cells.
# """
# if depth == 0: print( ' o Block Recursive Save-Cell.' )
# flags = CRL.Catalog.State.Physical
# if cell.getName().endswith('_cts'): flags |= CRL.Catalog.State.Logical
# if cell.isUniquified(): flags |= CRL.Catalog.State.Logical
# self.framework.saveCell( cell, flags )
# print( ' {}+ {}.'.format(' '*(depth*2), cell.getName() ) )
# for instance in cell.getInstances():
# masterCell = instance.getMasterCell()
# if not masterCell.isTerminalNetlist():
# self.rsave( masterCell, depth+1 )
def save ( self, flags ):
"""
@ -1232,19 +1214,24 @@ class BlockConf ( GaugeConf ):
cells, then call rsave().
"""
trace( 550,'\tBlockConf.save() on "{}"\n'.format(self.cell.getName()) )
views = CRL.Catalog.State.Logical
if self.routingGauge.isSymbolic():
views = views | CRL.Catalog.State.Physical
for cell in self.cloneds:
trace( 550, '\tRenaming cloned cell: "{}"\n'.format(cell) )
cell.setName( cell.getName()+'_cts' )
if self.chip is None:
topCell = self.cell
self.cell.setName( self.cell.getName()+'_r' )
views = CRL.Catalog.State.Logical
if self.routingGauge.isSymbolic():
views = views | CRL.Catalog.State.Physical
rsave( self.cell, views|flags )
if not self.routingGauge.isSymbolic():
rsave( topCell, views|flags )
else:
topCell = self.chip
if topCell is None:
topCell = self.cell
self.corona.setName( self.corona.getName()+'_r' )
self.chip .setName( self.chip .getName()+'_r' )
rsave( self.corona, views|flags )
rsave( self.chip , views|flags )
if not self.routingGauge.isSymbolic():
print( ' + {} (GDSII).'.format( topCell.getName() ))
CRL.Gds.save( topCell )
return

View File

@ -147,8 +147,3 @@ class Chip ( Block ):
if self.conf.routingGauge.isSymbolic():
views = views | CRL.Catalog.State.Physical
super(Chip,self).save( flags )
self.conf.corona.setName( self.conf.corona.getName()+'_r' )
self.conf.chip .setName( self.conf.chip .getName()+'_r' )
af = CRL.AllianceFramework.get()
af.saveCell( self.conf.corona, views|flags )
af.saveCell( self.conf.chip , views|flags )