| import re | |
| import sys | |
| def main(): | |
| # Popping node CLBLM_R_X27Y37/CLBLM_M_AMUX (1923686) (cost: 0) | |
| POP_RE = re.compile( | |
| r'Popping node ([A-Za-z0-9_/]+) \([0-9]+\) \(cost: ([0-9+\-.e]+)\)' | |
| ) | |
| # rt_node: CLBLM_R_X27Y37/CLBLM_M_AMUX (1923687) (OPIN) | |
| # rt_node: CLBLL_L_X38Y24/CLBLL_LL_C1 (3202101) (IPIN) | |
| PIN_RE = re.compile( | |
| r'rt_node: ([A-Za-z0-9_/]+) \([0-9]+\) \(([^\)]+)\)(\*?)' | |
| ) | |
| print( | |
| """ | |
| proc animate {idx node_length} { | |
| select_objects [get_nodes -of [get_wires [lindex $nodes $idx]]] | |
| set idx [expr $idx+1] | |
| if { $idx < $node_length } { | |
| after 100 [animate $idx $node_length] | |
| } | |
| }""" | |
| ) | |
| print('set nodes {}') | |
| wires = [] | |
| final_route = [] | |
| for line in sys.stdin: | |
| m = POP_RE.search(line) | |
| if m: | |
| wires.append(m.group(1)) | |
| m = PIN_RE.search(line) | |
| if m: | |
| if m.group(3) == '*': | |
| continue | |
| final_route.append((m.group(1), m.group(2))) | |
| assert final_route[0][1] == 'OPIN', final_route[0] | |
| for r in final_route[1:-1]: | |
| assert r[1] in ['CHANX', 'CHANY'], r | |
| assert final_route[-1][1] == 'IPIN', final_route[-1] | |
| print('unhighlight_objects') | |
| for idx, (wire, _) in enumerate(final_route): | |
| print( | |
| 'highlight_objects -color_index {} [get_nodes -of [get_wires {}]]'. | |
| format((idx % 20) + 1, wire) | |
| ) | |
| for wire in wires: | |
| print('select_objects [get_nodes -of [get_wires {}]]'.format(wire)) | |
| if __name__ == "__main__": | |
| main() |