FFTs with Fixed-Point Interface - FFTs with Fixed-Point Interface - 9.1 English - PG109

Fast Fourier Transform LogiCORE IP Product Guide (PG109)

Document_ID
PG109
Release_Date
2026-07-17
Version
9.1 English
  1. Data in xn_re and xn_im must all be in the range -1.0 ≤ data < +1.0.
  2. Data in xn_re and xn_im is of type double, but the model requires data in signed two's-complement, fixed-point format with precision given by C_INPUT_WIDTH. The data has a sign bit, then the binary point, and then (C_INPUT_WIDTH - 1) fractional bits. The model checks the input data to see if it fits within this format and precision. If not, it prints a warning, and internally rounds it using convergent rounding (halfway values are rounded to the nearest even number) to the required precision. To accurately model the FFT core, prequantize the input data to this required precision before passing it to the model.
  3. scaling_sch and scaling_sch_size are ignored entirely unless fixed scaling is used (C_HAS_SCALING = 1 and C_HAS_BFP = 0).
  4. scaling_sch is an array of integers, each of which indicates the scaling to be done in a stage of the FFT processing. scaling_sch[0] is the scaling in the first stage, scaling_sch[1] the scaling in the second stage, and so on. This is the reverse of the scaling schedule vector applied to the IP core. The number of elements in the scaling_sch array and the value of scaling_sch_size must be equal to the number of stages in the FFT. This is dependent on the architecture, and on nfft, the point size of the transform:
    1. Radix-4, Burst I/O (C_ARCH = 1) or Pipelined, Streaming I/O (C_ARCH = 3): stages = ceil(nfft/2)
    2. Radix-2, Burst I/O (C_ARCH = 2) or Radix-2 Lite, Burst I/O (C_ARCH = 4): stages = nfft
  5. If C_HAS_NFFT = 0, C_NFFT_MAX is used for nfft. The scaling in each stage is an integer in the range 0-3, which indicates the number of bits the intermediate result is shifted right. So 0 indicates no scaling, 1 indicates a division by 2, 2 indicates a division by 4, and 3 indicates a division by 8. Again, scaling_sch[0] is the scaling in the first stage, scaling_sch[1] the scaling in the second stage, and so on. Insufficiently large scaling results in overflow, indicated by the overflow output.