|  | """ Convert rrgraph inode back into graph_node_pkey and print some information. | 
|  |  | 
|  | This is useful for examining router behavior.  E.g. what tile is this rr graph | 
|  | inode from? | 
|  |  | 
|  | """ | 
|  | import argparse | 
|  | import pickle | 
|  | import sqlite3 | 
|  | from lib.rr_graph.graph2 import NodeType | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser(description=__doc__) | 
|  | parser.add_argument('--rrgraph_node_map', required=True) | 
|  | parser.add_argument('--connection_database', required=True) | 
|  | parser.add_argument('--inode', type=int, required=True) | 
|  |  | 
|  | args = parser.parse_args() | 
|  |  | 
|  | with open(args.rrgraph_node_map, 'rb') as f: | 
|  | node_map = pickle.load(f) | 
|  |  | 
|  | inode_to_graph_map = {} | 
|  | for graph_node_pkey, rr_inode in node_map.items(): | 
|  | assert rr_inode not in inode_to_graph_map | 
|  | inode_to_graph_map[rr_inode] = graph_node_pkey | 
|  |  | 
|  | conn = sqlite3.connect( | 
|  | 'file:{}?mode=ro'.format(args.connection_database), uri=True | 
|  | ) | 
|  |  | 
|  | graph_node_pkey = inode_to_graph_map[args.inode] | 
|  |  | 
|  | cur = conn.cursor() | 
|  | cur2 = conn.cursor() | 
|  | cur.execute( | 
|  | """ | 
|  | SELECT graph_node_type, track_pkey, node_pkey FROM graph_node WHERE pkey = ? | 
|  | """, (graph_node_pkey, ) | 
|  | ) | 
|  | result = cur.fetchone() | 
|  | assert result is not None, graph_node_pkey | 
|  | graph_node_type_int, track_pkey, node_pkey = result | 
|  |  | 
|  | graph_node_type = NodeType(graph_node_type_int) | 
|  |  | 
|  | wires = [] | 
|  | for wire_pkey, wire_in_tile_pkey, phy_tile_pkey in cur.execute(""" | 
|  | SELECT pkey, wire_in_tile_pkey, phy_tile_pkey FROM wire WHERE node_pkey = ? | 
|  | """, (node_pkey, )): | 
|  | cur2.execute( | 
|  | """ | 
|  | SELECT name FROM wire_in_tile WHERE pkey = ? | 
|  | """, (wire_in_tile_pkey, ) | 
|  | ) | 
|  | wire = cur2.fetchone()[0] | 
|  |  | 
|  | cur2.execute( | 
|  | """ | 
|  | SELECT name FROM phy_tile WHERE pkey = ? | 
|  | """, (phy_tile_pkey, ) | 
|  | ) | 
|  | tile = cur2.fetchone()[0] | 
|  |  | 
|  | wires.append((tile, wire)) | 
|  |  | 
|  | print('rr inode: {}'.format(args.inode)) | 
|  | print('graph_node_pkey inode: {}'.format(graph_node_pkey)) | 
|  | print('NodeType: {}'.format(graph_node_type)) | 
|  | print('Wires ({}):'.format(len(wires))) | 
|  | for tile, wire in wires: | 
|  | print('  {}/{}'.format(tile, wire)) | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main() |