Multi Channel DMA IP for PCI Express* Design Example User Guide
ID
683517
Date
8/04/2025
Public
3.5.1. Hardware Requirements
3.5.2. Software Requirements
3.5.3. Set Up the Hardware and Program the FPGA
3.5.4. Configuration Changes from BIOS
3.5.5. Installing the Required Kernel Version for Ubuntu v24.04
3.5.6. Set the Boot Parameters
3.5.7. MCDMA Custom Driver
3.5.8. MCDMA DPDK Poll Mode Driver
3.5.9. MCDMA Kernel Mode Network Device Driver
3.5.8.5. BAS Test
For x4 BAS:
- Set the PCIe_SLOT “2” in rte_pmd_mcdma.h (p0_software/dpdk/dpdk/drivers/net/mcdma/rte_pmd_mcdma.h).
- X4 BAS supports a burst length of 32 by default. In the file perfq_app.h (p0_software/dpdk/dpdk/examples/mcdma-test/perfq/perfq_app.h)
#define IFC_MCDMA_BAS_X4_BURST_LENGTH 32
For the Traffic Generator/Checker design example, you must disable the MSI-X parameter, IFC_QDMA_MSIX_ENABLE, in the file "p0_software/dpdk/dpdk/drivers/net/mcdma/base/mcdma_ip_params.h" if MSI-X is not enabled in the IP Parameter Editor GUI. By default, the DPDK Driver software parameter is enabled and MSI-X is disabled in the IP. This mismatch prevents the ifc_uio kernel module from being loaded.
Note: Refer to Design Example BAR Mappings for BAR mapping information.
Commands:
- To verify the write operation:
$ sudo ./build/mcdma-test -- -b 0000:01:00.0 --bar=0 \ --bas -s 512 -t
Figure 49. BAS Write Operation - To verify the read operation:
$ sudo ./build/mcdma-test -- -b 0000:01:00.0 --bar=0 \ --bas -s 512 -r
Figure 50. BAS Read Operation - To verify the write and read operations:
$ sudo ./build/mcdma-test -- -b 0000:01:00.0 --bar=0 \ --bas -s 512 -z
Figure 51. BAS Write and Read Operations - Performance test:
The log below is collected on a Gen3 x16 H-Tile.
$ sudo ./build/mcdma-test -- -b 0000:01:00.0 --bar=0 \ --bas_perf -s 16384 -z
Figure 52. Performance Test
Note: Multiple iterations of the BAS test might show an Rx Fail. This issue is planned to be fixed in the next release.
Note: For DPDK: VF/PF cannot run BAM+BAS+MCDMA simultaneously within one VM or hypervisor. You need to run one instance of VF/PF in an independent VM.