From 8354de654fb12004a43618302463a18423ef752e Mon Sep 17 00:00:00 2001 From: Eren Dogan Date: Fri, 21 Jul 2023 12:24:20 -0700 Subject: [PATCH] Fix precision of blockage node centers --- compiler/router/graph.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/compiler/router/graph.py b/compiler/router/graph.py index 92c5e1fd..16f3954f 100644 --- a/compiler/router/graph.py +++ b/compiler/router/graph.py @@ -12,7 +12,7 @@ from openram.tech import drc from .direction import direction from .graph_node import graph_node from .graph_probe import graph_probe -from .graph_utils import snap_to_grid +from .graph_utils import * class graph: @@ -68,14 +68,6 @@ class graph: def is_node_blocked(self, node): """ Return if a node is blocked by a blockage. """ - def diff(a, b): - """ - Return the absolute difference of two numbers avoiding precision - errors. - """ - decimals = len(str(drc["grid"]).split(".")[1]) - return round(abs(a - b), decimals) - blocked = False for blockage in self.graph_blockages: # Check if two shapes overlap @@ -93,10 +85,10 @@ class graph: safe = [True, True] for i in range(2): if lengths[i] >= offset * 2: - min_diff = min(diff(ll[i], p[i]), diff(ur[i], p[i])) + min_diff = snap_offset_to_grid(min(abs(ll[i] - p[i]), abs(ur[i] - p[i]))) if min_diff < offset: safe[i] = False - elif diff(centers[i], p[i]) > 0: + elif centers[i] != p[i]: safe[i] = False if not all(safe): blocked = True @@ -193,12 +185,14 @@ class graph: y_values.add(p.y) # Add corners for blockages - offset = drc["grid"] + offset = vector(drc["grid"], drc["grid"]) for blockage in self.graph_blockages: ll, ur = blockage.rect + nll = snap_to_grid(ll - offset) + nur = snap_to_grid(ur + offset) # Add minimum offset to the blockage corner nodes to prevent overlap - x_values.update([ll.x - offset, ur.x + offset]) - y_values.update([ll.y - offset, ur.y + offset]) + x_values.update([nll.x, nur.x]) + y_values.update([nll.y, nur.y]) # Sort x and y values x_values = list(x_values)