First, Many thanks for your great work, Wojciech. The code is really well written. However, I have a problem with it: I tried feeding fft_engine "multi" with 256 points with a continuous sine wave stimulus in Modelsim. For whatever reason I don't know, I get periodic blank outs in the spectrum output. Changing delays does not help. I can also provide my simple testbench code if it helps. Maybe you have an idea what leads this this effect? (Absolut0/1 is sout0/1.Re * sout0/1.Im, amp0 is sqrt(Absolut0))
I found the issue I had with the code. It was related to my test setup. What confuses me, is that when providing 256 complex input samples to fftengine_multi, I get 256 points (2x128 from sout0 and sout1) of the frequency domain in half the input clock cycles (only 128). This doubles the number of output spectra, which I do not understand currently... What I have learned and seen about FFT, is that he number of complex input points is equal the number of complex output points. Maybe someone could explain about how this second spectra within 256 clock cycles has to be interpreted?
Also from my side many thanks to the developer, a very nice project!
@tobiw: I think the "doubling" of data occurs as the FFT computes overlapping frames.
As an example, a frame of width 4:
Instead of using the samples 0 1 2 3 for the first frame and then 4 5 6 7 for the second frame, the FFT here uses samples 0 1 2 3 for the first frame as well, but then 2 3 4 5 for the second, 4 5 6 7 for the third etc. For large frame numbers, the ratio between the number of computed frames becomes 2.
Hope this helped :-)