To use the Vitis 2-D SSR FFT L1 module in a C++ HLS design:
1- Clone the Vitis DSP Library git repository and add the following path to compiler include path:
REPO_PATH/dsp/L1/include/hw/vitis_2dfft/float/
2- Include vt_fft.hpp
3- Use namespace xf::dsp::fft
4- Define parameter structures for 1-D SSR FFT processors used along rows and columns lets say call them params_row
and parms_column
by extending ssr_fft_default_params
like Defining 1-D SSR FFT Parameter Structure
5- call fft2d<8, 16, 16, 2, params_row, params_column, 0,3, complex_wrapper<float> >(p_inStream, p_outStream);
description for template parameters can be found in 2-D SSR FFT Template Parameters
Following section gives usage examples and explains some other interface level details for use in C++ based HLS design. To use the 2-D SSR FFT L1 library:
- Include the
vt_fft.hpp
header:
#include "vt_fft.hpp"
- Use namespace
xf::dsp::fft
using namespace xf::dsp::fft;
- Define two C++ structure that extends ssr_fft_default_params, one for row and one for column processors:
struct params_row:ssr_fft_default_params { static const int N = 16; static const int R = 4; static const fft_output_order_enum output_data_order = SSR_FFT_NATURAL; static const transform_direction_enum transform_direction = FORWARD_TRANSFORM; }; struct params_column:ssr_fft_default_params { static const int N = 16; static const int R = 4; static const fft_output_order_enum output_data_order = SSR_FFT_NATURAL; static const transform_direction_enum transform_direction = FORWARD_TRANSFORM; };
- Call 2-D SSR FFT L1 module as follows:
fft2d< 8, 16, 16, 2, params_row, params_col, 0, 3, complex_wrapper<float> >(p_inStream, p_outStream);