Visible to Intel only — GUID: vze1626225060140
Ixiasoft
1. Before You Begin
2. Introduction
3. Functional Description
4. Interface Overview
5. Parameters (H-Tile)
6. Parameters (P-Tile) (F-Tile) (R-Tile)
7. Designing with the IP Core
8. Software Programming Model
9. Registers
10. Troubleshooting/Debugging
11. Multi Channel DMA Intel FPGA IP for PCI Express User Guide Archives
12. Revision History for the Multi Channel DMA Intel FPGA IP for PCI Express User Guide
3.1. Multi Channel DMA
3.2. Bursting Avalon-MM Master (BAM)
3.3. Bursting Avalon-MM Slave (BAS)
3.4. MSI Interrupt
3.5. Config Slave (CS)
3.6. Root Port Address Translation Table Enablement
3.7. Hard IP Reconfiguration Interface
3.8. Config TL Interface
3.9. Configuration Intercept Interface (EP Only)
3.10. Data Mover Only
4.1. Port List
4.2. Clocks
4.3. Resets
4.4. Multi Channel DMA
4.5. Bursting Avalon-MM Master (BAM) Interface
4.6. Bursting Avalon-MM Slave (BAS) Interface
4.7. Legacy Interrupt Interface
4.8. MSI Interface
4.9. Config Slave Interface (RP only)
4.10. Hard IP Reconfiguration Interface
4.11. Config TL Interface
4.12. Configuration Intercept Interface (EP Only)
4.13. Data Mover Interface
4.14. Hard IP Status Interface
4.15. Precision Time Management (PTM) Interface
8.1.6.1. ifc_api_start
8.1.6.2. ifc_mcdma_port_by_name
8.1.6.3. ifc_qdma_device_get
8.1.6.4. ifc_num_channels_get
8.1.6.5. ifc_qdma_channel_get
8.1.6.6. ifc_qdma_acquire_channels
8.1.6.7. ifc_qdma_release_all_channels
8.1.6.8. ifc_qdma_device_put
8.1.6.9. ifc_qdma_channel_put
8.1.6.10. ifc_qdma_completion_poll
8.1.6.11. ifc_qdma_request_start
8.1.6.12. ifc_qdma_request_prepare
8.1.6.13. ifc_qdma_descq_queue_batch_load
8.1.6.14. ifc_qdma_request_submit
8.1.6.15. ifc_qdma_pio_read32
8.1.6.16. ifc_qdma_pio_write32
8.1.6.17. ifc_qdma_pio_read64
8.1.6.18. ifc_qdma_pio_write64
8.1.6.19. ifc_qdma_pio_read128
8.1.6.20. ifc_qdma_pio_write128
8.1.6.21. ifc_qdma_pio_read256
8.1.6.22. ifc_qdma_pio_write256
8.1.6.23. ifc_request_malloc
8.1.6.24. ifc_request_free
8.1.6.25. ifc_app_stop
8.1.6.26. ifc_qdma_poll_init
8.1.6.27. ifc_qdma_poll_add
8.1.6.28. ifc_qdma_poll_wait
8.1.6.29. ifc_mcdma_port_by_name
Visible to Intel only — GUID: vze1626225060140
Ixiasoft
8.2.5. Software Flow
Figure 52. DPDK Poll-Mode Driver Software Flow
Step 1
- Based on the specified number of queues, application sets up Tx and Rx queues.
- MCDMA Poll mode driver (PMD) takes care of memory management and reserves a portion of physical memory with specified alignment and boundary.
- PMD initializes following registers in QCSR associated with the queue, which includes Starting address of descriptors, queue size, write back address for Consumed Head, payload size in D2H descriptors and then enables the channels.
- QCSR registers:
- Q_RESET (offset 8’h48)
- Q_TAIL_POINTER (offset 8’h14) Set 0
- Q_START_ADDR_L (Offset 8’h08)
- Q_START_ADDR_H (Offset 8’h0C)
- Q_SIZE (Offset 8’h10)
- Q_CONSUMED_HEAD_ADDR_L (Offset 8’h20)
- Q_CONSUMED_HEAD_ADDR_H (Offset 8’h24)
- Q_BATCH_DELAY (Offset 8’h28)
- Set q_en, q_wb/intr_en bits, Q_CTRL (Offset 8’h00)
- (Q_PYLD_COUNT) (Offset 8'h44)
- Once all the queues are configured it then starts the device.
- Q Application creates the thread based on the number of queues specified.
Step 2
Thread requests for new descriptor to submit the request and updates the required field i.e., descriptor index, SOF, EOF, Payload, MSI-X enable and writeback enable.
Step 3
After initializing descriptor ring buffer, the McDMA PMD writes number of descriptor updates into tail register of QCSR region. On every descriptor update the tail pointer is increased by 1. QCSR tail pointer register: Q_TAIL_POINTER (Offset 8’h14)
Step 4
- Once the tail pointer write happens, MCDMA IP fetches descriptors from host memory starting from the programmed Q_START_ADDR_L/H address.
- MCDMA IP parses the descriptor content to find the sources, destination addresses and length of the data from descriptor and starts DMA operation.
Step 5
Once descriptor processing is completed, IP notifies the completion status based on following methods, which can be enabled in each descriptor.
- Either based on MSI-X Interrupt: MCDMA IP sends MSI-X interrupt to host if enabled in Q_CTRL.
- Writeback: MCDMA IP updates Q_CONSUMED_HEAD_ADDR_L/H, if writeback is enabled in Q_CTRL.