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)
|