Finalize uniquify option for SRAMs

This commit is contained in:
mrg 2021-06-22 16:13:33 -07:00
parent 8095c72fc8
commit c69eb47a7a
4 changed files with 34 additions and 14 deletions

View File

@ -81,8 +81,9 @@ class VlsiLayout:
coordinatesRotate.extend((newX,newY)) coordinatesRotate.extend((newX,newY))
return coordinatesRotate return coordinatesRotate
def prefixAll(self, prefix): def uniquify(self):
new_structures = {} new_structures = {}
prefix = self.rootStructureName + "_"
for name in self.structures: for name in self.structures:
if name != self.rootStructureName: if name != self.rootStructureName:

View File

@ -166,6 +166,9 @@ class options(optparse.Values):
keep_temp = False keep_temp = False
# Add a prefix of the root cell before every structure in the GDS
# after outputting the GDS2
uniquify = False
# These are the default modules that can be over-riden # These are the default modules that can be over-riden
bank_select = "bank_select" bank_select = "bank_select"

View File

@ -4,8 +4,8 @@ import sys
from gdsMill import gdsMill from gdsMill import gdsMill
if len(sys.argv) < 4: if len(sys.argv) < 4:
print("Script to prefix every instance and structure to create a unique namespace.") print("Script to prefix every instance and structure with the root cell name to provide unique namespace.")
print("Usage: {0} prefix in.gds out.gds".format(sys.argv[0])) print("Usage: {0} in.gds out.gds".format(sys.argv[0]))
sys.exit(1) sys.exit(1)
prefix = sys.argv[1] prefix = sys.argv[1]
@ -15,7 +15,7 @@ gds = gdsMill.VlsiLayout()
reader = gdsMill.Gds2reader(gds) reader = gdsMill.Gds2reader(gds)
reader.loadFromFile(gds_file) reader.loadFromFile(gds_file)
gds.prefixAll(prefix) gds.uniquify()
writer = gdsMill.Gds2writer(gds) writer = gdsMill.Gds2writer(gds)
writer.writeToFile(sys.argv[3]) writer.writeToFile(sys.argv[3])

View File

@ -11,6 +11,7 @@ import debug
import verify import verify
from characterizer import functional from characterizer import functional
from globals import OPTS, print_time from globals import OPTS, print_time
import shutil
class sram(): class sram():
@ -60,6 +61,21 @@ class sram():
def gds_write(self, name): def gds_write(self, name):
self.s.gds_write(name) self.s.gds_write(name)
# This addresses problems with flat GDS namespaces when we
# want to merge this SRAM with other SRAMs.
if OPTS.uniquify:
import gdsMill
gds = gdsMill.VlsiLayout()
reader = gdsMill.Gds2reader(gds)
reader.loadFromFile(name)
gds.uniquify()
writer = gdsMill.Gds2writer(gds)
unique_name = name.replace(".gds", "_unique.gds")
writer.writeToFile(unique_name)
shutil.move(unique_name, name)
def verilog_write(self, name): def verilog_write(self, name):
self.s.verilog_write(name) self.s.verilog_write(name)
@ -84,9 +100,9 @@ class sram():
debug.print_raw("SP: Writing to {0}".format(spname)) debug.print_raw("SP: Writing to {0}".format(spname))
self.sp_write(spname) self.sp_write(spname)
functional(self.s, functional(self.s,
os.path.basename(spname), os.path.basename(spname),
cycles=200, cycles=200,
output_path=OPTS.output_path) output_path=OPTS.output_path)
print_time("Spice writing", datetime.datetime.now(), start_time) print_time("Spice writing", datetime.datetime.now(), start_time)
if not OPTS.netlist_only: if not OPTS.netlist_only: