论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
FPGA基于GTY实现SFP光口视频转PCIE3.0传输,Aurora 8b/1 ...
FPGA基于GTY实现SFP光口视频转PCIE3.0传输,Aurora 8b/10b+XDMA架构,提供2 ...
瑞星
论坛元老
|
2025-3-31 03:19:55
|
显示全部楼层
|
阅读模式
楼主
主题
1762
|
帖子
1762
|
积分
5286
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套工程源码,具体如下:
现对上述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、工程详细计划方案
工程计划原理框图
工程计划原理框图如下:
输入Sensor之–>OV5640摄像头+动态彩条
输入Sensor是本工程的输入设备,其一为OV5640摄像头,别的本博主在工程中还计划了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模仿Sensor,输入源选择Sensor照旧彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:
SENSOR_TYPE=0;则输出OV5640摄像头采集的视频;
SENSOR_TYPE=1;则输出动态彩条的视频;
OV5640摄像头必要i2c初始化配置,本计划配置为1280x720@30Hz分辨率,本计划提供纯verilog代码实现的i2c模块实现配置功能;别的,OV5640摄像头还必要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频,本计划提供纯verilog代码实现的图像采集模块实现配置功能;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;将OV5640摄像头配置采集和动态彩条举行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:
输入视频之–>ADV7611芯片解码HDMI+动态彩条
输入视频源有两种,分别对应
开发
者手里有没有摄像头的环境,一种是使用板载的HDMI视频输入接口;假如你的手里没有HDMI输入口,则可使用FPGA内部逻辑生成的动态彩条模仿摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用HDMI视频输入接口视频源;HDMI解码方案为ADV7611芯片,使用纯verilog实现的i2c模块对ADV7611芯片做初始化配置,输出分辨率配置为1920x1080@60Hz;模块顶层接口如下:
parameter SENSOR_TYPE = 0;输出ADV7611解码的HDMI视频
parameter SENSOR_TYPE = 1;输出动态彩条的视频
ADV7611芯片配置采集代码如下:
视频数据组包
由于视频必要在GTY 中通过aurora 8b/10b协议收发,以是数据必须举行组包,以适应aurora 8b/10b协议标准;视频数据组包模块代码位置如下:
起首,我们将16bit的视频存入FIFO中,存满一行时就从FIFO读出送入GTY发送;在此之前,必要对一帧视频举行编号,也叫作指令,GTY组包时根据固定的指令举行数据发送,GTY解包时根据固定的指令恢复视频的场同步信号和视频有效信号;当一帧视频的场同步信号上升沿到来时,发送一帧视频开始指令 0,当一帧视频的场同步信号降落沿到来时,发送一帧视频开始指令 1,视频消隐期间发送无效数据 0 和无效数据 1,当视频有效信号到来时将每一行视频举行编号,先发送一行视频开始指令,在发送当前的视频行号,当一行视频发送完成后再发送一行视频结束指令,一帧视频发送完成后,先发送一帧视频结束指令 0,再发送一帧视频结束指令 1;至此,一帧视频则发送完成,这个模块不太好理解,以是我在代码里举行了详细的中文注释,必要留意的是,为了防止中文注释的乱序表现,请用notepad++编辑器打开代码;指令界说如下:
留意!!!指令可以任意更改,但最低字节必须为bc;
基于GTY高速接口的视频传输架构
本计划使用GTY高速接口传输视频,使用8b/10b编解码协议,搭建基于GTY高速接口的视频传输架构,包罗视频数据组包模块、GTY IP核配置调用、接收数据对齐模块、视频数据解包模块等部门,总体代码架构如下:
基于GTY高速接口的视频传输架构顶层接口核参数配置如下:
本计划共例化了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 根本结构如下:
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。
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;
GTY 接收接口
《ug578-ultrascale-gty-transceivers》的第183到321页详细介绍了发送处理流程,其中大部门内容对于用户而言可以不去穷究,由于手册讲的根本都是他本身的计划思想,留给用户可操纵的接口并不多,基于此思绪,我们重点讲讲GTY例化时留给用户的发送部门必要用到的接口;用户只必要关心接收接口的时钟和数据即可,以例化2路GTY为例,经本博主优化,用户只必要关心如下GTY接收接口即可快速使用GTY;
GTY IP核调用和使用
GTY IP核配置调用在工程种位置如下:
GTY IP核调用和使用很简朴,通过vivado的UI界面即可完成,如下:
GTY根本配置如下:板载差分晶振125M,线速率配置为5G,协议类型被指为aurora 8b/10b;如下:
相较于Xilinx 7系列FPGA的GT高速接口,UltraScale+系列FPGA在物理约束页也有较大改进,已不必要用户再去检察官方数据手册找到原理图所在的FPGA内部位置,而是直接给出了详细PIN脚,只要在这里选对了位置,GT高速接口的时钟和数据引脚在XDC中已不再必要约束,如下:
别的,有别于Xilinx 7系列FPGA的GT高速接口;UltraScale+系列FPGA的GT高速接口在控制引脚方面更加细节,用户可以选择具体哪些控制引脚被使用,当然,这必要
开发
职员对SERDES技术有较高的认知,在此底子上,可使我们的计划更加便捷,对于8B/10编解码协议而言,
开发
者可能只需关注并使用极性反转控制,假如必要动态变速,可能还必要使用DRP接口,别的功能性接口其实不必太过关注;如下:
接收数据对齐模块
由于GT资源的aurora 8b/10b数据收发自然有着数据错位的环境,以是必要对接受到的解码数据举行数据对齐处理,数据对齐模块代码位置如下:
我界说的 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 字节的数据中[15: 8] 为 COM 码;
rx_ctrl = 4’b0100 表示 4 字节的数据中[23:16] 为 COM 码;
rx_ctrl = 4’b1000 表示 4 字节的数据中[31:24] 为 COM 码;
基于此,当接收到有K码时就对数据举行对齐处理,也就是将数据打一拍,和新进来的数据举行错位组合,这是FPGA的底子操纵,这里不再赘述;数据对齐模块顶层接口如下:
视频数据解包
数据解包是数据组包的逆过程,代码位置如下:
GTY解包时根据固定的指令恢复视频的场同步信号和视频有效信号;这些信号是作为后面图像缓存的重要信号;由于数据解包是数据组包的逆过程,以是这里不再过多赘述,视频数据解包模块顶层接口如下:
FDMA图像缓存
FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR中再读出送后续模块,目标是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现表现效果;由于调用了Xilinx官方的MIG作为DDR控制器,以是FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:
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配置如下:
FDMA图像缓存架构在Block Design中如下:
XDMA配置及使用
根据Xilinx官方手册,XDMA框图如下:
由图可知,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 条用户中断线,这些中断线会向主机生成中断。本计划必要配置为中断模式;如下图:
本计划XDMA线速率配置为8GT/s,这是PCIE3.0标准,如下:
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;XDMA在Block Design中如下:
XDMA中断模块
XDMA中断模块和XDMA IP共同使用,XDMA中断模块主要实行两个任务,一是获取XDMA的状态,输出用户中断使能信号,以指示用户此时可以发起中断,该任务通过AXI_Lite接口与XDMA连接,其从机地点受PC端软件控制;二是转发用户中断给XDMA,当用户侧检测到XDMA处于可接受中断状态时,用户逻辑可以发起中断,XDMA中断模块将此中断转发给XDMA IP;将模块直接拖入Block Design中,表现如下:
用户中断发起逻辑
每当FDMA缓存一帧视频完毕,就关照用户中断发起逻辑发起一次用户中断操纵,中断号几位当前缓存视频帧的帧号;用户中断通过中断模块发送给XDMA;XDMA收到用户中断后关照QT上位机发起一次XDMA读数据操纵,该过程同样由中断模块转发,XDMA再从DDR3中读取当前一帧视频并通过PCIE总线发送给QT上位机,QT上位机接收并表现当前采集的视频;焦点代码如下:
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
QT上位机
提供Linux和Win10版本的QT上位机,位置如下:
以Win10版本为例,源码位置如下:
以Win10版本下,可以点击已经编译好的QT软件直接运行,位置如下:
Linux下必须先安装QT软件,然后打开QT工程才能运行,如下:
QT上位机运行效果如下:
工程源码架构
提供2套工程源码,以工程源码1为例,工程Block Design计划如下:
提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
Vivado工程留意事项
Vivado工程必要共同修改过的Xilinx官方XDMA驱动和QT上位机一起使用,以是Vivado工程必须做到以下几点:
1:XDMA中的AXI4_Lite基地点必须设为0x44A00000,这是XDMA驱动修改的规定,感兴趣的可以去看驱动源码,配置如下;
2:MIG的DDR基地点必须从0x00000000开始,这是QT上位机代码的规定,感兴趣的可以去看QT源码,配置如下;
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章节的《工程源码架构》小节内容;
工程的资源斲丧和功耗如下:
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传输的计划本领,以便能够移植和计划本身的项目;
6、工程移植说明
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软核;
7、上板调试验证
预备工作
必要预备的器材如下:
笔记本电脑,没有则请使用FPGA内部生成的彩条;
FPGA
开发
板,没有
开发
板可以找本博提供;
SFP光模块和光纤;
我的
开发
板了连接如下:
视频GTY 8b/10b编解码转PCIE3.0传输效果演示
视频GTY 8b/10b编解码转PCIE3.0传输效果演示如下:
HDMI-XDMA
8、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末了的V名片。
网盘资料如下:
别的,有很多朋友给本博主提了很多意见和发起,希望能丰富服务内容和选项,由于差别朋友的需求不一样,以是本博主还提供以下服务:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
瑞星
论坛元老
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
2022护网面试题总结
OpenSSL RSA相关基本接口和编程示例 ...
一次服务器被入侵的处理过程分享 ...
使用 Power Shell 修改 Hyper-V 虚拟机 ...
Android studio 连接SQLite数据库 +创 ...
适用于顺序磁盘访问的1分钟法则 ...
kubernetes入门
内网安全-横向移动(1)
Iceberg在袋鼠云的探索及实践 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表