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

2024-02-02 05:10

本文主要是介绍手把手教你学会 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,并进行下板验证

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

这篇关于手把手教你学会 Xilinx PCIE/XDMA 读写DDR系列(二) ——XDMA详细配置步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669570

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言