DSP Builder for Intel® FPGAs (Advanced Blockset): Handbook

ID 683337
Date 12/12/2022

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

13.3.2. FFT (FFT, FFT_Light, VFFT, VFFT_Light)

The FFT and VFFT blocks support processing multiple interleaved FFTs. The number of interleaved FFTs must be a power of 2. Each FFT is independent except that all the input for all of the FFTs must arrive as a single contiguous block of data. For example, with 8 FFTs each of size 1K each input block must contain 8K points.

The following blocks are in the Primitives FFT Design Elements library:

  • FFT_Light
  • VFFT_Light

For floating-point FFTs, select either correct or faithful rounding. Correct rounding corresponds to the normal IEEE semantics; faithful rounding delivers less accurate results but requires less logic to implement.

The FFT block provides a full radix-22 streaming FFT or IFFT. Use the FFT block for fixed-point or floating-point data. The block is a scheduled subsystem.

The FFT_Light block is a light-weight variant. However, it is not a scheduled subsystem, and it doesn’t implement the c (channel) signal. The blocks provide an output signal, g, which pulses high at the start of each output block.

The FFT blocks all support block-based flow control. You must supply all the input data required for a single FFT iteration (one block) on consecutive clocks cycles, but an arbitrary large (or small) gap can exist between consecutive blocks. The BitReverseCoreC and Transpose blocks produce data in blocks that respect this protocol.

You may provide the input data to any of these block in either natural or bit-reversed order; the output result is in bit-reversed or natural order, respectively.

The VFFT block provides a variable-size streaming FFT or IFFT. For these blocks, you statically specify the largest and smallest FFT that the block handles. You can dynamically configure the number of points processed in each FFT iteration using the size signal.

Use the VFFT block for fixed-point or floating-point data. The VFFT block is a scheduled subsystem and implements v (valid) and c (channel) signals.

The VFFT_light block is a light-weight variant of the VFFT block. It is not a scheduled subsystem, and it doesn’t implement the c (channel) signal. Instead, it provides an output g signal, which pulses high at the start of each output block.

The VFFT blocks all support block-based flow control. You must supply all the input data required for a single VFFT iteration (one block) on consecutive clocks cycles. If you use two successive FFT iterations that use the same FFT size, the inter-block gap can be as small (or as large) as you like.

However, if you want to reconfigure the VFFT block between FFT iterations, you must use the following rules:

  • The size input should always be in the range minSize <= size <= maxSize.
  • The size input must be kept constant while the VFFT block processes an FFT iteration.
  • When you reconfigure the VFFT, you must completely flush VFFT pipeline before changing the value of the size input. You must wait at least 2oldSize (where oldSize is the previous value of the size input) cycles before providing valid input to the VFFT.
Note: The VariableBitReverse block also requires an inter-block gap of 2oldSize cycles when you reconfigure its size. If you use both the VariableBitReverse block and the VFFT block, you need to provide an interblock gap of 2*(2oldSize) cycles to allow both blocks to reconfigure successfully.

Not all parameters are available with all blocks.

Table 65.  Parameters for the FFT and VFFT Blocks
Parameter Description
iFFT true to implement an IFFT, otherwise false.
Number of interleaved subchannels Enter how many FFTs that DSP Builder interleaves in each block.
Bit-reversed input true if you expect bit-reversed input, otherwise false.
N The logarithm of the FFT size. FFT and FFT_Light only
maxSize The logarithm of the maximum FFT size. VFFT and VFFT_Light only.
minSize The logarithm of the minimum FFT size. VFFT and VFFT_Light only.
Input type Input signal type.
Input scaling exponent The fixed-point scaling factor of the input.
Twiddle/pruning specification Refer to About Pruning and Twiddle for FFT Blocks.
Use faithful rounding true if the block uses faithful (rather than correct) rounding for floating-point operations. Fixed-point FFTs ignore this parameter.

Not all signals are available with all blocks

Table 66.  Port Interface for the FFT Blocks
Signal Direction Type Description
v Input Boolean. Valid input signal.
c Input Unsigned 8-bit integer. Channel input signal FFT and VFFT, only.
size Input Unsigned integer. Logarithm of the current FFT size. VFFT and VFFT_Light only.
d Input Any complex fixed-point. Complex data input signal. VFFT and VFFT_Light only.
x Input Any complex fixed-point type (FFT and FFT_light).

Any floating-point type (FFT_Float or FP_FFT_Light).

Complex data input signal.
qv Output Boolean. Valid output signal.
qc Output Unsigned 8-bit integer. Channel output signal. FFT and VFFT, only.
q Output Same as x. Complex data output signal.
g Output Boolean Start of output block. VFFT_Light only.