Management of SRAMs block at Coriolis devel.
[soclayout.git] / experiments9 / tsmc_c018 / coriolis2 / settings.py
index c3b2d13bbdcddddcfdb99d1fdbb7826ca01d57d7..cd266380f3786fcb1481f05a7e3aa73e1e33d1c9 100644 (file)
@@ -1,5 +1,6 @@
 # -*- Mode:Python -*-
 
+from   __future__ import print_function
 import os
 import socket
 import helpers
@@ -12,14 +13,15 @@ if not NdaDirectory:
     if hostname.startswith('lepka'):
         NdaDirectory = '/dsk/l1/jpc/crypted/soc/techno'
         if not os.path.isdir(NdaDirectory):
-            print '[ERROR] You forgot to mount the NDA encrypted directory, stupid!'
+            print( '[ERROR] You forgot to mount the NDA encrypted directory, stupid!' )
     else:
         NdaDirectory = '/users/soft/techno/techno'
 helpers.setNdaTopDir( NdaDirectory )
 
 import Cfg
-from   CRL     import AllianceFramework
-from   helpers import overlay, l, u, n
+from   Hurricane import DataBase, Cell, Instance, Net
+from   CRL       import AllianceFramework
+from   helpers   import overlay, l, u, n
 from   NDA.node180.tsmc_c018 import techno, FlexLib, LibreSOCIO, LibreSOCMem, pll
 
 techno.setup()
@@ -28,6 +30,49 @@ LibreSOCIO.setup()
 LibreSOCMem.setup()
 pll.setup()
 
+
+db = DataBase.getDB()
+af = AllianceFramework.get()
+
+
+def createSramBlackbox ():
+    global db, af
+    print( '  o  Creating SRAM blackboxes for "ls180" design.' )
+    rootlib  = db.getRootLibrary()
+    lib      = rootlib.getLibrary( 'LibreSOCMem' )
+    sramName = 'spblock_512w64b8w'
+    sram     = lib.getCell( sramName )
+    if not sram:
+        raise ErrorMessage( 1, 'settings.createSramBlocks(): SRAM Cell "{}" not found.' \
+                               .format(sramName) )
+    sram.setAbstractedSupply( True )
+    blackboxeNames = [ 'spblock512w64b8w_0'
+                     , 'spblock512w64b8w_1'
+                     , 'spblock512w64b8w_2'
+                     , 'spblock512w64b8w_3'
+                     ]
+    for blackboxName in blackboxeNames:
+        cell     = Cell.create( lib, blackboxName )
+        instance = Instance.create( cell, 'real_sram', sram )
+        state    = af.getCatalog().getState( blackboxName, True )
+        state.setCell( cell )
+        state.setLogical( True )
+        state.setInMemory( True )
+        print( '     - {}.'.format(cell) )
+        for masterNet in sram.getNets():
+            if not masterNet.isExternal():
+                continue
+            net = Net.create( cell, masterNet.getName() )
+            net.setDirection( masterNet.getDirection() )
+            net.setType( masterNet.getType() )
+            net.setExternal( True )
+            net.setGlobal( masterNet.isGlobal() )
+            if masterNet.isSupply():
+                continue
+            plug = instance.getPlug( masterNet )
+            plug.setNet( net )
+
+
 with overlay.CfgCache(priority=Cfg.Parameter.Priority.UserFile) as cfg:
     cfg.misc.catchCore           = False
     cfg.misc.minTraceLevel       = 12300
@@ -41,6 +86,8 @@ with overlay.CfgCache(priority=Cfg.Parameter.Priority.UserFile) as cfg:
     cfg.etesian.graphics         = 3
     cfg.etesian.spaceMargin      = 0.10
     cfg.katana.eventsLimit       = 4000000
-    af  = AllianceFramework.get()
     env = af.getEnvironment()
     env.setCLOCK( '^sys_clk$|^ck|^jtag_tck$' )
+
+with overlay.UpdateSession():
+    createSramBlackbox()