怎么做网站的广告,网站制作方案书,哪个行业最喜欢做网站,梧州网站设计理念目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板… 目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板调试注意事项 5、vivado工程源码1详解--Virtex7-690T-PCIE3.0 X8版本6、vivado工程源码2详解--KU060-PCIE3.0 X8版本7、vivado工程源码3详解--KU3P-PCIE3.0 X4版本8、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 9、上板调试验证准备工作XDMA大批量数据读写测试演示XDMA小批量用户数据读写测试演示XDMA用户中断测试演示 10、福利工程代码的获取 FPGA搭建PCIE3.0通信架构简单读写测试基于XDMA中断模式提供3套工程源码和技术支持 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方案搭建基中断模式下的PCIE3.0通信架构需要注意的是并不是所有FPGA都支持PCIE3.0以Xilinx为例只有Virtex7及其以上或者UltraScale系列高端FPGA才支持低端FPGA只能支持到PCIE2.0关于PCIE2.0的设计方案可以参考我博客主页有丰富案例XDMA的数据缓存有两条通路一条基于DDR3的大批量数据缓存通路该条通路一般用作图像、AD数据等缓存适用于使用板载DDR作为缓存的大量批量数据传输方案另一条基于BRAM的小批量用户数据缓存通路该条通路一般用作用户控制数据的缓存适用于使用FPGA内部BRAM作为缓存的大量批量数据传输方案XDMA配置为中断模式配合手写的XDMA中断模块使用该中断模块主要负责与用户逻辑交互指示用户逻辑可以发起中断并将用户逻辑发起的中断转发给XDMA用户逻辑侧设置了一个定时器大约间隔8ms发起一次XDMA中断同时提供一套基于X86架构的PC端的PCIE数据读写软件执行软件可发起对FPGA侧的PCIE数据读写操作以验证这套PCIE通信架构的正确性这套架构设计简单测试更为简单不需要上位机的参与仅仅在CMD中执行一系列指令即可完美测试通信质量适用于PCIE设计的快速验证和开发本博客提供3套工程源码具体如下 现对上述7套工程源码做如下解释方便读者理解
工程源码1
开发板FPGA型号为Xilinx–Virtex7–690T–xc7vx690tffg1761-3FPGA内部设置了一个定时器间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMAXDMA配置了两路数据缓存通道一条是AXI4-FULL接口的DDR数据缓存通道以板载的DDR3作为缓存介质用于大批量数据传输另一条是AXI4-Lite接口的BRAM数据缓存通道以FPGA内部BRAM作为缓存介质用于少量用户数据传输利用上位机软件实现XDMA数据读写测试包括批量数据和少量用户数据读写此外还进行XDMA用户中断测试提供Windows和Linux系统驱动和对应的测试软件板子PCIE支持PCIE3.0为8 LaneXDMA配置为单Lane线速率8GT/s用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构
工程源码2
开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-iFPGA内部设置了一个定时器间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMAXDMA配置了两路数据缓存通道一条是AXI4-FULL接口的DDR数据缓存通道以板载的DDR4作为缓存介质用于大批量数据传输另一条是AXI4-Lite接口的BRAM数据缓存通道以FPGA内部BRAM作为缓存介质用于少量用户数据传输利用上位机软件实现XDMA数据读写测试包括批量数据和少量用户数据读写此外还进行XDMA用户中断测试提供Windows和Linux系统驱动和对应的测试软件板子PCIE支持PCIE3.0为8 LaneXDMA配置为单Lane线速率8GT/s用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构
工程源码3
开发板FPGA型号为Xilinx–Kintex UltraScale±-xcku3p-ffva676-2-iFPGA内部设置了一个定时器间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMAXDMA配置了两路数据缓存通道一条是AXI4-FULL接口的DDR数据缓存通道以板载的DDR4作为缓存介质用于大批量数据传输另一条是AXI4-Lite接口的BRAM数据缓存通道以FPGA内部BRAM作为缓存介质用于少量用户数据传输利用上位机软件实现XDMA数据读写测试包括批量数据和少量用户数据读写此外还进行XDMA用户中断测试提供Windows和Linux系统驱动和对应的测试软件板子PCIE支持PCIE3.0为4 LaneXDMA配置为单Lane线速率8GT/s用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构
本文详细描述了FPGA搭建PCIE3.0通信架构简单读写测试的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的高速接口领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、相关方案推荐
我已有的PCIE方案
我的主页有PCIE通信专栏该专栏基于XDMA的轮询模式实现与QT上位机的数据交互既有基于RIFFA实现的PCIE方案也有基于XDMA实现的PCIE方案既有简单的数据交互、测速也有应用级别的图像采集传输以下是专栏地址 点击直接前往 此外我的主页有中断模式的PCIE通信专栏该专栏基于XDMA的中断模式实现与QT上位机的数据交互以下是专栏地址 点击直接前往 此外还有基于RIFFA架构的PCIE通信专栏以下是专栏地址 点击直接前往
本博客方案的PCIE2.0版本
本博客详细描述了FPGA搭建PCIE3.0通信架构简单读写测试的设计方案但并不是所有FPGA都支持PCIE3.0对于低端FPGA而言PCIE2.0或许具有更多应用场景恰好之前写过一篇PCIE2.0方案设计基本与本片博客一样只是XDMA配置的PCIE版本不一样感兴趣的可以查看之前的博客博客链接如下 点击直接前往
3、PCIE基础知识
PCIe 总线架构与以太网的 OSI 模型类似是一种分层协议架构分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部分一部分处理出站要发送的信息另一部分处理入站接收的信息如下图 事务层 事务层的主要责任是事务层包 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、工程详细设计方案
工程设计原理框图
工程设计原理框图如下
XDMA配置及使用
根据Xilinx官方手册XDMA框图如下 由图可知XDMA封装了Integrated Block for PCI Express IP不仅完成了事务层的组包解包还添加了完整的 DMA 引擎XDMA 一般情况下使用AXI4 接口AXI4 接口可以加入到系统总线互联适用于大数据量异步传输而且通常情况下使用 XDMA 都会使用到 BRAM 或 DDR 内存AXI4-Stream 接口适用于低延迟数据流传输。XDMA 允许在主机内存和 DMA 子系统之间移动数据。它通过对包含有关要传输的数据的源、目标和数量的信息的“描述符”进行操作来实现此目的。这些直接内存传输既可以用于主机到卡Host to CardH2C的传输也可以用与卡到主机Card to HostC2H的传输。可以将 DMA 配置为由所有通道共享一个 AXI4 Master 接口或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的描述符链接列表指定的DMA 从主机内存和进程中获取这些链接列表。诸如描述符完成和错误之类的事件通过中断来发出信号。XDMA 还提供多达 16 条用户中断线这些中断线会向主机生成中断。本设计需要配置为中断模式如下图 本设计XDMA线速率配置为8GT/s这是PCIE3.0标准如下 XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product GuidePG194》
XDMA中断模块
XDMA中断模块和XDMA IP配合使用XDMA中断模块主要执行两个任务一是获取XDMA的状态输出用户中断使能信号以指示用户此时可以发起中断该任务通过AXI_Lite接口与XDMA连接其从机地址受PC端软件控制二是转发用户中断给XDMA当用户侧检测到XDMA处于可接受中断状态时用户逻辑可以发起中断XDMA中断模块将此中断转发给XDMA IP将模块直接拖入Block Design中显示如下
数据缓存架构
如果你的FPGA资源够大且传输的数据是大批量的则选择DDR架构的数据缓存架构比如传输图像、AD数据等等如果你的FPGA开发板没有DDR颗粒或者只需要传输的数据是小批量的则选择BRAM架构的数据缓存架构比如传输PCIE控制信息等工程中将两种架构都设计了以便于用户在根据自身FPGA开发板移植时具有选择性如下
用户逻辑
用户逻辑的作用就是发起中断设置了一个定时器大约间隔8ms发起一次XDMA中断当然这只是做测试如果是具体的数据传输则需要灵活改变比如传输图像时可以一帧图像传输完成作为发起中断的条件在后续发布的博客中会有相应的介绍核心代码如下
Windows版本XDMA驱动安装
提供Windows和Linux系统驱动本章节介绍Windows下XDMA驱动安装 Windows下驱动安装步骤如下友情提示Windows下驱动秩序安装一次即可
第一步使系统禁用签名并进入测试模式方法如下 也可百度其他方法实现上述目的完成后电脑屏幕右下角应有如下显示 第二步定位到驱动目录下提供Windows7和Windows10两个版本驱动由于我的电脑选择Windows10如下 单击鼠标右键安装即可如下 第三步下载FPGA工程bit到FPGA开发板然后重启电脑打开我的电脑–管理–设备管理器应看到如下设备
Linux版本XDMA驱动安装
提供Windows和Linux系统驱动本章节介绍Linux下XDMA驱动安装 Linux下驱动安装步骤如下友情提示Linux下每次下载FPGA bit后都需要重启电脑才能安装驱动
进入到Linux驱动目录下一次执行以下两条指令即可安装如下 • 驱动编译终端指令make -j8 •驱动安装终端指令sudo insmod xdma.ko
测试应用程序
测试应用程序由编译XDMA驱动时自动生成Windows版本驱动测试应用程序位置如下 Linux版本驱动测试应用程序位置如下 该测试程序主要测试内容包括XDMA大批量数据读写测试、XDMA小批量用户数据读写测试、XDMA中断测试等详细测试方法参考后面的《上板调试》章节
工程源码架构
提供3套工程源码以工程源码1为例工程Block Design设计如下 提供3套工程源码以工程源码1为例综合后的工程源码架构如下
PCIE上板调试注意事项
1必须先安装本博提供的XDMA驱动详情请参考第4章节的《XDMA驱动及其安装》Windows版本驱动只需安装一次 2Windows版本下载FPGA工程bit后需要重启电脑电脑才能识别到XDMA驱动程序固化后也需要重启电脑Linux版本每次载FPGA工程bit后都需要重启电脑都需要安装XDMA驱动 3FPGA板卡插在主机上后一般不需要额外供电如果你的板子元器件较多功耗较大则需要额外供电详情咨询开发板厂家当然找我买板子的客户可以直接问我 4PCIE调试需要电脑主机但笔记本电脑理论上也可以外接出来PCIE详情百度自行搜索一下电脑主机PCIE插槽不方便操作时可以使用延长线接出来某宝有卖
5、vivado工程源码1详解–Virtex7-690T-PCIE3.0 X8版本
开发板FPGA型号Xilinx–690T–xc7vx690tffg1761-3 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 PCIE详情PCIE3.0版本X88GT/s单lane线速率 PCIE底层方案XDMA中断模式配置4条用户中断 数据缓存架构DDR3BRAM 实现功能FPGA搭建PCIE3.0通信架构简单读写测试 工程作用此工程目的是让读者掌握FPGA搭建PCIE3.0通信架构简单读写测试的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
6、vivado工程源码2详解–KU060-PCIE3.0 X8版本
开发板FPGA型号Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 PCIE详情PCIE3.0版本X88GT/s单lane线速率 PCIE底层方案XDMA中断模式配置4条用户中断 数据缓存架构DDR4BRAM 实现功能FPGA搭建PCIE3.0通信架构简单读写测试 工程作用此工程目的是让读者掌握FPGA搭建PCIE3.0通信架构简单读写测试的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
7、vivado工程源码3详解–KU3P-PCIE3.0 X4版本
开发板FPGA型号Xilinx–Kintex UltraScale±-xcku3p-ffva676-2-i FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 PCIE详情PCIE3.0版本X48GT/s单lane线速率 PCIE底层方案XDMA中断模式配置4条用户中断 数据缓存架构DDR4BRAM 实现功能FPGA搭建XDMA中断模式的PCIE通信架构下的简单读写测试 工程作用此工程目的是让读者掌握FPGA搭建XDMA中断模式的PCIE通信架构的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
8、工程移植说明
vivado版本不一致处理
1如果你的vivado版本与本工程vivado版本一致则直接打开工程 2如果你的vivado版本低于本工程vivado版本则需要打开工程后点击文件–另存为但此方法并不保险最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本 3如果你的vivado版本高于本工程vivado版本解决如下 打开工程后会发现IP都被锁住了如下 此时需要升级IP操作如下
FPGA型号不一致处理
如果你的FPGA型号与我的不一致则需要更改FPGA型号操作如下 更改FPGA型号后还需要升级IP升级IP的方法前面已经讲述了
其他注意事项
1由于每个板子的DDR不一定完全一样所以MIG IP需要根据你自己的原理图进行配置甚至可以直接删掉我这里原工程的MIG并重新添加IP重新配置 2根据你自己的原理图修改引脚约束在xdc文件中修改即可 3纯FPGA移植到Zynq需要在工程中添加zynq软核
9、上板调试验证
准备工作
需要准备的器材如下 FPGA开发板没有开发板可以找本博提供 带PCIE卡槽的电脑主机 我的开发板了连接如下
XDMA大批量数据读写测试演示
XDMA大批量数据通过XDMA的AXI4-FULL接口传输一般连接到FPGA的MIG到板载DDR3FPGA逻辑资源有限时也可连接至BRAM 打开Windows CMD指令框进入XDMA测试程序目录并查看测试程序指令用法如下 • 操作指令xdma_rw.exe 批量数据写操作测试
使用 h2c_0 设备以二进制的形式读取文件 datafile4k.bin 写入到 BRAM 内存地址 0x0000000 长度为 4096 字节如下 • 操作指令xdma_rw.exe h2c_0 write 0x0000000 -b -f datafile4K.bin -l 4096 对应的Linux下的测试指令如下Linux下的测试需要进入root账户模式 • 操作指令./dma_from_device -d /dev/xdma0_c2h_0 -f ./test.bin -s 4096 -a 0 -c 1 批量数据读操作测试
使用 c2h_0 设备从BRAM 内存地址 0x0000000 读取长度为 4096 字节数据并写入到datafile4K_recv.bin中保存如下 • 操作指令xdma_rw.exe c2h_0 read 0x0000000 -b -f datafile4K_recv.bin -l 4096 对应的Linux下的测试指令如下Linux下的测试需要进入root账户模式 • 操作指令./dma_to_device -d /dev/xdma0_h2c_0 -f ./test.bin -s 4096 -a 0 -c 1 您可以使用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 小批量用户数据读操作测试
从 BRAM 内存地址 0x10000依次读出两个数据并打印如下 • 操作指令xdma_rw.exe user read 0x10000 -l 2
XDMA用户中断测试演示
XDMA用户中断测试为测试用户中断的专用测试软件如下 • 操作指令xdma_event.exe 对应的Linux下的测试指令如下Linux下的测试需要进入root账户模式 • 操作指令sudo ./pcie_irq
10、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务