86 lines
3.6 KiB
Python
Executable File
86 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
import traceback
|
|
import os.path
|
|
import optparse
|
|
try:
|
|
import helpers
|
|
from helpers import showPythonTrace
|
|
from helpers.io import ErrorMessage, catch
|
|
helpers.loadUserSettings()
|
|
import Cfg
|
|
import Hurricane
|
|
from Hurricane import DbU, UpdateSession, Breakpoint, Transformation, \
|
|
Cell, Instance
|
|
import Viewer
|
|
import CRL
|
|
import plugins.rsave
|
|
except Exception, e:
|
|
catch( e )
|
|
sys.exit(2)
|
|
|
|
|
|
framework = CRL.AllianceFramework.get()
|
|
|
|
|
|
def renameNMigen( occurrence ):
|
|
masterCell = occurrence.getEntity().getMasterCell()
|
|
origName = masterCell.getName()
|
|
replName = origName.replace( '$$', '_unm' )
|
|
if not masterCell.isTerminalNetlist() and not replName.startswith('cmpt_'):
|
|
replName = 'cmpt_' + replName
|
|
for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
|
|
replName = replName.replace(letter, letter.lower())
|
|
if origName != replName:
|
|
print( ' - "{}" => "{}"'.format(origName, replName) )
|
|
masterCell.setName( replName )
|
|
|
|
|
|
def renameNMigenUniquify ( topCell ):
|
|
for occurrence in topCell.getTerminalNetlistInstanceOccurrences():
|
|
renameNMigen(occurrence)
|
|
for occurrence in topCell.getNonTerminalNetlistInstanceOccurrences():
|
|
renameNMigen(occurrence)
|
|
return
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = optparse.OptionParser()
|
|
parser.add_option( '-c', '--cell' , type='string' , dest='cellName' , help='The name of the BLIF to convert, without extension.')
|
|
parser.add_option( '-v', '--verbose' , action='store_true', dest='verbose' , help='First level of verbosity.')
|
|
parser.add_option( '-V', '--very-verbose' , action='store_true', dest='veryVerbose' , help='Second level of verbosity.')
|
|
parser.add_option( '--vst-use-concat' , action='store_true', dest='vstUseConcat' , help='The VST driver will use "&" (concat) in PORT MAP.')
|
|
parser.add_option( '--vst-no-lowercase' , action='store_true', dest='vstNoLowerCase' , help='The VST will keep the case of all identifiers.')
|
|
parser.add_option( '--vst-uniquify-uppercase', action='store_true', dest='vstUniquifyUpperCase', help='The uppercase identifiers will be uniquified.')
|
|
parser.add_option( '--vst-no-linkage' , action='store_true', dest='vstNoLinkage' , help='Undefined direction will be set to "in" instead of "linkage".')
|
|
(options, args) = parser.parse_args()
|
|
|
|
views = CRL.Catalog.State.Logical
|
|
if options.verbose:
|
|
Cfg.getParamBool('misc.verboseLevel1').setBool(True)
|
|
if options.veryVerbose:
|
|
Cfg.getParamBool('misc.verboseLevel1').setBool(True)
|
|
Cfg.getParamBool('misc.verboseLevel2').setBool(True)
|
|
if options.vstUseConcat: views |= CRL.Catalog.State.VstUseConcat
|
|
if options.vstNoLowerCase: views |= CRL.Catalog.State.VstNoLowerCase
|
|
if options.vstUniquifyUpperCase: views |= CRL.Catalog.State.VstUniquifyUpperCase
|
|
if options.vstNoLinkage: views |= CRL.Catalog.State.VstNoLinkage
|
|
|
|
cell = CRL.Blif.load( options.cellName )
|
|
if cell.getName() == 'top':
|
|
print( ' o Renaming RTLIL anonymous top cell "top" into "{}".'.format(options.cellName) )
|
|
cell.setName( options.cellName )
|
|
renameNMigenUniquify( cell )
|
|
CRL.restoreNetsDirection( cell, Cell.Flags_TerminalNetlist )
|
|
|
|
kw = {}
|
|
kw['views'] = views
|
|
kw['cell' ] = cell
|
|
|
|
plugins.rsave.scriptMain( **kw )
|
|
|
|
sys.exit( 0 )
|