I'm looking for a PC hardware interface that matches these needs-

The PC will constantly be busy performing calculations. Each time there is a calculation result (every ~1ms) I want it to share it with an external micro-controller that is attached to another (closed) unit via RS232, the unit will use a predefined protocol to request the result when it wishes to do so (undetermined timings).


PC <-> micro-controller <-> unit

Theoretically I could connect the PC directly to the unit via RS232 (mux, cause I need around 6 units), but I did not want to interrupt the PC with too much I/O, I want it to be focused on the calculations.

On the PC<->micro interface I want something fast, so PCI seemed like a good idea - I can have the micro-controller sit on a pci card and 'share' memory (mapped) with the PC to transfer calculations result, and also communicate with the unit.

  1. There are many FPGA cards on PCI out there, but I'm looking for something like ARM or even something more simple on the card, does anyone know some good product for that?
  2. Is the PCI a good idea for my setup? Do you suggest something else? I really want this interface to act like a shared memory.



  • 1
    \$\begingroup\$ FPGAs tend to have dual port memory, which is good for this purpose, but PCI is already fairly indirect. It doesn't sound like much capability is needed in the "microcontoller" so a soft-core processor in the FPGA should be fine. However, I suspect that a high speed serial interface and a demultiplexer is probably a better solution. \$\endgroup\$ – Chris Stratton Jun 6 '13 at 17:25
  • 1
    \$\begingroup\$ What's your expected data rate? I doubt that you really need shared memory. 1ms is plenty of time even for serial, and you could use a separate thread for I/O. Another possible solution is to use Ethernet - it can be very fast and PC can just fire off the packet over UDP and not wait for the reply. \$\endgroup\$ – Igor Skochinsky Jun 6 '13 at 17:56

I think your understanding of what the cost of I/O is might be misguided. I'd put the MCU on the USB bus, and use a USB bus packet to send the updated data to the microcontroller. You can buy a USB bus microcontroller board all ready-made for < $15. The overhead of the USB bus transfer is unlikely to ever show up on a profile of the system performance.


If I were approaching a big project in this direction, I would consider PXI, http://en.wikipedia.org/wiki/PCI_eXtensions_for_Instrumentation

Essentially, this is a shared PCI bus with some extensions, and the bus is accessible by every device you plug into it. http://www.stmopen.net/intellective-pxi-bus-extended-card-design-based-on-arm-microcontroller/ talks about an ARM platform that uses that bus,

Of course, if you don't need this extended functionality, the USB option should certainly be considered. For a protocol that's not real-time, people sure seem to do some interesting stuff on it that I can't differentiate from real time.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.