'Resolves a memory access of a certain size. Returns a sequence of the bases, offsets, and sizes of the accesses required
to fulfil this.'

def _resolve_access(self, addr, size):

    first_offset = (addr % self.width)
    first_base = (addr - first_offset)
    if ((first_offset + size) <= self.width):
        return [(first_base, first_offset, size)]
    last_size = ((addr + size) % self.width)
    last_base = ((addr + size) - last_size)
    accesses = []
    accesses.append((first_base, first_offset, (self.width - first_offset)))
    accesses.extend(((a, 0, self.width) for a in range((first_base + self.width), last_base, self.width)))
    if (last_size != 0):
        accesses.append((last_base, 0, last_size))
    return accesses
