| 1 |
36 |
dgisselq |
# A Generic Piplined FFT Core Generator
|
| 2 |
32 |
dgisselq |
|
| 3 |
36 |
dgisselq |
This generic pipelined FFT project contains all of the software necessary to
|
| 4 |
|
|
create the IP to generate an arbitrary sized FFT. The FFT has been modified
|
| 5 |
|
|
for operation in one of the following modes:
|
| 6 |
32 |
dgisselq |
|
| 7 |
36 |
dgisselq |
- Two samples in per clock and, after some delay, two samples out per clock.
|
| 8 |
|
|
This uses 6 multiplies per FFT stage in the butterflies. This was the purpose
|
| 9 |
|
|
of the original `dblclkfft`. (Why double clock? I don't know. Double-sample
|
| 10 |
|
|
FFT might've been a better name.)
|
| 11 |
|
|
|
| 12 |
|
|
- One sample in per clock, with the `i_ce` line being high for every incoming
|
| 13 |
|
|
sample--up to one sample per clock. There's also options to run with at
|
| 14 |
|
|
least one clock between samples, or even two clocks between samples (or more).
|
| 15 |
|
|
This mode uses 3, 2, or 1 multiplies per FFT stage respectively.
|
| 16 |
|
|
|
| 17 |
|
|
- Eventually, I want to support a real FFT mode which will accept real samples
|
| 18 |
|
|
input, and alternately produce real and imaginary samples output--or the
|
| 19 |
|
|
converse for the inverse FFT.
|
| 20 |
|
|
|
| 21 |
|
|
The FFT generated by this project is very configurable. By simple adjustment
|
| 22 |
|
|
of a command line parameter, the FFT created will either be a forward FFT or an
|
| 23 |
32 |
dgisselq |
inverse FFT. The number of bits processed, kept, and maintained by this
|
| 24 |
|
|
FFT are also configurable. Even the number of bits used for the twiddle
|
| 25 |
|
|
factors, or whether or not to bit reverse the outputs, are all configurable
|
| 26 |
|
|
parts to this FFT core.
|
| 27 |
|
|
|
| 28 |
36 |
dgisselq |
These features make this open source pipelined FFT module very different
|
| 29 |
|
|
and unique among the other open HDL cores you may find.
|
| 30 |
32 |
dgisselq |
|
| 31 |
|
|
For those who wish to get started right away, please download the package,
|
| 32 |
|
|
change into the ``sw`` directory and run ``make``. There is no need to
|
| 33 |
|
|
run a configure script, ``fftgen`` is completely portable C++. Then, once
|
| 34 |
|
|
built, go ahead and run ``fftgen`` without any arguments. This will cause
|
| 35 |
|
|
``fftgen`` to print a usage statement to the screen. Review the usage
|
| 36 |
|
|
statement, and run ``fftgen`` a second time with the arguments you need.
|
| 37 |
|
|
|
| 38 |
36 |
dgisselq |
# Current State
|
| 39 |
32 |
dgisselq |
|
| 40 |
36 |
dgisselq |
This particular version of the FFT core now passes all my tests. It has
|
| 41 |
|
|
yet to meet hardware to be finally verified.
|
| 42 |
32 |
dgisselq |
|
| 43 |
36 |
dgisselq |
- The [FFT test bench](bench/cpp/fft_tb.cpp) doesn't yet have a threshold that
|
| 44 |
|
|
adjusts with input parameters to determine success or failure (yet).
|
| 45 |
32 |
dgisselq |
|
| 46 |
36 |
dgisselq |
- I haven't started on the real-only version of this FFT.
|
| 47 |
32 |
dgisselq |
|
| 48 |
36 |
dgisselq |
While my previously stated goal ws to continue working with this core until it
|
| 49 |
|
|
has a real-FFT capability before releasing it back into the master branch,
|
| 50 |
|
|
I'm actually so excited that I got it to this point that I'm going to move
|
| 51 |
|
|
it from dev to master earlier, and come back to get the real only version.
|
| 52 |
|
|
|
| 53 |
33 |
dgisselq |
# Commercial Applications
|
| 54 |
|
|
|
| 55 |
43 |
dgisselq |
Should you find the LGPLv3 license insufficient for your needs, other licenses
|
| 56 |
33 |
dgisselq |
can be purchased from Gisselquist Technology, LLC.
|
| 57 |
|
|
|
| 58 |
|
|
Likewise, please contact us should you wish to fund the further development
|
| 59 |
|
|
of this core.
|