from common_func.info_conf_reader import InfoConfReader
from common_func.utils import Utils
from profiling_bean.struct_info.struct_decoder import StructDecoder
class InterSoc(StructDecoder):
"""
class used to decode inter soc transmission
"""
def __init__(self: any, *args: tuple) -> None:
filed = args[0]
self._func_type = Utils.get_func_type(filed[0])
self._sys_cnt = filed[3]
self._mata_bw_level = filed[8] & 7
self._buffer_bw_level = (filed[8] & 2040) >> 3
@property
def func_type(self: any) -> str:
"""
get func type
:return: func type
"""
return self._func_type
@property
def mata_bw_level(self: any) -> int:
"""
get mata bandwidth level
:return: mata bandwidth level
"""
return self._mata_bw_level
@property
def l2_buffer_bw_level(self: any) -> int:
"""
get buffer bandwidth level
:return: buffer bandwidth level
"""
return self._buffer_bw_level
@property
def acc_type(self: any) -> str:
"""
for acc type
l2 buffer bw level is the higher 6 bits of the byte.
64512 is 0b1111110000000000 keep the higher 6 bits which represent acc_type
"""
return bin(self._data[0] & 64512)[2:8].zfill(6)
@property
def sys_cnt(self: any) -> int:
"""
for sys cnt
"""
return self._sys_cnt
@property
def sys_time(self: any) -> float:
"""
for sys time
"""
return InfoConfReader().time_from_syscnt(self._sys_cnt)