From 77a0f0a3bb4b971bb30643935c295940680b72c1 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Mon, 25 Mar 2013 15:54:09 +0100 Subject: [PATCH] actorlib/structuring/Cast: support inversion --- migen/actorlib/structuring.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/migen/actorlib/structuring.py b/migen/actorlib/structuring.py index 6f6483b28..dbe2204ab 100644 --- a/migen/actorlib/structuring.py +++ b/migen/actorlib/structuring.py @@ -8,14 +8,20 @@ def _rawbits_layout(l): return l class Cast(CombinatorialActor): - def __init__(self, layout_from, layout_to): + def __init__(self, layout_from, layout_to, reverse_from=False, reverse_to=False): + self.reverse_from = reverse_from + self.reverse_to = reverse_to CombinatorialActor.__init__(self, ("sink", Sink, _rawbits_layout(layout_from)), ("source", Source, _rawbits_layout(layout_to))) def get_process_fragment(self): sigs_from = self.token("sink").flatten() + if self.reverse_from: + sigs_from = list(reversed(sigs_from)) sigs_to = self.token("source").flatten() + if self.reverse_to: + sigs_to = list(reversed(sigs_to)) if sum(len(s) for s in sigs_from) != sum(len(s) for s in sigs_to): raise TypeError return Fragment([