一男一女做那个的动漫视频网站,成都房地产公司前十名,厦门市网站建设公司,怎么用wordpress做企业网站目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的FPGA驱动USB通信方案 3、工程详细设计方案工程设计原理框图输入Sensor之--OV5640摄像头输入Sensor之--芯片解码的… 目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的FPGA驱动USB通信方案 3、工程详细设计方案工程设计原理框图输入Sensor之--OV5640摄像头输入Sensor之--芯片解码的HDMI视频数据组包基于GTP高速接口的视频传输架构GTP IP 简介GTP 基本结构GTP 发送和接收处理流程GTP 的参考时钟GTP 发送接口GTP 接收接口GTP IP核调用和使用 数据对齐视频数据解包FDMA图像缓存FT601功能和硬件电路FT601读时序解读FT601写时序解读FT601用户读写逻辑FT601驱动安装USB3.0视频接收显示QT上位机工程源码架构 4、vivado工程源码1详解--Aritx7--35TOV6540输入版本5、vivado工程源码2详解--Aritx7--100TOV6540输入版本6、vivado工程源码3详解--Aritx7--100THDMI输入版本7、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 8、上板调试验证准备工作GTP光口视频转USB3.0传输效果演示 9、工程代码的获取 FPGA实现GTP光口视频转USB3.0传输基于FT601Aurora 8b/10b编解码架构提供3套工程源码和技术支持 1、前言
FPGA实现USB3.0现状 目前FPGA实现USB3.0的实现方案很多但就简单好用的角度而言FT601应该是最佳方案因为它电路设计简单操作时序简单软件驱动简单官方甚至提供了包括FPGA驱动在内的丰富的驱动源码和测试软件本设计旨在普及传播FT601芯片在FPGA领域实现USB3.0通信应用包括FT601芯片解读、FT601芯片读写时序分析、FT601芯片硬件电路参考设计、FT601与PC端的QT上位机通信包括FT601测速试验、FT601视频采集传输试验、FT601视频采集图像处理后传输试验等等
FPGA实现SFP光口视频编解码现状 目前基于Xilinx系列FPGA的SFP光口视频编解码主要有以下几种Artix7系列的GTP、Kintex7系列的GTX、更高端FPGA器件的GTH、GTY、GTV、GTM等线速率越来越高应用场景也越来越高端编码方式也是多种多样有8b/10b编解码、64b/66b编解码、HDMI编解码、SDI编解码等等本设计采用7系列的GTP作为高速接口、8b/10b编解码的方式实现SFP光口视频编解码
工程概述
本设计使用Xilinx Artix7系列FPGA为平台实现GTP 8b/10b编解码视频传输视频输入源有多种一种是板载的HDMI输入接口另一种是传统摄像头包括OV7725、OV5640和AR0135如果你的FPGA开发板没有视频输入接口或者你的手里没有摄像头时可以使用FPGA逻辑实现的动态彩条模拟输入视频代码里通过parametr参数选择视频源默认不使用动态彩条FPGA首先对摄像头进行i2c初始化配置然后采集摄像头视频然后采集输入视频送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的GTP IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的GTP IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR3然后由FT601读写逻辑控制视频从DDR3中读出FT601使用同步FIFO-245模式工作模式通过GPIO0/GPIO1引脚配置根据FT601读写时序设计了读写状态机在PC端QT上位机控制下FT601读写逻辑产生从DDR3中读取视频的控制信号并将读出的视频通过FT601写数据总线发送到板载的FT601芯片FPGA开发板通过USB3.0数据线连接至PC端主机PC端的QT上位机调用FT601驱动的API实现图像读取并显示视频由此形成外接SensorFPGA高速接口光编码USB3.0QT上位机的珠联璧合针对市场主流需求本博客设计并提供3套工程源码具体如下 现对上述3套工程源码做如下解释方便读者理解
工程源码1
开发板FPGA型号为Xilinx–Artix7–xc7a35tfgg484-2输入视频为OV5640摄像头或者动态彩条默认使用OV5640FPGA首先使用纯Verilog实现的i2c总线对摄像头进行初始化配置分辨率配置为1280x72030Hz然后采集输入视频将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB888像素的视频然后采集输入视频送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的GTP IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的GTP IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR3然后由FT601读写逻辑控制视频从DDR3中读出FT601使用同步FIFO-245模式工作模式通过GPIO0/GPIO1引脚配置根据FT601读写时序设计了读写状态机在PC端QT上位机控制下FT601读写逻辑产生从DDR3中读取视频的控制信号并将读出的视频通过FT601写数据总线发送到板载的FT601芯片FPGA开发板通过USB3.0数据线连接至PC端主机输出分辨率为1280x72060HzPC端的QT上位机调用FT601驱动的API实现图像读取并显示视频由此形成SensorFPGA高速接口光编码USB3.0QT上位机的高端架构该工程适用于SFP光口的视频采集卡光端机应用
工程源码2
开发板FPGA型号为Xilinx–Artix7–xc7a1000tfgg484-2输入视频为OV5640摄像头或者动态彩条默认使用OV5640FPGA首先使用纯Verilog实现的i2c总线对摄像头进行初始化配置分辨率配置为1280x72030Hz然后采集输入视频将输入的两个时钟传输一个RGB565像素的视频采集为一个时钟传输一个RGB888像素的视频然后采集输入视频送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的GTP IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的GTP IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR3然后由FT601读写逻辑控制视频从DDR3中读出FT601使用同步FIFO-245模式工作模式通过GPIO0/GPIO1引脚配置根据FT601读写时序设计了读写状态机在PC端QT上位机控制下FT601读写逻辑产生从DDR3中读取视频的控制信号并将读出的视频通过FT601写数据总线发送到板载的FT601芯片FPGA开发板通过USB3.0数据线连接至PC端主机输出分辨率为1280x72060HzPC端的QT上位机调用FT601驱动的API实现图像读取并显示视频由此形成SensorFPGA高速接口光编码USB3.0QT上位机的高端架构该工程适用于SFP光口的视频采集卡光端机应用
工程源码3
开发板FPGA型号为Xilinx–Artix7–xc7a1000tfgg484-2输入视频为HDMI视频用笔记本电脑模拟笔记本电脑通过HDMI线连接FPGA开发板的HDMI输入接口板载的ADV7611芯片实现HDMI视频解码FPGA使用纯Verilog实现的i2c总线对ADV7611进行初始化配置分辨率配置为1920x108060Hz输出RGB888视频给FPGA然后采集输入视频送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的GTP IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的GTP IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR3然后由FT601读写逻辑控制视频从DDR3中读出FT601使用同步FIFO-245模式工作模式通过GPIO0/GPIO1引脚配置根据FT601读写时序设计了读写状态机在PC端QT上位机控制下FT601读写逻辑产生从DDR3中读取视频的控制信号并将读出的视频通过FT601写数据总线发送到板载的FT601芯片FPGA开发板通过USB3.0数据线连接至PC端主机输出分辨率为1920x108060HzPC端的QT上位机调用FT601驱动的API实现图像读取并显示视频由此形成SensorFPGA高速接口光编码USB3.0QT上位机的高端架构该工程适用于SFP光口的视频采集卡光端机应用
本博客详细描述了FPGA基于Aurora 8b/10b编解码架构实现GTP光口视频转USB3.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开发板搭建以下是专栏地址 点击直接前往
本博已有的FPGA驱动USB通信方案
我的博客主页开设有FPGA驱动USB通信专栏里面全是FPGA驱动USB通信的工程源码及博客介绍既有基于USB2.0也有USB3.0方案包括USB2.0/3.0测速试验、USB2.0/3.0视频采集传输试验、USB2.0/3.0视频采集图像处理后传输试验等等所有工方案均包括FPGA工程和QT上位机源码专栏地址链接如下 点击直接前往
3、工程详细设计方案
工程设计原理框图
工程设计原理框图如下
输入Sensor之–OV5640摄像头
输入Sensor是本工程的输入设备其一为OV5640摄像头此外本博主在工程中还设计了动态彩条模块彩条由FPGA内部逻辑产生且是动态移动的完全可模拟Sensor输入源选择Sensor还是彩条通过Sensor模块的顶层参数配置默认选择Sensor输入Sensor模块如下 SENSOR_TYPE0则输出OV5640摄像头采集的视频 SENSOR_TYPE1则输出动态彩条的视频
OV5640摄像头需要i2c初始化配置本设计配置为1280x72030Hz分辨率本设计提供纯verilog代码实现的i2c模块实现配置功能此外OV5640摄像头还需要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频本设计提供纯verilog代码实现的图像采集模块实现配置功能动态彩条则由FPGA内部逻辑实现由纯verilog代码编写将OV5640摄像头配置采集和动态彩条进行代码封装形成helai_OVsensor.v的顶层模块整个模块代码架构如下
输入Sensor之–芯片解码的HDMI
输入Sensor是本工程的输入设备其二为板载的HDMI输入接口输入源为板载的HDMI输入接口或动态彩条分辨率为1920x108060Hz使用笔记本电脑接入HDMI输入接口以模拟输入SensorHDMI解码方案为芯片解码保活ADV7611、IT6802\Silcom9011等芯片以ADV7611为例可将输入的HDMI视频解码为RGB888视频FPGA纯verilog实现的i2c配置模块完成对ADV7611芯片的配置分辨率配置为1920x108060Hz可以通过Sensor模块的顶层参数配置默认选择Sensor输入Sensor模块如下 SENSOR_TYPE0则输出HDMI接口采集的视频 SENSOR_TYPE1则输出动态彩条的视频 整个模块代码架构如下
视频数据组包
由于视频需要在GTP 中通过aurora 8b/10b协议收发所以数据必须进行组包以适应aurora 8b/10b协议标准视频数据组包模块代码位置如下 首先我们将16bit的视频存入FIFO中存满一行时就从FIFO读出送入GTP发送在此之前需要对一帧视频进行编号也叫作指令GTP组包时根据固定的指令进行数据发送GTP解包时根据固定的指令恢复视频的场同步信号和视频有效信号当一帧视频的场同步信号上升沿到来时发送一帧视频开始指令 0当一帧视频的场同步信号下降沿到来时发送一帧视频开始指令 1视频消隐期间发送无效数据 0 和无效数据 1当视频有效信号到来时将每一行视频进行编号先发送一行视频开始指令在发送当前的视频行号当一行视频发送完成后再发送一行视频结束指令一帧视频发送完成后先发送一帧视频结束指令 0再发送一帧视频结束指令 1至此一帧视频则发送完成这个模块不太好理解所以我在代码里进行了详细的中文注释需要注意的是为了防止中文注释的乱序显示请用notepad编辑器打开代码指令定义如下 注意指令可以任意更改但最低字节必须为bc
基于GTP高速接口的视频传输架构
本设计使用GTP高速接口传输视频使用8b/10b编解码协议搭建基于GTP高速接口的视频传输架构包括视频数据组包模块、GTP IP核配置调用、接收数据对齐模块、视频数据解包模块等部分总体代码架构如下 基于GTP高速接口的视频传输架构顶层接口核参数配置如下 本设计共例化了2路GTP所以2路GTP的收发回环方式也做了灵活的参数化配置如果你只需要1路GT则可删除另一路如果你想例化更多路GT则可根据上述设计方法扩展十分方便
GTP IP 简介
关于GTP介绍最详细的肯定是Xilinx官方的《ug482_7Series_GTP_Transceivers》我们以此来解读《ug482_7Series_GTP_Transceivers》的PDF文档我已放在了资料包里我用到的开发板FPGA型号为Xilinx–Artix7系列FPGA带有4路GTP资源每通道的收发速度为500 Mb/s到6.6 Gb/s之间。GTP收发器支持不同的串行传输接口或协议比如8b/10b编解码、PCIE /2.0接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等
GTP 基本结构
Xilinx 以 Quad 来对串行高速收发器进行分组四个串行高速收发器和一个 COMMOMQPLL组成一个 Quad每一个串行高速收发器称为一个 Channel(通道下图为四路 GTP 收发器在Artix7系列FPGA 芯片中的示意图《ug482_7Series_GTP_Transceivers》第13页GTP 的具体内部逻辑框图如下所示它由四个收发器通道 GTPE2_CHANNEL原语 和一个GTPE2_COMMON 原语 组成。每路 GTPE2_CHANNEL 包含发送电路 TX 和接收电路 RX《ug482_7Series_GTP_Transceivers》第14页每个 GTPE2_CHANNEL 的逻辑电路如下图所示《ug482_7Series_GTP_Transceivers》第15页 GTPE2_CHANNEL的发送端和接收端功能是独立的均由 PMA(Physical Media Attachment物理媒介适配层)和 PCS(Physical Coding Sublayer物理编码子层)两个子层组成。其中 PMA 子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS 子层包含8B/10B 编解码、缓冲区、通道绑定和时钟修正等电路。 这里说多了意义不大因为没有做过几个大的项目是不会理解这里面的东西的对于初次使用或者想快速使用者而言更多的精力应该关注IP核的调用和使用后面我也会重点将到IP核的调用和使用
GTP 发送和接收处理流程
首先用户逻辑数据经过 8B/10B 编码后进入一个发送缓存区Phase Adjust FIFO该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离解决两者时钟速率匹配和相位差异的问题最后经过高速 Serdes 进行并串转换(PISO)有必要的话可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反相似点较多这里就不赘述了需要注意的是 RX 接收端的弹性缓冲区其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书所以这里只需要知道个概念即可在具体的项目中回具体用到还是那句话对于初次使用或者想快速使用者而言更多的精力应该关注IP核的调用和使用。
GTP 的参考时钟
GTP 模块有两个差分参考时钟输入管脚(MGTREFCLK0P/N 和 MGTREFCLK1P/N作为 GTP模块的参考时钟源用户可以自行选择。一般的A7系列开发板上都有一路 125Mhz 的 GTP 参考时钟连接到 MGTREFCLK0/1上作为 GTP 的参考时钟。差分参考时钟通过IBUFDS 模块转换成单端时钟信号进入到 GTPE2_COMMOM 的 PLL0 和 PLL1 中产生 TX 和 RX 电路中所需的时钟频率。TX 和 RX 收发器速度相同的话TX 电路和 RX 电路可以使用同一个 PLL 产生的时钟如果 TX 和 RX收发器速度不相同的话需要使用不同的 PLL 时钟产生的时钟。参考时钟这里Xilinx给出的GT参考例程已经做得很好了我们调用时其实不用修改GTP 的参考时钟结构图如下《ug482_7Series_GTP_Transceivers》第21页
GTP 发送接口
《ug482_7Series_GTP_Transceivers》的第75到123页详细介绍了发送处理流程其中大部分内容对于用户而言可以不去深究因为手册讲的基本都是他自己的设计思想留给用户可操作的接口并不多基于此思路我们重点讲讲GTP例化时留给用户的发送部分需要用到的接口用户只需要关心发送接口的时钟和数据即可以例化2路GTP为例经本博主优化用户只需要关心如下GTP发送接口即可快速使用GTP
GTP 接收接口
《ug482_7Series_GTP_Transceivers》的第125到213页详细介绍了发送处理流程其中大部分内容对于用户而言可以不去深究因为手册讲的基本都是他自己的设计思想留给用户可操作的接口并不多基于此思路我们重点讲讲GTP例化时留给用户的发送部分需要用到的接口用户只需要关心接收接口的时钟和数据即可以例化2路GTP为例经本博主优化用户只需要关心如下GTP接收接口即可快速使用GTP
GTP IP核调用和使用
GTP IP核配置调用在工程种位置如下 GTP IP核调用和使用很简单通过vivado的UI界面即可完成如下 有别于网上其他博主的教程我个人喜欢用如下图的共享逻辑这样选择的好处有两个一是方便DRP变速二是便于IP核的修改修改完IP核后直接编译即可不再需要打开example工程再复制下面的一堆文件放到自己的工程什么的玩儿个GTP需要那么复杂么 这里对上图的标号做解释 1线速率根据自己的项目需求来GTP的范围是0.5到6.25G由于我的项目是视频传输所以在GTP的速率范围内均可为了通用性我在vivado工程中配置为5G 2参考时钟这个得根据你的原理图来可以是80M、125M、148.5M、156.25M等等我的开发板是125M 4GTP组的绑定这个很重要他的绑定参考依据有两个已是你的开发板原理图而是官方的参考资料《ug482_7Series_GTP_Transceivers》官方将GTP资源分成了4组名字分别为X0Y0、X0Y1、X0Y2、X0Y3由于GT资源是Xilinx系列FPGA的专用资源占用专用的Bnak所以引脚也是专用的那么这些GTP组和引脚是怎么对应的呢《ug482_7Series_GTP_Transceivers》的说明如下红框内为的我的开发板原理图对应的FPGA引脚 我的板子原理图如下 选择外部数据位宽32bit的8b/10b编解码如下 下面这里讲的是K码检测 这里选择K28.5也就是所谓的COM码十六进制为bc他的作用很多可以表示空闲乱序符号也可以表示数据错位标志这里用来标志数据错位8b/10b协议对K码的定义如下 下面讲的是时钟矫正也就是对应GTP内部接收部分的弹性buffer 这里有一个时钟频偏的概念特别是收发双方时钟不同源时这里设置的频偏为100ppm规定每隔5000个数据包发送方发送一个4字节的序列接收方的弹性buffer会根据这4字节的序列以及数据在buffer中的位置来决定删除或者插入一个4字节的序列中的一个字节目的是确保数据从发送端到接收端的稳定性消除时钟频偏的影响
数据对齐
由于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的基础操作这里不再赘述数据对齐模块顶层接口如下
视频数据解包
数据解包是数据组包的逆过程代码位置如下 GTP解包时根据固定的指令恢复视频的场同步信号和视频有效信号这些信号是作为后面图像缓存的重要信号由于数据解包是数据组包的逆过程所以这里不再过多赘述视频数据解包模块顶层接口如下
FDMA图像缓存
FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块目的是实现视频同步输出实现输入视频到输出视频的跨时钟域问题更好的呈现显示效果由于调用了Xilinx官方的MIG作为DDR控制器所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用架构如下 FDMA图像缓存架构由FDMA控制器FDMA组成FDMA实际上就是一个AXI4-FULL总线主设备与MIG对接MIG配置为AXI4-FULL接口FDMA控制器实际上就是一个视频读写逻辑以写视频为例假设一帧图像的大小为M×N其中M代表图像宽度N代表图像高度FDMA控制器每次写入一行视频数据即每次向DDR3中写入M个像素写N次即可完成1帧图像的缓存读视频与之一样同时调用两个FIFO实现输入输出视频的跨时钟域处理使得用户可以AXI4内部代码以简单地像使用FIFO那样操作AXI总线从而达到读写DDR的目的进而实现视频缓存本设计图像缓存方式为3帧缓存图像缓存模块代码架构如下 基于FDMA的图像缓存架构在Block Design设计中如下
FT601功能和硬件电路
FT600/601Q 的技术参数如下 FT600601Q 芯片是 FT 最新推出的 USB3.0 to FIFO interface IC实现 USB3.0 与 16/32bit 并行 IO 接口之间的数据传输整个 USB 通信协议全部由芯片驱动自行完成开发者无须考虑 USB 底层固件的编程。 –兼容支持 USB3.05Gbps,向下兼容 USB2.0480Mbps and 12Mbps传输 –高达 8 个可配置 Endpoint. 支持 2 种 FIFO 传输协议最大传输可达 400MB/s –芯片内部有 16K 字节的缓冲区可以进行数据的大吞吐量操作 –支持远程唤醒功能 –芯片支持多种 IO 电压1.8V,2.5V.3.3V –通过 16bit D[O15]或 32bit D[0:31]并行数据线和读写状态控制线 RXF、TXE、RD、WR加上时钟 CLK使能 OE 信号线就可实现与 CPU/FPGA 的数据交换 –该芯片内部集成 1.0V LDO,可提供给芯片核心部分使用 –工业级芯片工作温度范围-40 to 85℃ FT601芯片框架如下 FT601外围电路设计参考如下 FT601支持的多种传输模式其中 245 Synchronous FIFO 模式和 Multi-Channel FIFO 模式是最常用的模式本工程配置为 245 Synchronous FIFO 模式传输模式通过GPIO引脚高低电平配置配置真值表如下
FT601读时序解读
FT601的245 Synchronous FIFO 模式读时序如下 RXF_N为读数据状态信号RXF_N为低电平期间FPGA可以读取FT601数据 检测到RXF_N低电平后拉低OE_N和RD_N然后开始读数据 检测到RXF_N高电平后拉高OE_N和RD_N然后退出读数据状态
FT601写时序解读
FT601的245 Synchronous FIFO 模式写时序如下 TXF_N为读数据状态信号RXF_N为低电平期间FPGA向FT601写入数据 检测到TXF_N低电平后拉低WR_N然后开始向FT601写入数据 检测到TXF_N高电平后拉高WR_N然后退出写数据状态
FT601用户读写逻辑
基于以上对FT601的解读就可以用verilog实现对FT601的读写操作了工程中FT601用户读写逻辑代码如下 FT601用户读写逻辑代码顶层接口如下
FT601驱动安装
注意驱动只需要安装一次即可 首先下载bit到FPGA开发板如下 然后打开PC端–我的电脑–管理–设备管理器可以看到FT601设备已经识别如下 如果你已经下载了FT601驱动文件但没有安装则有的电脑会自动寻找驱动并自定安装所以等待大约1分钟后电脑自动帮我们装好了FT601驱动如下 如果你的电脑不能自动寻找驱动并安装请手动安装驱动如下
USB3.0视频接收显示QT上位机
仅提供Win10版本的QT上位机位置如下 以Win10版本为例源码位置如下 以Win10版本下可以点击已经编译好的QT软件直接运行位置如下 QT上位机运行效果如下
工程源码架构
提供3套工程源码以工程源码1为例工程Block Design设计如下 提供3套工程源码以工程源码1为例综合后的工程源码架构如下 工程编译后资源消耗低、功耗低、时序收敛符合工程项目应用要求如下 上图只是举例资源消耗并非本工程的实际消耗实际消耗请看下文的《工程代码详解》
4、vivado工程源码1详解–Aritx7–35TOV6540输入版本
开发板FPGA型号Xilinx–Artix7–xc7a35tfgg484-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入OV5640摄像头或动态彩条分辨率1280x72030Hz 输出USB3.0分辨率1280x72060Hz USB3.0物理层方案FT601芯片方案 回环光口类型SFP光口 高速接口类型GTP线速率5Gbps 高速接口编解码协议8b/10b编解码 图像缓存方案FDMA图像缓存DDR3颗粒3帧缓存 实现功能FPGA实现GTP光口视频转USB3.0传输 工程作用此工程目的是让读者掌握FPGA实现GTP光口视频转USB3.0传输的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
5、vivado工程源码2详解–Aritx7–100TOV6540输入版本
开发板FPGA型号Xilinx–Artix7–xc7a100tfgg484-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入OV5640摄像头或动态彩条分辨率1280x72030Hz 输出USB3.0分辨率1280x72060Hz USB3.0物理层方案FT601芯片方案 回环光口类型SFP光口 高速接口类型GTP线速率5Gbps 高速接口编解码协议8b/10b编解码 图像缓存方案FDMA图像缓存DDR3颗粒3帧缓存 实现功能FPGA实现GTP光口视频转USB3.0传输 工程作用此工程目的是让读者掌握FPGA实现GTP光口视频转USB3.0传输的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
6、vivado工程源码3详解–Aritx7–100THDMI输入版本
开发板FPGA型号Xilinx–Artix7–xc7a100tfgg484-2 FPGA开发环境Vivado2019.1 QT开发环境VS2015 Qt 5.12.10 输入HDMI或者FPGA内部动态彩条ADV7611芯片解码方案分辨率1920x108060Hz笔记本电脑模拟输入源 输出USB3.0分辨率1920x108060Hz USB3.0物理层方案FT601芯片方案 回环光口类型SFP光口 高速接口类型GTP线速率5Gbps 高速接口编解码协议8b/10b编解码 图像缓存方案FDMA图像缓存DDR3颗粒3帧缓存 实现功能FPGA实现GTP光口视频转USB3.0传输 工程作用此工程目的是让读者掌握FPGA实现GTP光口视频转USB3.0传输的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
7、工程移植说明
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软核
8、上板调试验证
准备工作
需要准备的器材如下 OV5640摄像头或者笔记本电脑没有则请使用FPGA内部生成的彩条 FT601转接板FPGA开发板板载FT601除外 USB3.0数据线 FPGA开发板没有开发板可以找本博提供 SFP光模块和光纤 我的开发板了连接如下
GTP光口视频转USB3.0传输效果演示
GTP光口视频转USB3.0传输演示如下 OV5640-GT-USB3.0 9、工程代码的获取
代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式文章末尾名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务