2 This work is funded through NLnet under Grant 2019-02-012
7 from nmigen
import Signal
, Cat
9 # TODO: turn this into a module
10 def byte_reverse(m
, name
, data
, length
):
11 """byte_reverse: unlike nmigen word_select this takes a dynamic length
13 nmigen Signal.word_select may only take a fixed length. we need
14 bigendian byte-reverse, half-word reverse, word and dword reverse.
17 data_r
= Signal
.like(data
, name
=name
)
19 if isinstance(length
, int):
23 dest
= data_r
.word_select(i
, 8)
24 rev
.append(data
.word_select(j
-1-i
, 8))
25 comb
+= data_r
.eq(Cat(*rev
))
28 with m
.Switch(length
):
33 rev
.append(data
.word_select(j
-1-i
, 8))
34 comb
+= data_r
.eq(Cat(*rev
))