137 lines
4.6 KiB
Python
137 lines
4.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
try:
|
||
|
import sys
|
||
|
import traceback
|
||
|
import os.path
|
||
|
import optparse
|
||
|
import Cfg
|
||
|
import Hurricane
|
||
|
from Hurricane import DbU
|
||
|
from Hurricane import UpdateSession
|
||
|
from Hurricane import Breakpoint
|
||
|
from Hurricane import Transformation
|
||
|
from Hurricane import Instance
|
||
|
import Viewer
|
||
|
import CRL
|
||
|
from helpers import ErrorMessage
|
||
|
import Nimbus
|
||
|
import Metis
|
||
|
import Mauka
|
||
|
import Katabatic
|
||
|
import Kite
|
||
|
import Unicorn
|
||
|
import plugins.ChipPlugin
|
||
|
import plugins.RSavePlugin
|
||
|
except ImportError, e:
|
||
|
serror = str(e)
|
||
|
if serror.startswith('No module named'):
|
||
|
module = serror.split()[-1]
|
||
|
print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module
|
||
|
print ' Please check the integrity of the <coriolis> package.'
|
||
|
sys.exit(1)
|
||
|
if str(e).find('cannot open shared object file'):
|
||
|
library = serror.split(':')[0]
|
||
|
print '[ERROR] The <%s> shared library cannot be loaded.' % library
|
||
|
print ' Under RHEL 6, you must be under devtoolset-2.'
|
||
|
print ' (scl enable devtoolset-2 bash)'
|
||
|
sys.exit(1)
|
||
|
except Exception, e:
|
||
|
print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python'
|
||
|
print ' modules. Something may be wrong at Python/C API level.\n'
|
||
|
print ' %s' % e
|
||
|
sys.exit(2)
|
||
|
|
||
|
|
||
|
DoPlacement = 0x0001
|
||
|
DoRouting = 0x0002
|
||
|
AllStages = DoPlacement|DoRouting
|
||
|
|
||
|
framework = CRL.AllianceFramework.get()
|
||
|
|
||
|
|
||
|
def ScriptMain ( **kw ):
|
||
|
success = False
|
||
|
doStages = AllStages
|
||
|
if kw.has_key('doStages'):
|
||
|
doStages = kw['doStages']
|
||
|
try:
|
||
|
cell, editor = plugins.kwParseMain( **kw )
|
||
|
|
||
|
if doStages & DoPlacement:
|
||
|
success = plugins.ChipPlugin.ScriptMain( **kw )
|
||
|
if not success: return False
|
||
|
|
||
|
if doStages & DoRouting:
|
||
|
routingNets = []
|
||
|
kite = Kite.KiteEngine.create( cell )
|
||
|
#kite.printConfiguration()
|
||
|
|
||
|
kite.runGlobalRouter ( Kite.KtBuildGlobalRouting )
|
||
|
kite.loadGlobalRouting( Katabatic.EngineLoadGrByNet, routingNets )
|
||
|
kite.layerAssign ( Katabatic.EngineNoNetLayerAssign )
|
||
|
kite.runNegociate ()
|
||
|
success = kite.getToolSuccess()
|
||
|
kite.finalizeLayout()
|
||
|
kite.destroy()
|
||
|
cell.setName( cell.getName()+'_kite' )
|
||
|
framework.saveCell( cell, CRL.Catalog.State.Logical )
|
||
|
|
||
|
plugins.RSavePlugin.ScriptMain( **kw )
|
||
|
|
||
|
except Exception, e:
|
||
|
print e
|
||
|
|
||
|
return success
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
parser = optparse.OptionParser()
|
||
|
parser.add_option( '-c', '--cell' , type='string', dest='cell' , help='The name of the chip to build, whithout extension.')
|
||
|
parser.add_option( '-s', '--script', type='string', dest='script' , help='The name of a Python script, 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( '-p', '--place' , action='store_true', dest='doPlacement', help='Perform chip placement step only.')
|
||
|
parser.add_option( '-r', '--route' , action='store_true', dest='doRouting' , help='Perform routing step only.')
|
||
|
(options, args) = parser.parse_args()
|
||
|
|
||
|
|
||
|
doStages = 0
|
||
|
if options.verbose: Cfg.getParamBool('misc.verboseLevel1').setBool(True)
|
||
|
if options.veryVerbose: Cfg.getParamBool('misc.verboseLevel2').setBool(True)
|
||
|
if options.doPlacement: doStages |= DoPlacement
|
||
|
if options.doRouting: doStages |= DoRouting
|
||
|
if not doStages: doStages = AllStages
|
||
|
|
||
|
kw = { 'doStages':doStages }
|
||
|
if options.script:
|
||
|
try:
|
||
|
module = __import__( options.script, globals(), locals() )
|
||
|
if not module.__dict__.has_key('ScriptMain'):
|
||
|
print '[ERROR] Script module <%s> do not contains a ScripMain() function.' % options.script
|
||
|
sys.exit(1)
|
||
|
|
||
|
cell = module.__dict__['ScriptMain']( **kw )
|
||
|
kw['cell'] = cell
|
||
|
|
||
|
except ImportError, e:
|
||
|
module = str(e).split()[-1]
|
||
|
|
||
|
print '[ERROR] The <%s> script cannot be loaded.' % module
|
||
|
print ' Please check your design hierarchy.'
|
||
|
sys.exit(1)
|
||
|
except Exception, e:
|
||
|
print '[ERROR] A strange exception occurred while loading the Python'
|
||
|
print ' script <%s>. Please check that module for error:\n' % options.script
|
||
|
traceback.print_tb(sys.exc_info()[2])
|
||
|
print ' %s' % e
|
||
|
sys.exit(2)
|
||
|
elif options.cell:
|
||
|
kw['cell'] = framework.getCell( options.cell, CRL.Catalog.State.Views )
|
||
|
|
||
|
success = ScriptMain( **kw )
|
||
|
shellSuccess = 0
|
||
|
if not success: shellSuccess = 1
|
||
|
|
||
|
sys.exit( shellSuccess )
|