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([