From 244bf17db7b7cc8b0239d2cd8ac27d6f9707931a Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 11 Feb 2012 20:57:08 +0100 Subject: [PATCH] corelogic/misc: displacer + chooser --- migen/corelogic/misc.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/migen/corelogic/misc.py b/migen/corelogic/misc.py index 7705e507d..0140deb69 100644 --- a/migen/corelogic/misc.py +++ b/migen/corelogic/misc.py @@ -39,3 +39,18 @@ def split(v, *counts): r.append(v[offset:offset+n]) offset += n return tuple(r) + +def displacer(signal, shift, output, n=None): + if n is None: + n = 2**shift.bv.width + w = signal.bv.width + l = [Replicate(shift == i, w) & signal for i in range(n)] + return output.eq(Cat(*l)) + +def chooser(signal, shift, output, n=None): + if n is None: + n = 2**shift.bv.width + w = signal.bv.width + cases = [[Constant(i, shift.bv), output.eq(signal[i*w:i*(w+1)])] for i in range(n)] + cases[n-1][0] = Default() + return Case(shift, *cases)