litex/migen/bank/bank.py

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)