OpenCores
URL https://opencores.org/ocsvn/dblclockfft/dblclockfft/trunk

Subversion Repositories dblclockfft

[/] [dblclockfft/] [trunk/] [README.md] - Diff between revs 33 and 36

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 33 Rev 36
Line 1... Line 1...
# A Double-Clocked FFT Core Generator
# A Generic Piplined FFT Core Generator
 
 
The Double Clocked FFT project contains all of the software necessary to
This generic pipelined FFT project contains all of the software necessary to
create the IP to generate an arbitrary sized FFT that will clock two samples
create the IP to generate an arbitrary sized FFT.  The FFT has been modified
in at each clock cycle, and after some pipeline delay it will clock two
for operation in one of the following modes:
samples out at every clock cycle.
 
 
- Two samples in per clock and, after some delay, two samples out per clock.
 
  This uses 6 multiplies per FFT stage in the butterflies.  This was the purpose
 
  of the original `dblclkfft`.  (Why double clock?  I don't know.  Double-sample
 
  FFT might've been a better name.)
 
 
 
- One sample in per clock, with the `i_ce` line being high for every incoming
 
  sample--up to one sample per clock.  There's also options to run with at
 
  least one clock between samples, or even two clocks between samples (or more).
 
  This mode uses 3, 2, or 1 multiplies per FFT stage respectively.
 
 
 
- Eventually, I want to support a real FFT mode which will accept real samples
 
  input, and alternately produce real and imaginary samples output--or the
 
  converse for the inverse FFT.
 
 
The FFT generated by this approach is very configurable.  By simple adjustment
The FFT generated by this project is very configurable.  By simple adjustment
of a command line parameter, the FFT may be made to be a forward FFT or an
of a command line parameter, the FFT created will either be a forward FFT or an
inverse FFT.  The number of bits processed, kept, and maintained by this
inverse FFT.  The number of bits processed, kept, and maintained by this
FFT are also configurable.  Even the number of bits used for the twiddle
FFT are also configurable.  Even the number of bits used for the twiddle
factors, or whether or not to bit reverse the outputs, are all configurable
factors, or whether or not to bit reverse the outputs, are all configurable
parts to this FFT core.
parts to this FFT core.
 
 
These features make the Double Clocked FFT very different and unique among the
These features make this open source pipelined FFT module very different
other open HDL cores you may fine.
and unique among the other open HDL cores you may find.
 
 
For those who wish to get started right away, please download the package,
For those who wish to get started right away, please download the package,
change into the ``sw`` directory and run ``make``.  There is no need to
change into the ``sw`` directory and run ``make``.  There is no need to
run a configure script, ``fftgen`` is completely portable C++.  Then, once
run a configure script, ``fftgen`` is completely portable C++.  Then, once
built, go ahead and run ``fftgen`` without any arguments.  This will cause
built, go ahead and run ``fftgen`` without any arguments.  This will cause
``fftgen`` to print a usage statement to the screen.  Review the usage
``fftgen`` to print a usage statement to the screen.  Review the usage
statement, and run ``fftgen`` a second time with the arguments you need.
statement, and run ``fftgen`` a second time with the arguments you need.
 
 
Alternatively, you _could_ read the specification.
# Current State
 
 
## Genesis
This particular version of the FFT core now passes all my tests.  It has
This FFT comes from my attempts to design and implement a signal processing
yet to meet hardware to be finally verified.
algorithm inside a generic FPGA, but only on a limited budget.  As such,
 
I don't yet have the FPGA board I wish to place this algorithm onto, neither
 
do I have any expensive modeling or simulation capabilities.  I'm using
 
Verilator for my modeling and simulation needs.  This makes
 
using a vendor supplied IP core, such as an FFT, difficult if not impossible
 
to use.
 
 
 
My problem was made worse when I learned that the published maximum clock
 
speed for a device wasn't necessarily the maximum clock speed that I could
 
achieve.  My design needed to process the incoming signal at 500 MHz to be
 
commercially viable.  500 MHz is not necessarily a clock speed
 
that can be easily achieved.  250 MHz, on the other hand, is much more within
 
the realm of possibility.  Achieving a 500 MHz performance with a 250 MHz
 
clock, however, requires an FFT that accepts two samples per clock.
 
 
 
This, then, was and is the genesis of this project.
- The [FFT test bench](bench/cpp/fft_tb.cpp) doesn't yet have a threshold that
 
  adjusts with input parameters to determine success or failure (yet).
 
 
 
- I haven't started on the real-only version of this FFT.
 
 
 
While my previously stated goal ws to continue working with this core until it
 
has a real-FFT capability before releasing it back into the master branch,
 
I'm actually so excited that I got it to this point that I'm going to move
 
it from dev to master earlier, and come back to get the real only version.
 
 
# Commercial Applications
# Commercial Applications
 
 
Should you find the GPLv3 license insufficient for your needs, other licenses
Should you find the GPLv3 license insufficient for your needs, other licenses
can be purchased from Gisselquist Technology, LLC.
can be purchased from Gisselquist Technology, LLC.
 
 
Likewise, please contact us should you wish to fund the further development
Likewise, please contact us should you wish to fund the further development
of this core.
of this core.
 
 
 
Watch this space if you are interested in a release under another license.
 
I'm thinking about relicensing this with a more permissive license.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.