Add technology parameter for library prefix during uniquification of GDS

This commit is contained in:
mrg 2021-07-12 11:01:51 -07:00
parent bd64912977
commit cce1305da3
5 changed files with 26 additions and 32 deletions

View File

@ -12,6 +12,7 @@ nominal_corner_only = True
route_supplies = "ring"
#route_supplies = "left"
check_lvsdrc = True
uniquify = True
#perimeter_pins = False
#netlist_only = True
#analytical_delay = False

View File

@ -81,7 +81,7 @@ class VlsiLayout:
coordinatesRotate.extend((newX,newY))
return coordinatesRotate
def uniquify(self):
def uniquify(self, prefix_name=None):
new_structures = {}
if self.rootStructureName[-1] == "\x00":
prefix = self.rootStructureName[0:-1] + "_"
@ -92,7 +92,10 @@ class VlsiLayout:
base_name = name[0:-1]
else:
base_name = name
if name != self.rootStructureName:
# Don't do library cells
if prefix_name and base_name.startswith(prefix_name):
new_name = name
elif name != self.rootStructureName:
new_name = self.padText(prefix + base_name)
else:
new_name = name
@ -105,7 +108,11 @@ class VlsiLayout:
base_sref_name = sref.sName[0:-1]
else:
base_sref_name = sref.sName
new_sref_name = self.padText(prefix + base_sref_name)
# Don't do library cells
if prefix_name and base_sref_name.startswith(prefix_name):
new_sref_name = sref.sName
else:
new_sref_name = self.padText(prefix + base_sref_name)
sref.sName = new_sref_name
#print("SREF: {0} -> {1}".format(base_sref_name, new_sref_name))
self.structures = new_structures
@ -774,9 +781,9 @@ class VlsiLayout:
shapes = self.getAllShapes(lpp)
else:
lpp = layer_override[label_text]
except:
pass
for boundary in shapes:

View File

@ -1,19 +0,0 @@
#!/usr/bin/env python3
import sys
from gdsMill import gdsMill
if len(sys.argv) < 3:
print("Script to prefix every instance and structure with the root cell name to provide unique namespace.")
print("Usage: {0} in.gds out.gds".format(sys.argv[0]))
sys.exit(1)
gds_file = sys.argv[1]
gds = gdsMill.VlsiLayout()
reader = gdsMill.Gds2reader(gds)
reader.loadFromFile(gds_file)
gds.uniquify()
writer = gdsMill.Gds2writer(gds)
writer.writeToFile(sys.argv[2])

View File

@ -69,7 +69,12 @@ class sram():
reader = gdsMill.Gds2reader(gds)
reader.loadFromFile(name)
gds.uniquify()
# Uniquify but skip the library cells since they are hard coded
try:
from tech import library_prefix_name
except ImportError:
library_prefix_name = None
gds.uniquify(library_prefix_name)
writer = gdsMill.Gds2writer(gds)
unique_name = name.replace(".gds", "_unique.gds")

View File

@ -3,17 +3,17 @@
import sys
from gdsMill import gdsMill
if len(sys.argv) < 3:
print("Script to prefix every instance and structure with the root cell name to provide unique namespace.")
print("Usage: {0} in.gds out.gds".format(sys.argv[0]))
if len(sys.argv) < 4:
print("Script to prefix every instance and structure with the root cell name to provide unique namespace, but skip cells that begin with the library prefix.")
print("Usage: {0} <library prefix> in.gds out.gds".format(sys.argv[0]))
sys.exit(1)
gds_file = sys.argv[1]
gds_file = sys.argv[2]
gds = gdsMill.VlsiLayout()
reader = gdsMill.Gds2reader(gds)
reader.loadFromFile(gds_file)
gds.uniquify()
gds.uniquify(prefix_name=sys.argv[1])
writer = gdsMill.Gds2writer(gds)
writer.writeToFile(sys.argv[2])
writer.writeToFile(sys.argv[3])