知者何南 发表于 2024-9-3 11:07:22

FPGA搭建XDMA停止模式的PCIE通信架构,简单读写测试,提供7套工程源码和技

FPGA搭建XDMA停止模式的PCIE通信架构,简单读写测试,提供7套工程源码和技能支持
1、前言

FPGA实现PCIE数据传输近况;
如今基于Xilinx系列FPGA的PCIE通信架构重要有以下2种,一种是简单的、傻瓜式的、易于开发的、对新手友好的XDMA架构,该架构对PCIE协议底层做了封装,并加上了DMA引擎,使得使用的难度大大低落,加之Xilinx提供了配套的Windows和Linux系统驱动和上位机参考源代码,使得XDMA一经推出就让工程师们欲罢不能;另一种是更为底层的、需要设计者有一定PCIE协议知识的、更易于定制化开发的7 Series Integrated Block for PCI Express架构,该IP实现的是PCIe 的物理层、链路层和事务层,提供给用户的是以 AXI4-stream 接口定义的TLP 包,使用该IP 核,需要对PCIe 协议有清楚的理解,特殊是对事务包TLP报文格式;本设计接纳第一种方案,使用XDMA的停止模式实现PCIE通信;本架构既有简单的测速实行,也有视频采集应用;
工程概述

本设计使用Xilinx系列FPGA为平台,调用Xilinx官方的XDMA方案搭建基停止模式下的PCIE通信架构,XDMA的数据缓存有两条通路,一条基于DDR3的大批量数据缓存通路,该条通路一般用作图像、AD数据等缓存,适用于Xilinx Artix7-100T及其以上型号的FPGA;另一条基于BRAM的小批量用户数据缓存通路,该条通路一般用作用户控制数据的缓存,适用于Xilinx Artix7-35T及其以下型号的FPGA,由于资源小;XDMA设置为停止模式,配合手写的XDMA停止模块使用,该停止模块重要负责与用户逻辑交互,指示用户逻辑可以发起停止,并将用户逻辑发起的停止转发给XDMA;用户逻辑侧设置了一个定时器,约莫隔断8ms发起一次XDMA停止;同时提供一套基于X86架构的PC端的PCIE数据读写软件,执行软件可发起对FPGA侧的PCIE数据读写操纵,以验证这套PCIE通信架构的精确性;这套架构设计简单,测试更为简单,不需要上位机的参与,仅仅在CMD中执行一系列指令即可完善测试通信质量,适用于PCIE设计的快速验证和开发;本博客提供7套工程源码,详细如下:
https://i-blog.csdnimg.cn/direct/aefcb366e2994c6ca5274074b2659f71.png
现对上述7套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx–>Artix7-35T–xc7a35tfgg484-2;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE2.0,为2 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码2
开发板FPGA型号为Xilinx–>Artix7-100T–xc7a100tfgg484-2;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE2.0,为1 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码3
开发板FPGA型号为Xilinx–>Kintex7–35T–xc7k325tffg676-2;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE2.0,为4 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码4
开发板FPGA型号为Xilinx–>Zynq7100–xc7z100ffg900-2;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE2.0,为8 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码5
开发板FPGA型号为Xilinx–>Virtex7–690T–xc7vx690tffg1761-3;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为8 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码6
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku040-ffva1156-2-i;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为8 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
工程源码7
开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;FPGA内部设置了一个定时器,隔断8ms产生一次上升沿作为XDMA用户逻辑停止输出给XDMA;XDMA设置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;使用上位机软件实现XDMA数据读写测试,包罗批量数据和少量用户数据读写,别的还进行XDMA用户停止测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为8 Lane,XDMA设置为单Lane线速率5GT/s;用于快速搭建并验证基于FPGA_XDMA停止模式的PCIE数据通信架构;
本文详细描述了FPGA基于XDMA停止模式的PCIE通信架构,简单读写测试的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校门生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技能支持;
工程源码和技能支持的获取方式放在了文章末端,请耐心看到末了;
免责声明

本工程及其源码即有自己写的一部门,也有网络公开渠道获取的一部门(包罗CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,克制用于贸易用途,若由于读者或粉丝自身原因用于贸易用途所导致的法律题目,与本博客及博主无关,请审慎使用。。。
2、相干方案推荐

我已有的PCIE方案

我的主页有PCIE通信专栏,该专栏基于XDMA的轮询模式实现与QT上位机的数据交互,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,以下是专栏地址:
点击直接前去
别的,我的主页有停止模式的PCIE通信专栏,该专栏基于XDMA的停止模式实现与QT上位机的数据交互,以下是专栏地址:
点击直接前去
别的,另有基于RIFFA架构的PCIE通信专栏,以下是专栏地址:
点击直接前去
3、PCIE底子知识

PCIe 总线架构与以太网的 OSI 模型雷同,是一种分层协议架构,分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部门:一部门处理出站(要发送的)信息,另一部门处理入站(吸收的)信息,如下图:
https://i-blog.csdnimg.cn/blog_migrate/ee7bd042be45007250d1043415a5d879.png
事务层
事务层的重要责任是事务层包 TLP(Transaction Layer Packet)的组装和拆卸。事务层吸收来自 PCIe 设备核心层的数据,并将其封装为 TLP。TLP 用于传达事务,例如读取和写入,以及确定事件的类型。事务层还负责管理 TLP 的基于名誉的流控制。每个需要响应数据包的请求数据包都作为拆分事务实现。每个数据包都有一个唯一标识符,该标识符使响应数据包可以定向到精确的始发者。数据包格式支持不同形式的寻址,详细取决于事务的类型(内存、I/O、设置和消息)。数据包可能还具有诸如 No Snoop、Relaxed Ordering 和基于 ID 的排序(IDO)之类的属性。事务层支持四个地址空间:包罗三个 PCI 地址空间(内存、I/O 和设置)并添加消息空间。该规范使用消息空间来支持所有先前 PCI 的边带信号,例如停止、电源管理请求等,作为带内消息事务。
数据链路层
数据链路层充当事务层和物理层之间的中心阶段。数据链路层的重要职责包罗链路管理和数据完整性,包罗错误检测和错误纠正。数据链路层的发送方接受事务层组装的 TLP,盘算并应用数据保护代码和 TLP序列号,以及将它们提交给物理层以在链路上传输。吸收数据链路层负责查抄吸收到的 TLP 的完整性,并将它们提交给事务层以进行进一步处理。在检测到 TLP 错误时,此层负责请求重发 TLP,直到精确吸收信息或确定链路失败为止。数据链路层还生成并使用用于链路管理功能的数据包。为了将这些数据包与事务层(TLP)使用的数据包区分开,当指代在数据链路层生成和使用的数据包时,将使用术语“数据链路层数据包(DLLP)”。
物理层
PCIe 总线的物理层为 PCIe 设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境。物理层包罗用于接口操纵的所有电路,包罗驱动器和输入缓冲器、并行至串行和串行至并行转换、PLL 和阻抗匹配电路。它还包罗与接口初始化和维护有关的逻辑功能。物理层以实现特定的格式与数据链路层交换信息。该层负责将从数据链路层吸收的信息转换为得当的序列化格式,并以与毗连到链路另一端的设备兼容的频率和通道宽度在 PCI Express 链路上传输该信息。物理层是 PCIe 体系结构最紧张,也是最难以实现的组成部门(该层对用户透明,开发 PCIe 步伐时无需关心)。PCIe 总线的物理层定义了 LTSSM (Link Training and Status State Machine)状态机,PCIe 链路使用该状态机管理链路状态,并进行链路练习、链路恢复和电源管理。PCIe 总线使用端到端的毗连方式,在一条PCIe 链路的两端只能各毗连一个设备,这两个设备互为数据发送端和数据吸收端。由于 PCIe 是支持全双工通信的,所以发送端和吸收端中都含有TX (发送逻辑) 和RX (吸收逻辑)。在PCIe 总线的物理链路的一个数据通路(Lane) 中,有两组差分信号,共4 根信号线组成。此中发送端的TX 与吸收端的RX 使用一组差分信号毗连,该链路也被称为发送端的发送链路,也是吸收端的吸收链路;而发送端的RX 与吸收端的TX 使用另一组差分信号毗连,该链路也被称为发送端的吸收链路,也是吸收端的发送链路。一个PCIe 链路可以由多个Lane 组成。如今PCIe 链路可以支持1、2、4、8、12、16 和32 个Lane,即×1、×2、×4、×8、×12、×16 和×32 宽度的PCIe 链路。每一个Lane 上使用的总线频率与PCIe 总线使用的版本相干。
4、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
https://i-blog.csdnimg.cn/direct/8fa0d023513a4e44a6b6232a798fb735.png
XDMA设置及使用

根据Xilinx官方手册,XDMA框图如下:
https://i-blog.csdnimg.cn/blog_migrate/0465250a2666ee159f49740c681e33b6.png
由图可知,XDMA封装了Integrated Block for PCI Express IP,不仅完成了事务层的组包解包,还添加了完整的 DMA 引擎;XDMA 一般环境下使用AXI4 接口,AXI4 接口可以参加到系统总线互联,适用于大数据量异步传输,而且通常环境下使用 XDMA 都会使用到 BRAM 或 DDR 内存;AXI4-Stream 接口适用于低延迟数据流传输。XDMA 允许在主机内存和 DMA 子系统之间移动数据。它通过对包含有关要传输的数据的源、目标和数量的信息的“描述符”进行操纵来实现此目的。这些直接内存传输既可以用于主机到卡(Host to Card,H2C)的传输,也可以用与卡到主机(Card to Host,C2H)的传输。可以将 DMA 设置为由所有通道共享一个 AXI4 Master 接口,或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的描述符链接列表指定的,DMA 从主机内存和进程中获取这些链接列表。诸如描述符完成和错误之类的事件通过停止来发出信号。XDMA 还提供多达 16 条用户停止线,这些停止线会向主机生成停止。本设计需要设置为停止模式;如下图:
https://i-blog.csdnimg.cn/blog_migrate/2d1b79eaaf92e7da0fb7c0daefefd82b.png
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;
XDMA停止模块

XDMA停止模块和XDMA IP配合使用,XDMA停止模块重要执行两个任务,一是获取XDMA的状态,输出用户停止使能信号,以指示用户此时可以发起停止,该任务通过AXI_Lite接口与XDMA毗连,其从机地址受PC端软件控制;二是转发用户停止给XDMA,当用户侧检测到XDMA处于可接受停止状态时,用户逻辑可以发起停止,XDMA停止模块将此停止转发给XDMA IP;将模块直接拖入Block Design中,显示如下:
https://i-blog.csdnimg.cn/direct/ca5254e100f74b83b420195b613bcf39.png
数据缓存架构

如果你的FPGA资源够大,且传输的数据是大批量的,则选择DDR架构的数据缓存架构,好比传输图像、AD数据等等;如果你的FPGA资源不够大(如Artix7-35T以及一下型号),且传输的数据是小批量的,则选择BRAM架构的数据缓存架构,好比传输PCIE控制信息等;工程中将两种架构都设计了,以便于用户在根据自身FPGA开发板移植时具有选择性;如下:
https://i-blog.csdnimg.cn/direct/752d11ecdd044d28892d93b0d153ebb0.png
用户逻辑

用户逻辑的作用就是发起停止,设置了一个定时器,约莫隔断8ms发起一次XDMA停止;当然这只是做测试,如果是详细的数据传输则需要灵活改变,好比传输图像时,可以一帧图像传输完成作为发起停止的条件;在后续发布的博客中会有相应的先容;核心代码如下:
https://i-blog.csdnimg.cn/direct/159fa7d400454f10b98262872e91e533.png
Windows版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节先容Windows下XDMA驱动安装;
https://i-blog.csdnimg.cn/direct/0b8aefa1e7634a05ae8ebc756d760657.png
Windows下驱动安装步调如下:友情提示,Windows下驱动秩序安装一次即可;
第一步:使系统禁用署名并进入测试模式,方法如下:
https://i-blog.csdnimg.cn/direct/2bb8793341624a7dbcb796c332ddb94b.png
也可百度其他方法实现上述目的,完成后电脑屏幕右下角应有如下显示:
https://i-blog.csdnimg.cn/direct/d531365e467a44aaa2d476d4021ead88.png
第二步:定位到驱动目次下,提供Windows7和Windows10两个版本驱动,由于我的电脑选择Windows10,如下:
https://i-blog.csdnimg.cn/direct/dc723c8446444fa0b727b93e65aacade.png
单击鼠标右键安装即可,如下:
https://i-blog.csdnimg.cn/direct/0b70b910d2a74d8eb16524322c68142d.png
https://i-blog.csdnimg.cn/direct/9e79cc610b2145828a9327c3c3d3ae1b.png
https://i-blog.csdnimg.cn/direct/1db234c537a745d5b900c05be06fc558.png
第三步:下载FPGA工程bit到FPGA开发板,然后重启电脑,打开我的电脑–>管理–>设备管理器,应看到如下设备:
https://i-blog.csdnimg.cn/direct/c049cb609bc24c42b7747383be20adb9.png
Linux版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节先容Linux下XDMA驱动安装;
https://i-blog.csdnimg.cn/direct/0b8aefa1e7634a05ae8ebc756d760657.png
Linux下驱动安装步调如下:友情提示,Linux下,每次下载FPGA bit后都需要重启电脑才气安装驱动;
进入到Linux驱动目次下,一次执行以下两条指令即可安装,如下:
• 驱动编译终端指令:make -j8
•驱动安装终端指令:sudo insmod xdma.ko
https://i-blog.csdnimg.cn/direct/d1866143d9c44af585022dd795b65f25.png
测试应用步伐

测试应用步伐由编译XDMA驱动时主动生成,Windows版本驱动测试应用步伐位置如下:
https://i-blog.csdnimg.cn/direct/675016d76cc1484288172a92882d3935.png
Linux版本驱动测试应用步伐位置如下:
https://i-blog.csdnimg.cn/direct/c33bf6f2ed194968959ea0cd7f030fe8.png
该测试步伐重要测试内容包罗XDMA大批量数据读写测试、XDMA小批量用户数据读写测试、XDMA停止测试等;详细测试方法参考反面的《上板调试》章节;
工程源码架构

提供7套工程源码,以工程源码2为例,工程Block Design设计如下:
https://i-blog.csdnimg.cn/direct/12239ba5740547818e9960ff43e780ca.png
提供7套工程源码,以工程源码2为例,综合后的工程源码架构如下:
https://i-blog.csdnimg.cn/direct/d82b233fb42646fbb83d313b5f99a608.png
PCIE上板调试注意事项

1:必须先安装本博提供的XDMA驱动,详情请参考第4章节的《XDMA驱动及其安装》,Windows版本驱动只需安装一次;
2:Windows版本下载FPGA工程bit后需要重启电脑,电脑才气辨认到XDMA驱动;步伐固化后也需要重启电脑;Linux版本每次载FPGA工程bit后都需要重启电脑,都需要安装XDMA驱动;
3:FPGA板卡插在主机上后一般不需要额外供电,如果你的板子元器件较多功耗较大,则需要额外供电,详情咨询开发板厂家,当然,找我买板子的客户可以直接问我;
4:PCIE调试需要电脑主机,但笔记本电脑理论上也可以外接出来PCIE,详情百度自行搜索一下,电脑主机PCIE插槽不方便操纵时可以使用延长线接出来,某宝有卖;
5、vivado工程源码1详解–>Artix7-35T-PCIEX2版本

开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE2.0版本,X2,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/3ac4b4d50e0940b89af42dc323e4cbc4.png
6、vivado工程源码2详解–>Artix7-100T-PCIEX1版本

开发板FPGA型号:Xilinx–Artix7–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE2.0版本,X1,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR3+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/7e2b43b34e154462a6e18fcaa595cc61.png
7、vivado工程源码3详解–>Kintex7-35T-PCIEX4版本

开发板FPGA型号:Xilinx-Kintex7–35T–xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE2.0版本,X4,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR3+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/e5e76dc4326746a7aa1f0d1b89832a26.png
8、vivado工程源码4详解–>Zynq7100-PCIEX8版本

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE2.0版本,X8,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR3+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/6aa015968dd74173b1c206c4f100cb93.png
9、vivado工程源码5详解–>Virtex7-690T-PCIEX8版本

开发板FPGA型号:Xilinx–690T–xc7vx690tffg1761-3;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X8,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR3+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/4d587b0317294ece8c95834529c7de47.png
10、vivado工程源码6详解–>KU040-PCIEX8版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X8,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR4+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/599750d0f57f41249cf15844e0403056.png
11、vivado工程源码7详解–>KU060-PCIEX8版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X8,5GT/s单lane线速率;
PCIE底层方案:XDMA,停止模式,设置4条用户停止;
数据缓存架构:DDR4+BRAM;
实现功能:FPGA搭建XDMA停止模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者把握FPGA搭建XDMA停止模式的PCIE通信架构的设计本领,以便可以或许移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
https://i-blog.csdnimg.cn/direct/9ec280d2e63941f4a08be784fb47cdab.png
12、工程移植说明

vivado版本不同等处理

1:如果你的vivado版本与本工程vivado版本同等,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
https://i-blog.csdnimg.cn/blog_migrate/bc48ac9fcff3ccf75afc3b8c93903943.png
3:如果你的vivado版本高于本工程vivado版本,办理如下:
https://i-blog.csdnimg.cn/blog_migrate/5339765854d33895fd1ef5f32b7c7316.png
打开工程后会发现IP都被锁住了,如下:
https://i-blog.csdnimg.cn/blog_migrate/2ac63999d842a4c6fb1d7380d6ca5e97.png
此时需要升级IP,操纵如下:
https://i-blog.csdnimg.cn/blog_migrate/89ba314f110850af150597ba2bc53bc5.png
https://i-blog.csdnimg.cn/blog_migrate/927dd0bd87ca3d4e31ff5dfd91915c65.png
FPGA型号不同等处理

如果你的FPGA型号与我的不同等,则需要更改FPGA型号,操纵如下:
https://i-blog.csdnimg.cn/blog_migrate/bfd4a4312f7a07d96dbdf352ca7cdf56.png
https://i-blog.csdnimg.cn/blog_migrate/62e7842d8f47097e251eab0531279f6c.png
https://i-blog.csdnimg.cn/blog_migrate/1a056eeffb8fd0c0e59755520973eb2c.png
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;
其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行设置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新设置;
2:根据你自己的原理图修改引脚束缚,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;
13、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
带PCIE卡槽的电脑主机;
我的开发板了毗连如下:
https://i-blog.csdnimg.cn/direct/30b9db724d594ca19f3497f4ee4f38a1.png
XDMA大批量数据读写测试演示

XDMA大批量数据通过XDMA的AXI4-FULL接口传输,一般毗连到FPGA的MIG到板载DDR3,FPGA逻辑资源有限时也可毗连至BRAM;
打开Windows CMD指令框,进入XDMA测试步伐目次,并检察测试步伐指令用法,如下:
• 操纵指令:xdma_rw.exe
https://i-blog.csdnimg.cn/direct/11346e54f0844952bf119b763c366388.png
批量数据写操纵测试:
使用 h2c_0 设备以二进制的形式读取文件 datafile4k.bin 写入到 BRAM 内存地址 0x0000000 长度为 4096 字节,如下:
• 操纵指令:xdma_rw.exe h2c_0 write 0x0000000 -b -f datafile4K.bin -l 4096
https://i-blog.csdnimg.cn/direct/a99fc0e07aee41d5bf3a5fb55039cfb1.png
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操纵指令:./dma_from_device -d /dev/xdma0_c2h_0 -f ./test.bin -s 4096 -a 0 -c 1
https://i-blog.csdnimg.cn/direct/6ab1e603490041cfbc4fe52b08e6f038.png
批量数据读操纵测试:
使用 c2h_0 设备从BRAM 内存地址 0x0000000 读取长度为 4096 字节数据,并写入到datafile4K_recv.bin中保存;如下:
• 操纵指令:xdma_rw.exe c2h_0 read 0x0000000 -b -f datafile4K_recv.bin -l 4096
https://i-blog.csdnimg.cn/direct/086e1348efbf4f0d83402e8e64538890.png
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操纵指令:./dma_to_device -d /dev/xdma0_h2c_0 -f ./test.bin -s 4096 -a 0 -c 1
https://i-blog.csdnimg.cn/direct/4c567d76711f43278d8d5266889c5b7d.png
您可以使用winhex等软件来查抄一下datafile4k.bin和datafile4K_recv.bin这两个文件数据是否同等;
XDMA小批量用户数据读写测试演示

XDMA小批量用户数据通过XDMA的AXI4-Lite接口传输,一般毗连到FPGA内置的BRAM;
小批量用户数据写操纵测试:
向 BRAM 内存地址 0x10000写入0x11和0x22两个数据,如下:
• 操纵指令:xdma_rw.exe user write 0x10000 0x11 0x22
https://i-blog.csdnimg.cn/direct/99a8f14fbd2445878d2555bcf8c1b603.png
小批量用户数据读操纵测试:
从 BRAM 内存地址 0x10000依次读出两个数据并打印,如下:
• 操纵指令:xdma_rw.exe user read 0x10000 -l 2
https://i-blog.csdnimg.cn/direct/673e87970a764e2d9339e488060c548d.png
XDMA用户停止测试演示

XDMA用户停止测试为测试用户停止的专用测试软件,如下:
• 操纵指令:xdma_event.exe
https://i-blog.csdnimg.cn/direct/7e580b5039254ff8bb05bfe9432147bf.png
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操纵指令:sudo ./pcie_irq
14、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末端的V名片。
网盘资料如下:
https://i-blog.csdnimg.cn/direct/f658da8d0aa546be95d5c6a54ace152c.png
别的,有很多朋侪给本博主提了很多意见和建议,盼望能丰富服务内容和选项,由于不同朋侪的需求不一样,所以本博主还提供以下服务:
https://i-blog.csdnimg.cn/blog_migrate/3822b51eedd8e3bf90dbed737ac4a2e1.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: FPGA搭建XDMA停止模式的PCIE通信架构,简单读写测试,提供7套工程源码和技