Electronic – Single Board Computer (SBC) suggestion for interfacing with DMA

ddr2sbc

I am taking over a project where a Spartan 6 FPGA provides the interface between an ADC and a DDR2 memory chip. The FPGA takes 16-bit data out of the ADC and stores it into the RAM at a rate of 28MHz.

I have the option of making the DDR2 controller multi-ported so that a processor can access the DDR2 memory and begin analyzing it. Ideally I would like to find a COTS single board computer ( SBC ) for under $150 that has Direct Memory Access ( DMA ) available for an off board connection to the memory. The SBC would eventually run some type of Linux distribution so it would have to be more powerful than a standard micro controller.

This is kind of stepping out on a limb for me, since I have previously developed using PIC's or Xilinx Microblaze where I designed the entire board. I'd like to move up to running Ubuntu on an established board, which is why I took this project on.

Just hoping I can get some suggestions and let me know if there are any details I am not clear on or if I should be posting in a different forum. Thanks!

Best Answer

Your numbers suggest a bandwidth of roughly 53.4 MB/s (MegaBytes!). This makes me wonder about the requirements for the rest of the system given that you want to add the overhead of a heavy Linux OS like Ubuntu on top. For what it's worth, there are some SBC Linux boards that offer DMA to a memory card reader to achieve somewhere in the neighborhood of 6 MB/s - this figure probably does not take protocol overhead in to account so the actual data throughput is probably less. Your calculation however, is all raw data, which adds even more to the challenge.

I'm curious to know what kind of application requires that high of a sampling rate - I can imagine something like high frequency radio transceivers need something this fast (or faster) but I won't speculate as to what you're using this for - high speed data acquisition (if this is even really considered high-speed) is not within my knowledge.

Given the bandwidth requirement, what I would do is start with a computer peripheral bus that is capable of moving that kind of data.

  • PCI: 133 MB/s
  • PCIe (1-lane, gen1): 250 MB/s
  • If you're willing to decrease your sampling rate, USB 2.0: 480 Mbit/s (effective throughput up to 35 MB/s)

These figures may or may not include protocol overhead, so keep in mind that your calculated required bandwidth is already pure data and may require much more than 53.4 MB/s considering protocol overhead.

For now I'm going to forget the requirement of an SBC and suggest a full blown PC. After choosing the right bus, now you have the pleasure of implementing your own peripheral card to plug in to a typical PC capable of running Ubuntu. You'll have to write a linux driver for your custom PCI/PCIe/USB device too. I'm hoping someone replies with a nice SBC that exposes a memory bus with DMA instead... the above solutions will surely be a challenge.

By the way, what was already processing the data after the FPGA in the first place? Was it not good/flexible enough?

Related Topic