24 lines
700 B
Python
24 lines
700 B
Python
|
from migen.fhdl.std import Module, bits_for
|
||
|
from migen.bank.description import CSR
|
||
|
|
||
|
class GenericBank(Module):
|
||
|
def __init__(self, description, busword):
|
||
|
# Turn description into simple CSRs and claim ownership of compound CSR modules
|
||
|
self.simple_csrs = []
|
||
|
for c in description:
|
||
|
if isinstance(c, CSR):
|
||
|
self.simple_csrs.append(c)
|
||
|
else:
|
||
|
c.finalize(busword)
|
||
|
self.simple_csrs += c.get_simple_csrs()
|
||
|
self.submodules += c
|
||
|
self.decode_bits = bits_for(len(self.simple_csrs)-1)
|
||
|
|
||
|
def get_offset(description, name, busword):
|
||
|
offset = 0
|
||
|
for c in description:
|
||
|
if c.name == name:
|
||
|
return offset
|
||
|
offset += (c.size + busword - 1)//busword
|
||
|
raise KeyError("CSR not found: "+name)
|