No longer directly use C++ exported symbols in configuration files.
* Change: In CRL Core, in Alliance.py, no longer requires the configuration file to uses symbols from CRL.Environment or CRL.RoutingLayerGauge. This way the <alliance.conf> file can be parsed by a different parser. In <alliance.conf>, for the various technologies, make uses of the new C++ independent constants. * New: In CRL Core, in helpers/__init__.py, provide a "Dots" class (rewrite the C++ one in pure Python).
This commit is contained in:
parent
b081d07bfc
commit
206309ddd9
|
@ -1,5 +1,8 @@
|
||||||
# -*- Mode:Python; explicit-buffer-name: "alliance.conf<cmos>" -*-
|
# -*- Mode:Python; explicit-buffer-name: "alliance.conf<cmos>" -*-
|
||||||
|
|
||||||
|
from helpers.Alliance import AddMode
|
||||||
|
from helpers.Alliance import Gauge
|
||||||
|
|
||||||
|
|
||||||
allianceTop = '/soc/alliance'
|
allianceTop = '/soc/alliance'
|
||||||
cellsTop = allianceTop+'/cells/'
|
cellsTop = allianceTop+'/cells/'
|
||||||
|
@ -13,13 +16,14 @@ allianceConfig = \
|
||||||
, ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' )
|
, ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' )
|
||||||
, ( 'CATALOG' , 'CATAL')
|
, ( 'CATALOG' , 'CATAL')
|
||||||
, ( 'WORKING_LIBRARY' , '.')
|
, ( 'WORKING_LIBRARY' , '.')
|
||||||
, ( 'SYSTEM_LIBRARY' , ( (cellsTop+'sxlib' , Environment.Append)
|
, ( 'SYSTEM_LIBRARY' , ( (cellsTop+'sxlib' , AddMode.Append)
|
||||||
, (cellsTop+'dp_sxlib', Environment.Append)
|
, (cellsTop+'dp_sxlib', AddMode.Append)
|
||||||
, (cellsTop+'ramlib' , Environment.Append)
|
, (cellsTop+'ramlib' , AddMode.Append)
|
||||||
, (cellsTop+'romlib' , Environment.Append)
|
, (cellsTop+'romlib' , AddMode.Append)
|
||||||
, (cellsTop+'rflib' , Environment.Append)
|
, (cellsTop+'rflib' , AddMode.Append)
|
||||||
, (cellsTop+'rf2lib' , Environment.Append)
|
, (cellsTop+'rf2lib' , AddMode.Append)
|
||||||
, (cellsTop+'pxlib' , Environment.Append) ) )
|
, (cellsTop+'pxlib' , AddMode.Append)
|
||||||
|
, (cellsTop+'padlib' , AddMode.Append) ) )
|
||||||
, ( 'SCALE_X' , 100)
|
, ( 'SCALE_X' , 100)
|
||||||
, ( 'IN_LO' , 'vst')
|
, ( 'IN_LO' , 'vst')
|
||||||
, ( 'IN_PH' , 'ap')
|
, ( 'IN_PH' , 'ap')
|
||||||
|
@ -30,9 +34,10 @@ allianceConfig = \
|
||||||
, ( 'CLOCK' , '^ck.*')
|
, ( 'CLOCK' , '^ck.*')
|
||||||
, ( 'BLOCKAGE' , '^blockage[Nn]et*')
|
, ( 'BLOCKAGE' , '^blockage[Nn]et*')
|
||||||
# The following are only read by the Alliance tool wrappers.
|
# The following are only read by the Alliance tool wrappers.
|
||||||
|
, ( 'ALLIANCE_TOP' , allianceTop)
|
||||||
, ( 'MBK_TARGET_LIB' , cellsTop+'sxlib')
|
, ( 'MBK_TARGET_LIB' , cellsTop+'sxlib')
|
||||||
, ( 'RDS_TECHNO_NAME' , allianceTop+'/cmos.rds')
|
, ( 'RDS_TECHNO_NAME' , allianceTop+'/etc/cmos.rds')
|
||||||
, ( 'GRAAL_TECHNO_NAME' , allianceTop+'/graal.rds')
|
, ( 'GRAAL_TECHNO_NAME' , allianceTop+'/etc/graal.rds')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,13 +48,13 @@ allianceConfig = \
|
||||||
routingGaugesTable = {}
|
routingGaugesTable = {}
|
||||||
|
|
||||||
routingGaugesTable['sxlib'] = \
|
routingGaugesTable['sxlib'] = \
|
||||||
( ( 'METAL1', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.PinOnly, 0, 0.0, 0, 5, 2, 2 ) )
|
( ( 'METAL1', ( Gauge.Vertical , Gauge.PinOnly, 0, 0.0, 0, 5, 2, 2 ) )
|
||||||
, ( 'METAL2', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 1, 7.0, 0, 5, 2, 2 ) )
|
, ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, 0, 5, 2, 2 ) )
|
||||||
, ( 'METAL3', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 2, 0.0, 0, 5, 2, 2 ) )
|
, ( 'METAL3', ( Gauge.Vertical , Gauge.Default, 2, 0.0, 0, 5, 2, 2 ) )
|
||||||
, ( 'METAL4', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 3, 0.0, 0, 5, 2, 2 ) )
|
, ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, 0, 5, 2, 2 ) )
|
||||||
, ( 'METAL5', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 4, 0.0, 0, 5, 2, 2 ) )
|
, ( 'METAL5', ( Gauge.Vertical , Gauge.Default, 4, 0.0, 0, 5, 2, 2 ) )
|
||||||
#, ( 'METAL6', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 5, 0.0, 0, 5, 2, 2 ) )
|
#, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, 0, 5, 2, 2 ) )
|
||||||
#, ( 'METAL7', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 6, 0.0, 0, 5, 2, 2 ) )
|
#, ( 'METAL7', ( Gauge.Vertical , Gauge.Default, 6, 0.0, 0, 5, 2, 2 ) )
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
# -*- Mode:Python; explicit-buffer-name: "alliance.conf<vsc200>" -*-
|
# -*- Mode:Python; explicit-buffer-name: "alliance.conf<vsc200>" -*-
|
||||||
|
|
||||||
|
from helpers.Alliance import AddMode
|
||||||
|
from helpers.Alliance import Gauge
|
||||||
|
|
||||||
|
|
||||||
cellsTop = '/usr/share/pharosc/alliance/cells/'
|
cellsTop = '/usr/share/pharosc/alliance/cells/'
|
||||||
|
|
||||||
|
@ -12,7 +15,7 @@ allianceConfig = \
|
||||||
, ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' )
|
, ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' )
|
||||||
, ( 'CATALOG' , 'CATAL')
|
, ( 'CATALOG' , 'CATAL')
|
||||||
, ( 'WORKING_LIBRARY' , '.')
|
, ( 'WORKING_LIBRARY' , '.')
|
||||||
, ( 'SYSTEM_LIBRARY' , ( (cellsTop+'vsclib' , Environment.Append)
|
, ( 'SYSTEM_LIBRARY' , ( (cellsTop+'vsclib' , AddMode.Append)
|
||||||
, ) )
|
, ) )
|
||||||
, ( 'SCALE_X' , 100)
|
, ( 'SCALE_X' , 100)
|
||||||
, ( 'IN_LO' , 'vst')
|
, ( 'IN_LO' , 'vst')
|
||||||
|
@ -33,13 +36,13 @@ allianceConfig = \
|
||||||
routingGaugesTable = {}
|
routingGaugesTable = {}
|
||||||
|
|
||||||
routingGaugesTable['vsclib'] = \
|
routingGaugesTable['vsclib'] = \
|
||||||
( ( 'METAL1', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.PinOnly, 0, 0.0, 4, 8, 3, 2 ) )
|
( ( 'METAL1', ( Gauge.Vertical , Gauge.PinOnly, 0, 0.0, 4, 8, 3, 2 ) )
|
||||||
, ( 'METAL2', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 1, 7.0, 0, 8, 4, 2 ) )
|
, ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, 0, 8, 4, 2 ) )
|
||||||
, ( 'METAL3', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 2, 0.0, 4, 8, 4, 2 ) )
|
, ( 'METAL3', ( Gauge.Vertical , Gauge.Default, 2, 0.0, 4, 8, 4, 2 ) )
|
||||||
, ( 'METAL4', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 3, 0.0, 0, 8, 4, 2 ) )
|
, ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, 0, 8, 4, 2 ) )
|
||||||
, ( 'METAL5', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 4, 0.0, 4, 8, 4, 2 ) )
|
, ( 'METAL5', ( Gauge.Vertical , Gauge.Default, 4, 0.0, 4, 8, 4, 2 ) )
|
||||||
#, ( 'METAL6', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 5, 0.0, 0, 8, 4, 2 ) )
|
#, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, 0, 8, 4, 2 ) )
|
||||||
#, ( 'METAL7', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 6, 0.0, 4, 8, 4, 2 ) )
|
#, ( 'METAL7', ( Gauge.Vertical , Gauge.Default, 6, 0.0, 4, 8, 4, 2 ) )
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
|
# -*- Mode:Python; explicit-buffer-name: "Alliance.py<crlcore/helpers>" -*-
|
||||||
|
#
|
||||||
|
# This file is part of the Coriolis Software.
|
||||||
|
# Copyright (c) UPMC 2012-2014, All Rights Reserved
|
||||||
|
#
|
||||||
|
# +-----------------------------------------------------------------+
|
||||||
|
# | C O R I O L I S |
|
||||||
|
# | Alliance / Hurricane Interface |
|
||||||
|
# | |
|
||||||
|
# | Author : Jean-Paul CHAPUT |
|
||||||
|
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
|
# | =============================================================== |
|
||||||
|
# | Python : "./crlcore/helpers/Alliance.py" |
|
||||||
|
# +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -21,6 +36,35 @@ import helpers.SymbolicTechnology
|
||||||
allianceFile = '<allianceFile has not been set>'
|
allianceFile = '<allianceFile has not been set>'
|
||||||
|
|
||||||
|
|
||||||
|
class AddMode ( object ):
|
||||||
|
|
||||||
|
Append = 1
|
||||||
|
Prepend = 2
|
||||||
|
Replace = 3
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def toEnvironment ( mode ):
|
||||||
|
if mode == AddMode.Prepend: return Environment.Prepend
|
||||||
|
if mode == AddMode.Replace: return Environment.Replace
|
||||||
|
return Environment.Append
|
||||||
|
|
||||||
|
|
||||||
|
class Gauge ( object ):
|
||||||
|
|
||||||
|
Vertical = 1
|
||||||
|
Horizontal = 2
|
||||||
|
PinOnly = 3
|
||||||
|
Default = 4
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def toRlGauge ( value ):
|
||||||
|
if value == Gauge.Vertical: return RoutingLayerGauge.Vertical
|
||||||
|
if value == Gauge.Horizontal: return RoutingLayerGauge.Horizontal
|
||||||
|
if value == Gauge.PinOnly: return RoutingLayerGauge.PinOnly
|
||||||
|
if value == Gauge.Default: return RoutingLayerGauge.Default
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def xmlToConf ( xmlPath ):
|
def xmlToConf ( xmlPath ):
|
||||||
hasExtention = False
|
hasExtention = False
|
||||||
components = xmlPath.split(os.sep)
|
components = xmlPath.split(os.sep)
|
||||||
|
@ -77,7 +121,7 @@ def _loadAllianceConfig ( af, allianceConfig ):
|
||||||
,str(libraryEntry)
|
,str(libraryEntry)
|
||||||
])
|
])
|
||||||
libPath, mode = libraryEntry
|
libPath, mode = libraryEntry
|
||||||
env.addSYSTEM_LIBRARY(library=libPath,mode=mode)
|
env.addSYSTEM_LIBRARY(library=libPath,mode=AddMode.toEnvironment(mode))
|
||||||
|
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
ErrorMessage.wrapPrint(e,'In %s:<Alliance> at index %d.' % (allianceFile,entryNo))
|
ErrorMessage.wrapPrint(e,'In %s:<Alliance> at index %d.' % (allianceFile,entryNo))
|
||||||
|
@ -119,14 +163,14 @@ def loadRoutingGaugesTable ( routingGaugesTable, fromFile ):
|
||||||
])
|
])
|
||||||
|
|
||||||
gauge.addLayerGauge( RoutingLayerGauge.create( technology.getLayer(entry[0])
|
gauge.addLayerGauge( RoutingLayerGauge.create( technology.getLayer(entry[0])
|
||||||
, entry[1][0] # Direction.
|
, Gauge.toRlGauge(entry[1][0]) # Direction.
|
||||||
, entry[1][1] # Type.
|
, Gauge.toRlGauge(entry[1][1]) # Type.
|
||||||
, entry[1][2] # Depth.
|
, entry[1][2] # Depth.
|
||||||
, entry[1][3] # Density.
|
, entry[1][3] # Density.
|
||||||
, DbU.fromLambda(entry[1][4]) # Offset.
|
, DbU.fromLambda(entry[1][4]) # Offset.
|
||||||
, DbU.fromLambda(entry[1][5]) # Pitch.
|
, DbU.fromLambda(entry[1][5]) # Pitch.
|
||||||
, DbU.fromLambda(entry[1][6]) # Wire width.
|
, DbU.fromLambda(entry[1][6]) # Wire width.
|
||||||
, DbU.fromLambda(entry[1][7]) # Via width.
|
, DbU.fromLambda(entry[1][7]) # Via width.
|
||||||
) )
|
) )
|
||||||
|
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# -*- mode:Python -*-
|
# -*- mode:Python; explicit-buffer-name: "__init__.py<crlcore/helpers>" -*-
|
||||||
#
|
#
|
||||||
# This file is part of the Coriolis Software.
|
# This file is part of the Coriolis Software.
|
||||||
# Copyright (c) UPMC 2012-2014, All Rights Reserved
|
# Copyright (c) UPMC 2012-2014, All Rights Reserved
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
# | Author : Jean-Paul Chaput |
|
# | Author : Jean-Paul Chaput |
|
||||||
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
# | =============================================================== |
|
# | =============================================================== |
|
||||||
# | Python : "./builder/__init__.py" |
|
# | Python : "./crlcore/__init__.py" |
|
||||||
# +-----------------------------------------------------------------+
|
# +-----------------------------------------------------------------+
|
||||||
#
|
#
|
||||||
# This is file is mandatory to tell python that 'helpers' is a module
|
# This is file is mandatory to tell python that 'helpers' is a module
|
||||||
|
@ -137,6 +137,37 @@ class WarningMessage ( Exception ):
|
||||||
return formatted
|
return formatted
|
||||||
|
|
||||||
|
|
||||||
|
class Dots ( object ):
|
||||||
|
|
||||||
|
def __init__ (self, header="", width=73):
|
||||||
|
self._header = header
|
||||||
|
self._width = width - len(self._header)
|
||||||
|
self._count = 0
|
||||||
|
return
|
||||||
|
|
||||||
|
def dot (self):
|
||||||
|
if self._count == 0:
|
||||||
|
sys.stdout.write(self._header)
|
||||||
|
else:
|
||||||
|
if not (self._count % self._width):
|
||||||
|
sys.stdout.write("\n%s"%self._header)
|
||||||
|
|
||||||
|
sys.stdout.write(".")
|
||||||
|
sys.stdout.flush()
|
||||||
|
self._count += 1
|
||||||
|
return
|
||||||
|
|
||||||
|
def flush (self):
|
||||||
|
sys.stdout.write("\n")
|
||||||
|
sys.stdout.flush()
|
||||||
|
return
|
||||||
|
|
||||||
|
def reset (self):
|
||||||
|
self._count = 0
|
||||||
|
self.flush()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
def staticInitialization ():
|
def staticInitialization ():
|
||||||
global sysConfDir
|
global sysConfDir
|
||||||
global symbolicDir
|
global symbolicDir
|
||||||
|
|
Loading…
Reference in New Issue