2.2. DPDK Intel® FPGA PAC N3000 Software Components
The kernel space uses virtual function I/O (VFIO) to report PCIe* resources to the user space. The VFIO driver advertises direct device access to the user space. Direct access to user space significantly reduces latency, increases bandwidth, and supports direct use of the BareMetal device driver.
The following components make up the DPDK Intel® FPGA PAC N3000 stack. The code path is relative to $RTE_SDK which is the extracted DPDK 19.08 with the patch directory. Refer to the Intel® Acceleration Stack User Guide Intel FPGA Programmable Acceleration Card N3000 for instructions on installing DPDK with the patch.
- The DPDK PCIe* scan enumerates the PCIe* bus during initialization.
- The OPAE hardware layer is a common hardware base abstraction layer. This abstraction layer provides hardware function calls and data structures for the FPGA, such as device feature list enumeration.
- The IFPGA base code specifies the FPGA hardware capability, including FPGA enumeration, and FPGA register access. The code is here: $RTE_SDK/drivers/raw/ifpga/base/
- The IFPGA bus is new in the DPDK. The DPDK software registers all AFU devices on this bus. The code is here: $RTE_SDK/drivers/bus/ifpga/
- The Rawdev library defines the raw device type for acceleration devices. For FPGAs the IFPGA Rawdev driver FPGA calls the API that the IFPGA exports to enumerate and discover the management engine (FME) and AFU region. The implementation is here: $RTE_SDK/drivers/raw/ifpga/ifpga_rawdev.c.
- The afu_device defines a data structure to describe the AFU device, providing access to functions such as memory-mapped I/O (MMIO) read and write.
- The IPN3KE PMD provides poll mode driver support for the Intel® FPGA PAC N3000. The IPN3KE PMD implements functions that gather the XL710 host side link statistics by making function calls to I40e driver and gathers line side link status and statistics using IFPGA Rawdev driver. This driver is the Ether (Ethernet) driver shown in Figure 3.
Did you find the information on this page useful?