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

View File

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

View File

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