mirror of https://github.com/VLSIDA/OpenRAM.git
Fix lpp erase bug in removing router annotations
This commit is contained in:
parent
4fc0357282
commit
d61fcb3be3
|
|
@ -23,10 +23,14 @@ class geometry:
|
||||||
A specific path, shape, or text geometry. Base class for shared
|
A specific path, shape, or text geometry. Base class for shared
|
||||||
items.
|
items.
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self, lpp=None):
|
||||||
""" By default, everything has no size. """
|
""" By default, everything has no size. """
|
||||||
self.width = 0
|
self.width = 0
|
||||||
self.height = 0
|
self.height = 0
|
||||||
|
if lpp:
|
||||||
|
self.lpp = lpp
|
||||||
|
self.layerNumber = lpp[0]
|
||||||
|
self.layerPurpose = lpp[1]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
""" override print function output """
|
""" override print function output """
|
||||||
|
|
@ -410,10 +414,8 @@ class path(geometry):
|
||||||
|
|
||||||
def __init__(self, lpp, coordinates, path_width):
|
def __init__(self, lpp, coordinates, path_width):
|
||||||
"""Initializes a path for the specified layer"""
|
"""Initializes a path for the specified layer"""
|
||||||
super().__init__()
|
super().__init__(lpp)
|
||||||
self.name = "path"
|
self.name = "path"
|
||||||
self.layerNumber = lpp[0]
|
|
||||||
self.layerPurpose = lpp[1]
|
|
||||||
self.coordinates = map(lambda x: [x[0], x[1]], coordinates)
|
self.coordinates = map(lambda x: [x[0], x[1]], coordinates)
|
||||||
self.coordinates = vector(self.coordinates).snap_to_grid()
|
self.coordinates = vector(self.coordinates).snap_to_grid()
|
||||||
self.path_width = path_width
|
self.path_width = path_width
|
||||||
|
|
@ -448,11 +450,9 @@ class label(geometry):
|
||||||
|
|
||||||
def __init__(self, text, lpp, offset, zoom=None):
|
def __init__(self, text, lpp, offset, zoom=None):
|
||||||
"""Initializes a text label for specified layer"""
|
"""Initializes a text label for specified layer"""
|
||||||
super().__init__()
|
super().__init__(lpp)
|
||||||
self.name = "label"
|
self.name = "label"
|
||||||
self.text = text
|
self.text = text
|
||||||
self.layerNumber = lpp[0]
|
|
||||||
self.layerPurpose = lpp[1]
|
|
||||||
self.offset = vector(offset).snap_to_grid()
|
self.offset = vector(offset).snap_to_grid()
|
||||||
|
|
||||||
if not zoom:
|
if not zoom:
|
||||||
|
|
@ -495,10 +495,8 @@ class rectangle(geometry):
|
||||||
|
|
||||||
def __init__(self, lpp, offset, width, height):
|
def __init__(self, lpp, offset, width, height):
|
||||||
"""Initializes a rectangular shape for specified layer"""
|
"""Initializes a rectangular shape for specified layer"""
|
||||||
super().__init__()
|
super().__init__(lpp)
|
||||||
self.name = "rect"
|
self.name = "rect"
|
||||||
self.layerNumber = lpp[0]
|
|
||||||
self.layerPurpose = lpp[1]
|
|
||||||
self.offset = vector(offset).snap_to_grid()
|
self.offset = vector(offset).snap_to_grid()
|
||||||
self.size = vector(width, height).snap_to_grid()
|
self.size = vector(width, height).snap_to_grid()
|
||||||
self.width = round_to_grid(self.size.x)
|
self.width = round_to_grid(self.size.x)
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,11 @@
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import itertools
|
||||||
|
import math
|
||||||
import gdsMill
|
import gdsMill
|
||||||
from tech import drc, GDS
|
from tech import drc, GDS
|
||||||
from tech import layer as techlayer
|
from tech import layer as techlayer
|
||||||
import math
|
|
||||||
import debug
|
import debug
|
||||||
from router_tech import router_tech
|
from router_tech import router_tech
|
||||||
from pin_layout import pin_layout
|
from pin_layout import pin_layout
|
||||||
|
|
@ -189,7 +190,6 @@ class router(router_tech):
|
||||||
# self.combine_adjacent_pins(pin)
|
# self.combine_adjacent_pins(pin)
|
||||||
# print_time("Combining adjacent pins",datetime.now(), start_time, 4)
|
# print_time("Combining adjacent pins",datetime.now(), start_time, 4)
|
||||||
|
|
||||||
|
|
||||||
# Separate any adjacent grids of differing net names
|
# Separate any adjacent grids of differing net names
|
||||||
# that overlap
|
# that overlap
|
||||||
# Must be done before enclosing pins
|
# Must be done before enclosing pins
|
||||||
|
|
@ -266,18 +266,10 @@ class router(router_tech):
|
||||||
This will try to separate all grid pins by the supplied
|
This will try to separate all grid pins by the supplied
|
||||||
number of separation tracks (default is to prevent adjacency).
|
number of separation tracks (default is to prevent adjacency).
|
||||||
"""
|
"""
|
||||||
# Commented out to debug with SCMOS
|
|
||||||
# if separation==0:
|
|
||||||
# return
|
|
||||||
|
|
||||||
pin_names = self.pin_groups.keys()
|
pin_names = self.pin_groups.keys()
|
||||||
for i, pin_name1 in enumerate(pin_names):
|
|
||||||
for j, pin_name2 in enumerate(pin_names):
|
for (pin_name1, pin_name2) in itertools.combinations(pin_names, 2):
|
||||||
if i == j:
|
self.separate_adjacent_pin(pin_name1, pin_name2, separation)
|
||||||
continue
|
|
||||||
if i > j:
|
|
||||||
return
|
|
||||||
self.separate_adjacent_pin(pin_name1, pin_name2, separation)
|
|
||||||
|
|
||||||
def separate_adjacent_pin(self, pin_name1, pin_name2, separation):
|
def separate_adjacent_pin(self, pin_name1, pin_name2, separation):
|
||||||
"""
|
"""
|
||||||
|
|
@ -290,6 +282,7 @@ class router(router_tech):
|
||||||
"Comparing {0} and {1} adjacency".format(pin_name1,
|
"Comparing {0} and {1} adjacency".format(pin_name1,
|
||||||
pin_name2))
|
pin_name2))
|
||||||
removed_grids = 0
|
removed_grids = 0
|
||||||
|
|
||||||
for index1, pg1 in enumerate(self.pin_groups[pin_name1]):
|
for index1, pg1 in enumerate(self.pin_groups[pin_name1]):
|
||||||
for index2, pg2 in enumerate(self.pin_groups[pin_name2]):
|
for index2, pg2 in enumerate(self.pin_groups[pin_name2]):
|
||||||
adj_grids = pg1.adjacent_grids(pg2, separation)
|
adj_grids = pg1.adjacent_grids(pg2, separation)
|
||||||
|
|
@ -1039,18 +1032,18 @@ class router(router_tech):
|
||||||
(ll, ur) = self.convert_track_to_shape(coord)
|
(ll, ur) = self.convert_track_to_shape(coord)
|
||||||
self.cell.add_rect(layer="text",
|
self.cell.add_rect(layer="text",
|
||||||
offset=ll,
|
offset=ll,
|
||||||
width=ur[0]-ll[0],
|
width=ur[0] - ll[0],
|
||||||
height=ur[1]-ll[1])
|
height=ur[1] - ll[1])
|
||||||
(ll, ur) = self.convert_track_to_pin(coord).rect
|
# (ll, ur) = self.convert_track_to_pin(coord).rect
|
||||||
self.cell.add_rect(layer="boundary",
|
# self.cell.add_rect(layer="boundary",
|
||||||
offset=ll,
|
# offset=ll,
|
||||||
width=ur[0]-ll[0],
|
# width=ur[0] - ll[0],
|
||||||
height=ur[1]-ll[1])
|
# height=ur[1] - ll[1])
|
||||||
(ll, ur) = pin.rect
|
(ll, ur) = pin.rect
|
||||||
self.cell.add_rect(layer="text",
|
self.cell.add_rect(layer="text",
|
||||||
offset=ll,
|
offset=ll,
|
||||||
width=ur[0]-ll[0],
|
width=ur[0] - ll[0],
|
||||||
height=ur[1]-ll[1])
|
height=ur[1] - ll[1])
|
||||||
|
|
||||||
def write_debug_gds(self, gds_name="debug_route.gds", stop_program=True):
|
def write_debug_gds(self, gds_name="debug_route.gds", stop_program=True):
|
||||||
"""
|
"""
|
||||||
|
|
@ -1058,9 +1051,9 @@ class router(router_tech):
|
||||||
search information annotated on it.
|
search information annotated on it.
|
||||||
"""
|
"""
|
||||||
debug.info(0, "Writing annotated router gds file to {}".format(gds_name))
|
debug.info(0, "Writing annotated router gds file to {}".format(gds_name))
|
||||||
self.del_router_info()
|
|
||||||
self.add_router_info()
|
self.add_router_info()
|
||||||
self.cell.gds_write(gds_name)
|
self.cell.gds_write(gds_name)
|
||||||
|
self.del_router_info()
|
||||||
|
|
||||||
if stop_program:
|
if stop_program:
|
||||||
import sys
|
import sys
|
||||||
|
|
@ -1071,17 +1064,17 @@ class router(router_tech):
|
||||||
Display grid information in the GDS file for a single grid cell.
|
Display grid information in the GDS file for a single grid cell.
|
||||||
"""
|
"""
|
||||||
shape = self.convert_track_to_shape(g)
|
shape = self.convert_track_to_shape(g)
|
||||||
partial_track = vector(0,self.track_width/6.0)
|
partial_track = vector(0, self.track_width / 6.0)
|
||||||
self.cell.add_rect(layer="text",
|
self.cell.add_rect(layer="text",
|
||||||
offset=shape[0],
|
offset=shape[0],
|
||||||
width=shape[1].x-shape[0].x,
|
width=shape[1].x - shape[0].x,
|
||||||
height=shape[1].y-shape[0].y)
|
height=shape[1].y - shape[0].y)
|
||||||
t = self.rg.map[g].get_type()
|
t = self.rg.map[g].get_type()
|
||||||
|
|
||||||
# midpoint offset
|
# midpoint offset
|
||||||
off = vector((shape[1].x+shape[0].x)/2,
|
off = vector((shape[1].x + shape[0].x) / 2,
|
||||||
(shape[1].y+shape[0].y)/2)
|
(shape[1].y + shape[0].y) / 2)
|
||||||
if t != None:
|
if t:
|
||||||
if g[2] == 1:
|
if g[2] == 1:
|
||||||
# Upper layer is upper right label
|
# Upper layer is upper right label
|
||||||
type_off = off + partial_track
|
type_off = off + partial_track
|
||||||
|
|
@ -1107,16 +1100,15 @@ class router(router_tech):
|
||||||
|
|
||||||
self.cell.add_label(text="{0},{1}".format(g[0], g[1]),
|
self.cell.add_label(text="{0},{1}".format(g[0], g[1]),
|
||||||
layer="text",
|
layer="text",
|
||||||
offset=shape[0],
|
offset=shape[0])
|
||||||
zoom=0.05)
|
|
||||||
|
|
||||||
def del_router_info(self):
|
def del_router_info(self):
|
||||||
"""
|
"""
|
||||||
Erase all of the comments on the current level.
|
Erase all of the comments on the current level.
|
||||||
"""
|
"""
|
||||||
debug.info(0, "Erasing router info")
|
debug.info(0, "Erasing router info")
|
||||||
layer_num = techlayer["text"]
|
lpp = techlayer["text"]
|
||||||
self.cell.objs = [x for x in self.cell.objs if x.layerNumber != layer_num]
|
self.cell.objs = [x for x in self.cell.objs if x.lpp != lpp]
|
||||||
|
|
||||||
def add_router_info(self):
|
def add_router_info(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -1132,7 +1124,6 @@ class router(router_tech):
|
||||||
show_all_grids = True
|
show_all_grids = True
|
||||||
|
|
||||||
if show_all_grids:
|
if show_all_grids:
|
||||||
# self.rg.add_all_grids()
|
|
||||||
for g in self.rg.map:
|
for g in self.rg.map:
|
||||||
self.annotate_grid(g)
|
self.annotate_grid(g)
|
||||||
|
|
||||||
|
|
@ -1143,8 +1134,8 @@ class router(router_tech):
|
||||||
(ll, ur) = blockage.inflate()
|
(ll, ur) = blockage.inflate()
|
||||||
self.cell.add_rect(layer="text",
|
self.cell.add_rect(layer="text",
|
||||||
offset=ll,
|
offset=ll,
|
||||||
width=ur.x-ll.x,
|
width=ur.x - ll.x,
|
||||||
height=ur.y-ll.y)
|
height=ur.y - ll.y)
|
||||||
if show_blockage_grids:
|
if show_blockage_grids:
|
||||||
self.set_blockages(self.blocked_grids, True)
|
self.set_blockages(self.blocked_grids, True)
|
||||||
for g in self.rg.map:
|
for g in self.rg.map:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue