# 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/node45/freepdk45/kite.py" | # +-----------------------------------------------------------------+ import Cfg import helpers.io helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) ) from Hurricane import DataBase from CRL import AllianceFramework from CRL import RoutingGauge from CRL import RoutingLayerGauge from CRL import CellGauge from helpers import l, n, u import common.kite p = Cfg.getParamDouble ( 'lefImport.minTerminalWidth' ).setDouble ( 0.0 ) p = Cfg.getParamString ( 'katabatic.routingGauge' ).setString ( 'LEF.CoreSite' ) p = Cfg.getParamInt ( "katabatic.globalLengthThreshold" ).setInt ( 1450 ) p = Cfg.getParamPercentage( "katabatic.saturateRatio" ).setPercentage( 80 ) p = Cfg.getParamInt ( "katabatic.saturateRp" ).setInt ( 8 ) p = Cfg.getParamString ( 'katabatic.topRoutingLayer' ).setString ( 'metal5' ) # Kite parameters. p = Cfg.getParamInt( "kite.hTracksReservedLocal" ); p.setInt( 4 ); p.setMin( 0 ); p.setMax( 18 ) p = Cfg.getParamInt( "kite.vTracksReservedLocal" ); p.setInt( 3 ); p.setMin( 0 ); p.setMax( 18 ) p = Cfg.getParamInt( "kite.eventsLimit" ); p.setInt( 4000002 ) p = Cfg.getParamInt( "kite.ripupCost" ); p.setInt( 3 ); p.setMin( 0 ) p = Cfg.getParamInt( "kite.strapRipupLimit" ); p.setInt( 16 ); p.setMin( 1 ) p = Cfg.getParamInt( "kite.localRipupLimit" ); p.setInt( 9 ); p.setMin( 1 ) p = Cfg.getParamInt( "kite.globalRipupLimit" ); p.setInt( 5 ); p.setMin( 1 ) p = Cfg.getParamInt( "kite.longGlobalRipupLimit" ); p.setInt( 5 ); p.setMin( 1 ) # Anabatic & Katana parameters are temporarily hosted here. p = Cfg.getParamString ( 'crlcore.groundName' ); p.setString ( 'gnd!' ) p = Cfg.getParamString ( 'crlcore.powerName' ); p.setString ( 'vdd!' ) p = Cfg.getParamString ( 'anabatic.routingGauge' ); p.setString ( 'LEF.CoreSite' ) p = Cfg.getParamInt ( "anabatic.globalLengthThreshold" ); p.setInt ( 1450 ) p = Cfg.getParamPercentage( "anabatic.saturateRatio" ); p.setPercentage( 90 ) p = Cfg.getParamInt ( "anabatic.saturateRp" ); p.setInt ( 10 ) p = Cfg.getParamString ( 'anabatic.topRoutingLayer' ); p.setString ( 'metal5' ) p = Cfg.getParamInt ( "anabatic.edgeLength" ); p.setInt ( 48 ) p = Cfg.getParamInt ( "anabatic.edgeWidth" ); p.setInt ( 8 ) p = Cfg.getParamDouble ( "anabatic.edgeCostH" ); p.setDouble ( 9.0 ) p = Cfg.getParamDouble ( "anabatic.edgeCostK" ); p.setDouble ( -10.0 ) p = Cfg.getParamDouble ( "anabatic.edgeHInc" ); p.setDouble ( 1.0 ) p = Cfg.getParamDouble ( "anabatic.edgeHScaling" ); p.setDouble ( 1.0 ) p = Cfg.getParamInt ( "anabatic.globalIterations" ); p.setInt ( 10 ); p.setMin(1); p.setMax(100) p = Cfg.getParamEnumerate ( "anabatic.gcell.displayMode" ); p.setInt ( 1 ) p.addValue( "Boundary", 1 ) p.addValue( "Density" , 2 ) p = Cfg.getParamInt ( "katana.hTracksReservedLocal" ); p.setInt ( 4 ); p.setMin(0); p.setMax(20) p = Cfg.getParamInt ( "katana.vTracksReservedLocal" ); p.setInt ( 3 ); p.setMin(0); p.setMax(20) p = Cfg.getParamInt ( "katana.termSatReservedLocal" ); p.setInt ( 8 ) p = Cfg.getParamInt ( "katana.termSatThreshold" ); p.setInt ( 9 ) p = Cfg.getParamInt ( "katana.eventsLimit" ); p.setInt ( 4000002 ) p = Cfg.getParamInt ( "katana.ripupCost" ); p.setInt ( 3 ); p.setMin(0) p = Cfg.getParamInt ( "katana.strapRipupLimit" ); p.setInt ( 16 ); p.setMin(1) p = Cfg.getParamInt ( "katana.localRipupLimit" ); p.setInt ( 9 ); p.setMin(1) p = Cfg.getParamInt ( "katana.globalRipupLimit" ); p.setInt ( 5 ); p.setMin(1) p = Cfg.getParamInt ( "katana.longGlobalRipupLimit" ); p.setInt ( 5 ); p.setMin(1) p = Cfg.getParamString( 'chip.padCoreSide' ); p.setString( 'South' ) tech = DataBase.getDB().getTechnology() af = AllianceFramework.get() rg = RoutingGauge.create( 'LEF.CoreSite' ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal1') # metal. , RoutingLayerGauge.Horizontal # preferred routing direction. , RoutingLayerGauge.PinOnly # layer usage. , 0 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.190) # track pitch. , u(0.065) # wire width. , u(0.065) # VIA side (that is VIA12). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal2') # metal. , RoutingLayerGauge.Vertical # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 1 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.190) # track pitch. , u(0.070) # wire width. , u(0.070) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal3') # metal. , RoutingLayerGauge.Horizontal # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 2 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.190) # track pitch. , u(0.070) # wire width. , u(0.070) # VIA side (that is VIA34). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal4') # metal. , RoutingLayerGauge.Vertical # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 3 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.285) # track pitch. , u(0.140) # wire width. , u(0.140) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal5') # metal. , RoutingLayerGauge.Horizontal # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 4 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.285) # track pitch. , u(0.140) # wire width. , u(0.140) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal6') # metal. , RoutingLayerGauge.Vertical # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 5 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.285) # track pitch. , u(0.140) # wire width. , u(0.140) # VIA side (that is VIA23). , u(8) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal7') # metal. , RoutingLayerGauge.Horizontal # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 5 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.855) # track pitch. , u(0.400) # wire width. , u(0.400) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal8') # metal. , RoutingLayerGauge.Vertical # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 5 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(0.855) # track pitch. , u(0.400) # wire width. , u(0.400) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal9') # metal. , RoutingLayerGauge.Horizontal # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 5 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(1.710) # track pitch. , u(0.800) # wire width. , u(0.800) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('metal10') # metal. , RoutingLayerGauge.Vertical # preferred routing direction. , RoutingLayerGauge.Default # layer usage. , 5 # depth. , 0.0 # density (deprecated). , u(0) # track offset from AB. , u(1.710) # track pitch. , u(0.800) # wire width. , u(0.800) # VIA side (that is VIA23). , u(0) # obstacle dW. ) ) af.addRoutingGauge( rg ) af.setRoutingGauge( 'LEF.CoreSite' ) # Gauge for standard cells. cg = CellGauge.create( 'LEF.CoreSite' , 'metal2' # pin layer name. , u(0.38) # pitch. , u(2.47) # cell slice height. , u(0.38) # cell slice step. ) af.addCellGauge( cg ) af.setCellGauge( 'LEF.CoreSite' )