host/driver/reg: use burst mode to speed up upload of data (useful with Etherbone)

This commit is contained in:
Florent Kermarrec 2015-02-23 00:09:31 +01:00
parent a802a5c535
commit 861c54760e
1 changed files with 13 additions and 8 deletions

View File

@ -12,19 +12,24 @@ class MappedReg:
def read(self):
if self.mode not in ["rw", "ro"]:
raise KeyError(name + "register not readable")
r = 0
for i in range(self.length):
r |= self.readfn(self.addr + 4*i)
if i != (self.length-1):
r <<= self.busword
return r
datas = self.readfn(self.addr, burst_length=self.length)
if isinstance(datas, int):
return datas
else:
data = 0
for i in range(self.length):
data |= datas[i]
if i != (self.length-1):
data <<= self.busword
return data
def write(self, value):
if self.mode not in ["rw", "wo"]:
raise KeyError(name + "register not writable")
datas = []
for i in range(self.length):
dat = (value >> ((self.length-1-i)*self.busword)) & (2**self.busword-1)
self.writefn(self.addr + 4*i, dat)
datas.append((value >> ((self.length-1-i)*self.busword)) & (2**self.busword-1))
self.writefn(self.addr, datas)
class MappedRegs:
def __init__(self, d):