2014-05-21 17:13:17 -05:00
|
|
|
# -*- Mode:Python; explicit-buffer-name: "technology.conf<common>" -*-
|
|
|
|
#
|
|
|
|
# Those settings are common to all the symbolic technologies.
|
|
|
|
|
2017-11-17 04:10:32 -06:00
|
|
|
from Hurricane import BasicLayer
|
|
|
|
from helpers.Technology import TypeRegular
|
|
|
|
from helpers.Technology import TypeDiffusion
|
|
|
|
from helpers.Technology import TypeTransistor
|
|
|
|
from helpers.Technology import TypeContact
|
|
|
|
from helpers.Technology import TypeVia
|
New coriolis launcher. Configuration files cleanup.
* Change: In CRL Core, simplify the loading sequence. The technology,
both symbolic and real is now loaded directly from coriolisInit.py
and not through the Alliance loader. This was a leftover from the
time configuration was in XML. Remove others traces of XML loading.
Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
environement, as they was no longer used.
Note that technology *still* need to be loader *after* Alliance
framework has been initialized.
Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
must not be inlined. Generate a problem when linking in debug mode
(seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
automatically take cares of all environement setup, then run a command
by default, it's <cgt>, but it can be anything. For example: <zsh>.
2015-04-13 11:54:09 -05:00
|
|
|
|
|
|
|
|
2014-05-21 17:13:17 -05:00
|
|
|
viewerConfig = { 'precision':2, 'gridstep':1.0 }
|
|
|
|
|
|
|
|
# The informations here are extracted from the Alliance ".rds" file,
|
|
|
|
# and must be coherent with it.
|
|
|
|
#
|
|
|
|
# Format of <realLayerTable>:
|
|
|
|
# The third parameter must be present only for blockage material.
|
|
|
|
# ('layer_name' , MATERIAL , ASSOCIATED ROUTING)
|
|
|
|
#
|
|
|
|
# Note: concerning the LayerMask, real layers are implementeds as BasicLayer,
|
|
|
|
# and are associated to exactly one bit of the mask. Symbolic layers
|
|
|
|
# then combine BasicLayer to create composite objects, an thus can have
|
|
|
|
# a mask which have multiple bits set. Getting the mask from a layer
|
|
|
|
# is straigthforward, but the reverse is not true. One mask may match
|
|
|
|
# multiple symbolic layers. To overcome this ambiguity we introduce the
|
|
|
|
# concept of "working layer", which, for one given mask tells the layer
|
|
|
|
# that will be returned (generally the symbolic one).
|
|
|
|
|
|
|
|
realLayersTable = \
|
|
|
|
( ('nWell' , BasicLayer.Material.nWell ) # Non-Routing Layers.
|
|
|
|
, ('pWell' , BasicLayer.Material.pWell )
|
|
|
|
, ('nImplant' , BasicLayer.Material.nImplant)
|
|
|
|
, ('pImplant' , BasicLayer.Material.pImplant)
|
|
|
|
, ('active' , BasicLayer.Material.active )
|
|
|
|
, ('poly' , BasicLayer.Material.poly )
|
|
|
|
, ('poly2' , BasicLayer.Material.poly )
|
|
|
|
, ('cut0' , BasicLayer.Material.cut ) # Routing Layers & VIA Cuts.
|
|
|
|
, ('metal1' , BasicLayer.Material.metal ) # WARNING: order *is* meaningful.
|
|
|
|
, ('cut1' , BasicLayer.Material.cut )
|
|
|
|
, ('metal2' , BasicLayer.Material.metal )
|
2016-03-06 05:40:23 -06:00
|
|
|
, ('metcap' , BasicLayer.Material.other )
|
2014-05-21 17:13:17 -05:00
|
|
|
, ('cut2' , BasicLayer.Material.cut )
|
|
|
|
, ('metal3' , BasicLayer.Material.metal )
|
|
|
|
, ('cut3' , BasicLayer.Material.cut )
|
|
|
|
, ('metal4' , BasicLayer.Material.metal )
|
|
|
|
, ('cut4' , BasicLayer.Material.cut )
|
|
|
|
, ('metal5' , BasicLayer.Material.metal )
|
|
|
|
, ('cut5' , BasicLayer.Material.cut )
|
|
|
|
, ('metal6' , BasicLayer.Material.metal )
|
|
|
|
, ('cut6' , BasicLayer.Material.cut )
|
|
|
|
, ('metal7' , BasicLayer.Material.metal )
|
|
|
|
, ('cut7' , BasicLayer.Material.cut )
|
|
|
|
, ('metal8' , BasicLayer.Material.metal )
|
2017-11-17 04:10:32 -06:00
|
|
|
, ('cut8' , BasicLayer.Material.cut )
|
|
|
|
, ('metal9' , BasicLayer.Material.metal )
|
|
|
|
, ('cut9' , BasicLayer.Material.cut )
|
|
|
|
, ('metal10' , BasicLayer.Material.metal )
|
2016-06-03 10:19:46 -05:00
|
|
|
#, ('topmim6' , BasicLayer.Material.other ) # For Capacitances & Pads.
|
2016-12-15 12:25:05 -06:00
|
|
|
, ('metbot_r' , BasicLayer.Material.other )
|
2016-06-03 10:19:46 -05:00
|
|
|
#, ('padopen' , BasicLayer.Material.other )
|
|
|
|
#, ('alucap' , BasicLayer.Material.other )
|
2014-05-21 17:13:17 -05:00
|
|
|
|
|
|
|
, ('text.cell' , BasicLayer.Material.other ) # Misc. non-physical layers.
|
|
|
|
, ('text.instance', BasicLayer.Material.other ) # Used by the software for visualization
|
|
|
|
, ('SPL1' , BasicLayer.Material.other ) # purposes only.
|
|
|
|
, ('AutoLayer' , BasicLayer.Material.other )
|
|
|
|
, ('blockage1' , BasicLayer.Material.blockage, 'metal1') # Blockages
|
|
|
|
, ('blockage2' , BasicLayer.Material.blockage, 'metal2')
|
|
|
|
, ('blockage3' , BasicLayer.Material.blockage, 'metal3')
|
|
|
|
, ('blockage4' , BasicLayer.Material.blockage, 'metal4')
|
|
|
|
, ('blockage5' , BasicLayer.Material.blockage, 'metal5')
|
|
|
|
, ('blockage6' , BasicLayer.Material.blockage, 'metal6')
|
|
|
|
, ('blockage7' , BasicLayer.Material.blockage, 'metal7')
|
|
|
|
, ('blockage8' , BasicLayer.Material.blockage, 'metal8')
|
2017-11-17 04:10:32 -06:00
|
|
|
, ('blockage9' , BasicLayer.Material.blockage, 'metal9')
|
|
|
|
, ('blockage10' , BasicLayer.Material.blockage, 'metal10')
|
2014-05-21 17:13:17 -05:00
|
|
|
, ('gmetalh' , BasicLayer.Material.metal ) # Special BasicLayers for Knik & Kite Routers.
|
|
|
|
, ('gcut' , BasicLayer.Material.cut ) # *Must be after all others*
|
|
|
|
, ('gmetalv' , BasicLayer.Material.metal )
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Format of <symbolicLayersTable>:
|
|
|
|
# The length of the list of real layers depends on the type.
|
|
|
|
# In some case, the last of the list may be optional, it must be
|
|
|
|
# sets to None and not left empty.
|
|
|
|
#
|
|
|
|
# ('SYMB_LAYER' , Type , (LIST_OF_REAL_LAYERS) )
|
|
|
|
|
|
|
|
symbolicLayersTable = \
|
|
|
|
( ('NWELL' , TypeRegular , ('nWell' ,))
|
|
|
|
, ('PWELL' , TypeRegular , ('pWell' ,))
|
|
|
|
, ('NTIE' , TypeDiffusion , ('nImplant' , 'active', 'nWell'))
|
|
|
|
, ('PTIE' , TypeDiffusion , ('pImplant' , 'active', 'pWell'))
|
|
|
|
, ('NDIF' , TypeDiffusion , ('nImplant' , 'active', None ))
|
|
|
|
, ('PDIF' , TypeDiffusion , ('pImplant' , 'active', None ))
|
|
|
|
, ('GATE' , TypeDiffusion , ('poly' , 'active', None ))
|
|
|
|
, ('NTRANS' , TypeTransistor, ('nImplant' , 'active', 'poly', None ))
|
|
|
|
, ('PTRANS' , TypeTransistor, ('pImplant' , 'active', 'poly', 'nWell'))
|
|
|
|
, ('POLY' , TypeRegular , ('poly' ,))
|
|
|
|
, ('POLY2' , TypeRegular , ('poly2' ,))
|
|
|
|
, ('METAL1' , TypeRegular , ('metal1' ,))
|
|
|
|
, ('METAL2' , TypeRegular , ('metal2' ,))
|
2016-03-06 05:40:23 -06:00
|
|
|
, ('metcapdum' , TypeRegular , ('metcap' ,))
|
|
|
|
, ('metbot' , TypeRegular , ('metal2' ,))
|
2014-05-21 17:13:17 -05:00
|
|
|
, ('METAL3' , TypeRegular , ('metal3' ,))
|
|
|
|
, ('METAL4' , TypeRegular , ('metal4' ,))
|
|
|
|
, ('METAL5' , TypeRegular , ('metal5' ,))
|
|
|
|
, ('METAL6' , TypeRegular , ('metal6' ,))
|
|
|
|
, ('METAL7' , TypeRegular , ('metal7' ,))
|
|
|
|
, ('METAL8' , TypeRegular , ('metal8' ,))
|
2017-11-17 04:10:32 -06:00
|
|
|
, ('METAL9' , TypeRegular , ('metal9' ,))
|
|
|
|
, ('METAL10' , TypeRegular , ('metal10' ,))
|
2014-05-21 17:13:17 -05:00
|
|
|
, ('CONT_BODY_N', TypeContact , ('nImplant' , 'active', 'cut0', 'metal1', 'nWell'))
|
|
|
|
, ('CONT_BODY_P', TypeContact , ('pImplant' , 'active', 'cut0', 'metal1', 'pWell'))
|
|
|
|
, ('CONT_DIF_N' , TypeContact , ('nImplant' , 'active', 'cut0', 'metal1', None ))
|
|
|
|
, ('CONT_DIF_P' , TypeContact , ('pImplant' , 'active', 'cut0', 'metal1', None ))
|
2017-11-17 04:10:32 -06:00
|
|
|
, ('CONT_POLY' , TypeVia , ( 'poly' , 'cut0', 'metal1' ))
|
|
|
|
, ('VIA12' , TypeVia , ( 'metal1', 'cut1', 'metal2' ))
|
|
|
|
, ('VIA23' , TypeVia , ( 'metal2', 'cut2', 'metal3' ))
|
|
|
|
, ('VIA23cap' , TypeVia , ( 'metcap', 'cut2', 'metal3' ))
|
|
|
|
, ('VIA34' , TypeVia , ( 'metal3', 'cut3', 'metal4' ))
|
|
|
|
, ('VIA45' , TypeVia , ( 'metal4', 'cut4', 'metal5' ))
|
|
|
|
, ('VIA56' , TypeVia , ( 'metal5', 'cut5', 'metal6' ))
|
|
|
|
, ('VIA67' , TypeVia , ( 'metal6', 'cut6', 'metal7' ))
|
|
|
|
, ('VIA78' , TypeVia , ( 'metal7', 'cut7', 'metal8' ))
|
|
|
|
, ('VIA89' , TypeVia , ( 'metal8', 'cut8', 'metal9' ))
|
|
|
|
, ('VIA910' , TypeVia , ( 'metal9', 'cut9', 'metal10'))
|
|
|
|
, ('BLOCKAGE1' , TypeRegular , ('blockage1' , ))
|
|
|
|
, ('BLOCKAGE2' , TypeRegular , ('blockage2' , ))
|
|
|
|
, ('BLOCKAGE3' , TypeRegular , ('blockage3' , ))
|
|
|
|
, ('BLOCKAGE4' , TypeRegular , ('blockage4' , ))
|
|
|
|
, ('BLOCKAGE5' , TypeRegular , ('blockage5' , ))
|
|
|
|
, ('BLOCKAGE6' , TypeRegular , ('blockage6' , ))
|
|
|
|
, ('BLOCKAGE7' , TypeRegular , ('blockage7' , ))
|
|
|
|
, ('BLOCKAGE8' , TypeRegular , ('blockage8' , ))
|
|
|
|
, ('BLOCKAGE9' , TypeRegular , ('blockage9' , ))
|
|
|
|
, ('BLOCKAGE10' , TypeRegular , ('blockage10', ))
|
|
|
|
, ('gcontact' , TypeVia , ('gmetalh' , 'gcut', 'gmetalv'))
|
2014-05-21 17:13:17 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2016-03-06 05:40:23 -06:00
|
|
|
# Format of <workingLayersTable>:
|
2014-05-21 17:13:17 -05:00
|
|
|
# This is a simple list of Real & Symbolic layers.
|
|
|
|
|
|
|
|
workingLayersTable = \
|
2017-11-17 04:10:32 -06:00
|
|
|
[ 'cut0', 'cut1' , 'cut2' , 'cut3' , 'cut4' , 'cut5' , 'cut6' , 'cut7' , 'cut8' , 'cut9'
|
2014-05-21 17:13:17 -05:00
|
|
|
, 'POLY', 'POLY2'
|
2017-11-17 04:10:32 -06:00
|
|
|
, 'METAL1' , 'METAL2' , 'METAL3' , 'METAL4' , 'METAL5' , 'METAL6' , 'METAL7' , 'METAL8' , 'METAL9' , 'METAL10'
|
|
|
|
, 'BLOCKAGE1', 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4', 'BLOCKAGE5', 'BLOCKAGE6', 'BLOCKAGE7', 'BLOCKAGE8', 'BLOCKAGE9', 'BLOCKAGE10'
|
|
|
|
, 'VIA12' , 'VIA23' , 'VIA34' , 'VIA45' , 'VIA56' , 'VIA67' , 'VIA78' , 'VIA89' , 'VIA910'
|
2016-03-06 05:40:23 -06:00
|
|
|
, 'gcut' , 'gmetalh' , 'gmetalv' , 'gcontact'
|
2014-05-21 17:13:17 -05:00
|
|
|
]
|