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 |
|
|
Should you find the GPLv3 license insufficient for your needs, other licenses
|
56 |
|
|
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.
|
60 |
36 |
dgisselq |
|
61 |
|
|
Watch this space if you are interested in a release under another license.
|
62 |
|
|
I'm thinking about relicensing this with a more permissive license.
|