一、需求分析
1、需求一:由Datasheet已知内部地址结构,现在需要对每一个Instance的地址进行计算;
2、需求二:根据测试需求,分好地址,低十位[A9:A0]分给X,高十二位[A21:A10]分给Y,其中已知[A21:A17]用来选Block,[A16:A13]用来选Instance,[A12:A10]用来选每个Instance的地址空间大小。
二、工具
**Python
------字典、列表、for循环、字符串的格式化、函数等
三、代码实现:
def ADDR_initial():
Block_dict = {}
Instance_dict = {}
Dict_select = {}
for i in range(0, 32):
Block_dict[i] = '{:05b}'.format(i)
for i in range(0, 16):
Instance_dict[i] = '{:04b}'.format(i)
Instance_num = 0
for i in range(0, 32):
for j in range(0, 16):
Dict_select[Instance_num] = Block_dict[i] + Instance_dict[j]
Instance_num += 1
return Dict_select
def str_int(Data_str):
Data_int['Data_str_start'] = Data_str + LSB_3[0]
Data_int['Data_str_stop'] = Data_str + LSB_3[1]
for i in Data_int['Data_str_start']:
Data_int.setdefault('Data_int_start', []).append(int(i))
for j in Data_int['Data_str_stop']:
Data_int.setdefault('Data_int_stop', []).append(int(j))
def bin_dec_hex():
Addr_start = 0
Addr_stop = 0
for i in range(len(Data_int['Data_int_start']) - 1, -1, -1):
Addr_start += Data_int['Data_int_start'][i] * (2 ** (len(Data_int['Data_int_start']) - 1 - i))
Addr_start = hex(Addr_start)
for i in range(len(Data_int['Data_int_stop']) - 1, -1, -1):
Addr_stop += Data_int['Data_int_stop'][i] * (2 ** (len(Data_int['Data_int_stop']) - 1 - i))
Addr_stop = hex(Addr_stop)
return Addr_start, Addr_stop
if __name__ == '__main__':
Data_int = {}
LSB_3 = ['000', '111']
temp = ADDR_initial()
Instance = eval(input('请输入Instance Number(0-511):\t'))
Addr_str = temp[Instance]
str_int(Addr_str)
res = bin_dec_hex()
print("此Instance对应的Block Num(0-31)为:\tBlock-", Instance // 16)
print("此Instance对应的Instance Num(0-15)为:\tInstance-", Instance % 16)
print("此Instance的起始地址为:\t", res[0])
print("此Instance的终止地址为:\t", res[1])