Processing of high speed (>80 MSPS ) ADC data

Hi everybody,

After years spent with various Arduinos, I was asked at my job if I can do some prototypes for fast analog measurement. I dont have detailed specs for sensors yet, but I know that very fast ADC will be needed. In this case ideal speed is 250 MSPS (milion samples per second), but for start 80 MSPS would be probably enough.

In case of 80 MSPS i need to have at least 80 MHz digital parallel bus for reading digitized data. Thats really really fast and most of MCUs cant handle this (if I count 250 MSPS for future).

Basic goal is to get those data, store them in small buffer and do very simple instructions with them (mostly raw additions and only few "if" statements). Output data well be transfered in about 5 seconds intervals and for output standart UART will be fast enough.

Making this circuit as embedded solution, USB ADC with some software is not what is needed.

Sadly Raspberry GPIO works reliably at 25 MHz max.

So my mind pointed me to last thing - FPGA. I heard that FPGAs can run on several hundreds of MHz, so I can guess that they can have fast inputs. Is this correct assumption?
But I have no knowledge on "programmíng" these chips, maybe its the right time to dive into FPGA world?

What do you guys think? Is there any other "good" solution?

Although not Arduino....A red-pitaya board could come close?
See eg here

(Disclaimer: i have no connection to redpitaya but i have one and also tried to do a scientific setup on it, community support is nowhere near the Arduino experience)

This is a difficult problem and you need a professional solution. Forget about Arduino.

There are PC interfaces designed to collect data at those rates, for example: Data Acquisition (DAQ) Systems, Devices & Software

joverbee:
Although not Arduino....A red-pitaya board could come close?
See eg here
http://redpitaya.com

Looks good, even 125 ADC MSPS onboard. Sadly they are out of stock currently. Will look further about similar platforms. Thanyk for mentioning this !

jremington:
This is a difficult problem and you need a professional solution. Forget about Arduino.

Indeed. I know, even Due cant handle this speed. I am asking about general ideas how to achieve this in embedded application. Multiple Arduinos will be there asi controlling display and storage low speed outputs.

jremington:
There are PC interfaces designed to collect data at those rates, for example: http://www.ni.com/data-acquisition/

As mentioned, USB ADCs or other PC equipment is not what I search for. These solutions are often very customized and tightly SW dependent. My design should be pure HW as much as it could be (long term reliability, power consumption etc.).
There is a plan that solution will be mobile, and many people really hates measuring anything where everytime you need probe with laptop or smartphone (often with every time specific OS version) for that purpose. Trust me :slight_smile:

This is the sort of subsystem needed for a digital sampling 'scope, high speed datapath and storage needed,
this is strictly FPGA/ASIC territory I think.

Conceptually its fairly simple, just datapath from ADC to SDRAMs, and controller for routing data
back out on demand. But at these speeds you have to know what you are doing, too fast for breadboarding
(30 to 40MHz is about the limit for such things without a groundplane I've found).

MarkT:
This is the sort of subsystem needed for a digital sampling 'scope, high speed datapath and storage needed,
this is strictly FPGA/ASIC territory I think.

Thank you ! This is what I wanted to hear. I just wanted someone to approve/disprove corectness of my general idea.

MarkT:
Conceptually its fairly simple, just datapath from ADC to SDRAMs, and controller for routing data
back out on demand.

Yes, this is sort of what I was thinking. Just need shared clock over 80 MHz for SDRAM and ADC. And maybe some kind of high speed counter for address increments.

Because i will need in future some kind of simple logical operations with those data (counting, subtraction, store biggest peak and few more). This part actually brought me to FPGAs because I figured easily that there is no such like 74xx logic for over 25 Mhz :smiley: :smiley: :smiley: Maybe I could do this with FPGA in real time...

MarkT:
But at these speeds you have to know what you are doing, too fast for breadboarding
(30 to 40MHz is about the limit for such things without a groundplane I've found).

Yes, I know :slight_smile: I had some problems with even 10 MHz amplifiers and it learned me a lot about how important EMI and proper grounding is. Still it is sometimes kind of "dark magic" for me :wink:

I can imagine that at 80Mhz this could be even bigger problem, like proper solder connections on SMD pads. Good that I have supporting people around for PCB prototyping.

Now the fun part - I know how to do it in theory. So I will have to start learning FPGAs, probably Altera (they have nice Linux support. I cant wait to spend yet again few hours to blink LED like in old times. That would be tough :slight_smile:

Thank you all for contributing !

The nice thing about SDRAMs are they auto-increment the column address in burst write mode - I'm
thinking original DDR100 and 133 here, BTW, obsolete technology, but potentially reusable for
this sort of application. The hard part is driving the SDRAMs between rows and getting no gaps
in the saved data, probably needs interleaving 2 devices or banks.

And of course writing sequential locations continuously guarantees refresh happens :slight_smile:

I made a video buffer this way using SDRAMs in burst-read for driving the video, and fitting in
lower rate writes during line and frame blanking. Never got it working beyond 40MHz, but it
was only a 2-layer board. And that was with the Propeller microcontroller, using its video driver
hardware to drive the control pins of the SDRAMs...

At the time I thought about high speed data acquisition using the same techniques, but its not
trivial...