XDMA IP 核配置详解:XC7K325T 上的 PCIe DMA 通路(Vivado 2020.2 / IP v4.1)
平台:XC7K325T-2FFG676 + Vivado 2020.2 + DMA/Bridge Subsystem for PCI Express v4.1 (Rev. 8)
文章目录
- XDMA IP 核配置详解:XC7K325T 上的 PCIe DMA 通路(Vivado 2020.2 / IP v4.1)
- 1. 把 IP 加进来
- 2. Basic 页:链路与 AXI 侧的基本盘
- ① 2.1 Component Name
- ② 2.2 Functional Mode
- ③ 2.3 Mode
- ④ 2.4 Device / Port Type
- ⑤ 2.5 PCIe Block Location
- ⑥ 2.6 PCIe Interface:Lane Width / Link Speed / Reference Clock
- ⑦ 2.7 AXI Interface:Address Width / Data Width
- ⑧ 2.8 AXI Clock Frequency
- ⑨ 2.9 DMA Interface option
- ⑩ 2.10 AXI-Lite Slave Interface
- ⑪ 2.11 四个调试/DRP 选项
- 3. PCIe ID 页:主机怎么认出你
- ① 3.1 ID Initial Values
- ② 3.2 Enable PCIe-Lite Interface
- ③ 3.3 Class Code(Base Class / Sub Class / Interface / Class Code)
- 4. PCIe: BARs 页:主机看到的内存窗口
- ① 4.1 PCI to AXI Lite Master Interface
- ② 4.2 PCI to DMA Interface(灰)
- ③ 4.3 PCI to DMA Bypass Interface
- 5. PCIe: MISC 页:中断与其他杂项
- ① 5.1 User Interrupts
- ② 5.2 Legacy Interrupt Settings
- ③ 5.3 MSI Capabilities
- ④ 5.4 MSI-X Capabilities
- ⑤ 5.5 Miscellaneous
- ⑥ 5.6 Link Status Register
- 6. PCIe: DMA 页:数据通道的细粒度控制
- ① 6.1 Number of DMA Read / Write Channel
- ② 6.2 Number of Request IDs
- ③ 6.3 Descriptor Bypass for Read / Write
- ④ 6.4 AXI ID Width
- ⑤ 6.5 DMA Status Ports
- 7. 快速配置单
1. 把 IP 加进来
![]()
在PROJECT MANAGER → IP Catalog里搜XDMA,选中的就是DMA/Bridge Subsystem for PCI Express,双击打开IP核开始配置。
2. Basic 页:链路与 AXI 侧的基本盘
![]()
① 2.1 Component Name
| 项 | 内容 |
|---|
| 作用 | 生成的 IP 实例名,决定例化时的模块名和生成目录名 |
| 取值 | 默认xdma_0,可改 |
| 场景 | 一个工程里放多个 XDMA(比如双卡、双 Root Port 场景)时必须改成不同名字,否则生成目录冲突 |
② 2.2 Functional Mode
| 项 | 内容 |
|---|
| 作用 | IP 的核心工作模式 |
| 取值 | DMA(默认)/AXI Bridge |
| 场景 | DMA 模式:主机主动搬数据,靠描述符驱动,适合大块连续传输(采集卡、NVMe、图像传输)。AXI Bridge 模式:把 PCIe 直接当 AXI 主设备用,主机读写就是 AXI 读写,无 DMA 引擎、无描述符,延迟更低,适合小包高频随机访问(比如寄存器密集访问、低延迟控制环路) |
区别:DMA 模式省 CPU 但起步慢,Bridge 模式起步快但每笔都要主机参与。
③ 2.3 Mode
| 项 | 内容 |
|---|
| 作用 | 两种模式切换 |
| 取值 | Basic(默认)/Advanced |
| 场景 | Basic 只显示高频项,适合快速搭通链路;Advanced 会展开性能调优相关参数(仲裁、outstanding、内部 FIFO 深度等)。第一次调试用 Basic,带宽上不去再切 Advanced 找参数 |
④ 2.4 Device / Port Type
| 项 | 内容 |
|---|
| 作用 | 声明本设备在 PCIe 拓扑中的角色 |
| 取值 | PCI Express Endpoint device(默认)/ Root Port of PCI Express Root Complex / Legacy Endpoint |
| 场景 | FPGA 作为插在主板上的加速卡,永远是 Endpoint。只有做背板交换、自己做 Root Complex 时才选第二项;Legacy Endpoint 是老系统兼容用的,基本不用 |
⑤ 2.5 PCIe Block Location
| 项 | 内容 |
|---|
| 作用 | 选择使用芯片内哪一个 PCIe 硬核 |
| 取值 | X0Y0 |
| 场景 | XC7K325T 只有一个 PCIe Block,所以这里固定 X0Y0。只有 K420T / VU9P 这类多 Block 器件才需要挑(挑错会导致引脚约束和 GT 位置不匹配) |
⑥ 2.6 PCIe Interface:Lane Width / Link Speed / Reference Clock
这三项必须和硬件原理图匹配,配错会导致链路训练失败、usr_lnk_up永远为低。
| 项 | 作用 | 取值 | 场景与坑 |
|---|
| Lane Width | 使用几条 lane | X1 / X2 / X4 / X8 | 必须 ≤ 实际布线条数。配大了训练不上;配小了浪费带宽(Gen2 x4 只有 x8 的一半)。XC7K325T 硬核支持 x8 |
| Maximum Link Speed | 链路速率(每 lane) | 2.5 GT/s(Gen1)/ 5.0 GT/s(Gen2) | 7 系列硬核只到 Gen2,没有 8.0 GT/s。取 5.0 GT/s 后若对端只支持 Gen1,会自动降速协商,不会挂 |
| Reference Clock Frequency | 差分参考时钟频率 | 100 / 125 / 250 MHz | 看原理图上 PCIe 时钟是 100M 还是 125M,配错一定训练失败。正点原子 K7 这类开发板通常是 100MHz |
带宽速算:
有效带宽 = 速率(GT/s) × lane 数 × 0.8(8b/10b 编码效率) ÷ 8 Gen1 x8 = 2.5 × 8 × 0.8 / 8 = 2.0 GB/s(理论) Gen2 x8 = 5.0 × 8 × 0.8 / 8 = 4.0 GB/s(理论,实测 3.2 GB/s 左右,TLP 头开销占掉一部分)
⑦ 2.7 AXI Interface:Address Width / Data Width
| 项 | 作用 | 取值 | 场景与坑 |
|---|
| AXI Address Width | AXI 侧地址位宽 | 32 ~ 64 | 需要访问 4GB 以上 DDR 时用 64;只挂小容量 BRAM/寄存器可降到 32 省逻辑。AXI-Stream 模式下不参与寻址,保持默认即可 |
| AXI Data Width | AXI 侧数据位宽 | MM 模式:64/128/256/512 bit Stream 模式:8/16/32/64 bit | 决定 AXI 侧能不能跑满链路带宽,见下表 |
AXI 侧带宽 vs 链路带宽(按 250MHz 时钟算):
| AXI 位宽 | 时钟 | AXI 侧吞吐 | 能否满足 Gen2 x8(4.0GB/s 理论) |
|---|
| 64 bit | 250 MHz | 2.0 GB/s | 否,只有一半 |
| 128 bit | 250 MHz | 4.0 GB/s | 刚好匹配 |
| 256 bit | 250 MHz | 8.0 GB/s | 有余量 |
| 512 bit | 250 MHz | 16.0 GB/s | 过剩,用于 Gen3 x8 场景 |
重要限制:AXI-Stream 模式的数据位宽上限是64 bit,也就是 250MHz 下最多 2 GB/s。想跑满 Gen2 x8 的 3.2GB/s,只能走 AXI Memory Mapped 模式(128/256 bit)。
⑧ 2.8 AXI Clock Frequency
| 项 | 内容 |
|---|
| 作用 | AXI 侧用户逻辑时钟频率,由 IP 内部从 PCIe 时钟分频/倍频产生并输出到axi_aclk |
| 取值 | 62.5 / 125 / 250 MHz |
| 场景 | 低带宽采集(ADC 几十 MB/s)用 62.5MHz 就够,逻辑时序更好收敛;要做高速采集/大块搬运就上 250MHz。 |
⑨ 2.9 DMA Interface option
| 项 | 内容 |
|---|
| 作用 | 选择 DMA 数据通路是带地址的还是纯流的 |
| 取值 | AXI Memory Mapped/AXI Stream |
| 场景 | 见下方对比表 |
| AXI Memory Mapped | AXI Stream |
|---|
| 数据形态 | 带地址的读写事务,可任意寻址 | 无地址,纯数据流 + TLAST 分包 |
| 典型对端 | DDR3/DDR4 控制器(MIG)、BRAM、AXI 互联 | FIFO、ADC 前端、视频流处理链 |
| 主机侧用法 | 描述符指定"从卡上某地址搬 N 字节到主机某地址" | 描述符只给出长度,数据从流里连续吐出 |
| 适合 | 需要卡上缓存的场景(乒乓缓冲、图像帧) | 连续采集、实时转发(ADC → 主机) |
| 带宽上限 | 512 bit 位宽,可跑满链路 | 64 bit 位宽,上限 2GB/s |
选型经验:数据要不要在卡上落地?要落地(先写 DDR 再搬)用 MM;不落地(直通主机)用 Stream。Stream 省掉 DDR 这一环,延迟更低,但主机侧必须持续供/收数据,否则反压。
⑩ 2.10 AXI-Lite Slave Interface
| 项 | 内容 |
|---|
| 作用 | 勾选后额外暴露一个M_AXI_LITE主接口,主机通过 BAR 直接读写你的用户寄存器(控制字、状态字、版本号) |
| 取值 | 勾 / 不勾 |
| 场景 | 几乎必勾。DMA 只负责搬数据,“启动采集”“设置分频”"读 FIFO 计数"这些控制动作都要靠 AXI-Lite。 |
配套地,BARs 页要给这个接口分配一个 BAR(见第 4 节)。
⑪ 2.11 四个调试/DRP 选项
| 选项 | 作用 | 什么时候勾 |
|---|
| Enable PIPE Simulation | 仿真时走 PIPE 接口,绕过 GT 收发器模型,不用等 GT 仿真库、仿真速度大幅提升 | 做 IP 级仿真时勾;上板不需要 |
| Enable GT Channel DRP Ports | 暴露 GT 的动态重配置端口(DRP),运行时可改线速率、均衡参数 | 要做速率自适应、链路在线调试时勾 |
| Enable PCIe DRP Ports | 暴露 PCIe 核配置寄存器的 DRP 访问口 | 需要运行时读 PCIe 核内部状态(眼图、误码)时勾 |
| Additional Transceiver Control and Status Ports | 额外引出 GT 的极性反转、TX/RX 复位、QPLL 锁定等信号 | 硬件 layout 有 lane 反序、或需要单独复位控制时勾 |
默认全不勾:这四个都是给调试和特殊硬件留的口子,日常工程勾了只会多出一堆没接的端口。
3. PCIe ID 页:主机怎么认出你
![]()
这一页的值会被写进 PCIe 配置空间,lspci(Linux)或设备管理器(Windows)读到的就是这些。
① 3.1 ID Initial Values
| 项 | 默认值 | 作用 | 场景与坑 |
|---|
| Vendor ID | 10EE | 厂商标识,10EE是 Xilinx 的注册 ID | 自研产品对外销售必须换成自己申请的 VID(要向 PCI-SIG 购买)。自己玩/内部用可以不改,但会和系统里其他 Xilinx 卡撞 |
| Device ID | 7011 | 设备型号,由 IP 根据配置自动给出默认值(AXI-MM / AXI-ST / 是否带 AXI-Lite 对应不同编号,如 7011、7012、7028 等) | 不要凭记忆手改。驱动(xdma.ko / XDMA.sys)是靠 VID+PID 匹配的,改错了驱动直接 bind 不上。想要自己的 ID 就成对改 VID+PID 并同步改驱动 inf |
| Revision ID | 00 | 硬件版本号 | 同一块板子改版时递增,驱动可以据此做兼容分支 |
| Subsystem Vendor ID | 10EE | 子系统(整卡)厂商 ID | 用第三方 FPGA 模块做卡时填模块厂 |
| Subsystem ID | 0007 | 子系统型号 | 同一 VID 下区分多款板卡的关键字段 |
注意:自己只有一张卡的同学,不用碰这些参数。如果你在同一台机器上插了两张 XDMA 卡且 ID 完全相同,驱动会认不出谁是谁。用 Subsystem ID 区分,或者干脆给每款卡分配不同的 Device ID。
② 3.2 Enable PCIe-Lite Interface
| 项 | 内容 |
|---|
| 作用 | 使能 PCIe-Lite 轻量级访问接口,用于点到点的配置/访问通路 |
| 取值 | 不勾(默认) |
| 场景 | DMA 模式下用不到,保持不勾。只有在 AXI Bridge 类点对点访问场景才需要 |
③ 3.3 Class Code(Base Class / Sub Class / Interface / Class Code)
| 项 | 默认值 | 含义 |
|---|
| Use Class Code Lookup Assistant | 不勾 | 勾上后用下拉菜单选类别,自动算出 Class Code |
| Base Class Menu | Simple communication controllers | 基类 = 07(简单通信控制器) |
| Base Class Value | 07 | 同上,十六进制 |
| Sub Class Interface Menu | 16450 compatible serial controller | 子类 = 00(16450 兼容串口) |
| Sub Class Value | 00 | — |
| Interface Value | 01 | — |
| Class Code | 070001 | 最终写进配置空间的三字节值 |
作用:告诉操作系统"我属于哪类设备",从而决定它自动加载什么驱动。
场景与坑(这条很容易被忽略):
- 070001 在系统未能通过 VID/DID 精确匹配到官方驱动时,可能会导致 Linux 自动加载 8250 串口驱动、Windows 弹出"未知串口设备",因为系统会将其误认为是一个 16450 UART 设备。
- 自研采集卡的正确做法:改成
FF0000(Vendor Specific / 未定义类),让系统不去乱绑驱动,彻底规避潜在的系统级冲突,由你自己的驱动接管。 - 具体操作:直接手动填 Class Code =
FF0000。若下拉框里没有合适项,取消勾选 Lookup Assistant 后直接编辑 Class Code 输入框。
4. PCIe: BARs 页:主机看到的内存窗口
![]()
BAR(Base Address Register)是 PCIe 设备向主机"申请的一块地址窗口"。主机在枚举阶段给这块窗口分配一段物理地址,之后 CPU 访问这段地址就等于访问 FPGA 内部的 AXI 空间。
这一页有三个块,注意它们不是同时可用的:
| 块 | 含义 |
|---|
| PCI to AXI Lite Master Interface | 给 AXI-Lite 从接口分配 BAR,主机通过它读写用户寄存器 |
| PCI to DMA Interface | AXI-MM 模式下 DMA 引擎的地址窗口。如果是 AXI-Stream 模式,则不可用 |
| PCI to DMA Bypass Interface | 绕过 DMA 引擎、主机直接读写 AXI 空间的"后门" |
① 4.1 PCI to AXI Lite Master Interface
灰掉的部分说明不支持,不用管它。
| 项 | 内容 | 场景与坑 |
|---|
| 勾选框 | 是否为 AXI-Lite 接口分配 BAR | 勾了后,主机就能通过XDMA的AXI-Lite接口下发配置参数 |
| 64bit Enable | 使用 64 位地址 BAR(占两个 BAR 槽) | 灰掉通常是因为尺寸或地址位宽不满足。一般 32 位足够 |
| Prefetchable | 标记该区域"可预取"——读操作无副作用,CPU/桥可以做预读和缓存 | 访问寄存器时不要勾。你若有"读清"标志位、FIFO 读指针这类读操作会改变状态的寄存器,勾了预取会被预读打乱状态。纯 ROM 表可以勾 |
| Size + Scale | BAR 窗口大小,1+Megabytes= 1 MB | XDMA 的 AXI-Lite BAR 最小 1MB(0x100000),因为内部要按 1MB 对齐做地址译码。想省地址空间也降不下去 |
| Value | FFF00000,只读 | 该值是 BAR 的"可实现位"显示:1MB = 2^20,低 20 位固定为 0,高位显示 F 表示由主机分配。不是你手动填的地址 |
| PCIe to AXI Translation | 0x00000000 | 地址翻译偏移:主机访问 BAR 内偏移 X,实际落到 AXI 地址X + Translation。填0x00000000就是从 AXI 地址 0 开始映射;若用户寄存器挂在 AXI 地址0x44A0_0000,这里就填0x44A00000 |
② 4.2 PCI to DMA Interface(灰)
| 项 | 内容 |
|---|
| 作用 | AXI Memory Mapped 模式下,DMA 引擎通过这个 BAR 接收主机下发的描述符,或让主机直接访问卡上内存 |
| 场景 | 只有选 AXI-MM 模式时才会亮起。此时这个 BAR 通常开 64bit + Prefetchable,尺寸按卡上可访问地址空间定(常见 1MB ~ 256MB) |
③ 4.3 PCI to DMA Bypass Interface
| 项 | 内容 |
|---|
| 作用 | 提供一条绕过 DMA 引擎的通路:主机对这段 BAR 的读写,直接变成 AXI 读写打到用户逻辑,不产生描述符、不走 DMA 通道 |
| 取值 | 未勾;勾选后 Size1+Megabytes,Translation 全 0 |
| 场景 | ① 小批量随机访问(几十字节的控制数据结构),走 DMA 反而开销更大;②调试神器:DMA 链路没跑通时,先用 bypass 直接读写几个关键寄存器/BRAM,能快速确认 AXI 侧是否正常;③ 与 DMA 并行做低延迟通道 |
注意:bypass 通路是字节级、无 burst 优化的,带宽很低(几十 MB/s 量级),只适合小数据。
5. PCIe: MISC 页:中断与其他杂项
![]()
① 5.1 User Interrupts
| 项 | 内容 |
|---|
| 作用 | 用户逻辑向主机发中断的线数,决定usr_irq_req[N-1:0]的位宽 |
| 取值 | 1 ~ 16,截图取 1 |
| 场景 | 单通道采集:1 条足够(一次传输完成发一次)。多通道并发(4 路 ADC 各自独立上报)时按通道数配。中断线不是越多越好:每条都要在驱动里注册 handler,且受 MSI 向量数限制 |
② 5.2 Legacy Interrupt Settings
| 项 | 内容 |
|---|
| 作用 | 传统 INTx 中断(PCI 时代遗留的物理中断线)选择哪一根 |
| 取值 | INTA / INTB / INTC / INTD(截图 INTA) |
| 场景 | 只在极老的系统或 MSI 不可用时回退用。现代平台一律走 MSI,此项保持 INTA 即可,实际不会用到 |
③ 5.3 MSI Capabilities
| 项 | 内容 |
|---|
| Enable MSI Capability Structure | 使能 MSI 中断能力结构。MSI 是"写一个特定地址+数据"来触发中断,无需物理中断线,延迟比 INTx 低一个量级。必须勾 |
| Multiple Message Capability | MSI 向量数:1 / 2 / 4 / 8 / 16 / 32。截图 1 vector |
向量数怎么选:
| 向量数 | 适用 |
|---|
| 1 vector | 单通道、中断频率不高的场景(多数采集卡) |
| 4~8 vector | 多通道各自独立中断,避免一个 handler 里判断来源 |
| 16~32 vector | 高并发多队列,每队列一个向量,配合多核并行处理 |
坑:向量数要 ≤Number of User Interrupt Request,也要 ≤ 主机 MSI 能力上限,否则 IP 生成时给警告、驱动里注册失败。
④ 5.4 MSI-X Capabilities
| 项 | 内容 |
|---|
| Enable MSI-X Capability Structure | 使能 MSI-X。相比 MSI,MSI-X 每个向量有独立的地址和数据,向量数可到 2048,且不要求连续 |
| 取值 | 默认未勾 |
| 场景 | 大规模多队列(NVMe 类、上百通道)才需要。代价是驱动要自己维护中断表(填 MSI-X Table),复杂度明显上升。普通采集卡保持不勾 |
⑤ 5.5 Miscellaneous
| 选项 | 作用 | 场景 |
|---|
| Extended Tag Field | 使能 8 位 TAG(普通是 5 位),把未完成请求数从 32 提升到 256 | 带宽敏感场景建议勾:更大的 outstanding 能力意味着链路不容易"等回复",吞吐可提升 10~20%。需要 Root Complex 也支持 8-bit Tag |
| Add the PCIe XVC-VSEC to the Example Design | 往示例工程里加 XVC(Virtual Cable)调试核,可通过网络远程访问 ILA | 灰掉表示当前未使能 debug bridge。只在远程调试时用,正常工程不要加 |
| Configuration Management Interface | 暴露cfg_mgmt接口,用户逻辑可以读写 PCIe 配置空间 | 需要运行时动态改配置(如动态改 BAR、改 power management)才勾。勾了会多出一把端口,普通工程不用 |
⑥ 5.6 Link Status Register
| 项 | 内容 |
|---|
| Enable Slot Clock Configuration | 声明"我的参考时钟来自插槽(与主机同步)",而不是板上独立 PLL 产生的异步时钟 |
| 取值 | 勾选(默认) |
| 场景 | 用主板/背板提供的 PCIe 参考时钟时勾;若板上有独立晶振且与主机不同源,也不能简单取消勾选——异步时钟需要在硬件上做 SSC(扩频)兼容设计。多数开发板(含正点原子 K7)参考时钟来自金手指,保持勾选 |
6. PCIe: DMA 页:数据通道的细粒度控制
![]()
① 6.1 Number of DMA Read / Write Channel
| 项 | 默认值 | 作用 |
|---|
| Number of DMA Read Channel (H2C) | 1 | 主机 → 卡 方向的通道数(Host to Card),1~4 (支持条数取决于FPGA芯片型号) |
| Number of DMA Write Channel (C2H) | 1 | 卡 → 主机 方向的通道数(Card to Host),1~4 (支持条数取决于FPGA芯片型号) |
场景:
- 需要在BASIC页面选择,AXI STREAM模式选择通道数才会有效。
- 单路 ADC 采集只需1 个 C2H(数据上传)+ 1 个 H2C(下发参数/波形)。
- 多路独立数据源、或多线程同时读写时开多通道:每个通道有独立的描述符环、独立中断,互不阻塞。多通道是拿资源换并发,每加一个通道多一组 AXI 主端口和内部 FIFO。
命名容易搞混:H2C = Read = 主机读卡,C2H = Write = 主机写卡。这里的 Read/Write 是站在主机角度说的,站在 FPGA 角度正好反过来。第一次配的时候盯住 H2C/C2H 括号里的字,别被 Read/Write 带跑。
② 6.2 Number of Request IDs
| 项 | 截图值 | 作用 |
|---|
| Number of Request IDs for Read channel | 32 | 读通道可同时发出的未完成(outstanding)请求数,取值 2/4/8/16/32/64 |
| Number of Request IDs for Write channel | 16 | 写通道同上,取值 2/4/8/16/32 |
作用:PCIe 是流水线协议,发出请求后要等 Completion 回来。outstanding 越多,链路"在途"的数据越多,越不容易因为往返延迟而空闲。
场景与取舍:
| ID 数 | 效果 |
|---|
| 2~4 | 逻辑省资源,但长延迟链路(经 PCIe Switch、背板)容易跑不满带宽 |
| 16~32 | 均衡点,绝大多数场景够用(截图默认值就是这个) |
| 64 | 读通道最大,适合大块连续读、链路深的情况 |
判定方法:带宽上不去时,先看是不是 outstanding 不够 —— 现象是链路利用率忽高忽低、呈锯齿状,而不是稳定在某个值。
③ 6.3 Descriptor Bypass for Read / Write
| 项 | 截图值 | 作用 |
|---|
| Descriptor Bypass for Read (H2C) | 0000 | 描述符旁路:关闭时走标准描述符链表;非零值表示用哪个 BAR 作为旁路窗口 |
| Descriptor Bypass for Write (C2H) | 0000 | 同上 |
场景:
0000(走描述符):主机先在内存里建描述符链表(源地址、目的地址、长度、控制位),DMA 引擎自己去读描述符再搬数据。适合大块、批量、链式传输,CPU 介入最少。- 非零(开启旁路):主机直接往旁路 BAR 里写"地址+长度",DMA 立即启动一次传输,省掉读描述符的那次往返。适合小包高频(每包几百字节、要求低延迟),典型是网络包转发。
- 一般场景保持
0000即可。
④ 6.4 AXI ID Width
| 项 | 内容 |
|---|
| 作用 | AXI 事务 ID 的位宽,用于标记不同 outstanding 事务,AXI 互联靠它做乱序返回时的归位 |
| 取值 | 默认4 |
| 场景 | 直接连用户逻辑(点对点、无 AXI 互联)时 4 够用;若经 AXI SmartConnect 连到多个从设备,需要按互联要求的位宽配(互联通常需要更宽的 ID 来区分主端口) |
⑤ 6.5 DMA Status Ports
| 项 | 内容 |
|---|
| 作用 | 额外引出 DMA 运行状态输出(各通道忙闲、描述符计数等) |
| 取值 | 未勾 |
| 场景 | 调试期想看 DMA 引擎内部状态、或要做硬件级流控时勾。上板稳定后可以关掉省引脚(这些是内部信号,不占物理引脚,只占布线) |
7. 快速配置单
以下针对「XC7K325T + Gen2 x8 + DDR +ADC」这一类典型工程(AXI Memory Mapped数据通路 + AXI-Lite 寄存器控制):
| 页面 | 选项 | 取值 | 理由 |
|---|
| Basic | Functional Mode | DMA | 靠描述符批量搬数据,CPU 占用低 |
| Basic | Mode | Basic(调优时切 Advanced) | 先跑通再优化 |
| Basic | Device / Port Type | PCI Express Endpoint device | 插卡形态 |
| Basic | PCIe Block Location | X0Y0 | K325T 唯一 Block |
| Basic | Lane Width | X8 | 与硬件布线一致 |
| Basic | Maximum Link Speed | 5.0 GT/s | Gen2,板卡支持 |
| Basic | Reference Clock Frequency | 100 MHz | 按板上晶振,务必核对原理图 |
| Basic | AXI Address Width | 64 | 兼容大地址 |
| Basic | AXI Data Width | 128 bit | Stream 模式上限 |
| Basic | AXI Clock Frequency | 250 MHz(时序吃紧可降 125) | 64bit@250M 上限 2GB/s |
| Basic | DMA Interface option | AXI Memory Mapped | DDR缓存,AXI4数据传输 |
| Basic | AXI-Lite Slave Interface | 不勾选 | 不需要读取XDMA内部参数 |
| Basic | 四个 DRP/PIPE 选项 | 全不勾 | 调试期再按需开 |
| PCIe ID | Vendor ID | 10EE(产品化换成自有 VID) | 驱动匹配 |
| PCIe ID | Device ID | 保持 IP 自动值 | 手改会导致驱动 bind 失败 |
| PCIe ID | Class Code | 保持默认 070001 | 避免系统当串口 |
| BARs | PCI to AXI Lite | 勾选,1MB,Translation = 用户寄存器基地址 | 寄存器窗口 |
| BARs | Prefetchable | 不勾 | 寄存器有读副作用 |
| BARs | PCI to DMA Bypass | 不勾(调试期可临时勾) | DMA 调不通时当后门用 |
| MISC | User Interrupts | 1 | 单通道 |
| MISC | Enable MSI | 勾选,1 vector | 中断必须走 MSI |
| MISC | Enable MSI-X | 不勾 | 复杂度不值当 |
| MISC | Extended Tag Field | 勾选 | 提升 outstanding,增加传输带宽 |
| MISC | Enable Slot Clock Configuration | 勾选 | 时钟来自金手指 |
| DMA | Read Channel (H2C) | 1 | 下发参数够用 |
| DMA | Write Channel (C2H) | 1 | 单路上传 |
| DMA | Request IDs(Read/Write) | 32 / 16 | 默认均衡值 |
| DMA | Descriptor Bypass | 0000 | 走标准描述符 |
| DMA | AXI ID Width | 4 | 点对点连接 |