手把手教你学会 Xilinx PCIE/XDMA 读写DDR系列(二) ——XDMA详细配置步骤

因最近想通过PCIE把数据从FPGA传到PC,借此机会和大家一起学习XDMA读写DDR

制作不易,记得三连哦,给我动力,持续更新!!!

完整工程文件下载:XDMA读写DDR工程   提取码:4sxh


上一期讲到如何配置DDR的IP,相信很多小伙伴已经成功的把DDR配置成功,那么下一步就要对PCIE的IP进行配置

PCIE的IP在vivado中一般是通过XDMA实现的,XDMA有太多优点了!

Xllinx提供DMASubsystem for PCIExpressIP是一个高性能,可配置的适用于PCle2.0、PCle3.0的SG模式的DMA,提供用户可选择的AX 4接口或者AX-Stream接。XDMA是SGDMA,并主BIOCK DMA,SG模式下,主机会把要传输的数据组成群表的形式,然后将销表首地址通过BAR传送给XDMA,XDMA会根据链表结构首地址依次完成链表所指定的传输任务.

Xilinx XDMA支持的系列包括7系列,UltraScale系列,UltraScale+系列各种系列,界面配置基本相同。这里以KU040的一个板子做例程,其他系列可以参考。Vivado使用2018.3,Vivado的版本,做XDMA,建议尽量使用新一些的版本。详细的说明,参考Xilinx的文档PG195,下面主要摘取影响使用的关键部分。

先稍微讲一点点理论知识,便于大家理解XDMA:

XMDA传输流程图:

H2C 通道:

H2C 通道数量在 Vivado® 集成设计环境 (IDE) 内进行配置。H2C 通道负责处理从主机到卡的 DMA 传输。它负责根据最大读取请求大小和可用内部资源来拆分读取请求。DMA 通道可保留未完成的请求,其最大数量取决于 RNUM_RIDS(即未完成的 H2C 通道请求 ID 参数)。每次拆分(如有)读取请求都会额外耗用一项读取请求。从 DMA 通道向 PCIe RQ 块发出读取后开始,请求即处于未完成状态,直至该通道接收到在用户接口上已按顺序完成写入的确认为止。完成传输后,DMA 通道会发出写回或中断以告知主机传输完成。

H2C 通道还会在其读取接口和写入接口上拆分传输事务。在连接到主机的读取接口上,将根据可用数据 FIFO 空间拆分传输事务以满足配置的最大读取请求大小要求。数据 FIFO 空间在读取请求时进行分配,以确保有足够空间可供完成读取。PCIe RC 块会将完成数据返回到已分配的数据缓冲器位置。为最大程度减小时延,接收到任何完成数据时,H2C 通道都会开始向用户接口发出写入请求。它还会按最大有效载荷大小对写入请求进行分割。在 AXI4-Stream 用户接口上,此拆分操作为透明操作。

启用多个通道时,AXI4 主接口上的传输事务将在所有选中的通道内进行交织。在此情况下会使用简单的循环协议来维护所有通道。传输事务的粒度取决于主机最大有效载荷大小 (MPS)、页面大小和其它主机设置。

C2H 通道:

C2H 通道负责处理从卡到主机的 DMA 传输。C2H 通道的例化数量在 Vivado® IDE 中进行控制。同样,未完成的传输数量通过 WNUM_RIDS(即 C2H 通道请求 ID 数量)来配置。在 AXI4-Stream 配置中,先设置 DMA 传输详细信息,然后才会在 AXI4-Stream 接口上接收到数据。这通常是通过接收 DMA 描述符来完成的。在准备好请求 ID 并启用通道后,该通道的 AXI4-Stream 接口即可接收数据并向主机执行 DMA。在 AXI4 MM 接口配置中,向 AXI4 MM 接口发出读取请求时就会分配请求 ID。与 H2C 通道类似,给定请求 ID 保持处于未完成状态,直至完成写入请求为止。对于 C2H 通道,当按 PCIe IP 指示发出写入请求后,写入请求即告完成。

启用多个通道时,AXI4 主接口上的传输事务将在所有选中的通道内进行交织。在此情况下会使用简单的循环协议来维护所有通道。传输事务的粒度取决于主机最大有效载荷大小 (MPS)、页面大小和其它主机设置。

AXI4-Lite 主接口

此模块用于实现 AXI4-Lite 主接口总线协议。主机可使用此接口来向用户逻辑生成 32 位读取请求和 32 位写入请求。这些读取或写入请求是通过 PCIe 到 AXI4-Lite 主接口 BAR 来接收的。读取完成数据将通过目标桥接器的 PCIe IP CC 总线返回至主机。

AXI4-Lite 从接口

此模块用于实现 AXI4-Lite 从接口总线协议。用户逻辑只能负责主控该接口上针对 DMA 内部寄存器的 32 位读取或写入操作。您无法通过此接口访问 PCIe 集成块寄存器。此接口不会生成发射到主机的请求。

主机到DMA旁路主接口:

到达 PCIe 到 DMA 旁路 BAR 的主机请求都将被发送到此模块。旁路主端口属于 AXI4 MM 接口,支持读写访问。

IRQ 模块:

IRQ 模块会接收到来自用户逻辑的中断连线,其数量可配置,每个 DMA 通道 1 条中断连线。此模块负责基于 PCIe 生成中断。可在 IP 配置期间指定对 MSI-X、MSI 和遗留中断的支持

主机可在 IP 配置期间从指定的受支持中断列表中启用 1 个或多个中断类型。IP 在任意给定时间仅生成 1 种类型的中断,即使启用多个中断类型也是如此。MSI-X 中断优先于 MSI 中断,MSI 中断优先于遗留中断。当存在任一已断言有效或暂挂的中断时,主机软件不得切换(启用或禁用)中断类型

XDMA接口介绍:

枯燥的理论讲完啦,废话不多说,还是直接来干货,我只能保证大家按照我的步骤每个人都可以学会XDMA读写DDR,加油吧!!! 

XDMA IP 的配置:

1、添加XMDA IP 到项目中

2、双击XDMA IP 进行配置

Basic:

        (1)“Functional Mode”(功能模式):即DMA模式。

        (2)“Mode”(模式):basic即可,basic与advanced的区别在于advanced模式开放更多

                的可选选项与功能,basic的话为默认。

        (3)“Device /Port Type”(器件/端口类型):选择设备与端口类型,为端点设备。保持默认

        (4)“PCIe Block Location”(PCIe 块位置):从可用的集成块中选择,以启用生成特定位置

                的约束文件和输出,产品能够pg054datasheet截取的位置说明P249,根据硬件选择,一

                般保持默认。

        (5)“Lane Width”(通道宽度):通道宽度,根据硬件接口进行选择,取决于你的硬件支持

                的模式,如果不知道就选择X1,数字越大,传输速度越快。

        (6)“Maximum Link Speed”(最大链路速度):子系统需要选择 PCIe Gen 速度。

        (7)“Reference Clock Frequency”(参考时钟频率):默认值为 100 MHz,但也支持

                125 MHz 和 250 MHz。

        (8)“AXI Address Width”(AXI 地址宽度):当前,仅支持 64 位宽度。

        (9)“AXI Data Width”(AXI 数据宽度):选择 64、128、256 位或 512 位,该子系统允许

                您选择“Interface Width”(接口宽度)这个也可以不用选择,选择完通道和速度自动会自

                动改变。

        (10)“AXI Clock Frequency”(AXI 时钟频率):根据通道宽度/速度,可选择 62.5 MHz、

                125 MHz 或 250 MHz。

        (11)“DMA Interface Option”(DMA 接口选项):选择 AXI4 存储器映射或 AXI4-Stream。

        (12)“AXI4-Lite Slave Interface”(AXI4-Lite 从接口):此项即可启用 AXI4-Lite 从接口。

PCIe ID

        此界面一般保持默认,不需要做配置

PCIe BARs

        基址寄存器概述

        在端点配置中,核支持最多 6 个 32 位 BAR 或 3 个 64 位 BAR 以及扩展只读存储器 (ROM) BAR。BAR 分 2 种大小:

32 位 BAR:地址空间最小可达 128 字节或者最大可达 2 GB。用于 DMA、AXI4-Lite 主接口或 AXI Bridge 主接口。

64 位 BAR:地址空间最小可达 128 字节或者最大可达 8 艾字节 (EB)。用于 DMA、AXI4-Lite 主接口或 AXI Bridge 主接口。

所有 BAR 寄存器都共享这些选项。

        (1)Pcie to AXI Lite Master:BAR1 中的默认选项,前提是启用该选项,如果需要PC和

                FPGA进行传输信息或者指令,这个选项需要打开,寄存器大小需要自己分配。

        (2)Pcie to DMA Bypass:BAR2 中的默认选项,前提是启用该选项。

        (3)“Size”(大小):可用“Size”范围取决于选择的是 32 位 BAR 还是 64 位 BAR。DMA 需

                要 256 KB 的空间,这是固定的默认选项。其它 BAR 大小选项也可用,但必须指定。

        (4)“Scale”(标度):请选择字节、千字节或兆字节。

        (5)“Value”(值):表示基于当前选择分配给 BAR 的值。

为实现最佳结果,请禁用未使用的基址,以节省系统资源。通过在“Customize IP”(自定义 IP)对话框中取消选中未使用的 BAR 即可禁用基址寄存器。

PCIe Misc

        (1)“Number of User Interrupt Request”(用户中断请求数):可选用户中断请求最大数量

                为 16。

        (2)“Legacy Interrupt Settings”(遗留中断设置):选择任一遗留中断:INTA、INTB、

                INTC 或 INTD,保持默认。

        (3)“MSI Capabilities”(MSI 功能):默认启用“MSI Capabilities”,并启用 1 个矢量。可选

                矢量最大数量为 32。一般情况下,Linux 针对 MSI 仅使用 1 个矢量。该选项可禁用。

        (4)“Extended Tag Field”(扩展标签字段):默认情况下使用 6 位完成标签。对于 

                UltraScale™ 和 Virtex®-7 器件,“Extended Tag”(扩展标签)选项可提供 64 个标签。

        (5)“Configuration Management Interface”(配置管理接口):选中该选项时,即可将

                 PCIe 配置管理接口置于顶层。

        (6)“Link Status Register”(链路状态寄存器):默认情况下,选中Enable Slot Clock

                 Configuration(启用时隙时钟配置)。这意味着在链路状态寄存器中启用时隙配置位。

PCIe DMA

      (1)“Number of DMA Read Channels”(DMA 读取通道数):可用选项范围为 1 到 4。

      (2)“Number of DMA Write Channels”(DMA 写入通道数):可用选项范围为 1 到 4。

      (3)“Number of Request IDs for Read channel”(读取通道的请求 ID 数):选择每个通道未

                完成的请求的最大数量。可用选项范围为 2 到 64。

      (4)“Number of Request IDs for Write channel”(写入通道的请求 ID 数):选择每个通道未

                完成的请求的最大数量。可用选项范围为 2 到 32。

      (5)“Descriptor Bypass for Read (H2C)”(对应读取的描述符旁路 (H2C)):可用于所有选

                定的读取通道。每个二进制数字均对应于 1 条通道。LSB 对应于通道 0。位元位置的值

                为 1 表示对应的通道已启用描述符旁路。

      (6)“Descriptor Bypass for Write (C2H)”(对应写入的描述符旁路 (C2H)):可用于所有选

                定的写入通道。每个二进制数字均对应于 1 条通道。LSB 对应于通道 0。位元位置的值

                为 1 表示对应的通道已启用描述符旁路。

      (7)“AXI ID Width”(AXI ID 宽度):默认位宽为 4 位。您也可以选择 2 位。

      (8)“DMA Status port”(DMA 状态端口):DMA 状态端口可用于所有通道。

配置XMDA端口:

单击 Run Block Automatic:     

选择XMDA配置信息:

点击OK:即可配置完成

这样XDMA IP 配置基本已经完成

完整工程文件下载:XDMA读写DDR工程   提取码:4sxh

下一节讲解连接这XDMA、MIG两个IP,并进行下板验证

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!

  • 30
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于xdmaPCIe读写DDR是一种在计算机系统中使用的数据传输和存储技术。xdma是一种PCIe总线DMA控制器,它通过PCIe接口实现计算机系统与外围设备之间的高速数据传输。 在这种技术中,DDR(双数据率)是一种存储器类型,它具有高速的数据读写能力。PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机总线接口,用于连接计算机的主机和外围设备。 基于xdmaPCIe读写DDR技术的主要原理是,通过PCIe总线将数据传输到DDR存储器中或从DDR存储器中读取数据。首先,计算机的主机通过PCIe接口与xdma控制器进行通信,将要读取或写入DDR的数据传输给xdma控制器。xdma控制器负责将数据传输到DDR存储器中或从DDR存储器中读取数据,并将传输结果返回给主机。 这种技术有许多优点。首先,基于xdmaPCIe读写DDR技术具有高速的数据传输能力,可以实现快速的读写操作。其次,由于采用了PCIe接口,可以有效地减少系统延迟和提高数据吞吐量。此外,由于xDMA控制器支持DMA(直接内存访问)功能,数据可以直接从存储器传输到存储器,无需经过主机处理器的中间环节,从而提高了系统效率。 基于xdmaPCIe读写DDR技术在许多应用中被广泛使用,如高性能计算、数据中心和网络设备等。它可以提供稳定可靠的数据传输和存储能力,并帮助提高系统的性能和吞吐量。 ### 回答2: 基于xdmaPCIE读写DDR是一种通过PCIe总线和xdma引擎来实现对DDR(双数据率)内存进行读写操作的方法。PCIe(Peripheral Component Interconnect Express)是一种用于连接计算机内部硬件的高速串行总线,而xdma表示可扩展的直接存储器访问,它是一种硬件模块,可优化对外部DDR内存的读写。 基于xdmaPCIE读写DDR的过程大致如下: 首先,通过PCIe总线将需要访问DDR内存的请求发送给xdma引擎。这个请求可以是读取操作或写入操作。 xdma引擎收到请求后,通过执行读取或写入DMA(直接内存访问)操作将数据传输到或从DDR内存。 读取操作时,xdma引擎将DDR内存中指定地址的数据传输到PCIE总线上,然后将数据传输给请求的设备或主机。这样,数据可以在不直接使用CPU的情况下从DDR内存中读取。 写入操作时,xdma引擎会从PCIE总线接收到的数据传输到DDR内存中指定的位置。这样,数据可以在不直接使用CPU的情况下写入DDR内存。 通过使用xdma引擎进行PCIE读写DDR,可以减轻CPU的负荷,提高数据传输的效率。此外,xdma引擎还可以通过通道间的数据并行传输和深度存储器层次结构等技术实现高性能数据传输的优化。因此,基于xdmaPCIE读写DDR在高速数据传输和大容量存储访问的应用中具有广泛的应用前景。 ### 回答3: 基于xdmaPCIE读写DDR是一种在计算机系统中通过PCI Express总线与外设之间传输数据的技术。该技术使用xdma控制器作为数据传输的中介,实现了将数据从DDR(双数据率)存储器读取到计算机系统中,或者将数据从计算机系统写入DDR存储器中。 在使用基于xdmaPCIE读写DDR技术时,首先需要配置xdma控制器,包括设置寄存器、分配内存等操作,以确保控制器能够正确地读写DDR存储器。 在读取DDR存储器时,xdma控制器会发送读取请求到DDR存储器的地址,并等待DDR存储器返回相应的数据。一旦DDR存储器返回数据,控制器就会将数据传输到计算机系统中。 在将数据写入DDR存储器时,xdma控制器会将待写入数据发送到DDR存储器的地址,并将数据存储在DDR存储器中。 基于xdmaPCIE读写DDR技术具有以下优点: 1. 高速数据传输:由于使用PCI Express总线进行数据传输,因此具有较高的数据传输速率,能够满足对数据传输速度要求较高的应用场景。 2. 灵活性:通过xdma控制器的配置,可以灵活地选择读取和写入DDR存储器的地址,从而满足不同的数据读写需求。 3. 可靠性:基于xdmaPCIE读写DDR技术经过了严格的测试和验证,具有较高的稳定性和可靠性,能够保证数据的准确传输。 总之,基于xdmaPCIE读写DDR技术是一种在计算机系统中实现高速数据传输的有效方法,可以广泛应用于需要大量数据读写的领域,如数据处理、图像处理、人工智能等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值