diff --git a/compiler/geometry.py b/compiler/geometry.py index dbeeee06..22915e3c 100644 --- a/compiler/geometry.py +++ b/compiler/geometry.py @@ -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 diff --git a/compiler/lef.py b/compiler/lef.py index a5b5f29b..b6629c1b 100644 --- a/compiler/lef.py +++ b/compiler/lef.py @@ -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) diff --git a/compiler/openram.py b/compiler/openram.py index 465a3bb5..44bcaed1 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -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)