From: Sebastien Bourdeauducq Date: Mon, 25 Mar 2013 14:54:09 +0000 (+0100) Subject: actorlib/structuring/Cast: support inversion X-Git-Tag: 24jan2021_ls180~2099^2~623 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=77a0f0a3bb4b971bb30643935c295940680b72c1;p=litex.git actorlib/structuring/Cast: support inversion --- diff --git a/migen/actorlib/structuring.py b/migen/actorlib/structuring.py index 6f6483b2..dbe2204a 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([