94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
from ctypes import Union
|
|
import numpy as np
|
|
import random
|
|
|
|
class make_case(object):
|
|
|
|
def __init__(
|
|
self
|
|
):
|
|
self = 0
|
|
|
|
def data_gen(
|
|
self,
|
|
mode = 'random',
|
|
length = 1,
|
|
params = {}
|
|
):
|
|
|
|
match mode:
|
|
case 'random':
|
|
data = [random.randint(0,2**32) for _ in range(length)]
|
|
case 'ones':
|
|
data = (2**32-1)*np.ones(length)
|
|
case 'amp':
|
|
amp = params['amp']
|
|
amp = int(amp,0) if isinstance(amp, str) else int(amp)
|
|
data = amp*np.ones(length)
|
|
case 'zeros':
|
|
data = np.zeros(length)
|
|
case 'value':
|
|
value = params['value']
|
|
if np.size(value) != length:
|
|
print("Warnning: Length Mismatch")
|
|
elif length ==1:
|
|
data = int(value,0) if isinstance(value, str) else int(value)
|
|
else:
|
|
data = np.zeros(length)
|
|
for i in range(0,length):
|
|
data[i] = int(value[i],0) if isinstance(value[i], str) else int(value[i])
|
|
case 'acc':
|
|
ini_data = params['ini_data']
|
|
ini_data = int(ini_data,0) if isinstance(ini_data, str) else int(ini_data)
|
|
step_size = params['step_size']
|
|
step_size = int(step_size,0) if isinstance(step_size, str) else int(step_size)
|
|
data = np.zeros(length)
|
|
for i in range(0,length):
|
|
data[i] = ini_data + i*step_size
|
|
case 'rd_file':
|
|
file_name = params['file_name']
|
|
with open(file_name, "r") as f:
|
|
data_bin = f.read()
|
|
data_bin = data_bin.split('\n')
|
|
data = []
|
|
for d in data_bin:
|
|
data.append((int(d,2)))
|
|
return data
|
|
|
|
def rw_once(
|
|
self,
|
|
op = 'w',
|
|
addr = 0x1F00044,
|
|
data = [0],
|
|
file_name = 'case.txt',
|
|
chip_id = 0,
|
|
exaddr = 1,
|
|
ard_flag = 0
|
|
):
|
|
|
|
with open(file_name, "a") as f:
|
|
cmd = 1 if (op=='r') or (op==1) else 0
|
|
if isinstance(addr, str):
|
|
addr = int(addr,0)
|
|
else:
|
|
addr = int(addr)
|
|
f.write(f"{((int(cmd)<<31) | (int(ard_flag)<<30) | (int(chip_id)<<25) | (addr)):08x}\n")
|
|
f.write(f"{((int(exaddr)<<20) | (int(np.size(data)*4))):08x}\n")
|
|
|
|
if op == 'w':
|
|
if np.size(data) == 1:
|
|
if isinstance(data, str):
|
|
dt = int(data,0)
|
|
else:
|
|
dt = int(np.round(data))
|
|
f.write(f"{(dt if dt>=0 else 2**32+dt):08x}\n")
|
|
else:
|
|
for i in range(0,np.size(data)):
|
|
if isinstance(data[i], str):
|
|
dt = int(data[i],0)
|
|
else:
|
|
dt = int(np.round(data[i]))
|
|
f.write(f"{(dt if dt>=0 else 2**32+dt):08x}\n")
|
|
f.write('\n')
|
|
|