Showing results for 
Search instead for 
Did you mean: 
Registered: ‎04-30-2018

HLS convolution using FFT

I am trying to implement an object recognition algorithm on Zedboard. I have the C++ and want to accelerate the parts where most computation occurs which is convolution in this case. The kernel is floating floating point starting from 7x7 up to 37x37 incremented by 2 (9x9,11x11 and so on)and it is not separable so I can't use HLS Conv. example code. I have written some different codes but I am not achieving the speed I want. I have decided to use FFT to speed up the process but I can't understand so many input variables and what their means. I have written their explanations below but I can't understand what they are. I have a image size 250x250 and kernel as mentioned above. How am I supposed to configure this?.


status_width             |   Output status port width.                  --how many bits this should be and do I have to look for this ?
config_width              |    Input configuration port width.        --how do i decide the width of this?

max_nfft                     |    The size of the FFT data set is specified as 1 << max_nfft.                             --What is this actually?
has_nfft                     |     Determines if the size of the FFT can be run time configurable.                      --What is this?

channels                    |  Number of channels

phase_factor_width   |  Configure the internal phase factor precision.


And also I don't understand the meaning of setSch(0x2AB). What does this actually do?. I have tried to implement my own FFT conv code but it uses a lot of block memory(around %1000). So I have to try this and see how it works. Finallly did anyone implement convolution using FFT or am I the only one who is doing it?

0 Kudos
1 Reply
Registered: ‎10-04-2011

Re: HLS convolution using FFT

Hello @lordsoffallen,


I think this post may be best served with an IP forum for the FFT. I will asked the moderators to locate the correct forum and switch this. 

The reason is the the FFT used in HLS is simply a connection to the FFT IP provided in Vivado. The HLS tool defines the configuration of that IP, but does not synthesize one from C code as it does your surrounding code. The manual for the FFT is found here:


For example, the status channel width is defined on page 25. 


OK, sorry I could not answer the post directly, but let me try and get that reassigned. 


Thank you,

0 Kudos