358 lines
18 KiB
Python
358 lines
18 KiB
Python
|
|
# This file is part of the Coriolis Software.
|
|
# Copyright (c) UPMC 2019-2019, All Rights Reserved
|
|
#
|
|
# +-----------------------------------------------------------------+
|
|
# | C O R I O L I S |
|
|
# | Alliance / Hurricane Interface |
|
|
# | |
|
|
# | Author : Jean-Paul CHAPUT |
|
|
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
# | =============================================================== |
|
|
# | Python : "./etc/common/technology.py" |
|
|
# +-----------------------------------------------------------------+
|
|
|
|
|
|
from helpers import l, u, n
|
|
from Hurricane import DataBase
|
|
from Hurricane import Technology
|
|
from Hurricane import Layer
|
|
from Hurricane import BasicLayer
|
|
from Hurricane import DiffusionLayer
|
|
from Hurricane import TransistorLayer
|
|
from Hurricane import RegularLayer
|
|
from Hurricane import ContactLayer
|
|
from Hurricane import ViaLayer
|
|
|
|
|
|
tech = DataBase.getDB().getTechnology()
|
|
|
|
|
|
def createBL ( layerName, material ):
|
|
global tech
|
|
return BasicLayer.create( tech, layerName, BasicLayer.Material(material) )
|
|
|
|
|
|
nWell = createBL( 'nWell' , BasicLayer.Material.nWell ) # Non-Routing Layers.
|
|
pWell = createBL( 'pWell' , BasicLayer.Material.pWell )
|
|
nImplant = createBL( 'nImplant' , BasicLayer.Material.nImplant )
|
|
pImplant = createBL( 'pImplant' , BasicLayer.Material.pImplant )
|
|
active = createBL( 'active' , BasicLayer.Material.active )
|
|
poly = createBL( 'poly' , BasicLayer.Material.poly )
|
|
poly2 = createBL( 'poly2' , BasicLayer.Material.poly )
|
|
cut0 = createBL( 'cut0' , BasicLayer.Material.cut ) # Routing Layers & VIA Cuts.
|
|
metal1 = createBL( 'metal1' , BasicLayer.Material.metal ) # WARNING: order *is* meaningful.
|
|
cut1 = createBL( 'cut1' , BasicLayer.Material.cut )
|
|
metal2 = createBL( 'metal2' , BasicLayer.Material.metal )
|
|
metcap = createBL( 'metcap' , BasicLayer.Material.other )
|
|
cut2 = createBL( 'cut2' , BasicLayer.Material.cut )
|
|
metal3 = createBL( 'metal3' , BasicLayer.Material.metal )
|
|
cut3 = createBL( 'cut3' , BasicLayer.Material.cut )
|
|
metal4 = createBL( 'metal4' , BasicLayer.Material.metal )
|
|
cut4 = createBL( 'cut4' , BasicLayer.Material.cut )
|
|
metal5 = createBL( 'metal5' , BasicLayer.Material.metal )
|
|
cut5 = createBL( 'cut5' , BasicLayer.Material.cut )
|
|
metal6 = createBL( 'metal6' , BasicLayer.Material.metal )
|
|
cut6 = createBL( 'cut6' , BasicLayer.Material.cut )
|
|
metal7 = createBL( 'metal7' , BasicLayer.Material.metal )
|
|
cut7 = createBL( 'cut7' , BasicLayer.Material.cut )
|
|
metal8 = createBL( 'metal8' , BasicLayer.Material.metal )
|
|
cut8 = createBL( 'cut8' , BasicLayer.Material.cut )
|
|
metal9 = createBL( 'metal9' , BasicLayer.Material.metal )
|
|
cut9 = createBL( 'cut9' , BasicLayer.Material.cut )
|
|
metal10 = createBL( 'metal10' , BasicLayer.Material.metal )
|
|
|
|
blockage1 = createBL( 'blockage1' , BasicLayer.Material.blockage )
|
|
blockage2 = createBL( 'blockage2' , BasicLayer.Material.blockage )
|
|
blockage3 = createBL( 'blockage3' , BasicLayer.Material.blockage )
|
|
blockage4 = createBL( 'blockage4' , BasicLayer.Material.blockage )
|
|
blockage5 = createBL( 'blockage5' , BasicLayer.Material.blockage )
|
|
blockage6 = createBL( 'blockage6' , BasicLayer.Material.blockage )
|
|
blockage7 = createBL( 'blockage7' , BasicLayer.Material.blockage )
|
|
blockage8 = createBL( 'blockage8' , BasicLayer.Material.blockage )
|
|
blockage9 = createBL( 'blockage9' , BasicLayer.Material.blockage )
|
|
blockage10 = createBL( 'blockage10', BasicLayer.Material.blockage )
|
|
|
|
metal1 .setBlockageLayer( blockage1 )
|
|
metal2 .setBlockageLayer( blockage2 )
|
|
metal3 .setBlockageLayer( blockage3 )
|
|
metal4 .setBlockageLayer( blockage4 )
|
|
metal5 .setBlockageLayer( blockage5 )
|
|
metal6 .setBlockageLayer( blockage6 )
|
|
metal7 .setBlockageLayer( blockage7 )
|
|
metal8 .setBlockageLayer( blockage8 )
|
|
metal9 .setBlockageLayer( blockage9 )
|
|
metal10.setBlockageLayer( blockage10 )
|
|
|
|
textCell = createBL( 'text.cell' , BasicLayer.Material.other ) # Misc. non-physical layers.
|
|
textInst = createBL( 'text.instance', BasicLayer.Material.other ) # Used by the software for visualization
|
|
SPL1 = createBL( 'SPL1' , BasicLayer.Material.other ) # purposes only.
|
|
AutoLayer = createBL( 'AutoLayer' , BasicLayer.Material.other )
|
|
gmetalh = createBL( 'gmetalh' , BasicLayer.Material.metal ) # Special BasicLayers for Knik & Kite Routers.
|
|
gcut = createBL( 'gcut' , BasicLayer.Material.cut ) # *Must be after all others*
|
|
gmetalv = createBL( 'gmetalv' , BasicLayer.Material.metal )
|
|
|
|
# VIAs for real technologies.
|
|
via12 = ViaLayer.create( tech, 'via12' , metal1, cut1, metal2 )
|
|
via23 = ViaLayer.create( tech, 'via23' , metal2, cut2, metal3 )
|
|
via34 = ViaLayer.create( tech, 'via34' , metal3, cut3, metal4 )
|
|
via45 = ViaLayer.create( tech, 'via45' , metal4, cut4, metal5 )
|
|
via56 = ViaLayer.create( tech, 'via56' , metal5, cut5, metal6 )
|
|
via67 = ViaLayer.create( tech, 'via67' , metal6, cut6, metal7 )
|
|
via78 = ViaLayer.create( tech, 'via78' , metal7, cut7, metal8 )
|
|
via89 = ViaLayer.create( tech, 'via89' , metal8, cut8, metal9 )
|
|
via910 = ViaLayer.create( tech, 'via910', metal9, cut9, metal10 )
|
|
|
|
# Composite/Symbolic layers.
|
|
NWELL = RegularLayer .create( tech, 'NWELL' , nWell )
|
|
PWELL = RegularLayer .create( tech, 'PWELL' , pWell )
|
|
NTIE = DiffusionLayer .create( tech, 'NTIE' , nImplant , active, nWell)
|
|
PTIE = DiffusionLayer .create( tech, 'PTIE' , pImplant , active, pWell)
|
|
NDIF = DiffusionLayer .create( tech, 'NDIF' , nImplant , active, None )
|
|
PDIF = DiffusionLayer .create( tech, 'PDIF' , pImplant , active, None )
|
|
GATE = DiffusionLayer .create( tech, 'GATE' , poly , active, None )
|
|
NTRANS = TransistorLayer.create( tech, 'NTRANS' , nImplant , active, poly, None )
|
|
PTRANS = TransistorLayer.create( tech, 'PTRANS' , pImplant , active, poly, nWell )
|
|
POLY = RegularLayer .create( tech, 'POLY' , poly )
|
|
POLY2 = RegularLayer .create( tech, 'POLY2' , poly2 )
|
|
METAL1 = RegularLayer .create( tech, 'METAL1' , metal1 )
|
|
METAL2 = RegularLayer .create( tech, 'METAL2' , metal2 )
|
|
metcapdum = RegularLayer .create( tech, 'metcapdum' , metcap )
|
|
metbot = RegularLayer .create( tech, 'metbot' , metal2 )
|
|
METAL3 = RegularLayer .create( tech, 'METAL3' , metal3 )
|
|
METAL4 = RegularLayer .create( tech, 'METAL4' , metal4 )
|
|
METAL5 = RegularLayer .create( tech, 'METAL5' , metal5 )
|
|
METAL6 = RegularLayer .create( tech, 'METAL6' , metal6 )
|
|
METAL7 = RegularLayer .create( tech, 'METAL7' , metal7 )
|
|
METAL8 = RegularLayer .create( tech, 'METAL8' , metal8 )
|
|
METAL9 = RegularLayer .create( tech, 'METAL9' , metal9 )
|
|
METAL10 = RegularLayer .create( tech, 'METAL10' , metal10 )
|
|
CONT_BODY_N = ContactLayer .create( tech, 'CONT_BODY_N', nImplant , active, cut0, metal1, nWell )
|
|
CONT_BODY_P = ContactLayer .create( tech, 'CONT_BODY_P', pImplant , active, cut0, metal1, pWell )
|
|
CONT_DIF_N = ContactLayer .create( tech, 'CONT_DIF_N' , nImplant , active, cut0, metal1, None )
|
|
CONT_DIF_P = ContactLayer .create( tech, 'CONT_DIF_P' , pImplant , active, cut0, metal1, None )
|
|
CONT_POLY = ViaLayer .create( tech, 'CONT_POLY' , poly, cut0, metal1 )
|
|
|
|
# VIAs for symbolic technologies.
|
|
VIA12 = ViaLayer .create( tech, 'VIA12' , metal1, cut1, metal2 )
|
|
VIA23 = ViaLayer .create( tech, 'VIA23' , metal2, cut2, metal3 )
|
|
VIA23cap = ViaLayer .create( tech, 'VIA23cap' , metcap, cut2, metal3 )
|
|
VIA34 = ViaLayer .create( tech, 'VIA34' , metal3, cut3, metal4 )
|
|
VIA45 = ViaLayer .create( tech, 'VIA45' , metal4, cut4, metal5 )
|
|
VIA56 = ViaLayer .create( tech, 'VIA56' , metal5, cut5, metal6 )
|
|
VIA67 = ViaLayer .create( tech, 'VIA67' , metal6, cut6, metal7 )
|
|
VIA78 = ViaLayer .create( tech, 'VIA78' , metal7, cut7, metal8 )
|
|
VIA89 = ViaLayer .create( tech, 'VIA89' , metal8, cut8, metal9 )
|
|
VIA910 = ViaLayer .create( tech, 'VIA910' , metal9, cut9, metal10 )
|
|
BLOCKAGE1 = RegularLayer.create( tech, 'BLOCKAGE1' , blockage1 )
|
|
BLOCKAGE2 = RegularLayer.create( tech, 'BLOCKAGE2' , blockage2 )
|
|
BLOCKAGE3 = RegularLayer.create( tech, 'BLOCKAGE3' , blockage3 )
|
|
BLOCKAGE4 = RegularLayer.create( tech, 'BLOCKAGE4' , blockage4 )
|
|
BLOCKAGE5 = RegularLayer.create( tech, 'BLOCKAGE5' , blockage5 )
|
|
BLOCKAGE6 = RegularLayer.create( tech, 'BLOCKAGE6' , blockage6 )
|
|
BLOCKAGE7 = RegularLayer.create( tech, 'BLOCKAGE7' , blockage7 )
|
|
BLOCKAGE8 = RegularLayer.create( tech, 'BLOCKAGE8' , blockage8 )
|
|
BLOCKAGE9 = RegularLayer.create( tech, 'BLOCKAGE9' , blockage9 )
|
|
BLOCKAGE10 = RegularLayer.create( tech, 'BLOCKAGE10', blockage10 )
|
|
gcontact = ViaLayer .create( tech, 'gcontact' , gmetalh , gcut, gmetalv )
|
|
|
|
tech.setSymbolicLayer( POLY .getName() )
|
|
tech.setSymbolicLayer( POLY2 .getName() )
|
|
tech.setSymbolicLayer( METAL1 .getName() )
|
|
tech.setSymbolicLayer( METAL2 .getName() )
|
|
tech.setSymbolicLayer( METAL3 .getName() )
|
|
tech.setSymbolicLayer( METAL4 .getName() )
|
|
tech.setSymbolicLayer( METAL5 .getName() )
|
|
tech.setSymbolicLayer( METAL6 .getName() )
|
|
tech.setSymbolicLayer( METAL7 .getName() )
|
|
tech.setSymbolicLayer( METAL8 .getName() )
|
|
tech.setSymbolicLayer( METAL9 .getName() )
|
|
tech.setSymbolicLayer( METAL10 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE1 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE2 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE3 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE4 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE5 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE6 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE7 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE8 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE9 .getName() )
|
|
tech.setSymbolicLayer( BLOCKAGE10.getName() )
|
|
tech.setSymbolicLayer( VIA12 .getName() )
|
|
tech.setSymbolicLayer( VIA23 .getName() )
|
|
tech.setSymbolicLayer( VIA34 .getName() )
|
|
tech.setSymbolicLayer( VIA45 .getName() )
|
|
tech.setSymbolicLayer( VIA56 .getName() )
|
|
tech.setSymbolicLayer( VIA67 .getName() )
|
|
tech.setSymbolicLayer( VIA78 .getName() )
|
|
tech.setSymbolicLayer( VIA89 .getName() )
|
|
tech.setSymbolicLayer( VIA910 .getName() )
|
|
tech.setSymbolicLayer( gcut .getName() )
|
|
tech.setSymbolicLayer( gmetalh .getName() )
|
|
tech.setSymbolicLayer( gmetalv .getName() )
|
|
tech.setSymbolicLayer( gcontact .getName() )
|
|
|
|
NWELL.setExtentionCap( nWell, l(0.0) )
|
|
PWELL.setExtentionCap( pWell, l(0.0) )
|
|
|
|
NTIE.setMinimalSize ( l(3.0) )
|
|
NTIE.setExtentionCap ( nWell , l(1.5) )
|
|
NTIE.setExtentionWidth( nWell , l(0.5) )
|
|
NTIE.setExtentionCap ( nImplant, l(1.0) )
|
|
NTIE.setExtentionWidth( nImplant, l(0.5) )
|
|
NTIE.setExtentionCap ( active , l(0.5) )
|
|
NTIE.setExtentionWidth( active , l(0.0) )
|
|
|
|
PTIE.setMinimalSize ( l(3.0) )
|
|
PTIE.setExtentionCap ( nWell , l(1.5) )
|
|
PTIE.setExtentionWidth( nWell , l(0.5) )
|
|
PTIE.setExtentionCap ( nImplant, l(1.0) )
|
|
PTIE.setExtentionWidth( nImplant, l(0.5) )
|
|
PTIE.setExtentionCap ( active , l(0.5) )
|
|
PTIE.setExtentionWidth( active , l(0.0) )
|
|
|
|
NDIF.setMinimalSize ( l(3.0) )
|
|
NDIF.setExtentionCap ( nImplant, l(1.0) )
|
|
NDIF.setExtentionWidth( nImplant, l(0.5) )
|
|
NDIF.setExtentionCap ( active , l(0.5) )
|
|
NDIF.setExtentionWidth( active , l(0.0) )
|
|
|
|
PDIF.setMinimalSize ( l(3.0) )
|
|
PDIF.setExtentionCap ( pImplant, l(1.0) )
|
|
PDIF.setExtentionWidth( pImplant, l(0.5) )
|
|
PDIF.setExtentionCap ( active , l(0.5) )
|
|
PDIF.setExtentionWidth( active , l(0.0) )
|
|
|
|
GATE.setMinimalSize ( l(1.0) )
|
|
GATE.setExtentionCap ( poly , l(1.5) )
|
|
|
|
NTRANS.setMinimalSize ( l( 1.0) )
|
|
NTRANS.setExtentionCap ( nImplant, l(-1.0) )
|
|
NTRANS.setExtentionWidth( nImplant, l( 2.5) )
|
|
NTRANS.setExtentionCap ( active , l(-1.5) )
|
|
NTRANS.setExtentionWidth( active , l( 2.0) )
|
|
|
|
PTRANS.setMinimalSize ( l( 1.0) )
|
|
PTRANS.setExtentionCap ( nWell , l(-1.0) )
|
|
PTRANS.setExtentionWidth( nWell , l( 4.5) )
|
|
PTRANS.setExtentionCap ( pImplant, l(-1.0) )
|
|
PTRANS.setExtentionWidth( pImplant, l( 4.0) )
|
|
PTRANS.setExtentionCap ( active , l(-1.5) )
|
|
PTRANS.setExtentionWidth( active , l( 3.0) )
|
|
|
|
POLY .setMinimalSize ( l(1.0) )
|
|
POLY .setExtentionCap ( poly , l(0.5) )
|
|
POLY2.setMinimalSize ( l(1.0) )
|
|
POLY2.setExtentionCap ( poly , l(0.5) )
|
|
|
|
METAL1 .setMinimalSize ( l(1.0) )
|
|
METAL1 .setExtentionCap ( metal1 , l(0.5) )
|
|
METAL2 .setMinimalSize ( l(1.0) )
|
|
METAL2 .setExtentionCap ( metal2 , l(1.0) )
|
|
METAL3 .setMinimalSize ( l(1.0) )
|
|
METAL3 .setExtentionCap ( metal3 , l(1.0) )
|
|
METAL4 .setMinimalSize ( l(1.0) )
|
|
METAL4 .setExtentionCap ( metal4 , l(1.0) )
|
|
METAL4 .setMinimalSpacing( l(3.0) )
|
|
METAL5 .setMinimalSize ( l(2.0) )
|
|
METAL5 .setExtentionCap ( metal5 , l(1.0) )
|
|
METAL6 .setMinimalSize ( l(2.0) )
|
|
METAL6 .setExtentionCap ( metal6 , l(1.0) )
|
|
METAL7 .setMinimalSize ( l(2.0) )
|
|
METAL7 .setExtentionCap ( metal7 , l(1.0) )
|
|
METAL8 .setMinimalSize ( l(2.0) )
|
|
METAL8 .setExtentionCap ( metal8 , l(1.0) )
|
|
METAL9 .setMinimalSize ( l(2.0) )
|
|
METAL9 .setExtentionCap ( metal9 , l(1.0) )
|
|
METAL10.setMinimalSize ( l(2.0) )
|
|
METAL10.setExtentionCap ( metal10 , l(1.0) )
|
|
|
|
# Contacts (i.e. Active <--> Metal) (symbolic).
|
|
CONT_BODY_N.setMinimalSize( l( 1.0) )
|
|
CONT_BODY_N.setEnclosure ( nWell , l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_N.setEnclosure ( nImplant, l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_N.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_N.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
|
|
CONT_BODY_P.setMinimalSize( l( 1.0) )
|
|
CONT_BODY_P.setEnclosure ( pWell , l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_P.setEnclosure ( pImplant, l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_P.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_BODY_P.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
|
|
CONT_DIF_N.setMinimalSize( l( 1.0) )
|
|
CONT_DIF_N.setEnclosure ( nImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_DIF_N.setEnclosure ( active , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_DIF_N.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
|
|
CONT_DIF_P.setMinimalSize( l( 1.0) )
|
|
CONT_DIF_P.setEnclosure ( pImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_DIF_P.setEnclosure ( active , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_DIF_P.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
|
|
CONT_POLY.setMinimalSize( l( 1.0) )
|
|
CONT_POLY.setEnclosure ( poly , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
CONT_POLY.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
|
|
# VIAs (i.e. Metal <--> Metal) (symbolic).
|
|
VIA12 .setMinimalSize ( l( 1.0) )
|
|
VIA12 .setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA12 .setEnclosure ( metal2 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA12 .setMinimalSpacing( l( 4.0) )
|
|
VIA23 .setMinimalSize ( l( 1.0) )
|
|
VIA23 .setEnclosure ( metal2 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA23 .setEnclosure ( metal3 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA23 .setMinimalSpacing( l( 4.0) )
|
|
VIA34 .setMinimalSize ( l( 1.0) )
|
|
VIA34 .setEnclosure ( metal3 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA34 .setEnclosure ( metal4 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA34 .setMinimalSpacing( l( 4.0) )
|
|
VIA45 .setMinimalSize ( l( 1.0) )
|
|
VIA45 .setEnclosure ( metal4 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA45 .setEnclosure ( metal5 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA45 .setMinimalSpacing( l( 4.0) )
|
|
VIA56 .setMinimalSize ( l( 1.0) )
|
|
VIA56 .setEnclosure ( metal5 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA56 .setEnclosure ( metal6 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA56 .setMinimalSpacing( l( 4.0) )
|
|
VIA67 .setMinimalSize ( l( 1.0) )
|
|
VIA67 .setEnclosure ( metal6 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA67 .setEnclosure ( metal7 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA67 .setMinimalSpacing( l( 4.0) )
|
|
VIA78 .setMinimalSpacing( l( 4.0) )
|
|
VIA78 .setMinimalSize ( l( 1.0) )
|
|
VIA78 .setEnclosure ( metal7 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA78 .setEnclosure ( metal8 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA78 .setMinimalSpacing( l( 4.0) )
|
|
VIA89 .setMinimalSize ( l( 1.0) )
|
|
VIA89 .setEnclosure ( metal8 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA89 .setEnclosure ( metal9 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA89 .setMinimalSpacing( l( 4.0) )
|
|
VIA910.setMinimalSize ( l( 1.0) )
|
|
VIA910.setEnclosure ( metal9 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA910.setEnclosure ( metal10 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
VIA910.setMinimalSpacing( l( 4.0) )
|
|
|
|
# Blockages (symbolic).
|
|
BLOCKAGE1 .setMinimalSize ( l( 1.0) )
|
|
BLOCKAGE1 .setExtentionCap( blockage1 , l( 0.5) )
|
|
BLOCKAGE2 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE2 .setExtentionCap( blockage2 , l( 0.5) )
|
|
BLOCKAGE3 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE3 .setExtentionCap( blockage3 , l( 0.5) )
|
|
BLOCKAGE4 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE4 .setExtentionCap( blockage4 , l( 0.5) )
|
|
BLOCKAGE5 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE5 .setExtentionCap( blockage5 , l( 1.0) )
|
|
BLOCKAGE6 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE6 .setExtentionCap( blockage6 , l( 1.0) )
|
|
BLOCKAGE7 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE7 .setExtentionCap( blockage7 , l( 1.0) )
|
|
BLOCKAGE8 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE8 .setExtentionCap( blockage8 , l( 1.0) )
|
|
BLOCKAGE9 .setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE9 .setExtentionCap( blockage9 , l( 1.0) )
|
|
BLOCKAGE10.setMinimalSize ( l( 2.0) )
|
|
BLOCKAGE10.setExtentionCap( blockage10, l( 1.0) )
|
|
|