What is the role of the FPGA in a software defined radio and what processing is typically done there?
FPGA Processing in Software Defined Radio Systems
The FPGA is often called the "digital front end" of the SDR. It performs the functions that are too fast for software but too flexible for fixed-function ASICs. Modern SDR FPGAs range from small devices (Xilinx Artix-7, Intel Cyclone V) in low-cost platforms to large devices (Xilinx Kintex UltraScale+, Intel Stratix 10) in high-performance systems.
Core FPGA Functions
- Digital Down-Converter (DDC): A numerically controlled oscillator (NCO) generates a complex sinusoid at the desired center frequency. Multiplying the ADC samples by this sinusoid shifts the desired signal to baseband. A cascaded integrator-comb (CIC) filter then decimates the sample rate by 10-1000x, followed by compensation FIR filters for passband flatness
- Channelizer: For multi-channel receivers, a polyphase filter bank (PFB) or multiple parallel DDCs extract many narrowband channels simultaneously. A 200 MHz band can be split into hundreds of narrowband channels in real-time
- FFT engine: Real-time FFT computation for spectrum analysis, OFDM processing, or spectral monitoring. Modern FPGAs can compute 4096-point FFTs at rates exceeding 100 million FFTs/second
- Digital Up-Converter (DUC): The transmit-path inverse of DDC. Interpolates the baseband signal from the host, shifts it to the desired output frequency, and drives the DAC at full sample rate
- Data formatting: Packetizes the processed data with timestamps, metadata, and flow control for streaming to the host via GbE, 10 GbE, USB 3.0, or PCIe
FPGA vs CPU vs GPU Processing
FPGA: fixed-latency, deterministic, parallel processing of streaming data at wire speed. Best for DDC, channelization, initial filtering. CPU: flexible, sequential processing of reduced-rate data. Best for demodulation, protocol processing, user interface. GPU: massively parallel floating-point processing. Best for batch signal processing (large FFTs, correlation, machine learning inference). Modern SDR systems use all three in a heterogeneous processing pipeline.
Example: 200 MSa/s input, decimation = 200: R_out = 1 MSa/s
FPGA DSP resources: N_multipliers needed ~ N_DDC x (CIC_order + FIR_taps)
FFT processing rate: T_FFT = N_points / f_clock x pipeline_stages
4096-pt FFT at 250 MHz clock: ~16 us per FFT = 62,500 FFTs/s
Frequently Asked Questions
Can I use an SDR without an FPGA?
Yes, for low-bandwidth applications. Low-cost SDR dongles (RTL-SDR) use a fixed-function ASIC instead of an FPGA, which limits flexibility but reduces cost. For narrow bandwidth signals (< 2 MHz), the raw ADC data can be streamed directly to the host CPU for software processing. GNU Radio and similar frameworks can perform DDC and demodulation in software for data rates up to a few MSa/s on a modern laptop.
What FPGA size is needed for a typical SDR?
A basic single-channel SDR (one DDC, modest filter size) fits in a small FPGA with 50K logic cells and 100 DSP slices (Xilinx Artix-7 35T or similar). A multi-channel receiver with FFT and channelizer requires a mid-range FPGA (200K+ logic cells, 700+ DSP slices, Kintex-7 or Kintex UltraScale). Military/SIGINT systems with many channels and complex processing use high-end FPGAs (Virtex UltraScale+ or Stratix 10) with 5000+ DSP slices.
Is FPGA programming difficult for SDR?
FPGA development for SDR is significantly more complex than software development. VHDL/Verilog RTL design requires hardware engineering expertise. However, the SDR ecosystem has made this more accessible through: vendor-provided IP cores (DDC, DUC, FFT from Xilinx/AMD and Intel), open-source FPGA firmware (OpenCPI, USRP FPGA code), high-level synthesis tools (Vivado HLS, Intel HLS) that compile C/C++ to FPGA, and MATLAB/Simulink HDL Coder that generates FPGA code from signal processing models.