[Oberon] FPGA - Bit reversal
Tomas Kral
thomas.kral at email.cz
Fri Sep 22 09:54:04 CEST 2017
On Fri, 22 Sep 2017 00:12:10 +0200
Jörg <joerg.straube at iaeth.ch> wrote:
Hi Joerg,
> Your „WriteBin" could also look like this:
>
> PROCEDURE WriteBin(wd, n: INTEGER);
> VAR i: INTEGER;
> BEGIN
> FOR i := 0 TO n-1 DO
> IF ODD(wd) THEN Out.Ch("1“) ELSE Out.Ch("0“)
> END; wd := wd DIV 2
> END;
> Out.Ln
> END WriteBin;
This is by far the simplest, you may have noticed that my code suffers
porting from `C' pseudo code, which is not simple and efficient on
Oberon platforms. Need to learn more about simplicity.
> The fastest ReverseByte is the following;
>
> PROCEDURE ReverseByte(wd: BYTE): BYTE;
> BEGIN
> RETURN rev8[wd]
> END ReverseByte;
>
> „rev8“ is an ARRAY 256 OF BYTE you would have to initialize once in
> the beginning. If you don’t want to spend 256 bytes of memory, you
> could do it in two steps like this
Aha, these are the lookup tables, I saw in `C' as well, I was afraid
of wasting memory on static constructs.
> PROCEDURE ReverseByte(wd: BYTE): BYTE;
> BEGIN
> RETURN rev4[wd MOD 16]*16 + rev4[wd DIV 16]
> END ReverseByte;
And this seems still faster to FOR loop over 7 bits.
Many thanks.
--
Tomas Kral <thomas.kral at email.cz>
More information about the Oberon
mailing list