# AMR RAVE - XDMA Configuration
> **For common DMA concepts**, see [Common Hardware Documentation](../../hardware/index.md)
>
> This document describes the RAVE (VE2302) XDMA PL IP implementation.
## Overview
The RAVE Board uses the XDMA PL IP (xilinx.com:ip:xdma) for DMA functionality. The VE2302 device is a Versal Edge-series device that does not include a CPM block, so DMA must be implemented in soft logic within the programmable fabric.
XDMA provides a channel-based DMA architecture supporting 2 physical functions (PF0 for management with device ID 0x5710, PF1 for user/DMA with device ID 0x5711). The IP supports multiple DMA channels with memory-mapped and streaming interfaces for efficient data transfer between host and device memory.
> **Note:** Legacy RAVE designs used QDMA (Queue DMA) with 512 queues. The platform has migrated to XDMA for improved simplicity and compatibility with VE2302 Embedded+ platform requirements.
## XDMA PL IP
### IP Information
| Parameter | Value |
|-----------|-------|
| **IP Name** | XDMA |
| **Vendor** | xilinx.com:ip:xdma |
| **Version** | Latest for Vivado 2026.1 |
| **Implementation** | Soft logic in PL fabric |
| **Physical Functions** | 2 (PF0: 0x5710, PF1: 0x5711) |
**Reference:** [XDMA Product Guide (PG195)](https://docs.xilinx.com/r/en-US/pg195-pcie-dma)
## RAVE XDMA Configuration
### XDMA Settings
| Setting | RAVE Value | Notes |
|---------|------------|-------|
| **Physical Functions** | **2** (PF0, PF1) | Standard AMR configuration |
| **PF0 Device ID** | **0x5710** | Management function |
| **PF1 Device ID** | **0x5711** | User/DMA function |
| **Vendor ID** | **0x10EE** | Xilinx vendor ID |
| **Mode Selection** | **Advanced** | Multi-PF support |
| **Function Level Reset** | **Disabled** | In both XDMA & PCIe IP |
| **Data Width** | **256-bit** | AXI data width |
## Physical Function Configuration
### PF0 (Management)
**XDMA PF0 Settings:**
- Device ID: 0x5710
- Base Class: 12 (Memory controller)
- Sub Class: 00
- BAR0: 8 MB (64-bit, non-prefetchable)
### PF1 (User/DMA)
**XDMA PF1 Settings:**
- Device ID: 0x5711
- Base Class: 12 (Memory controller)
- Sub Class: 00
- BAR0: 16 MB (64-bit, non-prefetchable) - XDMA control registers
- BAR2: 64 KB (64-bit, non-prefetchable) - AXI-Lite bridge for PL peripherals
- BAR4: 256 MB (64-bit, prefetchable) - AXI bypass interface for memory access
- MSI-X: Enabled
## AXI Interfaces
### XDMA AXI Master (H2C - Host to Card)
**For DMA data transfer:**
| Interface | Configuration |
|-----------|---------------|
| **M_AXI** | AXI4-MM master interface |
| **Data Width** | 256-bit |
| **Connection** | To NoC (via SmartConnect) |
| **Target** | LPDDR4 memory, PL slaves |
### XDMA AXI-Lite Master
**For register access:**
| Interface | Configuration |
|-----------|---------------|
| **M_AXI_LITE** | AXI4-Lite master interface |
| **Size** | 16 MB address space |
| **Prefetchable** | False |
| **Purpose** | PL peripheral access via PF1 BAR2 |
### XDMA AXI Bypass
**For memory-mapped access:**
| Interface | Configuration |
|-----------|---------------|
| **M_AXI_BYPASS** | AXI4-MM bypass interface |
| **Size** | 256 MB address space |
| **Prefetchable** | True |
| **Purpose** | Direct memory access via PF1 BAR4 |
| **64-bit addressing** | Enabled |
## NoC Integration
### XDMA to NoC Connection
**XDMA routes through SmartConnect to NoC:**
```
XDMA PL IP M_AXI (256-bit)
↓
SmartConnect (width/protocol conversion)
↓
NMU (in AXI NoC IP)
↓
NoC Interconnect
↓
DDRMC_NSU → LPDDR4
```
**Configuration:**
- SmartConnect provides width conversion and protocol adaptation
- Custom axi_addr_mask IP applies address masks for BAR-to-AXI translation
- NoC handles routing to LPDDR4 memory controllers
- Clock domain crossing handled by SmartConnect and NoC
## Address Translation
### Address Masking
RAVE uses custom axi_addr_mask IP for BAR address translation:
| Interface | Mask | Purpose |
|-----------|------|---------|
| **AXI-Lite** | 0x0000000000FFFFFF | Translates PF1 BAR2 to local peripheral addresses |
| **AXI Bypass** | 0x000000000FFFFFFF | Translates PF1 BAR4 to LPDDR4 addresses |
## Clocking and Resets
### XDMA Clock Domains
| Clock | Source | Purpose |
|-------|--------|---------|
| **axi_aclk** | PCIe user clock | XDMA AXI interfaces |
| **axi_ctl_aclk** | PCIe user clock | XDMA control interface |
### XDMA Reset Inputs
| Reset | Source | Purpose |
|-------|--------|---------|
| **sys_rst_n** | PCIe reset logic | System reset |
| **axi_aresetn** | proc_sys_reset | AXI interface reset |
**Reset Synchronization:**
- Use proc_sys_reset blocks for proper clock domain synchronization
- Coordinate PCIe reset with XDMA reset sequencing
## Design Integration
### Key Configuration Parameters
**From RAVE config_bd.tcl:**
```tcl
# XDMA IP configuration
CONFIG.PF1_SUBSYSTEM_ID {000e}
CONFIG.axi_bypass_64bit_en {true}
CONFIG.axi_bypass_prefetchable {true}
CONFIG.axi_data_width {256_bit}
CONFIG.axilite_master_prefetchable {false}
CONFIG.axilite_master_size {16}
CONFIG.axist_bypass_size {256}
CONFIG.mode_selection {Advanced}
CONFIG.mult_pf_des {true}
CONFIG.pf0_device_id {5710}
CONFIG.pf1_device_id {5711}
CONFIG.vendor_id {10EE}
```
## References
- [XDMA Product Guide (PG195)](https://docs.xilinx.com/r/en-US/pg195-pcie-dma) - XDMA IP documentation
- [RAVE PCIe Configuration](pcie-config.md) - PCIe IP integration
- [RAVE NoC Configuration](noc-config.md) - NoC topology with XDMA
- [RAVE Memory Map](memory-map.md) - BAR address mapping and XDMA configuration