XDMA IP
最近在项目里学习了与axi、xdma、pcie等有关的内容,现对xdma的使用注意事项进行一下总结和整理(仅供参考学习,有误的地方请指出)
1.XDMA
2.XDMA IP端口介绍
输入端口
端口名称 | 类型 | 说明 |
---|---|---|
sys_clk | 输入 | 来自 FPGA Bank 的差分时钟信号,经 BUFG 转换为单端后传入 XDMA 核心,用于同步 PCIe 数据传输。 |
sys_rst_n | 输入 | 主机提供的系统复位信号,包括冷复位、温复位和热复位,用于重置 PCIe 核心模块及相关逻辑。 |
pcie_cfg_mgmt | 输入 | Pcie 配置管理接口,用于访问配置空间地址,执行读写操作,以及管理 GT 收发器等物理层功能。 |
usr_irq_req | 输入 | 用户中断请求信号,用于通过 PCIe 发送中断给主机,提示处理特定事件。不会中断主机 CPU。 |
输出端口
端口名称 | 类型 | 说明 |
---|---|---|
M_AXI | 输出 | AXI 主接口,支持高速数据传输,通常用于 XDMA 实现主机内存或外设的数据读写操作。 |
M_AXI_LITE | 输出 | AXI Lite 接口,适合低带宽的数据传输场景,如配置寄存器的访问和控制信号的传输。 |
pcie_mgt | 输出 | 管理 PCIe 的物理层信号,如 MDIO 接口和 GT 收发器的状态管理。 |
usr_lnk_up | 输出 | PCIe 链路状态指示信号,高电平表示链路已建立且准备好传输数据。 |
axi_aclk | 输出 | AXI 时钟信号,用于同步 AXI 总线的读、写、控制通道上的数据传输和逻辑。 |
axi_aresetn | 输出 | AXI 复位信号,与 axi_aclk 同步,低电平有效,用于重置 AXI 总线的逻辑模块。 |
usr_irq_ack | 输出 | 用户中断应答信号,表示中断请求已处理并发送给主机。 |
msi_enable | 输出 | MSI(Message Signaled Interrupts)使能信号,表示是否启用了 MSI 中断机制。 |
msi_vector_width | 输出 | MSI 向量宽度,表示支持的中断数量,用于支持多个并发中断事件的消息传递。 |
3.XDMA配置
3.1接口和速率配置
Mode:配置模式,Basic 模式:适合简单、快速的 PCIe 配置,不需要对复杂参数进行调节。 Advanced 模式:适合高级用户,可配置更多选项以优化性能。
Lane Width:MZ7100 支持X1到X8
Max Link Speed:选择2.5GT/s 即PCIE1.0,选择5.0GT/s 即PCIE2.0。
Reference Clock :100MHZ,参考时钟 100M。
DMA Interface Option:接口选择 AXI4 接口。
AXI Data Width:64bit,即 AXI4 数据总线宽度为64bit。
AXI Clock :62.5M,即AXI4 接口时钟为 62.5MHZ。
3.2PCIE ID配置
这里 IP会自动进行选择VID、DID 等,也可以手动进行修改,但是ID不匹配的话电脑会识别不到。芯片 ID 参数中链路速度(倒数第二位),要看电脑主板pcie的配置再与之设置。
下面是芯片 ID 参数的对应表格,根据器件系列、模式、链路宽度和链路速度进行分类:
参数类型 | 参数值 | 含义 |
---|---|---|
器件系列(第一位) | 9 | UltraScale+ 系列 |
8 | UltraScale 系列 | |
7 | 7 系列器件 | |
模式 | 0 | EndPoint 模式(EP) |
1 | RootPort 模式(RP) | |
链路宽度(最后一位) | 1 | x1(1 Lane) |
2 | x2(2 Lanes) | |
4 | x4(4 Lanes) | |
8 | x8(8 Lanes) | |
F | x16(16 Lanes) | |
链路速度(倒数第二位) | 1 | PCIe Gen1(2.5 Gb/s 每 Lane) |
2 | PCIe Gen2(5 Gb/s 每 Lane) | |
3 | PCIe Gen3(8 Gb/s 每 Lane) | |
4 | PCIe Gen4(16 Gb/s 每 Lane) |
芯片ID示例:
7021:表示 7 系列器件,EP模式,x1链路宽度,PCIe Gen2 速率。
7011:表示 7 系列器件,EP模式,x1链路宽度,PCIe Gen1 速率。
如何区分EP和RP
1.硬件角色:
-
EP 模式:设备通常连接到主机,PCIe IP 核被配置为终端节点(EndPoint)。
-
RP 模式:设备作为主机控制器,PCIe IP 核被配置为根端口(RootPort)。
2.PCIe IP 核配置:
-
在 FPGA 中使用 PCIe IP 核时,可以在工具(如 Vivado)中选择模式:
EP 模式:主要关注 AXI Slave 接口(被动响应主机访问)。
RP 模式:需要配置 PCIe 总线,初始化设备,通常包含 AXI Master 接口。
3.应用场景识别:
-
如果设计是为主机系统(如 PC)开发外设卡,通常选择 EP 模式。
-
如果 FPGA 需要作为自定义主机或与其他设备交互,通常选择 RP 模式。
3.3BAR配置
PCIE BAR这里面的配置比较重要,首先使能 PCIE to AXI Lite Master Interface,这样可以在主机一侧通过PCIE 来访问用户逻辑侧寄存器或者其他 AXI4-Lite 总线设备。
Size: 映射空间大小,可以选择几K到几G的大小,根据自己实际需要来自定义这个大小选择。这个大小就是BAR的空间大小。
PCIE to AXI Translation:这个设置比较重要,通常情况下,主机侧PCIE BAR地址与用户逻辑侧地址是不一样的,这个设置就是进行BAR地址到AXI 地址的转换,比如主机一侧BAR地址为0,IP 里面转换设置为 0x40000000,主机访问 BAR 地址0转换到AXI Lite总线地址就是0x40000000。
PCIE to DMA Interface:我没有选择64bit 使能,
Prefetchable预读取功能:根据需要可选择预读取功能(读取更快),得看你的内存数据是否支持预读取,如果内存数据是不可预取的,一旦数据被加载到桥接器的缓冲区,数据将从内存中丢失,如果主机不能从网桥收集数据,那么数据就永远丢失了,如果内存是可预取的,就没有数据丢失的风险。
DMA Bypass:AXI4 Bypass 接口,可选,用来实现PCIE 直通用户逻辑访问,可用于低延迟数据传输。暂时没有用到,等后面再去研究研究。
3.4中断配置
User Interrupts:用户中断,XDMA提供16 条中断线使用,这里面可以配置使用几条中断线。
Legacy Interrupt:XDMA 支持 Legacy 中断
Msi Capabilities:选择 MSI 中断
中断优先级为:MSI-X>MSI>Legacy
注意:MSI 中断和 MSI-X 中断只能选择一个,否则会报错,如果选择了MSI中断,则可以选择 Legacy中断;如果选择了MSI-X中断,那么MSI必须取消选择,同时Legacy也必须选择None。这个IP对于7 系列设置有这么个问题,如果使用Ultrascale 系列,则可以全部选择。
3.5选项卡配置
DMA读写通道:Number of DMA Read Channel(H2C)和Number of DMA Write Channel(C2H)通道数,对于PCIE2.0 来说最大只能选择 2,也就是 XDMA 可以提供最多两个独立的写通道和两个独立的读通道,独立的通道对于实际应用中有很大的作用,在带宽允许的前提前,一个PCIE 可以实现多种不同的传输功能,并且互不影响。这里我们选择1。
Number of Request IDs for Read (Write)channel:这个是每个通道设置允许最大outstanding数量,按照默认即可。
4.直接内存访问读取命令
下面两个命令与使用 xdma_rw.exe工具相关,用于通过 Xilinx 的DMA驱动与PCIe设备进行交互,xdma_rw.exe工具允许在主机和 FPGA 之间进行直接内存访问(DMA)。
xdma_rw.exe c2h_0 read 0x200000 -l 4
xdma_rw.exe user read 0x200000 -l 4
AXI使用第1条读取指令:读取0x0020_0000地址的值
AXI_Lite使用第2条读取指令:读取0x0020_0000地址的值