哪些网站百度不收录,用wordpress建网站,做解析视频网站违法莫,wordpress 友言目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的 SDI 编解码方案我这里已有的FPGA图像缩放方案 3、工程详细设计方案工程设计原理框图SDI 输入设备GS2971芯片BT1120转RGB… 目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的 SDI 编解码方案我这里已有的FPGA图像缩放方案 3、工程详细设计方案工程设计原理框图SDI 输入设备GS2971芯片BT1120转RGB纯Verilog图像缩放模块详解纯Verilog图像缩放模块使用重点阅读视频数据组包基于UltraScale GTH高速接口的视频传输架构UltraScale GTH IP 简介UltraScale GTH 基本结构UltraScale GTH 的参考时钟UltraScale GTH 发送和接收处理流程UltraScale GTH 发送接口UltraScale GTH 接收接口UltraScale GTH IP核调用和使用 接收数据对齐模块视频数据解包FDMA图像缓存HDMI视频输出工程源码架构 4、vivado工程源码1详解--KU060版本5、vivado工程源码2详解--Zynq UltraScale ZU4EV版本6、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 7、上板调试验证准备工作UltraScale GTH光口SDI视频传输效果演示 8、工程代码的获取 FPGA实现SDI视频缩放转UltraScale GTH光口传输基于GS2971Aurora 8b/10b编解码架构提供2套工程源码和技术支持 1、前言
FPGA实现SDI视频编解码现状 一是使用专用编解码芯片比如典型的接收器GS2971发送器GS2972优点是简单比如GS2971接收器直接将SDI解码为并行的YCrCb422GS2972发送器直接将并行的YCrCb422编码为SDI视频缺点是成本较高可以百度一下GS2971和GS2972的价格另一种方案是使用FPGA逻辑资源部实现SDI编解码利用Xilinx系列FPGA的GTP/GTX资源实现解串利用Xilinx系列FPGA的SMPTE SDI资源实现SDI编解码优点是合理利用了FPGA资源GTP/GTX资源不用白不用缺点是操作难度大一些对FPGA开发者的技术水平要求较高。本设计使用GS2971接收器方案
FPGA实现SFP光口视频编解码现状 目前基于Xilinx系列FPGA的SFP光口视频编解码主要有以下几种Artix7系列的GTP、Kintex7系列的GTX、更高端FPGA器件的GTH、GTY、GTV、GTM等线速率越来越高应用场景也越来越高端编码方式也是多种多样有8b/10b编解码、64b/66b编解码、HDMI编解码、SDI编解码等等本设计采用UltraScale系列的UltraScale GTH作为高速接口、8b/10b编解码的方式实现SFP光口视频编解码
工程概述
本设计使用Xilinx UltraScale系列FPGA为平台实现UltraScale GTH 8b/10b编解码视频传输输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子也可以使用SD-SDI或者HD-SDI相机因为本设计是三种SDI视频自适应的同轴的SDI视频通过同轴线连接到GS2971转接板GS2971解码芯片将同轴串行的SDI视频解码为并行的BT1120格式视频至此SDI视频解码操作已经完成可以进行常规的图像处理操作了然后使用纯verilog实现的BT1120转RGB模块实现视频格式转换后输出RGB888视频然后使用自研的、纯verilog实现的、支持任意比例缩放的图像缩放模块实现对输入视频的图像缩放操作然后缩放视频送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的UltraScale GTH IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的UltraScale GTH IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR4然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流然后使用RGB转HDMI模块或专用芯片实现RGB视频流转HDMI差分视频信号最后用显示器显示视频即可针对市场主流需求本博客设计并提供2套工程源码具体如下 现对上述3套工程源码做如下解释方便读者理解
工程源码1
开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子也可以使用SD-SDI或者HD-SDI相机因为本设计是三种SDI视频自适应的同轴的SDI视频通过同轴线连接到GS2971转接板GS2971解码芯片将同轴串行的SDI视频解码为并行的BT1120格式视频至此SDI视频解码操作已经完成可以进行常规的图像处理操作了然后使用纯verilog实现的BT1120转RGB模块实现视频格式转换后输出RGB888视频然后使用自研、纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为1280x720然后缩放视频送入送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的UltraScale GTH IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的UltraScale GTH IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为板载DDR4然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频输出分辨率为1280x72060Hz由此形成Sensor高速接口光编码HDMI的高端架构该工程适用于SFP光口的视频采集卡光端机应用
工程源码2
开发板FPGA型号为Xilinx–Zynq UltraScale–xczu4ev-sfvc784-1-i输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子也可以使用SD-SDI或者HD-SDI相机因为本设计是三种SDI视频自适应的同轴的SDI视频通过同轴线连接到GS2971转接板GS2971解码芯片将同轴串行的SDI视频解码为并行的BT1120格式视频至此SDI视频解码操作已经完成可以进行常规的图像处理操作了然后使用纯verilog实现的BT1120转RGB模块实现视频格式转换后输出RGB888视频然后使用自研、纯verilog实现的、支持任意比例缩放的图像缩放模块将输入视频由1920x1080缩放为1280x720然后缩放视频送入送入视频组包模块将视频的每一行打上包头包尾标记以包的形式输出以便接收方进行有效识别让后调用Xilinx官方的UltraScale GTH IP核实现视频8b/10b编码和数据串化将并行数据串化为高速串行差分信号线速率设置为5Gbps编码后的视频通过板载的SFP光口的光纤输出然后用板载的SFP光口的光纤接收视频然后送入Xilinx官方的UltraScale GTH IP核实现视频8b/10b解码和数据解串将差分高速串行信号解为并行数据然后数据送入数据对齐模块实现错位数据对齐然后数据送入视频解包模块实现每一行的视频包头包尾拆解并生成对应的场同步信号和数据有效信号输出然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存缓存介质为PS端DDR4然后Native视频时序控制FDMA从DDR4中读取视频并同步输出RGB888视频流然后经过ADV7511输出HDMI差分视频输出分辨率为1280x72060Hz由此形成Sensor高速接口光编码HDMI的高端架构该工程适用于SFP光口的视频采集卡光端机应用
本博客详细描述了FPGA基于Aurora 8b/10b编解码架构实现UltraScale GTH光口视频传输的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括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开发板搭建以下是专栏地址 点击直接前往
本博已有的 SDI 编解码方案
我的博客主页开设有SDI视频专栏里面全是FPGA编解码SDI的工程源码及博客介绍既有基于GS2971/GS2972的SDI编解码也有基于GTP/GTX资源的SDI编解码既有HD-SDI、3G-SDI也有6G-SDI、12G-SDI等专栏地址链接如下 点击直接前往
我这里已有的FPGA图像缩放方案
我的主页目前有FPGA图像缩放专栏改专栏收录了我目前手里已有的FPGA图像缩放方案从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等以下是专栏地址 点击直接前往
3、工程详细设计方案
工程设计原理框图
工程设计原理框图如下
SDI 输入设备
SDI 输入设备可以是SDI相机代码兼容HD/SD/3G-SDI三种模式SDI相机相对比较贵预算有限的朋友可以考虑用HDMI转SDI盒子模拟SDI相机这种盒子某宝一百块左右当使用HDMI转SDI盒子时输入源可以用笔记本电脑即用笔记本电脑通过HDMI线连接到HDMI转SDI盒子的HDMI输入接口再用SDI线连接HDMI转SDI盒子的SDI输出接口到FPGA开发板如下
GS2971芯片
本设计采用GS2971芯片解码SDIGS2971不需要软件配置硬件电阻上下拉即可完成配置本设计配置为输出BT1120格式视频当然你在设计电路时也可以配置为输出CEA861格式视频GS2971硬件架构如下提供PDF格式原理图
BT1120转RGB
BT1120转RGB模块的作用是将SMPTE SD/HD/3G SDI IP核解码输出的BT1120视频转换为RGB888视频它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成该方案参考了Xilinx官方的设计BT1120转RGB模块代码架构如下 BT1120转RGB模块顶层接口如下
纯Verilog图像缩放模块详解
本设计的图像缩放模块使用纯Verilog方案功能框图如下由跨时钟FIFO、插值RAM阵列构成跨时钟FIFO的目的是解决跨时钟域的问题比如从低分辨率视频放大到高分辨率视频时像素时钟必然需要变大这是就需要异步FIFO了插值算法和RAM阵列具体负责图像缩放算法层面的实现 插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现设计架构如下 依据上图图像缩放模块内部核心是例化了4个双口RAM作用是缓存4行图像以得到4个临近的像素以此为基础做线性插值如果是做图像放大操作就以这4个临近的像素为基准以线性插值为算法在原图像中插入更多的像素点来扩大分辨率如果是做图像缩小操作就以这4个临近的像素为基准以线性插值为算法在原图像中删除更多的像素点来缩小分辨率此外前面描述的工作是实时的、整幅图像全部扫描式的进行所以需要对RAM的读写操作进行精准控制
图像缩放模块代码架构如下模块的例化请参考工程源码的顶层代码 图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核也可以使用纯verilog实现的FIFO可通过接口参数选择图像缩放模块顶层接口如下 FIFO_TYPE选择原则如下 1总体原则选择xilinx好处大于选择verilog 2当你的FPGA逻辑资源不足时请选xilinx 3当你图像缩放的视频分辨率较大时请选xilinx 4当你的FPGA没有FIFO IP或者FIFO IP快用完了请选verilog 5当你向自学一下异步FIFO时请选verilog 6不同FPGA型号对应的工程FIFO_TYPE参数不一样但选择原则一样具体参考代码
2种插值算法的整合与选择 本设计将常用的双线性插值和邻域插值算法融合为一个代码中通过输入参数选择某一种算法 具体选择参数如下
input wire i_scaler_type //0--bilinear;1--neighbor通过输入i_scaler_type 的值即可选择 输入0选择双线性插值算法 输入1选择邻域插值算法 代码里的配置如下
纯Verilog图像缩放模块使用重点阅读
图像缩放模块使用非常简单顶层代码里设置了四个参数举例如下 上图是将输入视频分辨率从1280x720缩放为1920x1080 如果你想将输入视频分辨率从1280x720缩放为640x480 则只需修改为如下 再比如你想将输入视频分辨率从1280x720缩放为960x540 则只需修改为如下 当然需要修改的不仅仅这一个地方FDMA的配置也需要相应修改详情请参考代码但我想要证明的是图像缩放模块使用非常简单你都不需要知道它内部具体怎么实现的上手就能用 在本博主这里想要实现图像缩放操作就是这么无脑简单就该两个参数就能搞定貌似高大上的双线性插值图像缩放这种设计、这种操作、这种工程源码你还喜欢吗
视频数据组包
由于视频需要在UltraScale GTH 中通过aurora 8b/10b协议收发所以数据必须进行组包以适应aurora 8b/10b协议标准视频数据组包模块代码位置如下 首先我们将16bit的视频存入FIFO中存满一行时就从FIFO读出送入UltraScale GTH发送在此之前需要对一帧视频进行编号也叫作指令UltraScale GTH组包时根据固定的指令进行数据发送UltraScale GTH解包时根据固定的指令恢复视频的场同步信号和视频有效信号当一帧视频的场同步信号上升沿到来时发送一帧视频开始指令 0当一帧视频的场同步信号下降沿到来时发送一帧视频开始指令 1视频消隐期间发送无效数据 0 和无效数据 1当视频有效信号到来时将每一行视频进行编号先发送一行视频开始指令在发送当前的视频行号当一行视频发送完成后再发送一行视频结束指令一帧视频发送完成后先发送一帧视频结束指令 0再发送一帧视频结束指令 1至此一帧视频则发送完成这个模块不太好理解所以我在代码里进行了详细的中文注释需要注意的是为了防止中文注释的乱序显示请用notepad编辑器打开代码指令定义如下 注意指令可以任意更改但最低字节必须为bc
基于UltraScale GTH高速接口的视频传输架构
本设计使用UltraScale GTH高速接口传输视频使用8b/10b编解码协议搭建基于UltraScale GTH高速接口的视频传输架构包括视频数据组包模块、UltraScale GTH IP核配置调用、接收数据对齐模块、视频数据解包模块等部分总体代码架构如下 基于UltraScale GTH高速接口的视频传输架构顶层接口核参数配置如下 本设计共例化了2路UltraScale GTH所以2路UltraScale GTH的收发回环方式也做了灵活的参数化配置如果你只需要1路GT则可删除另一路如果你想例化更多路GT则可根据上述设计方法扩展十分方便
UltraScale GTH IP 简介
关于UltraScale GTH 介绍最详细的肯定是Xilinx官方的《ug576-ultrascale-gth-transceivers》我们以此来解读《ug576-ultrascale-gth-transceivers》的PDF文档我已放在了资料包里我用到的开发板FPGA型号为Kirtex7-UltraScale-xcku060-ffva1156-2-i带有28路UltraScale GTX资源其中2路连接到了板载2个SFP光口每通道的收发速度为 500 Mb/s 到 16.375 Gb/s 之间。GTH 收发器支持不同的串行传输接口或协议比如8b/10b编解码、PCIE /2.0/3.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等
UltraScale GTH 基本结构
UltraScale GTH 基本结构如下 Xilinx 以 Quad 来对串行高速收发器进行分组四个串行高速收发器和一个 COMMOMQPLL组成一个 Quad每一个串行高速收发器称为一个 Channel(通道下图为UltraScale GTH 收发器在Kintex7 UltraScale FPGA 芯片中的示意图《ug576-ultrascale-gth-transceivers》第19页
在 Ultrascale/Ultrascale架构系列的 FPGA 中GTH 高速收发器通常使用 Quad 来划分一个 Quad 由四个GTHE3/4_CHANNEL 原语和一个 GTHE3/4_COMMON 原语组成。每个GTHE3/4_COMMON 中包含两个 LC-tank pll(QPLL0 和 QPLL1)。只有在应用程序中使用 QPLL 时才需要实例化 GTHE3/4_COMMON。每个 GTHE3/4_CHANNEL 由一个 channel PLLCPLL、一个 transmitter,和一个 receiver 组成。一个参考时钟可以直接连接到一个 GTHE3/4_CHANNEL 原语而不需要实例化 GTHE3/4_COMMON
Ultrascale GTH 收发器的发送端和接收端功能是相互独立都是由 Physical Media Attachment物理媒介适配层 PMA和Physical Coding Sublayer物理编码子层 PCS组成。PMA 内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等PCS 内部集成了 8b/10b 编解码、弹性缓冲区、通道绑定和时钟修正等每个 GTHE3/4_CHANNEL源语的逻辑电路见《ug576-ultrascale-gth-transceivers》第20页
UltraScale GTH 的参考时钟
UltraScale 器件中的 GTH 收发器提供了不同的参考时钟输入选项。参考时钟选择架构支持 QPLL0、QLPLL1 和CPLL。从架构上讲每个 Quad 包含四个 GTHE3/4_CHANNEL 原语一个 GTHE3/4_COMMON 原语两个专用的外部参考时钟引脚对以及专用的参考时钟路由。如果使用到了高性能 QPLL则必须实例化 GTHE3/4_COMMON如下面 GTHE3/4_COMMON 时钟多路复用器结构的详细视图所示(《ug576-ultrascale-gth-transceivers》第33页)在一个 Quad 中有 6 个参考时钟引脚对两个本地参考时钟引脚对GTREFCLK0或GTREFCLK1两个参考时钟引脚对来自上面的两个QuadsGTSOUTHREFCLK0或 GTSOUTHREFCLK1两个参考时钟引脚对来自下面的两个 Quads GTNORTHREFCLK0 或GTNORTHREFCLK1。
UltraScale GTH 发送和接收处理流程
首先用户逻辑数据经过 8B/10B 编码后进入一个发送缓存区Phase Adjust FIFO该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离解决两者时钟速率匹配和相位差异的问题最后经过高速 Serdes 进行并串转换(PISO)有必要的话可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反相似点较多这里就不赘述了需要注意的是 RX 接收端的弹性缓冲区其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书所以这里只需要知道个概念即可在具体的项目中回具体用到还是那句话对于初次使用或者想快速使用者而言更多的精力应该关注IP核的调用和使用。
UltraScale GTH 发送接口
《ug576-ultrascale-gth-transceivers》的第104到179页详细介绍了发送处理流程其中大部分内容对于用户而言可以不去深究因为手册讲的基本都是他自己的设计思想留给用户可操作的接口并不多基于此思路我们重点讲讲UltraScale GTH例化时留给用户的发送部分需要用到的接口用户只需要关心发送接口的时钟和数据即可以例化2路UltraScale GTH 为例经本博主优化用户只需要关心如下UltraScale GTH 发送接口即可快速使用UltraScale GTH
UltraScale GTH 接收接口
《ug576-ultrascale-gth-transceivers》的第181到314页详细介绍了发送处理流程其中大部分内容对于用户而言可以不去深究因为手册讲的基本都是他自己的设计思想留给用户可操作的接口并不多基于此思路我们重点讲讲UltraScale GTH 例化时留给用户的发送部分需要用到的接口用户只需要关心接收接口的时钟和数据即可以例化2路UltraScale GTH 为例经本博主优化用户只需要关心如下UltraScale GTH 接收接口即可快速使用UltraScale GTH
UltraScale GTH IP核调用和使用
UltraScale GTH IP核配置调用在工程种位置如下 UltraScale GTH IP核调用和使用很简单通过vivado的UI界面即可完成如下 UltraScale GTH基本配置如下板载差分晶振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的基础操作这里不再赘述数据对齐模块顶层接口如下
视频数据解包
数据解包是数据组包的逆过程代码位置如下 UltraScale GTH解包时根据固定的指令恢复视频的场同步信号和视频有效信号这些信号是作为后面图像缓存的重要信号由于数据解包是数据组包的逆过程所以这里不再过多赘述视频数据解包模块顶层接口如下
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的目的进而实现视频缓存本设计图像缓存方式为3帧缓存图像缓存模块代码架构如下 基于FDMA的图像缓存架构在Block Design设计中如下
HDMI视频输出
缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频最后送显示器显示即可需要注意的是UltraScale系列FPGA不支持oserdese2原语所以只能用oserdese3原语实现10 bit串化基于此本博主提供的RGB转HDMI模块可支持7系列、ULTRASCALE系列FPGA、ULTRASCALE_PLUS系 FPGA顶层代码如下 代码例化如下 此外有的FPGA开发板采用专用芯片实现RGB转HDMI功能这种情况下只需配置芯片即可本设计中有的工程就是使用了ADV7511芯片其i2c配置代码如下
工程源码架构
提供2套工程源码以工程源码1为例工程Block Design设计如下 提供2套工程源码以工程源码1为例综合后的工程源码架构如下 工程源码2使用了ZynqPL端时钟由Zynq软核提供所以需要运行运行SDK以启动Zynq所以需要在SDK里运行一个简单的hello world程序SDK软件代码架构如下
4、vivado工程源码1详解–KU060版本
开发板FPGA型号Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i FPGA开发环境Vivado2019.1 输入3G-SDI相机或HDMI转SDI盒子分辨率1920x108060Hz 输出HDMIRTL逻辑编码方案分辨率1280x72060Hz SDI视频解码方案GS2971芯片方案 图像缩放方案纯verilog代码实现、任意比例缩放的图像缩放模块 图像缩放用例1920x1080缩放到1280x720 回环光口类型SFP光口 高速接口类型UltraScale GTH线速率5Gbps 高速接口编解码协议8b/10b编解码 图像缓存方案FDMA图像缓存DDR4颗粒3帧缓存 实现功能FPGA实现UltraScale GTH光口视频传输 工程作用此工程目的是让读者掌握FPGA实现UltraScale GTH光口视频传输的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
5、vivado工程源码2详解–Zynq UltraScale ZU4EV版本
开发板FPGA型号Xilinx–Zynq UltraScale–xczu4ev-sfvc784-1-i FPGA开发环境Vivado2019.1 输入3G-SDI相机或HDMI转SDI盒子分辨率1920x108060Hz 输出HDMIADV7511编码方案分辨率1280x72060Hz SDI视频解码方案GS2971芯片方案 图像缩放方案纯verilog代码实现、任意比例缩放的图像缩放模块 图像缩放用例1920x1080缩放到1280x720 回环光口类型SFP光口 高速接口类型UltraScale GTH线速率5Gbps 高速接口编解码协议8b/10b编解码 图像缓存方案FDMA图像缓存PS端DDR4颗粒3帧缓存 实现功能FPGA实现UltraScale GTH光口视频传输 工程作用此工程目的是让读者掌握FPGA实现UltraScale GTH光口视频传输的设计能力以便能够移植和设计自己的项目 工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容 工程的资源消耗和功耗如下
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、上板调试验证
准备工作
需要准备的器材如下 SDI摄像头、GS2971转接板 FPGA开发板没有开发板可以找本博提供 SFP光模块和光纤 我的开发板了连接如下
UltraScale GTH光口SDI视频传输效果演示
UltraScale GTH光口SDI视频传输效果演示如下 SDI-GTP 8、工程代码的获取
代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下 此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务