2 # -*- coding: utf-8 -*-
11 from Hurricane
import DbU
12 from Hurricane
import DataBase
13 from Hurricane
import UpdateSession
14 from Hurricane
import Breakpoint
15 from Hurricane
import Box
16 from Hurricane
import Transformation
17 from Hurricane
import Instance
18 from Hurricane
import Pin
25 from helpers
import l
, u
, n
26 import plugins
.RSavePlugin
29 af
= CRL
.AllianceFramework
.get()
34 Cfg
.Configuration
.pushDefaultPriority( Cfg
.Parameter
.Priority
.UserFile
)
36 cellsTop
= '~/alliance-check-toolkit/cells'
37 env
= af
.getEnvironment()
38 env
.addSYSTEM_LIBRARY( library
=cellsTop
+'/nsxlib', mode
=CRL
.Environment
.Prepend
)
39 env
.addSYSTEM_LIBRARY( library
=cellsTop
+'/mpxlib', mode
=CRL
.Environment
.Prepend
)
42 Cfg
.getParamBool ( 'misc.catchCore' ).setBool ( False )
43 Cfg
.getParamBool ( 'misc.info' ).setBool ( False )
44 Cfg
.getParamBool ( 'misc.paranoid' ).setBool ( False )
45 Cfg
.getParamBool ( 'misc.bug' ).setBool ( False )
46 Cfg
.getParamBool ( 'misc.logMode' ).setBool ( True )
47 Cfg
.getParamBool ( 'misc.verboseLevel1' ).setBool ( True )
48 Cfg
.getParamBool ( 'misc.verboseLevel2' ).setBool ( True )
49 #Cfg.getParamInt ( 'misc.minTraceLevel' ).setInt ( 159 )
50 #Cfg.getParamInt ( 'misc.maxTraceLevel' ).setInt ( 160 )
51 Cfg
.getParamEnumerate ( 'etesian.effort' ).setInt ( 2 )
52 Cfg
.getParamPercentage( 'etesian.spaceMargin' ).setPercentage( 5.0 )
53 Cfg
.getParamPercentage( 'etesian.aspectRatio' ).setPercentage( 100.0 )
54 Cfg
.getParamBool ( 'etesian.uniformDensity' ).setBool ( True )
55 Cfg
.getParamInt ( 'anabatic.edgeLenght' ).setInt ( 24 )
56 Cfg
.getParamInt ( 'anabatic.edgeWidth' ).setInt ( 8 )
57 Cfg
.getParamString ( 'anabatic.topRoutingLayer' ).setString ( 'METAL4')
58 Cfg
.getParamInt ( 'katana.eventsLimit' ).setInt ( 1000000 )
59 Cfg
.getParamInt ( 'katana.hTracksReservedLocal' ).setInt ( 7 )
60 Cfg
.getParamInt ( 'katana.vTracksReservedLocal' ).setInt ( 6 )
61 #Cfg.getParamInt ( 'clockTree.minimumSide' ).setInt ( l(1000) )
63 env
= af
.getEnvironment()
64 env
.setCLOCK( '^clk$|m_clock' )
66 env
.setGROUND( 'vss' )
68 Cfg
.Configuration
.popDefaultPriority()
73 if kw
.has_key('editor') and kw
['editor']:
78 metal2
= DataBase
.getDB().getTechnology().getLayer( 'metal2' )
79 metal3
= DataBase
.getDB().getTechnology().getLayer( 'metal3' )
84 cell
= af
.getCell( 'add', CRL
.Catalog
.State
.Logical
)
85 print cell
.getNet('a(0)')
88 print '[ERROR] Unable to load cell "alu16.vst", aborting .'
98 cell
.setAbutmentBox( ab
)
101 Pin
.create( cell
.getNet('a(%d)' % i
)
103 , Pin
.Direction
.SOUTH
104 , Pin
.PlacementStatus
.PLACED
106 , l( 60.0*i
+ 20.0 ) , l( 0.0 ) # Position.
107 , l( 2.0 ) , l( 2.0 ) # Size.
110 Pin
.create( cell
.getNet('b(%d)' % i
)
112 , Pin
.Direction
.SOUTH
113 , Pin
.PlacementStatus
.PLACED
115 , l( 60.0*i
+ 40.0 ) , l( 0.0 ) # Position.
116 #, l( 0.0 ), l( 100.0*i + 50.0 ) # Position.
117 , l( 2.0 ) , l( 2.0 ) # Size.
120 Pin
.create( cell
.getNet('o(%d)' % i
)
122 , Pin
.Direction
.SOUTH
123 , Pin
.PlacementStatus
.FIXED
125 , l( 60.0*i
+ 60.0 ) , l( 0.0 ) # Position.
126 , l( 2.0 ) , l( 2.0 ) # Size.
130 Pin
.create( cell
.getNet('rst')
133 , Pin
.PlacementStatus
.FIXED
140 UpdateSession
.close()
142 if editor
: editor
.setCell( cell
)
144 etesian
= Etesian
.EtesianEngine
.create(cell
)
147 katana
= Katana
.KatanaEngine
.create(cell
)
148 katana
.digitalInit ()
149 #katana.runNegociatePreRouted()
151 katana
.runGlobalRouter (0)
152 katana
.loadGlobalRouting ( Anabatic
.EngineLoadGrByNet
)
153 katana
.layerAssign ( Anabatic
.EngineNoNetLayerAssign
)
154 katana
.runNegociate ( Katana
.Flags
.NoFlags
)
155 katana
.finalizeLayout ()
157 success
= katana
.getSuccessState()
160 #af.saveCell( cell, CRL.Catalog.State.Views )
161 plugins
.RSavePlugin
.ScriptMain( **kw
)
166 if kw
.has_key('editor') and kw
['editor']:
167 editor
= kw
['editor']
169 db
= DataBase
.getDB()
171 metal2
= DataBase
.getDB().getTechnology().getLayer( 'metal2' )
172 metal3
= DataBase
.getDB().getTechnology().getLayer( 'metal3' )
177 cell
= af
.getCell( 'sub', CRL
.Catalog
.State
.Logical
)
178 print cell
.getNet('a(0)')
181 print '[ERROR] Unable to load cell "alu16.vst", aborting .'
191 cell
.setAbutmentBox( ab
)
194 Pin
.create( cell
.getNet('a(%d)' % i
)
196 , Pin
.Direction
.SOUTH
197 , Pin
.PlacementStatus
.FIXED
199 , l( 100.0*i
+ 50.0 ) , l( 0.0 ) # Position.
200 , l( 2.0 ) , l( 2.0 ) # Size.
203 Pin
.create( cell
.getNet('b(%d)' % i
)
206 , Pin
.PlacementStatus
.FIXED
208 , l( 0.0 ), l( 100.0*i
+ 50.0 ) # Position.
209 , l( 2.0 ) , l( 2.0 ) # Size.
211 Pin
.create( cell
.getNet('o(%d)' % i
)
213 , Pin
.Direction
.SOUTH
214 , Pin
.PlacementStatus
.FIXED
216 , l( 100.0*i
+ 20.0 ) , l( 0.0 ) # Position.
217 , l( 2.0 ) , l( 2.0 ) # Size.
221 Pin
.create( cell
.getNet('rst')
224 , Pin
.PlacementStatus
.FIXED
231 UpdateSession
.close()
233 if editor
: editor
.setCell( cell
)
235 etesian
= Etesian
.EtesianEngine
.create(cell
)
238 katana
= Katana
.KatanaEngine
.create(cell
)
239 katana
.digitalInit ()
240 #katana.runNegociatePreRouted()
242 katana
.runGlobalRouter (0)
243 katana
.loadGlobalRouting ( Anabatic
.EngineLoadGrByNet
)
244 katana
.layerAssign ( Anabatic
.EngineNoNetLayerAssign
)
245 katana
.runNegociate ( Katana
.Flags
.NoFlags
)
246 katana
.finalizeLayout ()
248 success
= katana
.getSuccessState()
251 #af.saveCell( cell, CRL.Catalog.State.Views )
252 plugins
.RSavePlugin
.ScriptMain( **kw
)
254 print "done with add and sub"
259 if kw
.has_key('editor') and kw
['editor']:
260 editor
= kw
['editor']
262 db
= DataBase
.getDB()
264 metal2
= DataBase
.getDB().getTechnology().getLayer( 'metal2' )
265 metal3
= DataBase
.getDB().getTechnology().getLayer( 'metal3' )
267 ################# SNX
270 cell
= af
.getCell( 'add', CRL
.Catalog
.State
.Views
)
271 cell
= af
.getCell( 'sub', CRL
.Catalog
.State
.Views
)
272 cell
= af
.getCell( 'alu_hier', CRL
.Catalog
.State
.Logical
)
274 print '[ERROR] Unable to load cell "snx.vst", aborting .'
284 cell
.setAbutmentBox( ab
)
287 Pin
.create( cell
.getNet('a(%d)' % i
)
289 , Pin
.Direction
.SOUTH
290 , Pin
.PlacementStatus
.FIXED
292 , l( 100.0*i
+ 50.0 ) , l( 0.0 ) # Position.
293 , l( 2.0 ) , l( 2.0 ) # Size.
295 Pin
.create( cell
.getNet('b(%d)' % i
)
297 , Pin
.Direction
.SOUTH
298 , Pin
.PlacementStatus
.FIXED
300 , l( 100.0*i
+ 50.0 ) , l( 0.0 ) # Position.
301 , l( 2.0 ) , l( 2.0 ) # Size.
303 Pin
.create( cell
.getNet('o(%d)' % i
)
305 , Pin
.Direction
.NORTH
306 , Pin
.PlacementStatus
.FIXED
308 , l( 100.0*i
+ 25.0 ) , l( 0.0 ) # Position.
309 , l( 2.0 ) , l( 2.0 ) # Size.
312 Pin
.create( cell
.getNet('rst')
315 , Pin
.PlacementStatus
.FIXED
322 UpdateSession
.close()
324 if editor
: editor
.setCell( cell
)
326 print "editor", editor
, dir(editor
)
328 etesian
= Etesian
.EtesianEngine
.create(cell
)
331 katana
= Katana
.KatanaEngine
.create(cell
)
332 katana
.digitalInit ()
333 #katana.runNegociatePreRouted()
335 katana
.runGlobalRouter (0)
336 katana
.loadGlobalRouting ( Anabatic
.EngineLoadGrByNet
)
337 katana
.layerAssign ( Anabatic
.EngineNoNetLayerAssign
)
338 katana
.runNegociate ( Katana
.Flags
.NoFlags
)
339 katana
.finalizeLayout ()
341 success
= katana
.getSuccessState()
344 #af.saveCell( cell, CRL.Catalog.State.Views )
345 plugins
.RSavePlugin
.ScriptMain( **kw
)
350 if __name__
== '__main__':
352 #success = alu_hier()
354 if not success
: shellSuccess
= 1
356 sys
.exit( shellSuccess
)