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)