The FFT is an efficient implementation of a linear transformation, it takes an N-point vector of complex data and returns an N-point vector of complex data. In Matlab it is as simple as
y = fft(x);
In sysgen we have to worry about certain other inputs (and outputs) as shown in Fig. 1 below.
I will go over some (not all) relevant inputs, their types and how they are used:
y = fft(x);
In sysgen we have to worry about certain other inputs (and outputs) as shown in Fig. 1 below.
Fig. 1: Xilinx Sysgen FFT block showing the various inputs and outputs |
- The input data xn_re and xn_im can be a signed data type S.(S-1), from 8 to 34 bits wide inclusive.
- The start signal must be driven by a Bool, pulsed or set high at the start of a frame.
- Bool fwd_inv = 0 if inverse transform, 1 if forward transform.
- Bool fwd_inv_we when asserted high loads the transform type from fwd_inv for the next input frame
- scale_sch: scaling schedule (more on this later)
- Bool scale_sch_we: when asserted high loads the scale_sch for the next input frame
Lets now discuss the non-obvious outputs
- Bool rfd active high after start signal is asserted and till xk_index (output index) reaches N-1.
- Bool busy active high when block is processing data
- Bool dv : data valid signal for output
- Bool edone, done: active high one sample period before and when frame processing and ready for output respectively.
If we double click on the block, we get a bunch of configuration options. On the Basic tab, I choose Transform Length of 1024, pipelined_streaming_io (all other settings are defaults). Under Advanced tab, we choosed Scaled, Convergent Rounding, Natural Order and check the overflow ovflo pin.
No comments:
Post a Comment