Starting Cyclone V GT PCIe

Hello, I am trying to learn how to read data from an FPGA through a PCIe link.

Here’s some relevant information about my setup:

Board: Cyclone V GT Development Kit
Distribution: Ubuntu 16.04
Quartus Prime Version: 18.0

My long term goal is to stream some data into the FPGA (from Ethernet, but I’ll deal with that later), do some processing on this data, and stream it out through PCIe. I’ve been told I should use Avalon Memory Streaming.

Right now, I am trying to just learn how to stream some data from the FPGA to the desktop (through the PCIe link).

Here’s where I’m at so far:

I successfully programmed my Cyclone V GT Development Board with this reference design (gen 1, 1 lane):

I am also using CvP Initialization and Update Mode to program it (if that’s relevant). The driver I use to program the core has no functionality outside programming the board.

Please tell me if I’m incorrect, but I think I basically have 3 options:

  1. I can hope that some online driver I can find (and install) will provide the functionality I am looking for.
  2. I can write my own kernel driver after spending a lot of time learning how that works.
  3. I can use uio to simplify the majority of the task, but I still need to write some of the interface myself.

From what I’ve seen online so far, I think option 3 is most promising, but I am still having trouble understanding what exactly I need to do. If someone could help me, or at least inform me if I am on the right track or point to a simple example, I would greatly appreciate it.

I’m not very experienced, so I need all the help you are willing to provide. Thanks again,

Best Regards, Alex