| 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() |