资讯详情

PCIe学习之《XDMA IP核配置选项理解》(非常详细)

📅 2026/11/4 12:04:47 | 华诺云谱 👁 阅读
PCIe学习之《XDMA IP核配置选项理解》(非常详细)
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.11. 把 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 InterfaceLane Width / Link Speed / Reference Clock⑦ 2.7 AXI InterfaceAddress 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 CodeBase Class / Sub Class / Interface / Class Code4. PCIe: BARs 页主机看到的内存窗口① 4.1 PCI to AXI Lite Master Interface② 4.2 PCI to DMA Interface灰③ 4.3 PCI to DMA Bypass Interface5. 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 Register6. 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 Ports7. 快速配置单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 InterfaceLane Width / Link Speed / Reference Clock这三项必须和硬件原理图匹配配错会导致链路训练失败、usr_lnk_up永远为低。项作用取值场景与坑Lane Width使用几条 laneX1 / X2 / X4 / X8必须 ≤ 实际布线条数。配大了训练不上配小了浪费带宽Gen2 x4 只有 x8 的一半。XC7K325T 硬核支持 x8Maximum Link Speed链路速率每 lane2.5 GT/sGen1/ 5.0 GT/sGen27 系列硬核只到 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 InterfaceAddress Width / Data Width项作用取值场景与坑AXI Address WidthAXI 侧地址位宽32 ~ 64需要访问 4GB 以上 DDR 时用 64只挂小容量 BRAM/寄存器可降到 32 省逻辑。AXI-Stream 模式下不参与寻址保持默认即可AXI Data WidthAXI 侧数据位宽MM 模式64/128/256/512 bitStream 模式8/16/32/64 bit决定 AXI 侧能不能跑满链路带宽见下表AXI 侧带宽 vs 链路带宽按 250MHz 时钟算AXI 位宽时钟AXI 侧吞吐能否满足 Gen2 x84.0GB/s 理论64 bit250 MHz2.0 GB/s否只有一半128 bit250 MHz4.0 GB/s刚好匹配256 bit250 MHz8.0 GB/s有余量512 bit250 MHz16.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 MappedAXI 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 配置空间lspciLinux或设备管理器Windows读到的就是这些。① 3.1 ID Initial Values项默认值作用场景与坑Vendor ID10EE厂商标识10EE是 Xilinx 的注册 ID自研产品对外销售必须换成自己申请的 VID要向 PCI-SIG 购买。自己玩/内部用可以不改但会和系统里其他 Xilinx 卡撞Device ID7011设备型号由 IP 根据配置自动给出默认值AXI-MM / AXI-ST / 是否带 AXI-Lite 对应不同编号如 7011、7012、7028 等不要凭记忆手改。驱动xdma.ko / XDMA.sys是靠 VIDPID 匹配的改错了驱动直接 bind 不上。想要自己的 ID 就成对改 VIDPID 并同步改驱动 infRevision ID00硬件版本号同一块板子改版时递增驱动可以据此做兼容分支Subsystem Vendor ID10EE子系统整卡厂商 ID用第三方 FPGA 模块做卡时填模块厂Subsystem ID0007子系统型号同一 VID 下区分多款板卡的关键字段注意自己只有一张卡的同学不用碰这些参数。如果你在同一台机器上插了两张 XDMA 卡且 ID 完全相同驱动会认不出谁是谁。用 Subsystem ID 区分或者干脆给每款卡分配不同的 Device ID。② 3.2 Enable PCIe-Lite Interface项内容作用使能 PCIe-Lite 轻量级访问接口用于点到点的配置/访问通路取值不勾默认场景DMA 模式下用不到保持不勾。只有在 AXI Bridge 类点对点访问场景才需要③ 3.3 Class CodeBase Class / Sub Class / Interface / Class Code项默认值含义Use Class Code Lookup Assistant不勾勾上后用下拉菜单选类别自动算出 Class CodeBase Class MenuSimple communication controllers基类 07简单通信控制器Base Class Value07同上十六进制Sub Class Interface Menu16450 compatible serial controller子类 0016450 兼容串口Sub Class Value00—Interface Value01—Class Code070001最终写进配置空间的三字节值作用告诉操作系统我属于哪类设备从而决定它自动加载什么驱动。场景与坑这条很容易被忽略070001 在系统未能通过 VID/DID 精确匹配到官方驱动时可能会导致 Linux 自动加载 8250 串口驱动、Windows 弹出未知串口设备因为系统会将其误认为是一个 16450 UART 设备。自研采集卡的正确做法改成FF0000Vendor Specific / 未定义类让系统不去乱绑驱动彻底规避潜在的系统级冲突由你自己的驱动接管。具体操作直接手动填 Class Code FF0000。若下拉框里没有合适项取消勾选 Lookup Assistant 后直接编辑 Class Code 输入框。4. PCIe: BARs 页主机看到的内存窗口BARBase Address Register是 PCIe 设备向主机申请的一块地址窗口。主机在枚举阶段给这块窗口分配一段物理地址之后 CPU 访问这段地址就等于访问 FPGA 内部的 AXI 空间。这一页有三个块注意它们不是同时可用的块含义PCI to AXI Lite Master Interface给 AXI-Lite 从接口分配 BAR主机通过它读写用户寄存器PCI to DMA InterfaceAXI-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 ScaleBAR 窗口大小1Megabytes 1 MBXDMA 的 AXI-Lite BAR 最小 1MB0x100000因为内部要按 1MB 对齐做地址译码。想省地址空间也降不下去ValueFFF00000只读该值是 BAR 的可实现位显示1MB 2^20低 20 位固定为 0高位显示 F 表示由主机分配。不是你手动填的地址PCIe to AXI Translation0x00000000地址翻译偏移主机访问 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 通道取值未勾勾选后 Size1MegabytesTranslation 全 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 CapabilityMSI 向量数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。相比 MSIMSI-X 每个向量有独立的地址和数据向量数可到 2048且不要求连续取值默认未勾场景大规模多队列NVMe 类、上百通道才需要。代价是驱动要自己维护中断表填 MSI-X Table复杂度明显上升。普通采集卡保持不勾⑤ 5.5 Miscellaneous选项作用场景Extended Tag Field使能 8 位 TAG普通是 5 位把未完成请求数从 32 提升到 256带宽敏感场景建议勾更大的 outstanding 能力意味着链路不容易等回复吞吐可提升 10~20%。需要 Root Complex 也支持 8-bit TagAdd the PCIe XVC-VSEC to the Example Design往示例工程里加 XVCVirtual 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 Card1~4 支持条数取决于FPGA芯片型号Number of DMA Write Channel (C2H)1卡 → 主机 方向的通道数Card to Host1~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 channel32读通道可同时发出的未完成outstanding请求数取值 2/4/8/16/32/64Number of Request IDs for Write channel16写通道同上取值 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 寄存器控制页面选项取值理由BasicFunctional ModeDMA靠描述符批量搬数据CPU 占用低BasicModeBasic调优时切 Advanced先跑通再优化BasicDevice / Port TypePCI Express Endpoint device插卡形态BasicPCIe Block LocationX0Y0K325T 唯一 BlockBasicLane WidthX8与硬件布线一致BasicMaximum Link Speed5.0 GT/sGen2板卡支持BasicReference Clock Frequency100 MHz按板上晶振务必核对原理图BasicAXI Address Width64兼容大地址BasicAXI Data Width128 bitStream 模式上限BasicAXI Clock Frequency250 MHz时序吃紧可降 12564bit250M 上限 2GB/sBasicDMA Interface optionAXI Memory MappedDDR缓存AXI4数据传输BasicAXI-Lite Slave Interface不勾选不需要读取XDMA内部参数Basic四个 DRP/PIPE 选项全不勾调试期再按需开PCIe IDVendor ID10EE产品化换成自有 VID驱动匹配PCIe IDDevice ID保持 IP 自动值手改会导致驱动 bind 失败PCIe IDClass Code保持默认 070001避免系统当串口BARsPCI to AXI Lite勾选1MBTranslation 用户寄存器基地址寄存器窗口BARsPrefetchable不勾寄存器有读副作用BARsPCI to DMA Bypass不勾调试期可临时勾DMA 调不通时当后门用MISCUser Interrupts1单通道MISCEnable MSI勾选1 vector中断必须走 MSIMISCEnable MSI-X不勾复杂度不值当MISCExtended Tag Field勾选提升 outstanding增加传输带宽MISCEnable Slot Clock Configuration勾选时钟来自金手指DMARead Channel (H2C)1下发参数够用DMAWrite Channel (C2H)1单路上传DMARequest IDsRead/Write32 / 16默认均衡值DMADescriptor Bypass0000走标准描述符DMAAXI ID Width4点对点连接
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑