1 from nmigen
import Signal
3 # TODO: turn this into a module
4 def byte_reverse(m
, name
, data
, length
):
5 """byte_reverse: unlike nmigen word_select this takes a dynamic length
7 nmigen Signal.word_select may only take a fixed length. we need
8 bigendian byte-reverse, half-word reverse, word and dword reverse.
11 data_r
= Signal
.like(data
, name
=name
)
13 if isinstance(length
, int):
16 dest
= data_r
.word_select(i
, 8)
17 src
= data
.word_select(j
-1-i
, 8)
21 with m
.Switch(length
):
25 dest
= data_r
.word_select(i
, 8)
26 src
= data
.word_select(j
-1-i
, 8)