blob: 28a4015fa10069f90e3961819a8028d8c8382b7a [file] [log] [blame]
'''
Created on Nov 27, 2020
@author: mballance
'''
import cocotb
import pybfms
class memory(object):
def __init__(self):
self.m = []
self.m.append([0]*1024)
self.m.append([0]*1024)
self.m.append([0]*1024)
self.m.append([0]*1024)
def access(self, bfm, adr, we, sel, dat_w):
idx = (adr & 0xF0000000) >> 28
if idx > 0 and idx <= 4:
idx -= 1
w_adr = (adr & 0xFFF) >> 2
print("idx=" + str(idx))
dat_r = 0
if we == 1:
self.m[idx][w_adr] = dat_w
else:
dat_r = self.m[idx][w_adr]
bfm.access_ack(dat_r, 0)
else:
print("Error: out-of-bounds access")
pass
def wb_responder(bfm, adr, we, sel, dat_w):
print("wb_responder: " + hex(adr))
bfm.access_ack(0x55aaEEFF, 0)
@cocotb.test()
async def single_access(top):
await pybfms.init()
mem = memory()
u_i0 = pybfms.find_bfm(".*u_init_0")
u_i1 = pybfms.find_bfm(".*u_init_1")
u_t0 = pybfms.find_bfm(".*u_target_0")
u_t0.set_responder(mem.access)
u_t1 = pybfms.find_bfm(".*u_target_1")
u_t1.set_responder(mem.access)
u_t2 = pybfms.find_bfm(".*u_target_2")
u_t2.set_responder(mem.access)
u_t3 = pybfms.find_bfm(".*u_target_3")
u_t3.set_responder(mem.access)
print("Hello from single_access")
for init in range(2):
for targ in range(4):
for cnt in range(100):
adr = (0x10000000*(targ+1))+(0x200*init)+(4*cnt)
exp = (0x1000*init+0x100*targ)+cnt
print("=> Write[" + hex(adr) + "] : init=" + str(init) + " targ=" + str(targ) + " cnt=" + str(cnt) + " adr=" + hex(adr) + " exp=" + hex(exp))
await u_i0.write(adr, exp, 0xF)
print("<= Write[" + hex(adr) + "] : init=" + str(init) + " targ=" + str(targ) + " cnt=" + str(cnt))
for init in range(2):
for targ in range(4):
for cnt in range(100):
adr = (0x10000000*(targ+1))+0x200*init+4*cnt
data = await u_i0.read(adr)
exp = (0x1000*init+0x100*targ)+cnt
if data == exp:
print("PASS: init=" + str(init) + " targ=" + str(targ) + " cnt=" + str(cnt) + " exp=" + hex(exp))
else:
print("FAIL: init=" + str(init) + " targ=" + str(targ) +
" cnt=" + str(cnt) + " exp=" + hex(exp) + " data=" + hex(data))
pass