mirror of https://github.com/VLSIDA/OpenRAM.git
Fix error in iterative implementation of combine_classes
This commit is contained in:
parent
4ebb8a26c4
commit
18d874a96a
|
|
@ -653,48 +653,31 @@ class router(router_tech):
|
|||
debug.info(2,"Analyzing pin groups for {}.".format(pin_name))
|
||||
|
||||
pin_set = self.pins[pin_name]
|
||||
local_debug = False
|
||||
|
||||
# Put each pin in an equivalence class of it's own
|
||||
equiv_classes = [set([x]) for x in pin_set]
|
||||
if local_debug:
|
||||
debug.info(0,"INITIAL\n"+pformat(equiv_classes))
|
||||
|
||||
first_run = True
|
||||
while (first_run or len(equiv_classes)<len(old_equiv_classes)):
|
||||
first_run=False
|
||||
def combine_classes(equiv_classes):
|
||||
for class1 in equiv_classes:
|
||||
for class2 in equiv_classes:
|
||||
if class1 == class2:
|
||||
continue
|
||||
#class3 = compare_classes(class1, class2)
|
||||
# Compare each pin in each class,
|
||||
# and if any overlap, return the combined the class
|
||||
combined_class = None
|
||||
# and if any overlap, update equiv_classes to include the combined the class
|
||||
for p1 in class1:
|
||||
for p2 in class2:
|
||||
if p1.overlaps(p2):
|
||||
combined_class = class1 | class2
|
||||
if local_debug:
|
||||
debug.info(0,"COMBINE:"+pformat(combined_class))
|
||||
break
|
||||
else:
|
||||
continue
|
||||
break
|
||||
|
||||
if combined_class:
|
||||
old_equiv_classes = equiv_classes
|
||||
equiv_classes.remove(class1)
|
||||
equiv_classes.remove(class2)
|
||||
equiv_classes.append(combined_class)
|
||||
break
|
||||
else:
|
||||
continue
|
||||
break
|
||||
|
||||
equiv_classes.remove(class1)
|
||||
equiv_classes.remove(class2)
|
||||
equiv_classes.append(combined_class)
|
||||
return(equiv_classes)
|
||||
return(equiv_classes)
|
||||
|
||||
old_length = math.inf
|
||||
while (len(equiv_classes)<old_length):
|
||||
old_length = len(equiv_classes)
|
||||
equiv_classes = combine_classes(equiv_classes)
|
||||
|
||||
if local_debug:
|
||||
debug.info(0,"FINAL "+pformat(equiv_classes))
|
||||
self.pin_groups[pin_name] = [pin_group(name=pin_name, pin_set=x, router=self) for x in equiv_classes]
|
||||
|
||||
def convert_pins(self, pin_name):
|
||||
|
|
|
|||
Loading…
Reference in New Issue