2014-05-21 17:13:17 -05:00
|
|
|
# -*- Mode:Python; explicit-buffer-name: "technology.conf<cmos>" -*-
|
2012-11-16 06:49:47 -06:00
|
|
|
|
2014-05-21 17:13:17 -05:00
|
|
|
import helpers
|
2017-11-17 04:10:32 -06:00
|
|
|
from Hurricane import DbU
|
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
|
|
|
|
2014-05-21 17:13:17 -05:00
|
|
|
execfile( helpers.sysConfDir+'/common/technology.conf' )
|
2012-11-16 06:49:47 -06:00
|
|
|
|
|
|
|
|
2018-05-04 10:06:41 -05:00
|
|
|
technoConfig = { 'name' : 'hcmos9gp'
|
|
|
|
, 'precision' : 2
|
|
|
|
, 'gridValue' : 0.005
|
|
|
|
, 'gridUnit' : DbU.UnitPowerMicro
|
|
|
|
, 'gridsPerLambda' : 24
|
|
|
|
, 'symbolicGridStep' : 1.0
|
|
|
|
, 'polygonStep' : 24.0
|
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.
|
|
|
|
# * value : the rule (dimension) value. If the main layer is symbolic it
|
|
|
|
# must be expressed in lambda, if it is for a real layers it
|
|
|
|
# must be expressed in microns.
|
|
|
|
|
|
|
|
layersExtensionsTable = \
|
2012-11-16 06:49:47 -06:00
|
|
|
( ('NWELL.nWell.extention.cap' , 0.0)
|
|
|
|
, ('PWELL.pWell.extention.cap' , 0.0)
|
|
|
|
|
|
|
|
, ('NTIE.minimum.width' , 3.0)
|
|
|
|
, ('NTIE.nWell.extention.cap' , 1.5)
|
|
|
|
, ('NTIE.nWell.extention.width' , 0.5)
|
|
|
|
, ('NTIE.nImplant.extention.cap' , 1.0)
|
|
|
|
, ('NTIE.nImplant.extention.width' , 0.5)
|
|
|
|
, ('NTIE.active.extention.cap' , 0.5)
|
|
|
|
, ('NTIE.active.extention.width' , 0.0)
|
|
|
|
|
|
|
|
, ('PTIE.minimum.width' , 3.0)
|
|
|
|
, ('PTIE.pWell.extention.cap' , 1.5)
|
|
|
|
, ('PTIE.pWell.extention.width' , 0.5)
|
|
|
|
, ('PTIE.pImplant.extention.cap' , 1.0)
|
|
|
|
, ('PTIE.pImplant.extention.width' , 0.5)
|
|
|
|
, ('PTIE.active.extention.cap' , 0.5)
|
|
|
|
, ('PTIE.active.extention.width' , 0.0)
|
|
|
|
|
|
|
|
, ('NDIF.minimum.width' , 3.0)
|
|
|
|
, ('NDIF.nImplant.extention.cap' , 1.0)
|
|
|
|
, ('NDIF.nImplant.extention.width' , 0.5)
|
|
|
|
, ('NDIF.active.extention.cap' , 0.5)
|
|
|
|
, ('NDIF.active.extention.width' , 0.0)
|
|
|
|
|
|
|
|
, ('PDIF.minimum.width' , 3.0)
|
|
|
|
, ('PDIF.pImplant.extention.cap' , 1.0)
|
|
|
|
, ('PDIF.pImplant.extention.width' , 0.5)
|
|
|
|
, ('PDIF.active.extention.cap' , 0.5)
|
|
|
|
, ('PDIF.active.extention.width' , 0.0)
|
|
|
|
|
|
|
|
, ('GATE.minimum.width' , 1.0)
|
|
|
|
, ('GATE.poly.extention.cap' , 1.5)
|
|
|
|
|
|
|
|
, ('NTRANS.minimum.width' , 1.0)
|
|
|
|
, ('NTRANS.nImplant.extention.cap' , -1.0)
|
|
|
|
, ('NTRANS.nImplant.extention.width' , 2.5)
|
|
|
|
, ('NTRANS.active.extention.cap' , -1.5)
|
|
|
|
, ('NTRANS.active.extention.width' , 2.0)
|
|
|
|
|
|
|
|
, ('PTRANS.minimum.width' , 1.0)
|
|
|
|
, ('PTRANS.nWell.extention.cap' , -1.0)
|
|
|
|
, ('PTRANS.nWell.extention.width' , 4.5)
|
|
|
|
, ('PTRANS.pImplant.extention.cap' , -1.0)
|
|
|
|
, ('PTRANS.pImplant.extention.width' , 4.0)
|
|
|
|
, ('PTRANS.active.extention.cap' , -1.5)
|
|
|
|
, ('PTRANS.active.extention.width' , 3.0)
|
|
|
|
|
|
|
|
, ('POLY.minimum.width' , 1.0)
|
|
|
|
, ('POLY.poly.extention.cap' , 0.5)
|
Added support for multiple symbolic+real technology in configuration.
In CRL Core, the layout of the files under "/coriolis2/etc" changes.
Instead of having them directly under "etc", they are now replicated,
in subdirectories. Each subdirectory having the name of the associated
symbolic or real technology (they are kept separated). We have, for
now:
* etc/cmos/ : symbolic, the Alliance original one.
* etc/vsc200/ : symbolic, for G. Petley vsclib.
* etc/hcmos9/ : real, generic fake (130nm).
To tell which pair (symbolic,real) technologies must be used we create
a *second* (sigh) configuration file "coriolis2_techno.conf", and it's
hidden counterpart in the user's account, to set it up. It needs to be
separate because it is read as early as possible and select which set
of configuration files would be read.
Also add support up to METAL8 and POLY2 in CRL core and it's Alliance
parser/drivers.
2014-05-21 07:50:22 -05:00
|
|
|
, ('POLY2.minimum.width' , 1.0)
|
|
|
|
, ('POLY2.poly.extention.cap' , 0.5)
|
2012-11-16 06:49:47 -06:00
|
|
|
|
|
|
|
# Routing Layers.
|
|
|
|
, ('METAL1.minimum.width' , 1.0)
|
|
|
|
, ('METAL1.metal1.extention.cap' , 0.5)
|
Basic support for FreePDK 45 completed.
* New: In Commons, inspector support for std::pair<T,U>.
* New: In Hurricane::Layer, ContactLayer & ViaLayer, support for non
square VIAs. The hole (cut) remains square, but the various metal
extensions can now be different in X and Y. The ::getEnclosure()
method now takes a flag EnclosureH / EnclosureV.
* New: In Hurricane::DbU, inspector support for:
std::pair<DbU::Unit,DbU::Unit>
std::array<DbU::Unit,3>
Must be defined here as DbU do not exists yet in Commons.h
* Bug: In Hurricane::Interval::getSize(), when the interval is "full span",
do not return the difference between min and max, but directly DbU::Max.
(the previous result was -1 !)
* New: In CRL Core Python/Technology.py, support for non square VIAs in
the configuration files. Applied to FreePDK 45.
* New: In CRL::RoutingGauge, added a "symbolic" flag to tell if a gauge
is for symbolic layout or not. Exported to Python.
* New: In Anabatic::AutoHorizontal::updatePosition(), differentiated
computation for soure or target taking account of the VIA extension
in the right segment metal (due to non-square VIAs).
* Change: In Anabatic::AutoHorizontal::_makeDogleg(), the dogleg is
UP for HV gauges and DOWN for VH.
* New: In Anabatic::AutoSegment::_initialize(), create a cache of the
various extension length for each layer (viaToTop, viaToBottom,
viaToSame).
New implementation of getExtensionCap() using the previous cached
extension table. See updatePositions().
New static functions to access the extension cache in the header:
getViaTotopCap() ...
* Change: In Anabatic::AutoSegment, in various update methods, updateOrient()
must always be called *before* updatePositions() as extensions are
dependant on source/target.
* New: In Anabatic::AutoSegment::getEndAxes() compute the position of the
first source and last target position (center/axes) on an *aligned*
set of segments.
* New: In Anabatic::AutoSegment, add a new state flag SegAxisFixed to
signal segments that can be put on only one track. Specific case
to VH gauge for a M1 vertical terminal with a M2 vertical segment.
The M2 is effectively bound to the M1 axis position.
* Bug: In Anabatic::NetBuilderVH::_do_xG_xM1_xM3(), in case of E/W global
and only one RoutingPad the connexion to the RoutingPad was duplicated.
It was valid, but totally stupid.
* Bug: In Anabatic::Session::_canonize(), for an aligned segment set,
intersect the user constraints from all segments instead of only
considering the canonical one.
Issue a warning about too tight constraints only for symbolic
gauges. It may be correct for the real ones.
* New: In Katata::DataNegociate::update(), more accurate computation
of the perpandicular free interval. Use segment extension cap
calculation. Create a special case for fixed axis segments allowing
them to find alternative free interval, try under source and under
target as they are likely to be draggable segments.
* Change: In Katana::Manipulator::relax(), use the extension cap value
to compute the axis of the perpandicular segemnts.
* Change: In Katana::Manipulator::moveUp(), now move up the whole set
of aligned segments instead of just the canonical one.
* Change: In Katana::NegociateWindow::loadRoutingPads(), more accurate
TrackMarkers insertions for fixed terminals.
* New: In Katana::RoutingEvent::Key::Compare::operator(), segments with
fixed axis are processed prior to any others.
* New: In Katana::RoutingEventLoop, store segment pointers instead of
ids to generate more accurate error messages.
* Change: In Katana::RoutingPlane::create(), perform local track
assignment only for HV gauges.
* Change: In Katana::SegmentFsm::_slackenLocal(), add a "dragMinimize"
step in the automaton. Mutliple states transitions can occurs in
a row if an action fails.
* New: In Katana::Session::_toIntervalAxis(), normalize interval
bounds so they are on track positions (by shrinking the interval).
* Bug: In Katana::TrackMarker CTOR, the weigh computation was wrong.
2018-02-17 13:27:38 -06:00
|
|
|
, ('METAL2.minimum.width' , 2.0)
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('METAL2.metal2.extention.cap' , 1.0)
|
Basic support for FreePDK 45 completed.
* New: In Commons, inspector support for std::pair<T,U>.
* New: In Hurricane::Layer, ContactLayer & ViaLayer, support for non
square VIAs. The hole (cut) remains square, but the various metal
extensions can now be different in X and Y. The ::getEnclosure()
method now takes a flag EnclosureH / EnclosureV.
* New: In Hurricane::DbU, inspector support for:
std::pair<DbU::Unit,DbU::Unit>
std::array<DbU::Unit,3>
Must be defined here as DbU do not exists yet in Commons.h
* Bug: In Hurricane::Interval::getSize(), when the interval is "full span",
do not return the difference between min and max, but directly DbU::Max.
(the previous result was -1 !)
* New: In CRL Core Python/Technology.py, support for non square VIAs in
the configuration files. Applied to FreePDK 45.
* New: In CRL::RoutingGauge, added a "symbolic" flag to tell if a gauge
is for symbolic layout or not. Exported to Python.
* New: In Anabatic::AutoHorizontal::updatePosition(), differentiated
computation for soure or target taking account of the VIA extension
in the right segment metal (due to non-square VIAs).
* Change: In Anabatic::AutoHorizontal::_makeDogleg(), the dogleg is
UP for HV gauges and DOWN for VH.
* New: In Anabatic::AutoSegment::_initialize(), create a cache of the
various extension length for each layer (viaToTop, viaToBottom,
viaToSame).
New implementation of getExtensionCap() using the previous cached
extension table. See updatePositions().
New static functions to access the extension cache in the header:
getViaTotopCap() ...
* Change: In Anabatic::AutoSegment, in various update methods, updateOrient()
must always be called *before* updatePositions() as extensions are
dependant on source/target.
* New: In Anabatic::AutoSegment::getEndAxes() compute the position of the
first source and last target position (center/axes) on an *aligned*
set of segments.
* New: In Anabatic::AutoSegment, add a new state flag SegAxisFixed to
signal segments that can be put on only one track. Specific case
to VH gauge for a M1 vertical terminal with a M2 vertical segment.
The M2 is effectively bound to the M1 axis position.
* Bug: In Anabatic::NetBuilderVH::_do_xG_xM1_xM3(), in case of E/W global
and only one RoutingPad the connexion to the RoutingPad was duplicated.
It was valid, but totally stupid.
* Bug: In Anabatic::Session::_canonize(), for an aligned segment set,
intersect the user constraints from all segments instead of only
considering the canonical one.
Issue a warning about too tight constraints only for symbolic
gauges. It may be correct for the real ones.
* New: In Katata::DataNegociate::update(), more accurate computation
of the perpandicular free interval. Use segment extension cap
calculation. Create a special case for fixed axis segments allowing
them to find alternative free interval, try under source and under
target as they are likely to be draggable segments.
* Change: In Katana::Manipulator::relax(), use the extension cap value
to compute the axis of the perpandicular segemnts.
* Change: In Katana::Manipulator::moveUp(), now move up the whole set
of aligned segments instead of just the canonical one.
* Change: In Katana::NegociateWindow::loadRoutingPads(), more accurate
TrackMarkers insertions for fixed terminals.
* New: In Katana::RoutingEvent::Key::Compare::operator(), segments with
fixed axis are processed prior to any others.
* New: In Katana::RoutingEventLoop, store segment pointers instead of
ids to generate more accurate error messages.
* Change: In Katana::RoutingPlane::create(), perform local track
assignment only for HV gauges.
* Change: In Katana::SegmentFsm::_slackenLocal(), add a "dragMinimize"
step in the automaton. Mutliple states transitions can occurs in
a row if an action fails.
* New: In Katana::Session::_toIntervalAxis(), normalize interval
bounds so they are on track positions (by shrinking the interval).
* Bug: In Katana::TrackMarker CTOR, the weigh computation was wrong.
2018-02-17 13:27:38 -06:00
|
|
|
, ('METAL3.minimum.width' , 2.0)
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('METAL3.metal3.extention.cap' , 1.0)
|
Basic support for FreePDK 45 completed.
* New: In Commons, inspector support for std::pair<T,U>.
* New: In Hurricane::Layer, ContactLayer & ViaLayer, support for non
square VIAs. The hole (cut) remains square, but the various metal
extensions can now be different in X and Y. The ::getEnclosure()
method now takes a flag EnclosureH / EnclosureV.
* New: In Hurricane::DbU, inspector support for:
std::pair<DbU::Unit,DbU::Unit>
std::array<DbU::Unit,3>
Must be defined here as DbU do not exists yet in Commons.h
* Bug: In Hurricane::Interval::getSize(), when the interval is "full span",
do not return the difference between min and max, but directly DbU::Max.
(the previous result was -1 !)
* New: In CRL Core Python/Technology.py, support for non square VIAs in
the configuration files. Applied to FreePDK 45.
* New: In CRL::RoutingGauge, added a "symbolic" flag to tell if a gauge
is for symbolic layout or not. Exported to Python.
* New: In Anabatic::AutoHorizontal::updatePosition(), differentiated
computation for soure or target taking account of the VIA extension
in the right segment metal (due to non-square VIAs).
* Change: In Anabatic::AutoHorizontal::_makeDogleg(), the dogleg is
UP for HV gauges and DOWN for VH.
* New: In Anabatic::AutoSegment::_initialize(), create a cache of the
various extension length for each layer (viaToTop, viaToBottom,
viaToSame).
New implementation of getExtensionCap() using the previous cached
extension table. See updatePositions().
New static functions to access the extension cache in the header:
getViaTotopCap() ...
* Change: In Anabatic::AutoSegment, in various update methods, updateOrient()
must always be called *before* updatePositions() as extensions are
dependant on source/target.
* New: In Anabatic::AutoSegment::getEndAxes() compute the position of the
first source and last target position (center/axes) on an *aligned*
set of segments.
* New: In Anabatic::AutoSegment, add a new state flag SegAxisFixed to
signal segments that can be put on only one track. Specific case
to VH gauge for a M1 vertical terminal with a M2 vertical segment.
The M2 is effectively bound to the M1 axis position.
* Bug: In Anabatic::NetBuilderVH::_do_xG_xM1_xM3(), in case of E/W global
and only one RoutingPad the connexion to the RoutingPad was duplicated.
It was valid, but totally stupid.
* Bug: In Anabatic::Session::_canonize(), for an aligned segment set,
intersect the user constraints from all segments instead of only
considering the canonical one.
Issue a warning about too tight constraints only for symbolic
gauges. It may be correct for the real ones.
* New: In Katata::DataNegociate::update(), more accurate computation
of the perpandicular free interval. Use segment extension cap
calculation. Create a special case for fixed axis segments allowing
them to find alternative free interval, try under source and under
target as they are likely to be draggable segments.
* Change: In Katana::Manipulator::relax(), use the extension cap value
to compute the axis of the perpandicular segemnts.
* Change: In Katana::Manipulator::moveUp(), now move up the whole set
of aligned segments instead of just the canonical one.
* Change: In Katana::NegociateWindow::loadRoutingPads(), more accurate
TrackMarkers insertions for fixed terminals.
* New: In Katana::RoutingEvent::Key::Compare::operator(), segments with
fixed axis are processed prior to any others.
* New: In Katana::RoutingEventLoop, store segment pointers instead of
ids to generate more accurate error messages.
* Change: In Katana::RoutingPlane::create(), perform local track
assignment only for HV gauges.
* Change: In Katana::SegmentFsm::_slackenLocal(), add a "dragMinimize"
step in the automaton. Mutliple states transitions can occurs in
a row if an action fails.
* New: In Katana::Session::_toIntervalAxis(), normalize interval
bounds so they are on track positions (by shrinking the interval).
* Bug: In Katana::TrackMarker CTOR, the weigh computation was wrong.
2018-02-17 13:27:38 -06:00
|
|
|
, ('METAL4.minimum.width' , 2.0)
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('METAL4.metal4.extention.cap' , 1.0)
|
|
|
|
, ('METAL5.minimum.width' , 2.0)
|
|
|
|
, ('METAL5.metal5.extention.cap' , 1.0)
|
|
|
|
, ('METAL6.minimum.width' , 2.0)
|
|
|
|
, ('METAL6.metal6.extention.cap' , 1.0)
|
Added support for multiple symbolic+real technology in configuration.
In CRL Core, the layout of the files under "/coriolis2/etc" changes.
Instead of having them directly under "etc", they are now replicated,
in subdirectories. Each subdirectory having the name of the associated
symbolic or real technology (they are kept separated). We have, for
now:
* etc/cmos/ : symbolic, the Alliance original one.
* etc/vsc200/ : symbolic, for G. Petley vsclib.
* etc/hcmos9/ : real, generic fake (130nm).
To tell which pair (symbolic,real) technologies must be used we create
a *second* (sigh) configuration file "coriolis2_techno.conf", and it's
hidden counterpart in the user's account, to set it up. It needs to be
separate because it is read as early as possible and select which set
of configuration files would be read.
Also add support up to METAL8 and POLY2 in CRL core and it's Alliance
parser/drivers.
2014-05-21 07:50:22 -05:00
|
|
|
, ('METAL7.minimum.width' , 2.0)
|
|
|
|
, ('METAL7.metal6.extention.cap' , 1.0)
|
|
|
|
, ('METAL8.minimum.width' , 2.0)
|
|
|
|
, ('METAL8.metal6.extention.cap' , 1.0)
|
2012-11-16 06:49:47 -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
|
|
|
# Contacts (i.e. Active <--> Metal) (symbolic).
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('CONT_BODY_N.minimum.side' , 1.0)
|
|
|
|
, ('CONT_BODY_N.nWell.enclosure' , 1.5)
|
|
|
|
, ('CONT_BODY_N.nImplant.enclosure' , 1.5)
|
|
|
|
, ('CONT_BODY_N.active.enclosure' , 1.0)
|
|
|
|
, ('CONT_BODY_N.metal1.enclosure' , 0.5)
|
|
|
|
|
|
|
|
, ('CONT_BODY_P.minimum.side' , 1.0)
|
|
|
|
, ('CONT_BODY_P.pWell.enclosure' , 1.5)
|
|
|
|
, ('CONT_BODY_P.pImplant.enclosure' , 1.5)
|
|
|
|
, ('CONT_BODY_P.active.enclosure' , 1.0)
|
|
|
|
, ('CONT_BODY_P.metal1.enclosure' , 0.5)
|
|
|
|
|
|
|
|
, ('CONT_DIF_N.minimum.side' , 1.0)
|
|
|
|
, ('CONT_DIF_N.nImplant.enclosure' , 1.0)
|
|
|
|
, ('CONT_DIF_N.active.enclosure' , 0.5)
|
|
|
|
, ('CONT_DIF_N.metal1.enclosure' , 0.5)
|
|
|
|
|
|
|
|
, ('CONT_DIF_P.minimum.side' , 1.0)
|
|
|
|
, ('CONT_DIF_P.pImplant.enclosure' , 1.0)
|
|
|
|
, ('CONT_DIF_P.active.enclosure' , 0.5)
|
|
|
|
, ('CONT_DIF_P.metal1.enclosure' , 0.5)
|
|
|
|
|
|
|
|
, ('CONT_POLY.minimum.width' , 1.0)
|
|
|
|
, ('CONT_POLY.poly.enclosure' , 0.5)
|
|
|
|
, ('CONT_POLY.metal1.enclosure' , 0.5)
|
|
|
|
|
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
|
|
|
# VIAs (i.e. Metal <--> Metal) (symbolic).
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('VIA12.minimum.side' , 1.0)
|
|
|
|
, ('VIA12.metal1.enclosure' , 0.5)
|
|
|
|
, ('VIA12.metal2.enclosure' , 0.5)
|
|
|
|
, ('VIA23.minimum.side' , 1.0)
|
|
|
|
, ('VIA23.metal2.enclosure' , 0.5)
|
|
|
|
, ('VIA23.metal3.enclosure' , 0.5)
|
|
|
|
, ('VIA34.minimum.side' , 1.0)
|
|
|
|
, ('VIA34.metal3.enclosure' , 0.5)
|
|
|
|
, ('VIA34.metal4.enclosure' , 0.5)
|
|
|
|
, ('VIA45.minimum.side' , 1.0)
|
|
|
|
, ('VIA45.metal4.enclosure' , 0.5)
|
|
|
|
, ('VIA45.metal5.enclosure' , 0.5)
|
|
|
|
, ('VIA56.minimum.side' , 1.0)
|
|
|
|
, ('VIA56.metal5.enclosure' , 0.5)
|
|
|
|
, ('VIA56.metal6.enclosure' , 0.5)
|
Added support for multiple symbolic+real technology in configuration.
In CRL Core, the layout of the files under "/coriolis2/etc" changes.
Instead of having them directly under "etc", they are now replicated,
in subdirectories. Each subdirectory having the name of the associated
symbolic or real technology (they are kept separated). We have, for
now:
* etc/cmos/ : symbolic, the Alliance original one.
* etc/vsc200/ : symbolic, for G. Petley vsclib.
* etc/hcmos9/ : real, generic fake (130nm).
To tell which pair (symbolic,real) technologies must be used we create
a *second* (sigh) configuration file "coriolis2_techno.conf", and it's
hidden counterpart in the user's account, to set it up. It needs to be
separate because it is read as early as possible and select which set
of configuration files would be read.
Also add support up to METAL8 and POLY2 in CRL core and it's Alliance
parser/drivers.
2014-05-21 07:50:22 -05:00
|
|
|
, ('VIA67.minimum.side' , 1.0)
|
|
|
|
, ('VIA67.metal6.enclosure' , 0.5)
|
|
|
|
, ('VIA67.metal7.enclosure' , 0.5)
|
|
|
|
, ('VIA78.minimum.side' , 1.0)
|
|
|
|
, ('VIA78.metal7.enclosure' , 0.5)
|
|
|
|
, ('VIA78.metal8.enclosure' , 0.5)
|
2012-11-16 06:49:47 -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
|
|
|
# Blockages (symbolic).
|
2012-11-16 06:49:47 -06:00
|
|
|
, ('BLOCKAGE1.minimum.width' , 1.0)
|
|
|
|
, ('BLOCKAGE1.blockage1.extention.cap' , 0.5)
|
|
|
|
, ('BLOCKAGE2.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE2.blockage2.extention.cap' , 0.5)
|
|
|
|
, ('BLOCKAGE3.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE3.blockage3.extention.cap' , 0.5)
|
|
|
|
, ('BLOCKAGE4.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE4.blockage4.extention.cap' , 0.5)
|
|
|
|
, ('BLOCKAGE5.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE5.blockage5.extention.cap' , 1.0)
|
|
|
|
, ('BLOCKAGE6.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE6.blockage6.extention.cap' , 1.0)
|
Added support for multiple symbolic+real technology in configuration.
In CRL Core, the layout of the files under "/coriolis2/etc" changes.
Instead of having them directly under "etc", they are now replicated,
in subdirectories. Each subdirectory having the name of the associated
symbolic or real technology (they are kept separated). We have, for
now:
* etc/cmos/ : symbolic, the Alliance original one.
* etc/vsc200/ : symbolic, for G. Petley vsclib.
* etc/hcmos9/ : real, generic fake (130nm).
To tell which pair (symbolic,real) technologies must be used we create
a *second* (sigh) configuration file "coriolis2_techno.conf", and it's
hidden counterpart in the user's account, to set it up. It needs to be
separate because it is read as early as possible and select which set
of configuration files would be read.
Also add support up to METAL8 and POLY2 in CRL core and it's Alliance
parser/drivers.
2014-05-21 07:50:22 -05:00
|
|
|
, ('BLOCKAGE7.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE7.blockage6.extention.cap' , 1.0)
|
|
|
|
, ('BLOCKAGE8.minimum.width' , 2.0)
|
|
|
|
, ('BLOCKAGE8.blockage6.extention.cap' , 1.0)
|
2012-11-16 06:49:47 -06:00
|
|
|
)
|
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
|
|
|
)
|