diff --git a/litex/gen/genlib/misc.py b/litex/gen/genlib/misc.py index 42ad878cb..a28e30d96 100644 --- a/litex/gen/genlib/misc.py +++ b/litex/gen/genlib/misc.py @@ -86,3 +86,19 @@ class WaitTimer(Module): If(self.wait, If(~self.done, count.eq(count - 1)) ).Else(count.eq(count.reset)) + + +class BitSlip(Module): + def __init__(self, dw): + self.i = Signal(dw) + self.o = Signal(dw) + self.value = Signal(max=dw) + + # # # + + r = Signal(2*dw) + self.sync += r.eq(Cat(r[dw:], self.i)) + cases = {} + for i in range(dw): + cases[i] = self.o.eq(r[i:dw+i]) + self.sync += Case(self.value, cases)