Vitis 1-D SSR FFT L1 module can be used in a C++ HLS design by: 1- cloning Vitis DSP Library git repository and add the following path to compiler include path:
REPO_PATH/dsp/L1/include/hw/vitis_fft/fixed/
2- Include vt_fft.hpp
3- Use namespace xf::dsp::fft
4- Define fft parameter structure say call it params_fix
by extending ssr_fft_default_params
like Defining 1-D SSR FFT Parameter Structure
5- call fft<params_fix>(input_stream,output_stream)
The following section gives usage examples and explains some other interface level details for use in C++ based HLS design. To use the 1-D SSR FFT L1 module:
- Include the
vt_fft.hpp
header:
#include "vt_fft.hpp"
- Use namespace
xf::dsp::fft
using namespace xf::dsp::fft;
- Define a C++ structure that extends
ssr_fft_default_params
:
struct params_fix:ssr_fft_default_params { static const int N-SSR_FFT_L; static const int R=SSR_FFT_R; static const scaling_mode_enum scaling_mode=SSR_FFT_GROW_TO_MAX_WIDTH; static const fft_output_order_enum output_data_order=SSR_FFT_NATURAL; static const int twiddle_table_word_length=18; static const int twiddle_table_intger_part_length=2; };
- Call 1-D SSR FFT as follows:
fft<params_fix>(inD,outD); //OR fft<params_fix,IID>(inD,outD); // IID: is a constant giving instance ID
where inD and outD are 1-dimensional hls::stream of complex of ap_fixed, float or double type, synthesis and simulation use is already explained in the previous table. The I/O arrays can be declared as follows:
Fixed Point Type First define input type, then using type traits calculate output type based on ssr_fft_params struct (output type calculation takes in consideration scaling mode based bit-growth and input bit-widths).