IP核:XDMA学习

知识:

XDMA效率没有RIFFA高,最高似乎只支持1288位宽;

输出的用户时钟是250MHZ;

IP核配置:

参考:

https://docs.amd.com/r/zh-CN/pg195-pcie-dma/

具体:

 

重要:

PCIe:BARs标签页
该标签页主要用于配置 BAR,所谓的使能和配置各接口 interface,其实质是配置不同的 BAR,首先介绍下什么是 BAR。 BAR 是 Base Address Register 的缩写,译为基址寄存器。 通过将读取或写入请求映射到基址寄存器( BAR),可以从主机访问 XDMA 内部的配置和状态寄存器以及用户逻辑中的配置和状态寄存器。 XDMA 根据 BAR 命中,将请求路由到适当的位置。 比如,对于 PCIe to AXI-Lite Master (BAR0)地址映射, 命中 PCIe 到 AXI4-Lite Master 的事务将路由到 AXI4-Lite 内存映射用户接口。该接口支持 32 位地址空间和 32 位读取和写入请求。 PCIe to AXI-Lite Master (BAR0)地址映射可由用户逻辑定义。
BAR分2种大小:
32位BAR:地址空间最小可达128字节或者最大可达2千兆字节(GB)。用于内存或I/O。
64位BAR:地址空间最小可达128字节或者最大可达8艾字节(EB)。仅用于内存。
BAR 也可分为两种类型(Type)——I/O 和内存:
I/O: I/O BAR 只能采用 32 位;“可预取 (Prefetchable)”选项不适用于 I/O BAR。仅限针对传统 PCIExpress 端点才能启用 I/O BAR。
内存(Memory):内存BAR可采用64位或32位,并且可预取。
与 BAR 寄存器相关的选项含义:
Size(大小):可用大小范围取决于所选 PCIe 器件/端口类型和 BAR 类型;
Value(值):基于当前选择分配给 BAR 的值;
64bit Enable:是否使用 64 位BAR;
Prefetchable(可预取):识别内存空间预取功能。
每个 BAR 空间可以单独选择 64bit Enable 选项。每个 64 位 BAR 空间都可以选择是否预取。

AXI4‑Lite 是使用BRAM实现的用户逻辑寄存器;

BAR 的选择是可配置的。默认情况下,DMA 位于 BAR 0(64 位),AXI4‑Lite 主接口则位于 BAR 2(64 位)。这些选择可根据用户需求而变;

PCIe to AXI Lite Master Interface:

选择是否启用 AXI-Lite Master Interface 接口;该接口相当于显卡的用户接口, 主机侧可以通过该接口控制显卡的风扇转速、 LED 开关和显示效果等功能,所以当我们需要使用PCIe 接口控制 FPGA 侧的用户逻辑如控制 led 灯等则需要启用该接口。

PC的内存域地址与PCIe域地址的映射关系:PCIe to AXI Translation这个地址要与Address Editor中AXI_Lite设置的地址大小一致。
PCIe to AXI Translation:PCIe 到 AXI 的转换。主机一侧 BAR 地址为 0, 用户逻辑侧 AXI LIte的地址为 0x40000000,则主机访问AXI LIte用户逻辑时, XDMA 将根据该 设置将主机侧 BAR地址0转换到AXI LIte总线地址 0x40000000。对与该值的设置有两种方式,一种是手动指定,然后修改后面 AXI LIte总线的偏移地址,另一种是先确定 AXI LIte总线的偏移地址,然后根据偏移地址设置该值。例如修改地址映射AXI LIte总线的偏移地址为 0x40000000,所以设置此值为 0x40000000

此外, PCIe to AXI Translation 同样也是 AXI LIte总线的基地址,当 AXI LIte总线连接多个 AXI IP 核时,会有多个偏移地址,上位机访问其他 IP 核时的偏移地址是以 PCIe to AXI Translation 的值为基址 0 进行参考的,比如, AXI LIte总线连接的另一个 AXI IP 的偏移地址为 0x40010000,上位机访问该 IP 核的偏移地址就是该 IP 核的偏移地址 0x40010000 - PCIe to AXI Translation 的值 0x40000000=0x10000。 因此当 AXI LIte总线连接多个 AXI IP 核时,需确保 PCIe to AXI Translation 的值小于等于这些 AXI IP 核偏移地址的最小值

参考:

https://blog.csdn.net/Njustxiaobai/article/details/132874083

https://blog.csdn.net/kunkliu/article/details/108812595

PCIE to AXI Lite Master Interface:不勾选 , 我们不使用这个接口来访问用户逻辑,如果有人看过《PCIE_xdma教程_LINUX.pdf》这个pdf文档的话,
应该知道这个文档里讲的是使用这个接口来进行访问用户逻辑,而不使用DMA Bypass 接口,我刚开始也是参照这个文档使用这个接口,但是后面在使用的时候发现了问题,
这个接口的数据输出是经过XDMA内部过滤的,
也就是说这个接口出来的地址并不是所有的都能给用户使用,
有部分地址是用来对XDMA的寄存器配置使用的,
容易造成用户地址和配置地址混合,
如果用户地址只有几个十几个还好,要是有几十上百个的话,这个接口并不实用。

PCIe to DMA Interface: PCIe 至 DMA 接口,该接口默认一直开启,prefetchable和nonprefetchable(可预取和不可预取)。

PCIe to DMA Bypass Interface: 选择是否启用 PCIe 至 DMA 旁路接口。 DMA Bypass 就是普通的 PCIe传输, 不用 DMA 逻辑, 而是直接通过 PCIe 进行通信, 一般传输效率会高于 PCIe to AXI Lite。

Number of User Interrupt Request:用户中断请求数,最多可以选择 16 个用户中断请求;
Legacy Interrupt Settings:可以选择传统中断之一:INTA,INTB,INTC 或 INTD;
MSI Capabilities:默认情况下,启用 MSI 功能,并且启用 1 个向量,最多可以选择 32 个向量。通常,Linux 仅将 1 个向量用于 MSI,可以禁用此选项;
MSI-X Capabilities:使能 MSI-X 功能;
Finite Completion Credits(Advanced 配置模式下有):在支持有限完成信用的系统上,可以启用此选项以获得更好的性能;
Extended Tag Field:扩展标签字段,默认情况下,使用 6 位完成标签。对于 UltraScale 和 Virtex-7 器件,
扩展标签选项提供了 64 个标签。对于 UltraScale +器件,扩展标签选项提供 256 个标签。如果未选择扩展标签选项,则 DMA 将 32 个标签用于所有设备
Configuration Management Interface:是否使用 PCIe 配置管理接口;
关于 MSI-X 中断:用户可以尝试使用 MSI-X 中断,而不是 MSI 或传统中断。使用 MSI-X 中断,数据
速率要优于使用 MSI 或基于传统中断的设计。
中断向量:
MSI 中断和 MSI-X中断只能选择一个,否则会报错,如果选择了 MSI 中断,则可以选择 Legacy中断,如果选择了MSI-X中断,那么MSI必须取消选择,同时Legacy也必须选择None。此 IP 对于7系列设置有这么个问题,如果使用Ultrascale 系列,则可以全部选择。
对PCIE来说只有三种中断:MSI-X、MSI、Legacy。而user interruput是逻辑侧的控制中断口。
中断优先级为:MSI-X>MSI>Legacy
在申请中断时req需要一直保持为高,直到响应ack来了后,才能拉低,然后进行下一次申请;
由于逻辑侧的中断与主机侧的中断是通过优先级来对应的,因此同一时刻只有一种中断。

 

Number of Read Channels:主机到 PCIe 卡(H2C)的 DMA 读通道数,对于 7 系列 Gen2 IP,最多两个(通道数越多,同等情况下传输速率越快);
Number of Write Channels:PCIe 卡到主机(C2H)的 DMA 写通道数,对于 7 系列 Gen2 IP,最多两个(通道数越多,同等情况下传输速率越快);
Number of Request IDs for Read channel:读通道的请求 ID 数,即每个通道的最大未完成请求数,可用的选择是从 264;
Number of Request IDs for Write channel:写通道的请求 ID 数,即每个通道的最大未完成请求数,可用的选择是从 232;
Descriptor Bypass for Read (H2C):适用于所有选定的读通道。每个二进制数字对应一个通道。LSB 对应于通道 0。值为 1 的位表示相应的通道启用了描述符旁路;
Descriptor Bypass for Write (C2H):适用于所有选定的写通道。每个二进制数字对应一个通道。LSB 对应于通道 0。值为 1 的位表示相应的通道启用了描述符旁路;
AXI ID Width:默认值为 4 位宽,也可以选择 2 位宽;
DMA Status port:DMA 状态端口可用于所有通道。

DMA通道数用来区别不同的数据来源和类型,比如光纤数据,ADC数据等;

多通道时在AXIStream模式下影响很明显,在AXI Stream模式下选择多通道,可以连接不同的数据源。在AXI Memory Mapped模式下影响不大。

 

 

XDMA如何通过 PCIE 把数据放入电脑内存,简单来说,
我们先向操作系统申请一片电脑内存,得到这个内存的实地址
然后我们把这个实地址和内存大小配置到XDMA的寄存器中
然后写XDMA寄存器启动DMA
XDMA就开始准备数据,按章PCIe的数据包格式打包【数据+目的内存的地址】
CPU收到包后,会将数据包的数据放到对应地址上,然后发送一个ack包给XDMA
然后XDMA开始准备下一个数据包,直到传输结束
发送一个IRQ告诉CPU DMA传输完成。
PCIe四种复位方式:冷、暖、热、功能层

 

posted @ 2024-07-06 12:49  NoNounknow  阅读(806)  评论(0编辑  收藏  举报