| 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.
|