Implementing FPGA DSP
Posted: Mon May 05, 2014 2:34 am
Hi all, my interest is in using the bladeRF in an embedded setup with a high powered ARM device such as the Odroid-XU as the host. This gives you a physically small, low power consumption setup which could for example be located near the antennas and interfaced over either USB or Ethernet.
I'm using Gnuradio based code to do signal processing for reception and decoding of a BPSK modulated data signal and whilst the Odroid performance is respectable (and very good for an ARM device), its still quite a bit slower than an Intel i5 / i7 etc and will struggle at higher bandwidths.
The obvious thing to do is to push the front end DSP filtering and decimation processes onto the FPGA and pass the Odroid a part processed stream for demodulation and decoding at lower sample rates. So I was looking for a bit of guidance on the following questions:
1. Where to put the additional DSP in the signal chain? Based on the stock hosted system, I would think this would be added downstream of the existing modules, just before the FX3 connection - so, between the rx_sample fifo and the FX3? Is this the best location?
2. I want to be able to frequency shift and change the filter characteristics whilst the system is running, so need to able to control the frequency of my (new) FPGA based mixer, and change the FIR filter tap coefficients, rather than have these hard coded in. This could be done by hooking up additional data streams to the mixer / FIR filter respectively. It would seem logical to achieve this by passing the data from the Nios II soft processor, interfacing with the Nios II from the Odroid over USB - for example, Gnuradio has a block which generates FIR filter tap coefficients, these could be generated on the Odroid, and passed via the Nios II to the filter. Does this make sense, or might it be better to try to interface the filter directly via the FX3? Has anyone had any experience of going down this route?
3. Is there likely to be more guidance forthcoming on how to go about implementing DSP on the FPGA? For example, I understand with the Ettus USRPs that pass through modules are already implemented in the FPGA, and therefore to add custom DSP you just have to re-write those modules rather than replumbing the whole FPGA.
Regards
Brian
I'm using Gnuradio based code to do signal processing for reception and decoding of a BPSK modulated data signal and whilst the Odroid performance is respectable (and very good for an ARM device), its still quite a bit slower than an Intel i5 / i7 etc and will struggle at higher bandwidths.
The obvious thing to do is to push the front end DSP filtering and decimation processes onto the FPGA and pass the Odroid a part processed stream for demodulation and decoding at lower sample rates. So I was looking for a bit of guidance on the following questions:
1. Where to put the additional DSP in the signal chain? Based on the stock hosted system, I would think this would be added downstream of the existing modules, just before the FX3 connection - so, between the rx_sample fifo and the FX3? Is this the best location?
2. I want to be able to frequency shift and change the filter characteristics whilst the system is running, so need to able to control the frequency of my (new) FPGA based mixer, and change the FIR filter tap coefficients, rather than have these hard coded in. This could be done by hooking up additional data streams to the mixer / FIR filter respectively. It would seem logical to achieve this by passing the data from the Nios II soft processor, interfacing with the Nios II from the Odroid over USB - for example, Gnuradio has a block which generates FIR filter tap coefficients, these could be generated on the Odroid, and passed via the Nios II to the filter. Does this make sense, or might it be better to try to interface the filter directly via the FX3? Has anyone had any experience of going down this route?
3. Is there likely to be more guidance forthcoming on how to go about implementing DSP on the FPGA? For example, I understand with the Ettus USRPs that pass through modules are already implemented in the FPGA, and therefore to add custom DSP you just have to re-write those modules rather than replumbing the whole FPGA.
Regards
Brian