FPGA communication with a PC (Windows)

Is Windows a requirement? Dealing with things like raw Ethernet packets to keep overhead to an absolute minimum is an easy job in Linux. (If you don't want to think about ARP, IP addresses, etc., why not force the FPGA to have MAC address 1, and the dedicated PC interface to have MAC address 2 - then send packets with nothing but the Ethernet frame overhead.)

It also means that the data packets won't have to compete for bandwidth with other things Windows will want to send over the interface, such as broadcasts scanning for network shares, ARP requests, or (if you are not careful) malware sending out spam...

Reply to
David Brown
Loading thread data ...

Quick google:

formatting link

formatting link

Reply to
Morten Leikvoll

FT(2)232H needs only a fifo and a not to complex state machine. For the host side, look into libftdi

formatting link

for a sample implementation.

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
 Click to see the full signature
Reply to
Uwe Bonnes

I've done this three different ways but not quite at your speed:

FTDI chip and USB - least effort but I only went up to perhaps 4 Mbyte/s

- I always worry about USB.

Ethernet - FPGA -> uP with the FPGA mapped into uP memory - can sustain wirespeed with 100Mbit Ethernet but that isn't fast enough for you. The approach would work with a processor with a Gbit Ethernet interface. We use these in numbers (up to 8) with one PC and going in both directions

- total IO about 40 Mbyte/s

FPGA -> PCI // IO card in PC. This could sustain 20Mbyte/s to disk on a reasonable PC (Windows XP and (don't laugh) VB6). The IO card we used was Adlink PCI 7300A (or something like). They probably do a better one now. This system all worked quite well and happily fills up Terrabyte hard drives.

I just noticed that you need both directions - that gets harder because when data goes from PC to FPGA you either need a big buffer in the FPGA or real time data from the PC.

If you use USB and standard drivers you should allow for at least 0.5 seconds of buffer on the FPGA (either direction).

The Adlink driver didn't need any FPGA side buffering for data into the PC but we never used it the other way round.

PC's are quite good at buffering incoming Ethernet data but you'll need to do the work on the FPGA side for the other direction. We like to have at least 1 second of buffer !

This has all got a bit rambly - hope you get some ideas you can use.

Michael Kellett

Reply to
MK

We use it at > 16 MiByte/s ...

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
 Click to see the full signature
Reply to
Uwe Bonnes

You could be quite right -- if you look at my wording, you'll see that I had that thought in mind.

The article that I was going from was pushing it as a good way to get real-time comms in and out of a PC; it may not be worth the hassle if all you want is throughput but don't care as much about latency. Or, it may not be worth the hassle at all.

(I think that the best way to use a PC in a real-time system is as a serial terminal, to talk to the processor that's actually doing the work. But then, I lost patience with PCs a long, long time ago).

--
My liberal friends think I'm a conservative kook.
My conservative friends think I'm a liberal kook.
 Click to see the full signature
Reply to
Tim Wescott

FPGA -> PCI -> PC should let the PC shove data into buffers in RAM, then have the FPGA extract it via DMA -- but that'll complicate your PCI interface.

Is that still the case if you're using isochronous transfers, and making sure that the PC is tuned for feeding your app?

--
My liberal friends think I'm a conservative kook.
My conservative friends think I'm a liberal kook.
 Click to see the full signature
Reply to
Tim Wescott

I got 30+ MB/sec both in and out (not simultaneously) with a Cypress EZUSB (CY7C68013A) chip on a Dell desktop with a core2 Duo CPU. It was very impressive.

Jon

Reply to
Jon Elson

Am 27.03.2012 13:10, schrieb Bill Valores:

I can recommend the FPGA modules from opal kelly. IMO they have a nice interface both on the HDL side and on the PC-side. They allow to easily upgrade from a USB connection to a PCIe connection, without too much changes. Personally I have only needed USB so far...

Thomas (happy customer)

Reply to
Thomas Heller

The problem is in tuning the (Windows) PC - you might ship the system running fine and then you get a call from the customer and the PC turns out to be running a load of other stuff that their IT department refuses to remove. It shouldn't happen but it does. We found the men with the cheque books usually sided with the IT department so it was better just to make it work whatever.

Never got any joy at all with isochronous transfers - if the FTDI drivers support them it might be worth a go.

Michael Kellett

Reply to
MK

It depends on what the environment is, of course -- if the "PC" is embedded in an instrument or a machine, then you've got a much better chance of fending off a hypothetical IT department.

I suppose that an overactive IT gnome might attempt to upgrade the Windows installation on a $50000 oscilloscope -- but I don't know if they'd try it a second time.

--
Tim Wescott
Control system and signal processing consulting
 Click to see the full signature
Reply to
Tim Wescott

y

Agreed with recommendation for Opal Kelly. I've recently started shipping an instrument that sends about 16 MB/sec to the PC via their XEM3005 board, and have no complaints. Their hardware quality has been solid so far, and tech support is more or less instant.

I wrote my own firmware so I can't say much about FrontPanel. I suspect it's among the best general-purpose API+host interface packages available, though. Jake's pretty hardcore.

-- john

Reply to
John Miles

From my experience Ethernet is definitely a good way to do it (1000BASE-T). I have written a simple MAC layer on SP605 board (with PHY) which only deals with ARP, ICMP (for ping), and UDP protocols.

I got approx. 50MBytes downloading speed(from PC to FPGA) with UDP (1024bytes payload). Uploading speed not measured though. But I think it should meet 20MBps requriement if software can catch and store the data quicker enough.

--------------------------------------- Posted through

formatting link

Reply to
ralph

Hi Bill, See my post of the 28 May, or, to see it with embedded example YouTube videos, go see : FPGA Modular Firmware Skeleton for multiple instruments - Morph-IC-II, YouTube videos.

formatting link

This does just what you want - 60MB.s-1 burst, (how much you get continuous depends on the PC and what else you are doing on the USB bus).

It provides the USB interface to a group of instrument interfaces - what you build into each interface is up to you. Not free - very low price for individual use, a good value price for commercial use, would cost you much more to develop. You just need to talk to a .dll to drive it - example code for testing provided

- See videos for example use. cheers, Dr. Beau Webber

Reply to
Dr. Beau Webber

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.