mirror of https://github.com/VLSIDA/OpenRAM.git
Fix extra indent that made openlane fail.
This commit is contained in:
parent
261d31312a
commit
a111ecb74c
|
|
@ -69,25 +69,31 @@ class lef:
|
||||||
|
|
||||||
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. """
|
||||||
|
# Can possibly use magic lef write to create the LEF
|
||||||
|
# if OPTS.drc_exe and OPTS.drc_exe[0] == "magic":
|
||||||
|
# self.magic_lef_write(lef_name)
|
||||||
|
# return
|
||||||
|
|
||||||
|
# To maintain the indent level easily
|
||||||
|
self.indent = ""
|
||||||
|
|
||||||
if OPTS.detailed_lef:
|
if OPTS.detailed_lef:
|
||||||
debug.info(3, "Writing detailed LEF to {0}".format(lef_name))
|
debug.info(3, "Writing detailed LEF to {0}".format(lef_name))
|
||||||
self.detailed_lef_write(lef_name)
|
|
||||||
else:
|
else:
|
||||||
debug.info(3, "Writing abstract LEF to {0}".format(lef_name))
|
debug.info(3, "Writing abstract LEF to {0}".format(lef_name))
|
||||||
# Can possibly use magic lef write to create the LEF
|
self.compute_abstract_blockages()
|
||||||
# if OPTS.drc_exe and OPTS.drc_exe[0] == "magic":
|
|
||||||
# self.magic_lef_write(lef_name)
|
|
||||||
# return
|
|
||||||
self.abstract_lef_write(lef_name)
|
|
||||||
|
|
||||||
def abstract_lef_write(self, lef_name):
|
|
||||||
# To maintain the indent level easily
|
|
||||||
self.indent = ""
|
|
||||||
|
|
||||||
self.lef = open(lef_name, "w")
|
self.lef = open(lef_name, "w")
|
||||||
self.lef_write_header()
|
self.lef_write_header()
|
||||||
|
|
||||||
|
for pin_name in self.pins:
|
||||||
|
self.lef_write_pin(pin_name)
|
||||||
|
|
||||||
|
self.lef_write_obstructions(OPTS.detailed_lef)
|
||||||
|
self.lef_write_footer()
|
||||||
|
self.lef.close()
|
||||||
|
|
||||||
|
def compute_abstract_blockages(self):
|
||||||
# Start with blockages on all layers the size of the block
|
# Start with blockages on all layers the size of the block
|
||||||
# minus the pin escape margin (hard coded to 4 x m3 pitch)
|
# minus the pin escape margin (hard coded to 4 x m3 pitch)
|
||||||
# These are a pin_layout to use their geometric functions
|
# These are a pin_layout to use their geometric functions
|
||||||
|
|
@ -118,23 +124,6 @@ class lef:
|
||||||
new_blockages = blockage.cut(intersection_pin)
|
new_blockages = blockage.cut(intersection_pin)
|
||||||
self.blockages[pin.layer].extend(new_blockages)
|
self.blockages[pin.layer].extend(new_blockages)
|
||||||
|
|
||||||
self.lef_write_pin(pin_name)
|
|
||||||
|
|
||||||
self.lef_write_obstructions(abstracted=True)
|
|
||||||
self.lef_write_footer()
|
|
||||||
self.lef.close()
|
|
||||||
|
|
||||||
def detailed_lef_write(self, lef_name):
|
|
||||||
# To maintain the indent level easily
|
|
||||||
self.indent = ""
|
|
||||||
|
|
||||||
self.lef = open(lef_name, "w")
|
|
||||||
self.lef_write_header()
|
|
||||||
for pin in self.pins:
|
|
||||||
self.lef_write_pin(pin)
|
|
||||||
self.lef_write_obstructions()
|
|
||||||
self.lef_write_footer()
|
|
||||||
self.lef.close()
|
|
||||||
|
|
||||||
def lef_write_header(self):
|
def lef_write_header(self):
|
||||||
""" Header of LEF file """
|
""" Header of LEF file """
|
||||||
|
|
@ -155,8 +144,8 @@ class lef:
|
||||||
self.lef.write("{0}SYMMETRY X Y R90 ;\n".format(self.indent))
|
self.lef.write("{0}SYMMETRY X Y R90 ;\n".format(self.indent))
|
||||||
|
|
||||||
def lef_write_footer(self):
|
def lef_write_footer(self):
|
||||||
self.lef.write("{0}END {1}\n".format(self.indent, self.name))
|
|
||||||
self.indent = self.indent[:-3]
|
self.indent = self.indent[:-3]
|
||||||
|
self.lef.write("{0}END {1}\n".format(self.indent, self.name))
|
||||||
self.lef.write("END LIBRARY\n")
|
self.lef.write("END LIBRARY\n")
|
||||||
|
|
||||||
def lef_write_pin(self, name):
|
def lef_write_pin(self, name):
|
||||||
|
|
@ -188,20 +177,20 @@ class lef:
|
||||||
self.indent = self.indent[:-3]
|
self.indent = self.indent[:-3]
|
||||||
self.lef.write("{0}END {1}\n".format(self.indent, name))
|
self.lef.write("{0}END {1}\n".format(self.indent, name))
|
||||||
|
|
||||||
def lef_write_obstructions(self, abstracted=False):
|
def lef_write_obstructions(self, detailed=False):
|
||||||
""" 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_layers:
|
for layer in self.lef_layers:
|
||||||
self.lef.write("{0}LAYER {1} ;\n".format(self.indent, layer_names[layer]))
|
self.lef.write("{0}LAYER {1} ;\n".format(self.indent, layer_names[layer]))
|
||||||
self.indent += " "
|
self.indent += " "
|
||||||
if abstracted:
|
if detailed:
|
||||||
blockages = self.blockages[layer]
|
|
||||||
for b in blockages:
|
|
||||||
self.lef_write_shape(b.rect)
|
|
||||||
else:
|
|
||||||
blockages = self.get_blockages(layer, True)
|
blockages = self.get_blockages(layer, True)
|
||||||
for b in blockages:
|
for b in blockages:
|
||||||
self.lef_write_shape(b)
|
self.lef_write_shape(b)
|
||||||
|
else:
|
||||||
|
blockages = self.blockages[layer]
|
||||||
|
for b in blockages:
|
||||||
|
self.lef_write_shape(b.rect)
|
||||||
self.indent = self.indent[:-3]
|
self.indent = self.indent[:-3]
|
||||||
self.lef.write("{0}END\n".format(self.indent))
|
self.lef.write("{0}END\n".format(self.indent))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue