blob: 4ad7ad34605d06bf39ec4f26bbc26cce37dd8db9 [file] [log] [blame] [edit]
""" 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()