A newer version of this document is available. Customers should click here to go to the newest version.
1. Overview
2. Quick Start Guide
3. Configuring and Generating the GTS AXI Multichannel DMA IP for PCI Express
4. Integrating the IP With Your Application
5. Simulating the IP
6. Validating the IP
A. Appendix A: Functional Description
B. Appendix B: Registers
C. Document Revision History for the GTS AXI Multichannel DMA IP for PCI Express*
2.1.1. Downloading and Installing Quartus® Prime Software
2.1.2. Configuring and Generating the GTS AXI Multichannel DMA IP for PCI Express
2.1.3. Configuring and Generating the GTS AXI Streaming Intel FPGA IP for PCI Express
2.1.4. Configuring and Generating the GTS System PLL Clocks Intel FPGA IP
2.1.5. Configuring and Generating the GTS Reset Sequencer Intel FPGA IP
2.1.6. Configuring and Generating the Reset Release IP
2.1.7. Instantiating and Connecting the IP Interfaces
2.1.8. Simulate, Compile and Validate the Design on Hardware
4.4.1. PCIe AXI-Stream TX Interface (ss_tx_st)
4.4.2. PCIe AXI-Stream RX Interface (ss_rx_st)
4.4.3. Control and Status Register Interface (ss_csr_lite)
4.4.4. Transmit Flow Control Credit Interface (ss_txcrdt)
4.4.5. Configuration Intercept Interface (CII)
4.4.6. Completion Timeout Interface (ss_cplto)
4.4.7. Function Level Reset (FLR) Interface
4.4.8. Control Shadow Interface (ss_ctrlshadow)
4.4.9. Error Interface
4.5.1. H2D AXI-Stream Manager (h2d_st_initatr)
4.5.2. D2H AXI-Stream Subordinate (d2h_st_respndr)
4.5.3. H2D/D2H AXI-MM Manager (dma_mm_initatr)
4.5.4. BAM AXI-MM Manager (bam_mm_initatr)
4.5.5. BAS AXI-MM Subordinate (bas_mm_respndr)
4.5.6. PIO AXI-Lite Manager (pio_lite_initiatr)
4.5.7. HIP Reconfiguration AXI-Lite Subordinate (user_csr_lite)
4.5.8. User Event MSI-X (user_msix)
4.5.9. User Event MSI (user_msi)
4.5.10. User Function Level Reset (user_flr)
4.5.11. User Configuration Intercept Interface
4.5.12. Configuration Slave (cs_lite_respndr)
A.1.1.1. H2D Data Mover
A.1.1.2. D2H Data Mover
A.1.1.3. Descriptors
A.1.1.4. AXI4-Lite PIO Manager
A.1.1.5. AXI-MM Write (H2D) and Read (D2H) Manager
A.1.1.6. AXI-Stream Manager (H2D) and Subordinate (D2H)
A.1.1.7. User MSI-X
A.1.1.8. User Function Level Reset (FLR)
A.1.1.9. Control and Status Registers
6.2.5. Set the Boot Parameters
Follow the steps below to modify the default hugepages setting in the grub files:
- Edit the /etc/default/grub file.
Append the following parameters to the GRUB_CMDLINE_LINUX line in the /etc/default/grub file:
For Intel CPU:GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 intel_iommu=on iommu=pt processor.max_cstate=0 intel_idle.max_cstate=0 intel_pstate=disable panic=1 quiet splash vt.handoff=7"
For AMD CPU:GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 amd_iommu=on iommu=soft processor.max_cstate=0 amd-pstate panic=1 quiet splash vt.handoff=7"
An Intel CPU example of the /etc/default/grub file on Ubuntu after the edits can be seen below:root@bapvecise042:~# cat /etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT="1>2" GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=0 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 intel_iommu=on iommu=pt nprocessor.max_cstate=0 intel_idle.max_cstate=0 intel_pstate=disable panic=1 quiet splash vt.handoff=7" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information # from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB # with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
- Generate GRUB configuration files by running the following command:
$ sudo update-grub
- Reboot the system.
- Verify the changes above:
$ cat /proc/cmdline
- Set the huge pages:
$ echo 40 > sudo tee /proc/sys/vm/nr_hugepages
- If the host supports multiple NUMAs, follow the following steps:
- Check how many NUMAs are enabled on the host.
$lscpu | grep NUMA NUMA node(s): 2 NUMA node0 CPU(s): 0-15, 32-47 NUMA node1 CPU(s): 16-31, 48-63
In this example, we have 2 NUMAs. If only one NUMA is present, ignore this step.
- Check which device is provisioned:
$ cat /sys/class/pci_bus/<Domain:Bus>/device/numa_node
- Enable the huge pages, whichever NUMA device is located:
$ echo 40> sudo tee /sys/devices/system/node/node<nodenum>/hugepages/hugepages-1048576kB/nr_hugepages
- Configure the thread sequence in software /user/cli/perfq_app/perfq_app.h based on which NUMA device is located. For example:
#define THREAD_SEQ "0-15"
- Check how many NUMAs are enabled on the host.
- Set PCIe_SLOT based on your design example link width configuration. Modify the macro below in the user/common/include/ifc_libmqdma.h and dpdk/dpdk/drivers/net/mcdma/rte_pmd_mcdma.h files:
#define PCIe_SLOT 0 /* 0 - x16, 1 - x8, 2 – x4 */
Example of macro setting for x4 link width:
#define PCIe_SLOT 2