2017-11-17 04:10:32 -06:00
|
|
|
# -*- Mode:Python; explicit-buffer-name: "technology.conf<ispd05>" -*-
|
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
|
|
|
# Provides standard settings for:
|
|
|
|
# - <viewerConfig>
|
|
|
|
# - <realLayersTable>
|
|
|
|
# - <symbolicLayersTable>
|
|
|
|
# - <workingLayersTable>
|
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
|
|
|
|
|
|
|
|
2017-11-17 04:10:32 -06:00
|
|
|
technoConfig = { 'name' : 'hcmos9gp'
|
|
|
|
, 'gridValue' : 0.005
|
|
|
|
, 'gridUnit' : DbU.UnitPowerMicro
|
|
|
|
, 'gridsPerLambda': 24
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-11-16 06:49:47 -06:00
|
|
|
# Format of <symbolicRulesTable>:
|
|
|
|
# Each entry is a pair of (string, value).
|
|
|
|
# * string: a synthetic way to designate the symbolic layer on which
|
|
|
|
# it applies, an optional real layer in case where there is
|
|
|
|
# more than one, and the dimension name.
|
|
|
|
# * value : the rule (dimension) value expressed in lambda.
|
|
|
|
symbolicRulesTable = \
|
|
|
|
( ('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)
|
|
|
|
, ('METAL2.minimum.width' , 1.0)
|
|
|
|
, ('METAL2.metal2.extention.cap' , 1.0)
|
|
|
|
, ('METAL3.minimum.width' , 1.0)
|
|
|
|
, ('METAL3.metal3.extention.cap' , 1.0)
|
|
|
|
, ('METAL4.minimum.width' , 1.0)
|
|
|
|
, ('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
|
|
|
|
|
|
|
# Contacts (i.e. Active <--> Metal).
|
|
|
|
, ('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)
|
|
|
|
|
|
|
|
# VIAs (i.e. Metal <--> Metal).
|
|
|
|
, ('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
|
|
|
|
|
|
|
# Blockages.
|
|
|
|
, ('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 = \
|
|
|
|
( ("nWell" , "NWELL" , 3)
|
|
|
|
, ("nImplant", "NPLUS" , 26)
|
|
|
|
, ("pImplant", "PPLUS" , 25)
|
|
|
|
, ("active" , "ACTIVE" , 6)
|
|
|
|
, ("poly" , "POLY" , 17)
|
|
|
|
, ("cut0" , "CONTACT", 30)
|
|
|
|
, ("metal1" , "METAL1" , 31)
|
|
|
|
, ("cut1" , "VIA1" , 51)
|
|
|
|
, ("metal2" , "METAL2" , 32)
|
|
|
|
, ("cut2" , "VIA2" , 52)
|
|
|
|
, ("metal3" , "METAL3" , 33)
|
|
|
|
, ("cut3" , "VIA3" , 53)
|
|
|
|
, ("metal4" , "METAL4" , 34)
|
|
|
|
, ("cut4" , "VIA4" , 54)
|
|
|
|
, ("metal5" , "METAL5" , 35)
|
|
|
|
, ("cut5" , "VIA5" , 55)
|
|
|
|
, ("metal6" , "METAL6" , 36)
|
|
|
|
)
|