1 |
32 |
dgisselq |
# A Double-Clocked FFT Core Generator
|
2 |
|
|
|
3 |
|
|
The Double Clocked FFT project contains all of the software necessary to
|
4 |
|
|
create the IP to generate an arbitrary sized FFT that will clock two samples
|
5 |
|
|
in at each clock cycle, and after some pipeline delay it will clock two
|
6 |
|
|
samples out at every clock cycle.
|
7 |
|
|
|
8 |
|
|
The FFT generated by this approach is very configurable. By simple adjustment
|
9 |
|
|
of a command line parameter, the FFT may be made to be a forward FFT or an
|
10 |
|
|
inverse FFT. The number of bits processed, kept, and maintained by this
|
11 |
|
|
FFT are also configurable. Even the number of bits used for the twiddle
|
12 |
|
|
factors, or whether or not to bit reverse the outputs, are all configurable
|
13 |
|
|
parts to this FFT core.
|
14 |
|
|
|
15 |
|
|
These features make the Double Clocked FFT very different and unique among the
|
16 |
|
|
other open HDL cores you may fine.
|
17 |
|
|
|
18 |
|
|
For those who wish to get started right away, please download the package,
|
19 |
|
|
change into the ``sw`` directory and run ``make``. There is no need to
|
20 |
|
|
run a configure script, ``fftgen`` is completely portable C++. Then, once
|
21 |
|
|
built, go ahead and run ``fftgen`` without any arguments. This will cause
|
22 |
|
|
``fftgen`` to print a usage statement to the screen. Review the usage
|
23 |
|
|
statement, and run ``fftgen`` a second time with the arguments you need.
|
24 |
|
|
|
25 |
|
|
Alternatively, you _could_ read the specification.
|
26 |
|
|
|
27 |
|
|
## Genesis
|
28 |
|
|
This FFT comes from my attempts to design and implement a signal processing
|
29 |
|
|
algorithm inside a generic FPGA, but only on a limited budget. As such,
|
30 |
|
|
I don't yet have the FPGA board I wish to place this algorithm onto, neither
|
31 |
|
|
do I have any expensive modeling or simulation capabilities. I'm using
|
32 |
|
|
Verilator for my modeling and simulation needs. This makes
|
33 |
|
|
using a vendor supplied IP core, such as an FFT, difficult if not impossible
|
34 |
|
|
to use.
|
35 |
|
|
|
36 |
|
|
My problem was made worse when I learned that the published maximum clock
|
37 |
|
|
speed for a device wasn't necessarily the maximum clock speed that I could
|
38 |
|
|
achieve. My design needed to process the incoming signal at 500 MHz to be
|
39 |
|
|
commercially viable. 500 MHz is not necessarily a clock speed
|
40 |
|
|
that can be easily achieved. 250 MHz, on the other hand, is much more within
|
41 |
|
|
the realm of possibility. Achieving a 500 MHz performance with a 250 MHz
|
42 |
|
|
clock, however, requires an FFT that accepts two samples per clock.
|
43 |
|
|
|
44 |
|
|
This, then, was and is the genesis of this project.
|
45 |
|
|
|
46 |
33 |
dgisselq |
# Commercial Applications
|
47 |
|
|
|
48 |
|
|
Should you find the GPLv3 license insufficient for your needs, other licenses
|
49 |
|
|
can be purchased from Gisselquist Technology, LLC.
|
50 |
|
|
|
51 |
|
|
Likewise, please contact us should you wish to fund the further development
|
52 |
|
|
of this core.
|