| """ Find an rr node by specifying a wire name (e.g. INT_R_X3Y149/WL1BEG0). |
| |
| This is useful for examining router behavior. E.g. what which inode represents |
| this wire? |
| |
| """ |
| 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('--wire', required=True) |
| |
| args = parser.parse_args() |
| |
| with open(args.rrgraph_node_map, 'rb') as f: |
| node_map = pickle.load(f) |
| conn = sqlite3.connect( |
| 'file:{}?mode=ro'.format(args.connection_database), uri=True |
| ) |
| |
| tile, wire = args.wire.split('/') |
| |
| cur = conn.cursor() |
| cur.execute( |
| """ |
| SELECT pkey, node_pkey FROM wire WHERE |
| wire_in_tile_pkey IN (SELECT pkey FROM wire_in_tile WHERE name = ?) |
| AND |
| phy_tile_pkey = (SELECT pkey FROM phy_tile WHERE name = ?) |
| """, (wire, tile) |
| ) |
| results = cur.fetchall() |
| assert len(results) == 1 |
| |
| wire_pkey, node_pkey = results[0] |
| |
| print('Wire ({}): {}'.format(wire_pkey, args.wire)) |
| for (graph_node_pkey, graph_node_type) in cur.execute(""" |
| SELECT pkey, graph_node_type FROM graph_node WHERE node_pkey = ? |
| """, (node_pkey, )): |
| print( |
| ' Node inode={} pkey={} {}'.format( |
| node_map.get(graph_node_pkey), graph_node_pkey, |
| NodeType(graph_node_type) |
| ) |
| ) |
| |
| |
| if __name__ == "__main__": |
| main() |