Cleanup graph router

This commit is contained in:
Eren Dogan 2023-07-31 21:49:14 -07:00
parent db2a276077
commit da24c52c52
2 changed files with 13 additions and 19 deletions

View File

@ -48,7 +48,7 @@ class graph:
# Constant values # Constant values
pin = pin.get_core() pin = pin.get_core()
offset = self.router.offset offset = self.router.half_wire
spacing = self.router.track_space spacing = self.router.track_space
size_limit = snap(offset * 4 + spacing) size_limit = snap(offset * 4 + spacing)
@ -98,16 +98,12 @@ class graph:
def closest(value, checklist): def closest(value, checklist):
""" Return the distance of the closest value in the checklist. """ """ Return the distance of the closest value in the checklist. """
min_diff = float("inf") diffs = [abs(value - other) for other in checklist]
for other in checklist: return snap(min(diffs))
diff = snap(abs(value - other))
if diff < min_diff:
min_diff = diff
return min_diff
wide = self.router.track_wire wide = self.router.track_wire
offset = self.router.offset half_wide = self.router.half_wire
spacing = snap(self.router.track_space + offset + drc["grid"]) spacing = snap(self.router.track_space + half_wide + drc["grid"])
blocked = False blocked = False
for blockage in self.graph_blockages: for blockage in self.graph_blockages:
# Check if the node is inside the blockage # Check if the node is inside the blockage
@ -126,8 +122,8 @@ class graph:
safe = [True, True] safe = [True, True]
for i in range(2): for i in range(2):
if lengths[i] >= wide: if lengths[i] >= wide:
min_diff = snap(min(abs(ll[i] - p[i]), abs(ur[i] - p[i]))) min_diff = closest(p[i], [ll[i], ur[i]])
if min_diff < offset: if min_diff < half_wide:
safe[i] = False safe[i] = False
elif centers[i] != p[i]: elif centers[i] != p[i]:
safe[i] = False safe[i] = False
@ -262,7 +258,7 @@ class graph:
y_values.update(ys) y_values.update(ys)
# Add corners for blockages # Add corners for blockages
offset = vector(drc["grid"], drc["grid"]) offset = vector([drc["grid"]] * 2)
for blockage in self.graph_blockages: for blockage in self.graph_blockages:
ll, ur = blockage.rect ll, ur = blockage.rect
# Add minimum offset to the blockage corner nodes to prevent overlap # Add minimum offset to the blockage corner nodes to prevent overlap

View File

@ -45,7 +45,7 @@ class graph_router(router_tech):
self.fake_pins = [] self.fake_pins = []
# Set the offset here # Set the offset here
self.offset = snap(self.track_wire / 2) self.half_wire = snap(self.track_wire / 2)
def prepare_gds_reader(self): def prepare_gds_reader(self):
@ -213,7 +213,7 @@ class graph_router(router_tech):
if wide > self.layer_widths[0]: if wide > self.layer_widths[0]:
spacing = self.get_layer_space(self.get_zindex(shape.lpp), wide) spacing = self.get_layer_space(self.get_zindex(shape.lpp), wide)
return shape.inflated_pin(spacing=spacing, return shape.inflated_pin(spacing=spacing,
extra_spacing=self.offset) extra_spacing=self.half_wire)
def add_path(self, path): def add_path(self, path):
@ -262,7 +262,8 @@ class graph_router(router_tech):
direction = nodes[i].get_direction(nodes[i + 1]) direction = nodes[i].get_direction(nodes[i + 1])
diff = start - end diff = start - end
offset = start.min(end) offset = start.min(end)
offset = vector(offset.x - self.offset, offset.y - self.offset) offset = vector(offset.x - self.half_wire,
offset.y - self.half_wire)
if direction == (1, 1): # Via if direction == (1, 1): # Via
offset = vector(start.x, start.y) offset = vector(start.x, start.y)
self.design.add_via_center(layers=self.layers, self.design.add_via_center(layers=self.layers,
@ -274,7 +275,7 @@ class graph_router(router_tech):
height=abs(diff.y) + self.track_wire) height=abs(diff.y) + self.track_wire)
def write_debug_gds(self, gds_name="debug_route.gds", g=None, source=None, target=None): def write_debug_gds(self, gds_name, g=None, source=None, target=None):
""" Write the debug GDSII file for the router. """ """ Write the debug GDSII file for the router. """
self.add_router_info(g, source, target) self.add_router_info(g, source, target)
@ -299,9 +300,6 @@ class graph_router(router_tech):
self.design.add_label(text="n{}".format(node.center.z), self.design.add_label(text="n{}".format(node.center.z),
layer="text", layer="text",
offset=offset) offset=offset)
#debug.info(0, "Neighbors of {}".format(node.center))
#for neighbor in node.neighbors:
# debug.info(0, " {}".format(neighbor.center))
else: else:
for blockage in self.blockages: for blockage in self.blockages:
self.add_object_info(blockage, "blockage{}".format(self.get_zindex(blockage.lpp))) self.add_object_info(blockage, "blockage{}".format(self.get_zindex(blockage.lpp)))