xref: /XiangShan/scripts/cache/l2DB_helper.py (revision 1b46b9591920008655d659ac88cd0250db769664)
1#!/usr/bin/env python3
2import sys
3import os
4import argparse
5
6xshome = os.environ['NOOP_HOME']
7assert(xshome) # NOOP_HOME is set
8print('XSHOME:',xshome)
9
10xsbuild = xshome + '/build/'
11
12def find_lateset(suffix):
13    fs = [f for f in os.listdir(xsbuild) if f.endswith(suffix)]
14    fs.sort()
15    return fs[-1]
16
17def parse_db(table_name, script):
18    return (f'sqlite3 {db} "select * from (' +
19    f'select * from {table_name} ' +
20    (f'where {sql} ' if(sql != '') else '') +
21    (f'order by STAMP desc ' if(last) else '') +
22    f'limit {limit}' +
23    f') order by STAMP asc" | sh {script}')
24
25parser = argparse.ArgumentParser(description='L2DB helper')
26parser.add_argument('cmd', choices=['log', 'mp'], help='[Required] log for TLLOG; mp for L2 MainPipe')
27parser.add_argument('sql', nargs='?', default='', help='[Optional] sql query, e.g. "STAMP > 10000" or "ADDRESS=0x80000000"')
28parser.add_argument('-l', '--last', action='store_true', help='select the last N records')
29parser.add_argument('-n', '--limit', type=int, default=20, help='select N records')
30parser.add_argument('-p', '--path', default=None, help='path to db file (if not designated, use the latest in build)')
31args = parser.parse_args()
32# print(args)
33
34cmd = args.cmd
35sql = args.sql
36last = args.last
37limit = args.limit
38db = xsbuild + find_lateset('.db') if args.path == None else args.path
39print(db)
40
41line = ''
42if(cmd == 'log'):
43    line = parse_db('TLLOG', xshome + '/scripts/cache/convert_tllog.sh')
44
45elif(cmd == 'mp'):
46    line = parse_db('L2MP', xshome + '/scripts/cache/convert_mp.sh')
47
48# elif(cmd == 'clean'):
49#     os.system(f'rm -rf {xsbuild}*.vcd')
50#     os.system(f'rm -rf {xsbuild}*.vpd')
51#     os.system(f'rm -rf {xsbuild}*.gtkw')
52#     os.system(f'rm -rf {xsbuild}*.db')
53
54else:
55    print('Unknown command')
56    exit()
57
58print(line)
59os.system(line)