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
pin = pin.get_core()
offset = self.router.offset
offset = self.router.half_wire
spacing = self.router.track_space
size_limit = snap(offset * 4 + spacing)
@ -98,16 +98,12 @@ class graph:
def closest(value, checklist):
""" Return the distance of the closest value in the checklist. """
min_diff = float("inf")
for other in checklist:
diff = snap(abs(value - other))
if diff < min_diff:
min_diff = diff
return min_diff
diffs = [abs(value - other) for other in checklist]
return snap(min(diffs))
wide = self.router.track_wire
offset = self.router.offset
spacing = snap(self.router.track_space + offset + drc["grid"])
half_wide = self.router.half_wire
spacing = snap(self.router.track_space + half_wide + drc["grid"])
blocked = False
for blockage in self.graph_blockages:
# Check if the node is inside the blockage
@ -126,8 +122,8 @@ class graph:
safe = [True, True]
for i in range(2):
if lengths[i] >= wide:
min_diff = snap(min(abs(ll[i] - p[i]), abs(ur[i] - p[i])))
if min_diff < offset:
min_diff = closest(p[i], [ll[i], ur[i]])
if min_diff < half_wide:
safe[i] = False
elif centers[i] != p[i]:
safe[i] = False
@ -262,7 +258,7 @@ class graph:
y_values.update(ys)
# Add corners for blockages
offset = vector(drc["grid"], drc["grid"])
offset = vector([drc["grid"]] * 2)
for blockage in self.graph_blockages:
ll, ur = blockage.rect
# 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 = []
# Set the offset here
self.offset = snap(self.track_wire / 2)
self.half_wire = snap(self.track_wire / 2)
def prepare_gds_reader(self):
@ -213,7 +213,7 @@ class graph_router(router_tech):
if wide > self.layer_widths[0]:
spacing = self.get_layer_space(self.get_zindex(shape.lpp), wide)
return shape.inflated_pin(spacing=spacing,
extra_spacing=self.offset)
extra_spacing=self.half_wire)
def add_path(self, path):
@ -262,7 +262,8 @@ class graph_router(router_tech):
direction = nodes[i].get_direction(nodes[i + 1])
diff = start - 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
offset = vector(start.x, start.y)
self.design.add_via_center(layers=self.layers,
@ -274,7 +275,7 @@ class graph_router(router_tech):
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. """
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),
layer="text",
offset=offset)
#debug.info(0, "Neighbors of {}".format(node.center))
#for neighbor in node.neighbors:
# debug.info(0, " {}".format(neighbor.center))
else:
for blockage in self.blockages:
self.add_object_info(blockage, "blockage{}".format(self.get_zindex(blockage.lpp)))