2014-05-21 17:13:17 -05:00
|
|
|
# -*- Mode:Python; explicit-buffer-name: "technology.conf<cmos>" -*-
|
2012-11-16 06:49:47 -06:00
|
|
|
|
Correct handling of lambdas & microns in configuration files.
* Bug: In CRL/etc/NODE/VENDOR/Technology.conf, the database must be configured
as early has possible so the functions ensuring length conversions can
work correctly (l(v), u(v)). So we can no longer rely on a table to be
read after the execution of the file. We perform a direct call to the
helpers.Technology.initTechno() function. And it must be made first
thing.
In all tables taking dimensions, we must use one of the converter
function helpers.l(v), helpers.u(v) or helpers.n(v) so the the value v
get converted in lambda, microns or nanometer (resp.). Make the
modifications in all technology.conf and kite.conf files.
* Change: In CRL/coriolisInit.py, remove the technoConfig variable that has
been replaced by a direct call to helpers.Technology.initTechno().
* Change: In CRL/helpers.Alliance.loadRoutingGaugesTable(), no longer try to
convert coordinates, they must already be in DbU.
* Change: In CRL/helpers.__init__.py, remove lambdaMode() and micronsMode()
they could not be made to work as expected. Create l(), u(), n() as
replacement.
2018-07-16 04:32:40 -05:00
|
|
|
from Hurricane import DbU
|
|
|
|
from helpers import sysConfDir
|
|
|
|
from helpers import l, u, n
|
|
|
|
from helpers.Technology import initTechno
|
2012-11-16 06:49:47 -06:00
|
|
|
|
2014-05-21 17:13:17 -05:00
|
|
|
# The informations here are extracted from the Alliance ".rds" file,
|
|
|
|
# and must be coherent with it.
|
2012-11-16 06:49:47 -06:00
|
|
|
#
|
2014-05-21 17:13:17 -05:00
|
|
|
# Provides standard settings for:
|
|
|
|
# - <viewerConfig>
|
|
|
|
# - <realLayersTable>
|
Cleaner support for real technologies (Hurricane, CRL Core configuration).
* Change: In Hurricane::Technology, in all the layer connexity methods
(getLayers(), getMetalAbove(), getCutAbove(), getViaBetween(), ...)
the "useWorking" parameter is replaced by a more accurate "useSymbolic".
BEHAVIOR CHANGE: formerly, if a symbolic layer was requested, and
none was found, NULL was returned. Now, if the symbolic layer is not
found, we try to return the associated real one (same layer mask,
but not flagged as symbolic, and usually with a lowercase name).
All thoses changes have been propagated to Python bindings.
* Change: In Hurricane::BasicLayer and derived classes, rename the
"isWorking" attribute into "isSymbolic" (to match the technology
renaming).
* Change: In Hurricane::Cell::flattenNets(), ignore power, ground and
blockage nets for the flatten.
* Change: In CRL Core, in coriolisInit.py and Technology.py helpers,
rename the tables describing the technology as follow:
- symbolicLayersTable --> compositeLayersTable
- workingLayersTable --> symbolicLayersTable
- symbolicRulesTable --> layersExtensionsTable
This is to give the table names a more clearer semantic after
merging real technologies configurations (testbench AMS c35b4).
In particular, we need to define a composite layer for the
real VIAs, and not only the symbolic ones. And with correct
enclosures expressed in real dimensions (microns).
2017-12-27 06:13:29 -06:00
|
|
|
# - <compositeLayersTable>
|
2014-05-21 17:13:17 -05:00
|
|
|
# - <symbolicLayersTable>
|
2012-11-16 06:49:47 -06:00
|
|
|
|
2019-02-26 13:00:28 -06:00
|
|
|
initTechno( { 'name' : 'cmos45'
|
Correct handling of lambdas & microns in configuration files.
* Bug: In CRL/etc/NODE/VENDOR/Technology.conf, the database must be configured
as early has possible so the functions ensuring length conversions can
work correctly (l(v), u(v)). So we can no longer rely on a table to be
read after the execution of the file. We perform a direct call to the
helpers.Technology.initTechno() function. And it must be made first
thing.
In all tables taking dimensions, we must use one of the converter
function helpers.l(v), helpers.u(v) or helpers.n(v) so the the value v
get converted in lambda, microns or nanometer (resp.). Make the
modifications in all technology.conf and kite.conf files.
* Change: In CRL/coriolisInit.py, remove the technoConfig variable that has
been replaced by a direct call to helpers.Technology.initTechno().
* Change: In CRL/helpers.Alliance.loadRoutingGaugesTable(), no longer try to
convert coordinates, they must already be in DbU.
* Change: In CRL/helpers.__init__.py, remove lambdaMode() and micronsMode()
they could not be made to work as expected. Create l(), u(), n() as
replacement.
2018-07-16 04:32:40 -05:00
|
|
|
, 'precision' : 2
|
|
|
|
, 'gridValue' : 0.005
|
|
|
|
, 'gridUnit' : DbU.UnitPowerMicro
|
|
|
|
, 'gridsPerLambda' : 24
|
|
|
|
, 'symbolicGridStep' : 1.0
|
|
|
|
, 'polygonStep' : 24.0
|
|
|
|
} )
|
2012-11-16 06:49:47 -06:00
|
|
|
|
Correct handling of lambdas & microns in configuration files.
* Bug: In CRL/etc/NODE/VENDOR/Technology.conf, the database must be configured
as early has possible so the functions ensuring length conversions can
work correctly (l(v), u(v)). So we can no longer rely on a table to be
read after the execution of the file. We perform a direct call to the
helpers.Technology.initTechno() function. And it must be made first
thing.
In all tables taking dimensions, we must use one of the converter
function helpers.l(v), helpers.u(v) or helpers.n(v) so the the value v
get converted in lambda, microns or nanometer (resp.). Make the
modifications in all technology.conf and kite.conf files.
* Change: In CRL/coriolisInit.py, remove the technoConfig variable that has
been replaced by a direct call to helpers.Technology.initTechno().
* Change: In CRL/helpers.Alliance.loadRoutingGaugesTable(), no longer try to
convert coordinates, they must already be in DbU.
* Change: In CRL/helpers.__init__.py, remove lambdaMode() and micronsMode()
they could not be made to work as expected. Create l(), u(), n() as
replacement.
2018-07-16 04:32:40 -05:00
|
|
|
execfile( sysConfDir+'/common/technology.conf' )
|
2017-11-17 04:10:32 -06:00
|
|
|
|
|
|
|
|
Cleaner support for real technologies (Hurricane, CRL Core configuration).
* Change: In Hurricane::Technology, in all the layer connexity methods
(getLayers(), getMetalAbove(), getCutAbove(), getViaBetween(), ...)
the "useWorking" parameter is replaced by a more accurate "useSymbolic".
BEHAVIOR CHANGE: formerly, if a symbolic layer was requested, and
none was found, NULL was returned. Now, if the symbolic layer is not
found, we try to return the associated real one (same layer mask,
but not flagged as symbolic, and usually with a lowercase name).
All thoses changes have been propagated to Python bindings.
* Change: In Hurricane::BasicLayer and derived classes, rename the
"isWorking" attribute into "isSymbolic" (to match the technology
renaming).
* Change: In Hurricane::Cell::flattenNets(), ignore power, ground and
blockage nets for the flatten.
* Change: In CRL Core, in coriolisInit.py and Technology.py helpers,
rename the tables describing the technology as follow:
- symbolicLayersTable --> compositeLayersTable
- workingLayersTable --> symbolicLayersTable
- symbolicRulesTable --> layersExtensionsTable
This is to give the table names a more clearer semantic after
merging real technologies configurations (testbench AMS c35b4).
In particular, we need to define a composite layer for the
real VIAs, and not only the symbolic ones. And with correct
enclosures expressed in real dimensions (microns).
2017-12-27 06:13:29 -06:00
|
|
|
# Format of <layersExtensionsTable>:
|
2012-11-16 06:49:47 -06:00
|
|
|
# Each entry is a pair of (string, value).
|
Cleaner support for real technologies (Hurricane, CRL Core configuration).
* Change: In Hurricane::Technology, in all the layer connexity methods
(getLayers(), getMetalAbove(), getCutAbove(), getViaBetween(), ...)
the "useWorking" parameter is replaced by a more accurate "useSymbolic".
BEHAVIOR CHANGE: formerly, if a symbolic layer was requested, and
none was found, NULL was returned. Now, if the symbolic layer is not
found, we try to return the associated real one (same layer mask,
but not flagged as symbolic, and usually with a lowercase name).
All thoses changes have been propagated to Python bindings.
* Change: In Hurricane::BasicLayer and derived classes, rename the
"isWorking" attribute into "isSymbolic" (to match the technology
renaming).
* Change: In Hurricane::Cell::flattenNets(), ignore power, ground and
blockage nets for the flatten.
* Change: In CRL Core, in coriolisInit.py and Technology.py helpers,
rename the tables describing the technology as follow:
- symbolicLayersTable --> compositeLayersTable
- workingLayersTable --> symbolicLayersTable
- symbolicRulesTable --> layersExtensionsTable
This is to give the table names a more clearer semantic after
merging real technologies configurations (testbench AMS c35b4).
In particular, we need to define a composite layer for the
real VIAs, and not only the symbolic ones. And with correct
enclosures expressed in real dimensions (microns).
2017-12-27 06:13:29 -06:00
|
|
|
# * string: a synthetic way to designate the real or symbolic layer on
|
|
|
|
# which it applies, an optional sub layer (BasicLayer) in case
|
|
|
|
# where there is more than one, and the dimension name.
|
Correct handling of lambdas & microns in configuration files.
* Bug: In CRL/etc/NODE/VENDOR/Technology.conf, the database must be configured
as early has possible so the functions ensuring length conversions can
work correctly (l(v), u(v)). So we can no longer rely on a table to be
read after the execution of the file. We perform a direct call to the
helpers.Technology.initTechno() function. And it must be made first
thing.
In all tables taking dimensions, we must use one of the converter
function helpers.l(v), helpers.u(v) or helpers.n(v) so the the value v
get converted in lambda, microns or nanometer (resp.). Make the
modifications in all technology.conf and kite.conf files.
* Change: In CRL/coriolisInit.py, remove the technoConfig variable that has
been replaced by a direct call to helpers.Technology.initTechno().
* Change: In CRL/helpers.Alliance.loadRoutingGaugesTable(), no longer try to
convert coordinates, they must already be in DbU.
* Change: In CRL/helpers.__init__.py, remove lambdaMode() and micronsMode()
they could not be made to work as expected. Create l(), u(), n() as
replacement.
2018-07-16 04:32:40 -05:00
|
|
|
# * value : the rule (dimension) value.
|
|
|
|
# Values/dimensions must be given using one of the following conversion
|
|
|
|
# function:
|
|
|
|
# * l(value) : value expressed in lambda (symbolic).
|
|
|
|
# * u(value) : value is expressed in microns.
|
|
|
|
# * n(value) : value is expressed in nanometers.
|
|
|
|
|
|
|
|
layersExtensionsTable = symbolicLayersExtensionsTable
|
2017-11-17 04:10:32 -06:00
|
|
|
|
|
|
|
|
|
|
|
gdsLayersTable = \
|
2018-05-15 03:03:13 -05:00
|
|
|
( ("nWell" , "NWELL" , 3, 0)
|
|
|
|
, ("nImplant", "NPLUS" , 26, 0)
|
|
|
|
, ("pImplant", "PPLUS" , 25, 0)
|
|
|
|
, ("active" , "ACTIVE" , 6, 0)
|
|
|
|
, ("poly" , "POLY" , 17, 0)
|
|
|
|
, ("cut0" , "CONTACT", 30, 0)
|
|
|
|
, ("metal1" , "METAL1" , 31, 0)
|
|
|
|
, ("cut1" , "VIA1" , 51, 0)
|
|
|
|
, ("metal2" , "METAL2" , 32, 0)
|
|
|
|
, ("cut2" , "VIA2" , 52, 0)
|
|
|
|
, ("metal3" , "METAL3" , 33, 0)
|
|
|
|
, ("cut3" , "VIA3" , 53, 0)
|
|
|
|
, ("metal4" , "METAL4" , 34, 0)
|
|
|
|
, ("cut4" , "VIA4" , 54, 0)
|
|
|
|
, ("metal5" , "METAL5" , 35, 0)
|
|
|
|
, ("cut5" , "VIA5" , 55, 0)
|
|
|
|
, ("metal6" , "METAL6" , 36, 0)
|
2017-11-17 04:10:32 -06:00
|
|
|
)
|