mirror of https://github.com/VLSIDA/OpenRAM.git
Cleanup graph router
This commit is contained in:
parent
db2a276077
commit
da24c52c52
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue