Electronics > FPGA

FPGA platform and approach to send samples to host PC

(1/4) > >>

I'm looking for approaches for a FPGA design that is relatively simple.
It will gather and generate data in a burst of 1-2 seconds.
The data generated will consist of 64 bit values every 50 uS, or 1280 kbits/sec

A total of 160 to 320 kbytes per capture.

What are the pros and cons for transferring this data to a host computer?
To stream it in real time is not particularly demanding - even USB 1 at 12 mbps could support the rate.
Or I could store the data in SRAM - I've seen boards like Papilio Duo that have a 512K SRAM on the board. But it's still not clear how that data could then be moved to the host.

What are your recommendations for an approach - both in terms of finding the right FPGA board, and the host interface? My searching shows that most low-cost, small FPGA development boards are not available. Are there any that are recommended and are available?  What are simple host interface approaches?

There is throughput and then there is latency.
While throughput is absolutely no problem for USB FS as you said, you will still need to buffer data inside the FPGA, because if you just try to send it every 50 us without any buffering, it won't work! (Due to the nature of USB.)
But you definitely won't need as much as 512 KBytes of RAM. A reasonable buffering time, if you're just using USB FS in bulk mode and want to be on the safe side without having to go through hoops with the PC software side, would be something like 100 ms. (You can probably get away with much less, but that wouldn't be as robust.) You can alternatively use USB with an isochronous transfer mode, but you'd still have to buffer data - just with a much smaller buffer. But something like 16 KB of internal memory on any but the smallest FPGAs should be no problem.

There are some 32bit micro-controllers (including those with >64k, or with built in dram) with full speed USB and a DMA capture port which might do all the work for you.  An FPGA may be an extreme exercise in difficulty unless you are experienced or you have there is a reason you must use an FPGA, like generating special clock pulses and external control logic.

As for USB in windows, worse comes to worse, there exists the media streaming channel which operates at the same level as USB audio devices and will shrink your buffer needs as you get a guaranteed low latency priority scheduled interval continuous set bitrate com channel.

Unless there are other requirements not mentioned, this does sound like a job for a usb capable microcontroller.

One example could be the Cypress FX2 (cheap boards available on eBay) which the sigrok project use for some multiple MB/s logic analyser. The firmware and the driver are open source so you can see how it's done. They use the GPIF to clock data into the FX2 at a fixed rate but you can alternatively use the FX2 FIFO mode just provides you with a simple, erm, FIFO interface that you fill at the rate your hardware wants. The FX2 is an 8051 based MCU so its a bit old school but all its doing is setting up the FX2 peripherals the way you want, it's not in the high speed data path. The free sdcc compiler works fine with it.

if this is an inhouse and/or hobbyist setup, the simplest (and cheapest) way to send data from the FPGA to the host is using something that's already there.

At least for Intel/Altera, you can send data back from the FPGA through the same JTAG (USB-Blaster, usually) connection that you need anyway to download/flash the bitstream the other way round. From the user point of view, this can be handled just like a serial connection.

While it is not officially documented, this method works fine for me up to approx. 1 MB/s.


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version