Page 300 - DSP Integrated Circuits
P. 300
7.3 FFT Processor, Cont. 285
procedure Butterfly(variable xtmp : inout complexArr;
variable k,kNs : integer; variable Wcos,Wsin : real);
end FFT_pck;
—package body for function bodies to FFT-proc.
package body FFT_pck is
function Digit_Reverse(digit: integer) return integer is
variable NewAddr, Rmbit, OldAddr : integer;
begin
NewAddr := 0;
OldAddr := Digit;
for i in 1 to M loop
Rmbit := OldAddr mod(2); -requires both operands to be integer
OldAddr := OldAddr/2; —integer division
if (Rmbit = 1) then
NewAddr := NewAddr + NewAddr + 1;
else
NewAddr := NewAddr + NewAddr;
end if;
end loop;
return NewAddr;
end Digit_Reverse;
procedure Butterfly(variable xtmp : inout complexArr;
variable k, kNs : integer;
variable Wcos, Wsin : real) is
variable TempRe, Templm : real;
begin
TempRe := xtmp(k).re - xtmp(kNs).re;
Templm := xtmp(k).im - xtmp(kNs).im;
xtmp(k).re := xtmp(k).re + xtmp(kNs).re;
xtmp(k).im := xtmp(k).im + xtmp(kNs).im;
xtmp(kNs).re := TempRe * Wcos - Templm * Wsin;
xtmp(kNs).im := Templm * Wcos + TempRe * Wsin;
end Butterfly;
procedure Unscramble(variable xx : inout complexArr) is
subtype int_type is integer range 0 to Nminusl;
variable temp : complex;
variable it: int_type;
begin
for k in 0 to Nminusl loop
it := Digit_Reverse(k);
if it > k then
temp := xx(k);
xx(k) := xx(it);
xx(it) := temp;
end if;
end loop;
end Unscramble;
end FFT_pck;