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