Files
eb001/tb/sw/src/check_custom_ins.py

96 lines
3.0 KiB
Python
Raw Normal View History

#!/usr/bin/python3
import os
import sys
import traceback
import re
2025-02-28 09:07:59 +08:00
def search_custom_inst(logdata, opcode, funct, xd = 0, xs1 = 0, xs2 = 0, xd_filter = 0, xs1_filter = 0, xs2_filter = 0):
lines = logdata
funct3 = 0
if xd != 0:
funct3 = funct3 | 0x4
if xs1 != 0:
funct3 = funct3 | 0x2
if xs2 != 0:
funct3 = funct3 | 0x1
for line in lines:
inst = re.findall(r"inst=\[[\da-fA-F]{8}\]", line)
wreg = re.findall(r"W\[r[\ \d]{2}=[\da-fA-F]{8}\]", line)
rreg = re.findall(r"R\[r[\ \d]{2}=[\da-fA-F]{8}\]", line)
if len(inst) > 0:
inst = int('0x' + inst[0][6:-1], 16)
wreg_val = int('0x' + wreg[0][6:-1], 16)
rreg1_val = int('0x' + rreg[0][6:-1], 16)
rreg2_val = int('0x' + rreg[1][6:-1], 16)
ins_opcode = inst & 0x7f
#只对R系列的custom0进行解码
if opcode == ins_opcode:
ins_funct = (inst >> 25) & 0x7f
ins_funct3 = (inst >> 12) & 0x7
if (ins_funct == funct) and (funct3 == ins_funct3):
outline = line.rstrip()
2025-02-28 09:07:59 +08:00
if (xs1 != 0) and ((rreg1_val & xs1_filter) == xs1_filter):
print(outline)
2025-02-28 09:07:59 +08:00
if (xd != 0) and ((wreg_val & xd_filter) == xd_filter):
print(outline)
2025-02-28 09:07:59 +08:00
if (xs2 != 0) and ((rreg2_val & xs2_filter) == xs2_filter):
print(outline)
else:
pass
def search_ins_cycle_gt(logdata, s_cycle):
lines = logdata
prev_line = None
prev_time = 0
for line in lines:
line = line.rstrip()
cur_time = re.findall(r"C0:[\ \d]{11}", line)
cur_time = int(cur_time[0][3:])
deltime = cur_time - prev_time
if (deltime >= s_cycle) and (prev_line != None):
print(f'T:{deltime}', prev_line)
prev_time = cur_time
prev_line = line
2025-02-28 09:07:59 +08:00
def get_bit_pos(val):
bits_pos = list()
val = val & 0xffffffff
for i in range(32):
if (val & (1 << i)) != 0:
bits_pos.insert(0, i)
return bits_pos
if __name__ == '__main__':
path = sys.argv[0]
path = path.split('/')[0:-1]
path = '/'.join(path)
logfile_path = path + '/../build/cpu1_log.txt'
2025-02-28 09:07:59 +08:00
if len(sys.argv) > 1:
logfile_path = sys.argv[1]
print(logfile_path)
with open(logfile_path, 'rt') as logfile:
2025-02-28 09:07:59 +08:00
logdata = logfile.readlines()
search_ins_cycle_gt(logdata, 2)
'''
filter = (1<<7)
2025-02-28 09:07:59 +08:00
print(f'custom0-ins: clear roccs int flag, bit filter:', get_bit_pos(filter))
search_custom_inst(logdata, 0xb, 0x17, xs1=1, xs1_filter=filter)
'''
2025-02-28 09:07:59 +08:00
'''
filter = (1<<10) | (1 << 7) | (1 << 2) | (1 << 1)
print('custom0-ins: clear roccs int flag, bit filter:', get_bit_pos(filter))
search_custom_inst(logdata, 0xb, 0x17, xs1=1, xs1_filter=filter)
'''
logfile.close()