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