Modify the chain of "save()" calls in chip/block to pass on flags.

* Change: In cumulus/plugins.block.configuration.BlockConf.save(),
             cumulus/plugins.block.Block.save(),
             cumulus/plugins.chip.Chip.save(),
             cumulus/plugins.core2chip.core2chip.CoreToChip.buildChip(),
    Add a "flags" parameter to control the way logical views (aka "vst")
    are saved. Mainly allowing to pass on the VstUseConcat option in
    order for Alliance tools to be able to read them back (lvx, asimut).
* Change: In cumulus/plugins.core2chip.core2chip.CoreToChip.buildChip(),
    don't stop at the first I/O pad signal missing on the core, but
    display all the missing ones (LKCL proposal).
This commit is contained in:
Jean-Paul Chaput 2020-12-05 11:59:48 +01:00
parent 1411739c0b
commit 51028980c9
4 changed files with 11 additions and 10 deletions

View File

@ -619,10 +619,10 @@ class Block ( object ):
blockIns = BlockInstance( tailInstance, transf ) blockIns = BlockInstance( tailInstance, transf )
self.blockInstances.append( blockIns ) self.blockInstances.append( blockIns )
def save ( self ): def save ( self, flags=0 ):
if not self.conf.validated: if not self.conf.validated:
raise ErrorMessage( 1, 'block.save(): Chip is not valid, aborting.' ) raise ErrorMessage( 1, 'block.save(): Chip is not valid, aborting.' )
self.conf.save() self.conf.save( flags )
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------

View File

@ -1182,7 +1182,7 @@ class BlockConf ( GaugeConf ):
# if not masterCell.isTerminalNetlist(): # if not masterCell.isTerminalNetlist():
# self.rsave( masterCell, depth+1 ) # self.rsave( masterCell, depth+1 )
def save ( self ): def save ( self, flags ):
""" """
Frontend to BlockConf.rsave(). Append the "_cts" suffix to the cloned Frontend to BlockConf.rsave(). Append the "_cts" suffix to the cloned
cells, then call rsave(). cells, then call rsave().
@ -1193,5 +1193,5 @@ class BlockConf ( GaugeConf ):
cell.setName( cell.getName()+'_cts' ) cell.setName( cell.getName()+'_cts' )
if self.chip is None: if self.chip is None:
self.cell.setName( self.cell.getName()+'_r' ) self.cell.setName( self.cell.getName()+'_r' )
rsave( self.cell ) rsave( self.cell, CRL.Catalog.State.Physical|flags )
return return

View File

@ -145,12 +145,12 @@ class Chip ( Block ):
self.conf.refresh( self.conf.chip ) self.conf.refresh( self.conf.chip )
return self.conf.validated return self.conf.validated
def save ( self ): def save ( self, flags=0 ):
if not self.conf.validated: if not self.conf.validated:
raise ErrorMessage( 1, 'chip.save(): Chip is not valid, aborting.' ) raise ErrorMessage( 1, 'chip.save(): Chip is not valid, aborting.' )
super(Chip,self).save() super(Chip,self).save( flags )
self.conf.corona.setName( self.conf.corona.getName()+'_r' ) self.conf.corona.setName( self.conf.corona.getName()+'_r' )
self.conf.chip .setName( self.conf.chip .getName()+'_r' ) self.conf.chip .setName( self.conf.chip .getName()+'_r' )
af = CRL.AllianceFramework.get() af = CRL.AllianceFramework.get()
af.saveCell( self.conf.corona, CRL.Catalog.State.Views ) af.saveCell( self.conf.corona, CRL.Catalog.State.Views|flags )
af.saveCell( self.conf.chip , CRL.Catalog.State.Views ) af.saveCell( self.conf.chip , CRL.Catalog.State.Views|flags )

View File

@ -630,8 +630,9 @@ class CoreToChip ( object ):
if netName is None: continue if netName is None: continue
coreNet = self.core.getNet( netName ) coreNet = self.core.getNet( netName )
if not coreNet: if not coreNet:
raise ErrorMessage( 1, 'CoreToChip.buildChip(): Pad "{}" refer net "{}" which do not exist in core "{}".' \ print( ErrorMessage( 1, 'CoreToChip.buildChip(): Pad "{}" refer net "{}" which do not exist in core "{}".' \
.format(ioPadConf.instanceName,netName,self.core.getName()) ) .format(ioPadConf.instanceName,netName,self.core.getName()) ))
continue
ioNet = self.getIoNet( coreNet ) ioNet = self.getIoNet( coreNet )
if ioPadConf.isBidir() or ioPadConf.isTristate(): if ioPadConf.isBidir() or ioPadConf.isTristate():
if coreNet.getName() == ioPadConf.enableNetName: if coreNet.getName() == ioPadConf.enableNetName: