Remove metal3 blanket blockage on library cells.

This commit is contained in:
Matt Guthaus 2017-12-19 09:55:59 -08:00
parent 40465d6518
commit ee7bf7c5f2
3 changed files with 13 additions and 14 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)