FPGA基于GTY实现SFP光口视频转PCIE3.0传输,Aurora 8b/10b+XDMA架构,提供2套工程源码和技术支持
FPGA视频采集GTY光口转PCIE3.0传输,基于Aurora 8b/10b+XDMA架构,提供2套工程源码和技术支持1、前言
FPGA实现SFP光口视频编解码近况;
目前基于Xilinx系列FPGA的SFP光口视频编解码主要有以下几种,Artix7系列的GTP、Kintex7系列的GTX、更高端FPGA器件的GTH、GTY、GTV、GTM等,线速率越来越高,应用场景也越来越高端;编码方式也是多种多样,有8b/10b编解码、64b/66b编解码、HDMI编解码、SDI编解码等等;本计划接纳UltraScale系列的GTY作为高速接口、8b/10b编解码的方式实现SFP光口视频编解码;
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的中断模式实现PCIE3.0通信;本架构既有简朴的测速实行,也有视频采集应用;
工程概述
本计划使用Xilinx UltraScale+系列FPGA为平台,实现GTY 8b/10b编解码视频转PCIE3.0传输;视频输入源有多种,一种是板载的HDMI输入接口,另一种是传统摄像头,包罗OV7725、OV5640和AR0135;假如你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模仿输入视频,代码里通过parametr参数选择视频源,默认不使用动态彩条;FPGA起首对摄像头举行i2c初始化配置,然后采集摄像头视频;然后采集输入视频送入视频组包模块,将视频的每一行打上包头包尾标记以包的情势输出,以便接收方举行有效识别;让后调用Xilinx官方的GTY IP核实现视频8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTY IP核实现视频8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像4帧缓存,缓存介质为板载DDR4;每当缓存一帧视频完毕,就发起一次用户中断给XDMA,XDMA收到用户中断后关照QT上位机发起一次XDMA读数据操纵,XDMA再从DDR中读取一帧视频并通过PCIE总线发送给QT上位机,QT上位机接收并表现当前采集的视频;本博客提供2套工程源码,具体如下:
https://i-blog.csdnimg.cn/direct/59d378c5c6864063ac44c97de9d071c8.png
现对上述2套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为Xilinx–Kintex UltraScale±-xcku5p-ffvb676-1-i;输入视频源为2路OV5640摄像头模组或者FPGA内部逻辑生成的动态彩条;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA起首对OV5640摄像头做i2c配置,本计划将OV5640摄像头分辨率配置为1280x720@30Hz;然后采集输入视频,将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;然后采集输入视频送入视频组包模块,将视频的每一行打上包头包尾标记以包的情势输出,以便接收方举行有效识别;让后调用Xilinx官方的GTY IP核实现视频8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTY IP核实现视频8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像4帧缓存,缓存介质为板载DDR4;每当缓存一帧视频完毕,就发起一次用户中断给XDMA,XDMA收到用户中断后关照QT上位机发起一次XDMA读数据操纵,XDMA再从DDR中读取一帧视频并通过PCIE总线发送给QT上位机,QT上位机接收并表现当前采集的视频,输出分辨率为1280x720@60Hz;由此形成Sensor+SFP光口+XDMA+PCIE3.0+QT的高端架构;该工程实用于SFP光口到PCIE3.0接口的数据采集卡应用;
工程源码2
开发板FPGA型号为Xilinx–Kintex UltraScale±-xcku5p-ffvb676-1-i;输入视频为板载的HDMI输入接口,使用笔记本电脑模仿HDMI输入设备连接到开发板HDMI输入接口;HDMI解码使用ADV7611芯片实现,ADV7611输出视频分辨率配置为1920x1080@60Hz;然后采集输入视频送入视频组包模块,将视频的每一行打上包头包尾标记以包的情势输出,以便接收方举行有效识别;让后调用Xilinx官方的GTY IP核实现视频8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的视频通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收视频,然后送入Xilinx官方的GTY IP核实现视频8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入视频解包模块,实现每一行的视频包头包尾拆解,并生成对应的场同步信号和数据有效信号输出;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像4帧缓存,缓存介质为板载DDR4;每当缓存一帧视频完毕,就发起一次用户中断给XDMA,XDMA收到用户中断后关照QT上位机发起一次XDMA读数据操纵,XDMA再从DDR中读取一帧视频并通过PCIE总线发送给QT上位机,QT上位机接收并表现当前采集的视频,输出分辨率为1920x1080@60Hz;由此形成Sensor+SFP光口+XDMA+PCIE3.0+QT的高端架构;该工程实用于SFP光口到PCIE3.0接口的数据采集卡应用;
本博客详细形貌了FPGA基于GTY实现SFP光口视频转PCIE3.0传输的计划方案,工程代码可综合编译上板调试,可直接项目移植,实用于在校门生、研究生项目开发,也实用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末了,请耐烦看到末了;
免责声明
本工程及其源码即有本身写的一部门,也有网络公开渠道获取的一部门(包罗CSDN、Xilinx官网、Altera官网等等),若大佬们以为有所冒犯,请私信批评教诲;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,克制用于商业用途,若由于读者或粉丝自身缘故原由用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我已有的所有工程源码总目次----方便你快速找到本身喜好的项目
其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,本身看得一头雾水,不方便快速定位找到本身想要的项目,以是本博文置顶,列出我目前已有的所有项目,并给出总目次,每个项目标文章链接,当然,本博文及时更新。。。以下是博客地点:
点击直接前往
我这里已有的 GT 高速接口解决方案
我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地点:
点击直接前往
我这里已有的 PCIE方案
我的主页有PCIE通信专栏,该专栏基于XDMA的轮询模式实现与QT上位机的数据交互,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简朴的数据交互、测速,也有应用级别的图像采集传输,以下是专栏地点:
点击直接前往
别的,我的主页有中断模式的PCIE通信专栏,该专栏基于XDMA的中断模式实现与QT上位机的数据交互,以下是专栏地点:
点击直接前往
别的,另有基于RIFFA架构的PCIE通信专栏,以下是专栏地点:
点击直接前往
3、工程详细计划方案
工程计划原理框图
工程计划原理框图如下:
https://i-blog.csdnimg.cn/direct/2793b36f5e534a8395495e5d3c13d1ea.png
输入Sensor之–>OV5640摄像头+动态彩条
输入Sensor是本工程的输入设备,其一为OV5640摄像头,别的本博主在工程中还计划了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模仿Sensor,输入源选择Sensor照旧彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:
https://i-blog.csdnimg.cn/direct/ce57da9c508243bbad49e66b45d52bd9.png
SENSOR_TYPE=0;则输出OV5640摄像头采集的视频;
SENSOR_TYPE=1;则输出动态彩条的视频;
OV5640摄像头必要i2c初始化配置,本计划配置为1280x720@30Hz分辨率,本计划提供纯verilog代码实现的i2c模块实现配置功能;别的,OV5640摄像头还必要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频,本计划提供纯verilog代码实现的图像采集模块实现配置功能;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;将OV5640摄像头配置采集和动态彩条举行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:
https://i-blog.csdnimg.cn/direct/a9a5991f5aa04e4ab85f565827ea46b8.png
输入视频之–>ADV7611芯片解码HDMI+动态彩条
输入视频源有两种,分别对应开发者手里有没有摄像头的环境,一种是使用板载的HDMI视频输入接口;假如你的手里没有HDMI输入口,则可使用FPGA内部逻辑生成的动态彩条模仿摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用HDMI视频输入接口视频源;HDMI解码方案为ADV7611芯片,使用纯verilog实现的i2c模块对ADV7611芯片做初始化配置,输出分辨率配置为1920x1080@60Hz;模块顶层接口如下:
https://i-blog.csdnimg.cn/direct/de05e8bfa5004984a632e7dfd286b6dc.png
parameter SENSOR_TYPE = 0;输出ADV7611解码的HDMI视频
parameter SENSOR_TYPE = 1;输出动态彩条的视频
ADV7611芯片配置采集代码如下:
https://i-blog.csdnimg.cn/direct/90d4ec3b0c08438d8b51b06af3c12f01.png
视频数据组包
由于视频必要在GTY 中通过aurora 8b/10b协议收发,以是数据必须举行组包,以适应aurora 8b/10b协议标准;视频数据组包模块代码位置如下:
https://i-blog.csdnimg.cn/direct/c109f86312cc4e1a86706f94179e8ccc.png
起首,我们将16bit的视频存入FIFO中,存满一行时就从FIFO读出送入GTY发送;在此之前,必要对一帧视频举行编号,也叫作指令,GTY组包时根据固定的指令举行数据发送,GTY解包时根据固定的指令恢复视频的场同步信号和视频有效信号;当一帧视频的场同步信号上升沿到来时,发送一帧视频开始指令 0,当一帧视频的场同步信号降落沿到来时,发送一帧视频开始指令 1,视频消隐期间发送无效数据 0 和无效数据 1,当视频有效信号到来时将每一行视频举行编号,先发送一行视频开始指令,在发送当前的视频行号,当一行视频发送完成后再发送一行视频结束指令,一帧视频发送完成后,先发送一帧视频结束指令 0,再发送一帧视频结束指令 1;至此,一帧视频则发送完成,这个模块不太好理解,以是我在代码里举行了详细的中文注释,必要留意的是,为了防止中文注释的乱序表现,请用notepad++编辑器打开代码;指令界说如下:
https://i-blog.csdnimg.cn/direct/1110f048e6a2479ba2e18fec436b44f4.png
留意!!!指令可以任意更改,但最低字节必须为bc;
基于GTY高速接口的视频传输架构
本计划使用GTY高速接口传输视频,使用8b/10b编解码协议,搭建基于GTY高速接口的视频传输架构,包罗视频数据组包模块、GTY IP核配置调用、接收数据对齐模块、视频数据解包模块等部门,总体代码架构如下:
https://i-blog.csdnimg.cn/direct/518fa32affe54a6094aaf15fe521fd0d.png
基于GTY高速接口的视频传输架构顶层接口核参数配置如下:
https://i-blog.csdnimg.cn/direct/a2ddb387c8a14e2bb7fef3e296ba21f7.png
本计划共例化了2路GTY,以是2路GTY的收发回环方式也做了灵活的参数化配置,假如你只必要1路GT,则可删除另一起,假如你想例化更多路GT,则可根据上述计划方法扩展,十分方便;
GTY IP 简介
关于GTY介绍最详细的肯定是Xilinx官方的《ug578-ultrascale-gty-transceivers》,我们以此来解读:《ug578-ultrascale-gty-transceivers》的PDF文档我已放在了资料包里;我用到的开发板FPGA型号为Kirtex7-UltraScale±xcku5p-ffvb676-1-i;带有16路GTY资源,其中2路连接到了板载2个SFP光口,每通道的收发速度为 500 Mb/s 到 32.75 Gb/s 之间。GTY收发器支持差别的串行传输接口或协议,比如8b/10b编解码、PCIE /2.0/3.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;
GTY 根本结构
GTY 根本结构如下:
https://i-blog.csdnimg.cn/direct/05df6e15a5ea443c849757b617c61909.png
Xilinx 以 Quad 来对串行高速收发器举行分组,四个串行高速收发器和一个 COMMOM(QPLL)组成一个 Quad,每一个串行高速收发器称为一个 Channel(通道),下图为GTY收发器在Kintex7 UltraScale+ FPGA 芯片中的表示图:《ug578-ultrascale-gty-transceivers》第17页;
在 Ultrascale+架构系列的 FPGA 中,GTY 高速收发器通常使用 Quad 来分别,一个 Quad 由四个GTHE4_CHANNEL 原语和一个 GTHE4_COMMON 原语组成。每个GTHE4_COMMON 中包含两个 LC-tank pll(QPLL0 和 QPLL1)。只有在应用步调中使用 QPLL 时,才必要实例化 GTHE4_COMMON。每个 GTHE4_CHANNEL 由一个 channel PLL(CPLL)、一个 transmitter,和一个 receiver 组成。一个参考时钟可以直接连接到一个 GTHE4_CHANNEL 原语,而不必要实例化 GTHE4_COMMON;
GTY 收发器的发送端和接收端功能是相互独立,都是由 Physical Media Attachment(物理媒介适配层 PMA)和Physical Coding Sublayer(物理编码子层 PCS)组成。PMA 内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等;PCS 内部集成了 8b/10b 编解码、弹性缓冲区、通道绑定和时钟修正等,每个 GTHE4_CHANNEL源语的逻辑电路见《ug578-ultrascale-gty-transceivers》第17页;
GTY 的参考时钟
UltraScale+ 器件中的 GTY 收发器提供了差别的参考时钟输入选项。参考时钟选择架构支持 QPLL0、QLPLL1 和CPLL。从架构上讲,每个 Quad 包含四个 GTHE4_CHANNEL 原语,一个 GTHE4_COMMON 原语,两个专用的外部参考时钟引脚对,以及专用的参考时钟路由。假如使用到了高性能 QPLL,则必须实例化 GTHE4_COMMON,如下面 GTHE4_COMMON 时钟多路复用器结构的详细视图所示,(《ug578-ultrascale-gty-transceivers》第31页)在一个 Quad 中有 6 个参考时钟引脚对,两个本地参考时钟引脚对:GTREFCLK0或GTREFCLK1,两个参考时钟引脚对来自上面的两个Quads:GTSOUTHREFCLK0或 GTSOUTHREFCLK1,两个参考时钟引脚对来自下面的两个 Quads: GTNORTHREFCLK0 或GTNORTHREFCLK1。
https://i-blog.csdnimg.cn/direct/f421ad362534429aa52dfa8bf30fcce9.png
GTY 发送和接收处理流程
起首用户逻辑数据经过 8B/10B 编码后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,末了经过高速 Serdes 举行并串转换(PISO),有须要的话,可以举行预加重(TX Pre-emphasis)、后加重。值得一提的是,假如在 PCB 计划时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来补充这个计划错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,必要留意的是 RX 接收端的弹性缓冲区,其具偶然钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,以是这里只必要知道个概念即可,在具体的项目中回具体用到,照旧那句话:对于初次使用或者想快速使用者而言,更多的精神应该关注IP核的调用和使用。
GTY 发送接口
《ug578-ultrascale-gty-transceivers》的第101到182页详细介绍了发送处理流程,其中大部门内容对于用户而言可以不去穷究,由于手册讲的根本都是他本身的计划思想,留给用户可操纵的接口并不多,基于此思绪,我们重点讲讲GTY 例化时留给用户的发送部门必要用到的接口;用户只必要关心发送接口的时钟和数据即可,以例化2路GTY为例,经本博主优化,用户只必要关心如下GTY发送接口即可快速使用GTY;
https://i-blog.csdnimg.cn/direct/b2d9add6cd6941f29b940bb7e7b4173d.png
GTY 接收接口
《ug578-ultrascale-gty-transceivers》的第183到321页详细介绍了发送处理流程,其中大部门内容对于用户而言可以不去穷究,由于手册讲的根本都是他本身的计划思想,留给用户可操纵的接口并不多,基于此思绪,我们重点讲讲GTY例化时留给用户的发送部门必要用到的接口;用户只必要关心接收接口的时钟和数据即可,以例化2路GTY为例,经本博主优化,用户只必要关心如下GTY接收接口即可快速使用GTY;
https://i-blog.csdnimg.cn/direct/35da177c7b04455fb46d3bbff2136d96.png
GTY IP核调用和使用
GTY IP核配置调用在工程种位置如下:
https://i-blog.csdnimg.cn/direct/bec4393692e042bd9d3160cacec7722e.png
GTY IP核调用和使用很简朴,通过vivado的UI界面即可完成,如下:
https://i-blog.csdnimg.cn/direct/6db700a9e9904fd8adb568e2c6b3d0d8.png
GTY根本配置如下:板载差分晶振125M,线速率配置为5G,协议类型被指为aurora 8b/10b;如下:
https://i-blog.csdnimg.cn/direct/20600d4c0c484b21b6b8c55d700103fa.png
相较于Xilinx 7系列FPGA的GT高速接口,UltraScale+系列FPGA在物理约束页也有较大改进,已不必要用户再去检察官方数据手册找到原理图所在的FPGA内部位置,而是直接给出了详细PIN脚,只要在这里选对了位置,GT高速接口的时钟和数据引脚在XDC中已不再必要约束,如下:
https://i-blog.csdnimg.cn/direct/558d1946cce247d48b4df3dc74d8e86c.png
别的,有别于Xilinx 7系列FPGA的GT高速接口;UltraScale+系列FPGA的GT高速接口在控制引脚方面更加细节,用户可以选择具体哪些控制引脚被使用,当然,这必要开发职员对SERDES技术有较高的认知,在此底子上,可使我们的计划更加便捷,对于8B/10编解码协议而言,开发者可能只需关注并使用极性反转控制,假如必要动态变速,可能还必要使用DRP接口,别的功能性接口其实不必太过关注;如下:
https://i-blog.csdnimg.cn/direct/9a504a9f9bd046548d740bbd8e70f0cf.png
接收数据对齐模块
由于GT资源的aurora 8b/10b数据收发自然有着数据错位的环境,以是必要对接受到的解码数据举行数据对齐处理,数据对齐模块代码位置如下:
https://i-blog.csdnimg.cn/direct/4d49d84014174e69a03ee8cb59c0302e.png
我界说的 K 码控制字符格式为:XX_XX_XX_BC,以是用一个rx_ctrl 指示数据是否为 K 码 的 COM 符号;
rx_ctrl = 4’b0000 表示 4 字节的数据没有 COM 码;
rx_ctrl = 4’b0001 表示 4 字节的数据中[ 7: 0] 为 COM 码;
rx_ctrl = 4’b0010 表示 4 字节的数据中 为 COM 码;
rx_ctrl = 4’b0100 表示 4 字节的数据中 为 COM 码;
rx_ctrl = 4’b1000 表示 4 字节的数据中 为 COM 码;
基于此,当接收到有K码时就对数据举行对齐处理,也就是将数据打一拍,和新进来的数据举行错位组合,这是FPGA的底子操纵,这里不再赘述;数据对齐模块顶层接口如下:
https://i-blog.csdnimg.cn/direct/640a4719542345be8c3dee428c7a2520.png
视频数据解包
数据解包是数据组包的逆过程,代码位置如下:
https://i-blog.csdnimg.cn/direct/6aa82025932346edb625b123331cd6b9.png
GTY解包时根据固定的指令恢复视频的场同步信号和视频有效信号;这些信号是作为后面图像缓存的重要信号;由于数据解包是数据组包的逆过程,以是这里不再过多赘述,视频数据解包模块顶层接口如下:
https://i-blog.csdnimg.cn/direct/b6211edda6f6466eae6210d02d3b2e7b.png
FDMA图像缓存
FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR中再读出送后续模块,目标是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现表现效果;由于调用了Xilinx官方的MIG作为DDR控制器,以是FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:
https://i-blog.csdnimg.cn/direct/adb009dd04f14fdcaf8b5e60f1c6a055.png
FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简朴地像使用FIFO那样操纵AXI总线,从而达到读写DDR的目标,进而实现视频缓存;本计划图像缓存方式为4帧缓存;FDMA控制器IP配置如下:
https://i-blog.csdnimg.cn/direct/8036ddb9743f4efa9f94c2596e6f1445.png
FDMA图像缓存架构在Block Design中如下:
https://i-blog.csdnimg.cn/direct/2f8cd198881f4b9d9fbb91fe2ea73c92.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线速率配置为8GT/s,这是PCIE3.0标准,如下:
https://i-blog.csdnimg.cn/direct/e14d6fda417f4826aa21a9ec89d21ca7.png
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;XDMA在Block Design中如下:
https://i-blog.csdnimg.cn/direct/26c304e1497e408e9a15a0439bd7b995.png
XDMA中断模块
XDMA中断模块和XDMA IP共同使用,XDMA中断模块主要实行两个任务,一是获取XDMA的状态,输出用户中断使能信号,以指示用户此时可以发起中断,该任务通过AXI_Lite接口与XDMA连接,其从机地点受PC端软件控制;二是转发用户中断给XDMA,当用户侧检测到XDMA处于可接受中断状态时,用户逻辑可以发起中断,XDMA中断模块将此中断转发给XDMA IP;将模块直接拖入Block Design中,表现如下:
https://i-blog.csdnimg.cn/direct/6afe2494db94427c9687b01273215b53.png
用户中断发起逻辑
每当FDMA缓存一帧视频完毕,就关照用户中断发起逻辑发起一次用户中断操纵,中断号几位当前缓存视频帧的帧号;用户中断通过中断模块发送给XDMA;XDMA收到用户中断后关照QT上位机发起一次XDMA读数据操纵,该过程同样由中断模块转发,XDMA再从DDR3中读取当前一帧视频并通过PCIE总线发送给QT上位机,QT上位机接收并表现当前采集的视频;焦点代码如下:
https://i-blog.csdnimg.cn/direct/29b1fbaad69441aa9891f6c7cb878a9a.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
QT上位机
提供Linux和Win10版本的QT上位机,位置如下:
https://i-blog.csdnimg.cn/direct/d24abe86e31d4b6fa6009fc3ca04cc04.png
以Win10版本为例,源码位置如下:
https://i-blog.csdnimg.cn/direct/8c166570d66f42028b31a94e95a39e1a.png
以Win10版本下,可以点击已经编译好的QT软件直接运行,位置如下:
https://i-blog.csdnimg.cn/direct/649b48fed5284ccc93ff3d4f481443e5.png
Linux下必须先安装QT软件,然后打开QT工程才能运行,如下:
https://i-blog.csdnimg.cn/direct/01d9c8055bfc450aaf0b4cad733b7dc1.png
QT上位机运行效果如下:
https://i-blog.csdnimg.cn/direct/bfb66020f3ee4b67b4da4ba44fa170f1.png
工程源码架构
提供2套工程源码,以工程源码1为例,工程Block Design计划如下:
https://i-blog.csdnimg.cn/direct/d24c713d6a1d4b029912da976047a6aa.png
提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
https://i-blog.csdnimg.cn/direct/4936d7f125634e15a67851ba4d441dcd.png
Vivado工程留意事项
Vivado工程必要共同修改过的Xilinx官方XDMA驱动和QT上位机一起使用,以是Vivado工程必须做到以下几点:
1:XDMA中的AXI4_Lite基地点必须设为0x44A00000,这是XDMA驱动修改的规定,感兴趣的可以去看驱动源码,配置如下;
https://i-blog.csdnimg.cn/direct/7ecf802f6a63420da5eed34b0480da6d.png
2:MIG的DDR基地点必须从0x00000000开始,这是QT上位机代码的规定,感兴趣的可以去看QT源码,配置如下;
https://i-blog.csdnimg.cn/direct/8e0d08661a714abaa42742fdb2861746.png
PCIE上板调试留意事项
1:必须先安装本博提供的XDMA驱动,详情请参考第4章节的《XDMA驱动及其安装》,Windows版本驱动只需安装一次;
2:Windows版本下载FPGA工程bit后必要重启电脑,电脑才能识别到XDMA驱动;步调固化后也必要重启电脑;Linux版本每次载FPGA工程bit后都必要重启电脑,都必要安装XDMA驱动;
3:FPGA板卡插在主机上后一样平常不必要额外供电,假如你的板子元器件较多功耗较大,则必要额外供电,详情咨询开发板厂家,当然,找我买板子的客户可以直接问我;
4:PCIE调试必要电脑主机,但笔记本电脑理论上也可以外接出来PCIE,详情百度自行搜刮一下,电脑主机PCIE插槽不方便操纵时可以使用延长线接出来,某宝有卖;
4、vivado工程源码1详解–>KU5P,OV5640输入版本
开发板FPGA型号:Xilinx–Kintex UltraScale±-xcku5p-ffvb676-1-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
输入:OV5640摄像头或动态彩条,分辨率1280x720@30Hz;
输出:PCIE3.0,分辨率1280x720@60Hz;
回环光口类型:SFP光口;
高速接口类型:GTY,线速率5Gbps;
高速接口编解码协议:8b/10b编解码;
图像缓存方案:FDMA图像缓存+DDR4颗粒+3帧缓存;
PCIE底层方案:Xilinx XDMA,8GT/s单lane线速率;
PCIE接口详情:PCIE3.0版本,4 Lane,8GT/s单lane线速率;
实现功能:FPGA基于GTY实现SFP光口视频转PCIE3.0传输;
工程作用:此工程目标是让读者掌握FPGA基于GTY实现SFP光口视频转PCIE3.0传输的计划本领,以便能够移植和计划本身的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源斲丧和功耗如下:
https://i-blog.csdnimg.cn/direct/5449ec8d953a4de5b8f7dc45c3669404.png
5、vivado工程源码2详解–>KU5P,HDMI输入版本
开发板FPGA型号:Xilinx–Kintex UltraScale±-xcku5p-ffvb676-1-i;
FPGA开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,ADV7611解码方案,分辨率1920x1080@60Hz,笔记本电脑模仿输入源;
输出:PCIE3.0,分辨率1920x1080@60Hz;
回环光口类型:SFP光口;
高速接口类型:GTY,线速率5Gbps;
高速接口编解码协议:8b/10b编解码;
图像缓存方案:FDMA图像缓存+DDR4颗粒+3帧缓存;
PCIE底层方案:Xilinx XDMA,8GT/s单lane线速率;
PCIE接口详情:PCIE3.0版本,4 Lane,8GT/s单lane线速率;
实现功能:FPGA基于GTY实现SFP光口视频转PCIE3.0传输;
工程作用:此工程目标是让读者掌握FPGA基于GTY实现SFP光口视频转PCIE3.0传输的计划本领,以便能够移植和计划本身的项目;
https://i-blog.csdnimg.cn/direct/70ac9bc50916400fb4cdd972668f4ea3.png
6、工程移植说明
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软核;
7、上板调试验证
预备工作
必要预备的器材如下:
笔记本电脑,没有则请使用FPGA内部生成的彩条;
FPGA开发板,没有开发板可以找本博提供;
SFP光模块和光纤;
我的开发板了连接如下:
https://i-blog.csdnimg.cn/direct/816e1de496bb4482b010c01f72aefa66.png
视频GTY 8b/10b编解码转PCIE3.0传输效果演示
视频GTY 8b/10b编解码转PCIE3.0传输效果演示如下:
HDMI-XDMA
8、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末了的V名片。
网盘资料如下:
https://i-blog.csdnimg.cn/direct/1f72bfbfb276401aad8d8bfcb0ed7211.png
别的,有很多朋友给本博主提了很多意见和发起,希望能丰富服务内容和选项,由于差别朋友的需求不一样,以是本博主还提供以下服务:
https://i-blog.csdnimg.cn/blog_migrate/3822b51eedd8e3bf90dbed737ac4a2e1.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]