mirror of https://github.com/VLSIDA/OpenRAM.git
Remove metal3 blanket blockage on library cells.
This commit is contained in:
parent
40465d6518
commit
ee7bf7c5f2
|
|
@ -3,7 +3,7 @@ This provides a set of useful generic types for the gdsMill interface.
|
|||
"""
|
||||
import debug
|
||||
from vector import vector
|
||||
from tech import GDS
|
||||
import tech
|
||||
import math
|
||||
from globals import OPTS
|
||||
|
||||
|
|
@ -154,17 +154,18 @@ class instance(geometry):
|
|||
angle += math.radians(180.0)
|
||||
|
||||
if self.mod.is_library_cell:
|
||||
# For lib cells, block the whole thing
|
||||
b = self.mod.get_boundary()
|
||||
newb = self.transform_coords(b, self.offset, mirr, angle)
|
||||
return [newb]
|
||||
# For lib cells, block the whole thing except on metal3
|
||||
# since they shouldn't use metal3
|
||||
if layer==tech.layer["metal1"] or layer==tech.layer["metal2"]:
|
||||
return [self.transform_coords(self.mod.get_boundary(), self.offset, mirr, angle)]
|
||||
else:
|
||||
return []
|
||||
else:
|
||||
|
||||
blockages = self.mod.get_blockages(layer)
|
||||
new_blockages = []
|
||||
for b in blockages:
|
||||
newb = self.transform_coords(b,self.offset, mirr, angle)
|
||||
new_blockages.append(newb)
|
||||
new_blockages.append(self.transform_coords(b,self.offset, mirr, angle))
|
||||
return new_blockages
|
||||
|
||||
def gds_write_file(self, new_layout):
|
||||
|
|
@ -269,7 +270,7 @@ class label(geometry):
|
|||
self.offset = vector(offset).snap_to_grid()
|
||||
|
||||
if zoom<0:
|
||||
self.zoom = GDS["zoom"]
|
||||
self.zoom = tech.GDS["zoom"]
|
||||
else:
|
||||
self.zoom = zoom
|
||||
|
||||
|
|
|
|||
|
|
@ -15,15 +15,13 @@ class lef:
|
|||
# LEF db units per micron
|
||||
self.lef_units = 1000
|
||||
# These are the layers of the obstructions
|
||||
self.layer = layers
|
||||
self.lef_layers = layers
|
||||
|
||||
def lef_write(self, lef_name):
|
||||
"""Write the entire lef of the object to the file."""
|
||||
debug.info(3, "Writing to {0}".format(lef_name))
|
||||
|
||||
self.indent = "" # To maintain the indent level easily
|
||||
self.lef_units = 1000
|
||||
self.lef_layer = ["metal1", "metal2", "metal3"]
|
||||
|
||||
self.lef = open(lef_name,"w")
|
||||
self.lef_write_header()
|
||||
|
|
@ -100,7 +98,7 @@ class lef:
|
|||
def lef_write_obstructions(self):
|
||||
""" Write all the obstructions on each layer """
|
||||
self.lef.write("{0}OBS\n".format(self.indent))
|
||||
for layer in self.lef_layer:
|
||||
for layer in self.lef_layers:
|
||||
self.lef.write("{0}LAYER {1} ;\n".format(self.indent,layer))
|
||||
self.indent += " "
|
||||
blockages = self.get_blockages(layer,True)
|
||||
|
|
|
|||
|
|
@ -123,13 +123,13 @@ last_time=print_time("GDS", datetime.datetime.now(), last_time)
|
|||
lefname = OPTS.output_path + s.name + ".lef"
|
||||
print("LEF: Writing to {0}".format(lefname))
|
||||
s.lef_write(lefname)
|
||||
last_time=print_time("LEF writing", datetime.datetime.now(), last_time)
|
||||
last_time=print_time("LEF", datetime.datetime.now(), last_time)
|
||||
|
||||
# Write a verilog model
|
||||
vname = OPTS.output_path + s.name + ".v"
|
||||
print("Verilog: Writing to {0}".format(vname))
|
||||
s.verilog_write(vname)
|
||||
last_time=print_time("Verilog writing", datetime.datetime.now(), last_time)
|
||||
last_time=print_time("Verilog", datetime.datetime.now(), last_time)
|
||||
|
||||
globals.end_openram()
|
||||
print_time("End",datetime.datetime.now(), start_time)
|
||||
|
|
|
|||
Loading…
Reference in New Issue