# -*- Mode:Python; explicit-buffer-name: "kite.conf<ispd05>" -*-

import helpers
from   helpers import l, u, n

# Contains the layout (shared by all technologies).
execfile( helpers.sysConfDir+'/common/kite.conf' )


parametersTable = \
    ( ('lefImport.minTerminalWidth'     ,TypeDouble    ,0.0      )
    , ("katabatic.globalLengthThreshold",TypeInt       ,1450     ) # Katabatic parameters.
    , ("katabatic.saturateRatio"        ,TypePercentage,80       )
    , ("katabatic.saturateRp"           ,TypeInt       ,8        )
    , ('katabatic.topRoutingLayer'      ,TypeString    , 'METAL5')
    # Kite parameters.
    , ("kite.hTracksReservedLocal"      ,TypeInt       ,3        , { 'min':0, 'max':20 } )
    , ("kite.vTracksReservedLocal"      ,TypeInt       ,3        , { 'min':0, 'max':20 } )
    , ("kite.eventsLimit"               ,TypeInt       ,4000002  )
    , ("kite.ripupCost"                 ,TypeInt       ,3        , { 'min':0 } )
    , ("kite.strapRipupLimit"           ,TypeInt       ,16       , { 'min':1 } )
    , ("kite.localRipupLimit"           ,TypeInt       ,9        , { 'min':1 } )
    , ("kite.globalRipupLimit"          ,TypeInt       ,5        , { 'min':1 } )
    , ("kite.longGlobalRipupLimit"      ,TypeInt       ,5        , { 'min':1 } )
    # Anabatic & Katana parameters are temporarily hosted here.
    , ('anabatic.routingGauge'          ,TypeString    , 'sxlib' )
    , ("anabatic.globalLengthThreshold" ,TypeInt       ,1450     )
    , ("anabatic.saturateRatio"         ,TypePercentage,80       )
    , ("anabatic.saturateRp"            ,TypeInt       ,8        )
    , ('anabatic.topRoutingLayer'       ,TypeString    , 'METAL5')
    , ("anabatic.edgeLength"            ,TypeInt       ,24       )
    , ("anabatic.edgeWidth"             ,TypeInt       ,4        )
    , ("anabatic.edgeCostH"             ,TypeDouble    ,19.0     )
    , ("anabatic.edgeCostK"             ,TypeDouble    ,-60.0    )
    , ("anabatic.edgeHScaling"          ,TypeDouble    ,1.0      )
    , ("anabatic.globalIterations"      ,TypeInt       ,10       , { 'min':1, 'max':100 } )
    , ("anabatic.gcell.displayMode"     ,TypeEnumerate ,1
      , { 'values':( ("Boundary"      , 1)
                   , ("Density"       , 2) ) }
      )
    , ("katana.hTracksReservedLocal"    ,TypeInt       ,3        , { 'min':0, 'max':20 } )
    , ("katana.vTracksReservedLocal"    ,TypeInt       ,3        , { 'min':0, 'max':20 } )
    , ("katana.eventsLimit"             ,TypeInt       ,4000002  )
    , ("katana.ripupCost"               ,TypeInt       ,3        , { 'min':0 } )
    , ("katana.strapRipupLimit"         ,TypeInt       ,16       , { 'min':1 } )
    , ("katana.localRipupLimit"         ,TypeInt       ,9        , { 'min':1 } )
    , ("katana.globalRipupLimit"        ,TypeInt       ,5        , { 'min':1 } )
    , ("katana.longGlobalRipupLimit"    ,TypeInt       ,5        , { 'min':1 } )
    , ('chip.padCoreSide'               ,TypeString    ,'South'  )
    )

 
# Format of routingGaugesTable (dictionary):
#    A list of entry of the form:
#    ( METAL_NAME, (Direction, Type, depth, density, offset, pitch, wire_width, via_width, obs_dw) )
 
routingGaugesTable = {}
 
routingGaugesTable['sxlib'] = \
    ( ( 'METAL1', ( Gauge.Vertical  , Gauge.PinOnly, 0, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
    , ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, l(0), l(5), l(2), l(1), l(4) ) )
    , ( 'METAL3', ( Gauge.Vertical  , Gauge.Default, 2, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
    , ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
    , ( 'METAL5', ( Gauge.Vertical  , Gauge.Default, 4, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
   #, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
   #, ( 'METAL7', ( Gauge.Vertical  , Gauge.Default, 6, 0.0, l(0), l(5), l(2), l(1), l(4) ) )
    )
 
 
# Format of cellGaugesTable (dictionary):
#    A list of entry of the form:
#    ( METAL_PIN, xy_common_pitch, slice_height, slice_step )
 
cellGaugesTable = {}
cellGaugesTable['ispd05'] = ('metal2', l(5.0), l(60.0), l(5.0))