1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //----------------------------------------------------------------------
- // FFT: 1024-Point FFT Using Radix-2^2 Single-Path Delay Feedback
- //----------------------------------------------------------------------
- module FFTMAIN #(
- parameter WIDTH = 32
- )(
- input clock, // Master Clock
- input reset, // Active High Asynchronous Reset
- input di_en, // Input Data Enable
- input [WIDTH-1:0] di_re, // Input Data (Real)
- input [WIDTH-1:0] di_im, // Input Data (Imag)
- output do_en, // Output Data Enable
- output [WIDTH-1:0] do_re, // Output Data (Real)
- output [WIDTH-1:0] do_im // Output Data (Imag)
- );
- //----------------------------------------------------------------------
- // Data must be input consecutively in natural order.
- // The result is scaled to 1/N and output in bit-reversed order.
- //----------------------------------------------------------------------
-
- wire su1_do_en;
- wire[WIDTH-1:0] su1_do_re;
- wire[WIDTH-1:0] su1_do_im;
- wire su2_do_en;
- wire[WIDTH-1:0] su2_do_re;
- wire[WIDTH-1:0] su2_do_im;
- wire su3_do_en;
- wire[WIDTH-1:0] su3_do_re;
- wire[WIDTH-1:0] su3_do_im;
- wire su4_do_en;
- wire[WIDTH-1:0] su4_do_re;
- wire[WIDTH-1:0] su4_do_im;
-
- SdfUnit #(.N(1024),.M(1024),.WIDTH(WIDTH)) SU1 (
- .clock (clock ), // i
- .reset (reset ), // i
- .di_en (di_en ), // i
- .di_re (di_re ), // i
- .di_im (di_im ), // i
- .do_en (su1_do_en ), // o
- .do_re (su1_do_re ), // o
- .do_im (su1_do_im ) // o
- );
-
- SdfUnit #(.N(1024),.M(256),.WIDTH(WIDTH)) SU2 (
- .clock (clock ), // i
- .reset (reset ), // i
- .di_en (su1_do_en ), // i
- .di_re (su1_do_re ), // i
- .di_im (su1_do_im ), // i
- .do_en (su2_do_en ), // o
- .do_re (su2_do_re ), // o
- .do_im (su2_do_im ) // o
- );
-
- SdfUnit #(.N(1024),.M(64),.WIDTH(WIDTH)) SU3 (
- .clock (clock ), // i
- .reset (reset ), // i
- .di_en (su2_do_en ), // i
- .di_re (su2_do_re ), // i
- .di_im (su2_do_im ), // i
- .do_en (su3_do_en ), // o
- .do_re (su3_do_re ), // o
- .do_im (su3_do_im ) // o
- );
-
- SdfUnit #(.N(1024),.M(16),.WIDTH(WIDTH)) SU4 (
- .clock (clock ), // i
- .reset (reset ), // i
- .di_en (su3_do_en ), // i
- .di_re (su3_do_re ), // i
- .di_im (su3_do_im ), // i
- .do_en (su4_do_en ), // o
- .do_re (su4_do_re ), // o
- .do_im (su4_do_im ) // o
- );
-
- SdfUnit #(.N(1024),.M(4),.WIDTH(WIDTH)) SU5 (
- .clock (clock ), // i
- .reset (reset ), // i
- .di_en (su4_do_en ), // i
- .di_re (su4_do_re ), // i
- .di_im (su4_do_im ), // i
- .do_en (do_en ), // o
- .do_re (do_re ), // o
- .do_im (do_im ) // o
- );
-
- endmodule
|