This repository contains a synthesizable, pipelined 8-point Radix-2 Decimation-In-Time (DIT) Fast Fourier Transform (FFT) engine implemented in Verilog HDL. The design leverages a three-stage pipeline architecture and Q1.15 fixed-point complex arithmetic, making it suitable for both FPGA prototyping and simulation with Icarus Verilog (iverilog).
- Pipelined 3-stage architecture for high throughput and efficient resource utilization
- Q1.15 fixed-point complex arithmetic for hardware-friendly implementation
- Dedicated twiddle factor ROM for fast and accurate FFT computation
- Synthesizable complex multiplier module
- Modular and extensible design for easy integration and customization
FFT.v— Main Verilog source file containing:fft_8point: Top-level FFT enginetwiddle_rom: Twiddle factor ROMcomplex_mult: Complex multiplier module
Implements the pipelined 8-point FFT computation.
- Inputs:
clk,rst: Clock and synchronous resetx_real_0...x_real_7,x_imag_0...x_imag_7: 8 complex input samples (Q1.15 format)
- Outputs:
X_real_0...X_real_7,X_imag_0...X_imag_7: 8 complex FFT outputs (Q1.15 format)
- Pipeline Stages:
- Stage 1: Butterfly computation (no twiddle factors)
- Stage 2: Butterfly computation with twiddle factor multiplication
- Stage 3: Final butterfly computation
- Provides the four unique twiddle factors required for an 8-point FFT in Q1.15 format.
- Twiddle values are initialized in an
initialblock for simulation and synthesis compatibility.
- Synthesizable module for Q1.15 complex multiplication.
- Accepts two complex numbers as input and outputs their product.
- Icarus Verilog (iverilog) for simulation
- GTKWave for waveform viewing (optional)
- Write a testbench that instantiates
fft_8pointand applies test vectors. - Compile and run:
iverilog -o fft_test FFT.v testbench.v vvp fft_test
- View waveforms (optional):
- Add
$dumpfileand$dumpvarsin your testbench. - Open the generated
.vcdfile in GTKWave.
- Add
- The provided FFT pipeline is a template and may require further completion for full production use. Complete the butterfly and twiddle logic as needed for your application.
- All module ports use scalar signals for maximum compatibility with Verilog-2001 and common simulation tools.
- The design is intended for educational, research, and prototyping purposes.
This project is released under the MIT License.
Self Project — December 2024 to January 2025