健康奶 · 2023年08月23日 · 重庆

UltraScale系列FPGA实现SDI视频转SFP光口输出(光端机),基于GTH高速接口

UltraScale系列FPGA实现SDI视频转SFP光口输出(光端机),基于UltraScale GTH高速接口,提供2套工程源码和技术支持

[video(video-aOCexuXY-1740115211826)(type-csdn)(url-https://live.csdn.net/v/embed...)(image-https://i-blog.csdnimg.cn/img...)(title-HDMI-SDI-2025)]

1、前言

目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,GS2972发送器直接将并行的YCrCb422编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA逻辑资源部实现SDI编解码,利用Xilinx系列FPGA的GTP/GTX/GTH/GTY等资源实现解串,利用Xilinx系列FPGA的SMPTE UHD-SDI资源实现SDI编解码,优点是合理利用了FPGA资源,GT高速接口资源不用白不用,缺点是操作难度大一些,对FPGA开发者的技术水平要求较高。有意思的是,这两种方案在本博这里都有对应的解决方案,包括硬件的FPGA开发板、工程源码等等。本设计使用UltraScale GTH高速接口资源;

工程概述

本设计基于Xilinx的UltraScale系列FPGA开发板实现HDMI转SDI视频编码输出;输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码使用Silicom9011芯片实现,Silicom9011输出视频分辨率配置为1920x1080@60Hz;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;图像从DDR4读出后送入RGB转BT1120模块实现视频格式转换;然后视频进入SMPTE UHD-SDI IP核,进行SDI视频编码操作并输出SDI视频,再经过FPGA内部的UltraScale GTH高速资源,实现并行数据到高速串行的转换,本博称之为串化,差分高速信号直接送入板载的SFP光口输出,然后用一根光纤接在SFP光口的RX和TX接口做本地回环;SFP光口接收视频再送入UltraScale GTH将SDI视频解串为并行数据;再经过SMPTE UHD-SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;然后不经过任何缓存,直接将视频送入Silicom9134芯片实现RGB888转HDMI视频输出,输出分辨率为1920x1080@60Hz;本博客提供2套工程源码,具体如下:
在这里插入图片描述
现对上述2套工程源码做如下解释,方便读者理解:

<font color="red" size="3">工程源码1

开发板FPGA型号为Xilinx-->Kintex UltraScale--xcku040-ffva1156-2-i;输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码使用Silicom9011芯片实现,Silicom9011输出视频分辨率配置为1920x1080@60Hz;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;图像从DDR4读出后送入RGB转BT1120模块实现视频格式转换;然后视频进入SMPTE UHD-SDI IP核,进行SDI视频编码操作并输出SDI视频,再经过FPGA内部的UltraScale GTH高速资源,实现并行数据到高速串行的转换,本博称之为串化,差分高速信号直接送入板载的SFP光口输出,然后用一根光纤接在SFP光口的RX和TX接口做本地回环;SFP光口接收视频再送入UltraScale GTH将SDI视频解串为并行数据;再经过SMPTE UHD-SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;然后不经过任何缓存,直接将视频送入Silicom9134芯片实现RGB888转HDMI视频输出,输出分辨率为1920x1080@60Hz;该工程适用于Xilinx的UltraScale高端系列FPGA实现SDI视频转SFP光口输出(光端机)场景;

<font color="red" size="3">工程源码2

开发板FPGA型号为Xilinx-->Zynq UltraScale+MPSoCs--xczu19eg-ffvc1760-2-i;输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码使用Silicom9011芯片实现,Silicom9011输出视频分辨率配置为1920x1080@60Hz;然后使用本博主常用的FDMA图像缓存架构对采集视频做图像3帧缓存,缓存介质为板载DDR4;图像从DDR4读出后送入RGB转BT1120模块实现视频格式转换;然后视频进入SMPTE UHD-SDI IP核,进行SDI视频编码操作并输出SDI视频,再经过FPGA内部的UltraScale GTH高速资源,实现并行数据到高速串行的转换,本博称之为串化,差分高速信号直接送入板载的SFP光口输出,然后用一根光纤接在SFP光口的RX和TX接口做本地回环;SFP光口接收视频再送入UltraScale GTH将SDI视频解串为并行数据;再经过SMPTE UHD-SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;然后不经过任何缓存,直接将视频送入Silicom9134芯片实现RGB888转HDMI视频输出,输出分辨率为1920x1080@60Hz;该工程适用于Xilinx的Zynq UltraScale MPSoCs高端系列FPGA实现SDI视频转SFP光口输出(光端机)场景;

本博客详细描述了UltraScale系列FPGA实现SDI视频转SFP光口输出(光端机)的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

本博已有的 SDI 编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;既有HD-SDI、3G-SDI,也有6G-SDI、12G-SDI等;专栏地址链接如下:
点击直接前往

本方案在Xilinx--Artix7系列FPGA上的应用

本方案在Xilinx--Artix7系列FPGA上的也有应用,之前专门写过一篇博客,博客地址链接如下:
点击直接前往

本方案在Xilinx--Zynq7000系列FPGA上的应用

本方案在Xilinx--Zynq7000系列FPGA上的也有应用,之前专门写过一篇博客,博客地址链接如下:
点击直接前往

3、详细设计方案

设计原理框图

设计原理框图如下:
在这里插入图片描述
本设计参考了Xilinx官方设计文档,官方的参考设计框图如下:
在这里插入图片描述

HDMI 输入

输入源为板载的HDMI输入接口或动态彩条,分辨率为1920x1080@60Hz,使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;HDMI解码方案为芯片解码,使用Silcom9011,可将输入的HDMI视频解码为RGB888视频;FPGA纯verilog实现的i2c配置模块完成对Silcom9011芯片的配置,分辨率配置为1920x1080@60Hz;Silcom9011的i2c配置代码如下:
在这里插入图片描述
可以通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:
在这里插入图片描述
SENSOR_TYPE=0;则输出HDMI接口采集的视频;
SENSOR_TYPE=1;则输出动态彩条的视频;
整个模块代码架构如下:
在这里插入图片描述

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图像缓存使用Xilinx vivado的Block Design设计,如下图:
在这里插入图片描述

视频读取控制

FDMA图像缓存架构使用VGA时序模块完成视频读取控制,VGA时序模块负责产生VGA时序,他有两个作用,一是控制FDMA控制器从DDR中读出缓存的视频,二是将同步后的VGA视频送入下一级模块,在HDMI输出方式下VGA时序模块的像素时钟由用户提供;在SDI输出方式下VGA时序模块的像素时钟由SMPTE UDH-SDI IP核的发送用户时钟提供,在不同的SDI模式下像素时钟不同,比如在3G-SDI模式下像素时钟为148.5M,在HD-SDI的720P@60Hz模式下像素时钟为74.25M;HDMI输出方式下的VGA时序模块代码架构如下:
在这里插入图片描述

UltraScale GTH 高速接口-->解串与串化

本设计使用Xilinx特有的UltraScale GTH高速信号处理资源实现SDI差分视频信号的解串与串化,对于SDI视频接收而言,UltraScale GTH起到解串的作用,即将输入的高速串行的差分信号解为并行的数字信号;对于SDI视频发送而言,UltraScale GTH起到串化的作用,即将输入的并行的数字信号串化为高速串行的差分信号;UltraScale GTH的使用一般需要例化IP核,通过vivado的UI界面进行配置,但本设计需要对SD-SDI、HD-SDI、3G-SDI视频进行自动识别和自适应处理,所以需要使得UltraScale GTH具有动态改变线速率的功能,该功能可通过DRP接口配置,也可通过UltraScale GTH的rate接口配置此外,为了动态配置UltraScale GTH线速率,还需要UltraScale GTH控制模块,该模块参考了Xilinx的官方设计方案,具有动态监测SDI模式,动态配置DRP等功能;该方案参考了Xilinx官方的设计;UltraScale GTH 解串与串化模块代码架构如下:
在这里插入图片描述
UltraScale GTH IP核配置如下:
在这里插入图片描述

SMPTE UDH-SDI IP核

SMPTE UDH-SDI IP核是Xilinx系列FPGA特有的用于SDI视频编解码的IP,该IP配置使用非常简单,vivado的UI界面如下:
在这里插入图片描述
SMPTE UDH-SDI IP核必须与UltraScale GTH配合才能使用,对于SDI视频接收而言,该IP接收来自于UltraScale GTH的数据,然后将SDI视频解码为BT1120视频输出,对于SDI视频发送而言,该IP接收来自于用户侧的的BT1120视频数据,然后将BT1120视频编码为SDI视频输出;该方案参考了Xilinx官方的设计;SMPTE UDH-SDI IP IP核代码架构如下:
在这里插入图片描述

RGB转BT1120

在SDI输出方式下需要使用该模块;RGB转BT1200模块的作用是将用户侧的RGB视频转换为BT1200视频输出给SMPTE UDH-SDI IP核;RGB转BT1120模块由RGB888转YUV444模块、YUV444转YUV422模块、SDI视频编码模块、数据嵌入模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述

BT1120转RGB

BT1120转RGB模块的作用是将SMPTE UDH-SDI IP核解码输出的BT1120视频转换为RGB888视频,它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述

HDMI输出

在HDMI输出方式下,使用Silicom9134芯片实现RGB888转HDMI视频输出,Silicom9134需要i2c配置,配置代码如下:
在这里插入图片描述

工程源码架构

本博客提供2套工程源码,以工程源码1为例,vivado Block Design设计如下,其他工程与之类似,Block Design设计为图像缓存架构的部分:
在这里插入图片描述
本博客提供2套工程源码,以工程源码1为例,工程源码架构如下:
在这里插入图片描述

4、工程源码1详解-->KU040版本

开发板FPGA型号:Xilinx-Kintex-UltraScale--xcku040-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:HDMI,Silicom9011芯片解码;分辨率1920x1080@60Hz;
输出:HDMI,Silicom9134芯片编码;分辨率1920x1080@60Hz;
缓存方案:FDMA图像缓存+DDR4方案;
光口回环类型:单个SFP光口本地回环;
SDI视频串化方案:Xilinx--UltraScale GTH高速接口解串;
SDI视频编码方案:Xilinx--SMPTE UHD-SDI 解码;
实现功能:UltraScale系列FPGA实现SDI视频转SFP光口输出;
工程作用:此工程目的是让读者掌握Xilinx UltraScale系列FPGA实现SDI视频转SFP光口输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解-->ZU19EG版本

开发板FPGA型号:Xilinx-Zynq UltraScale+MPSoCs--xczu19eg-ffvc1760-2-i;
开发环境:Vivado2019.1;
输入:HDMI,Silicom9011芯片解码;分辨率1920x1080@60Hz;
输出:HDMI,Silicom9134芯片编码;分辨率1920x1080@60Hz;
缓存方案:FDMA图像缓存+PS端DDR4方案;
光口回环类型:单个SFP光口本地回环;
SDI视频串化方案:Xilinx--UltraScale GTH高速接口解串;
SDI视频编码方案:Xilinx--SMPTE UHD-SDI 解码;
实现功能:UltraScale系列FPGA实现SDI视频转SFP光口输出;
工程作用:此工程目的是让读者掌握Xilinx UltraScale系列FPGA实现SDI视频转SFP光口输出的设计能力,以便能够移植和设计自己的项目;
工程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、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板;
SDI摄像头或HDMI转SDI盒子;
SDI转HDMI盒子;
HDMI显示器;
我的开发板了连接如下:
在这里插入图片描述

HDMI转SDI视频编码--输出视频演示

以工程1为例,HDMI转SDI视频编码--输出视频演示如下:

[video(video-aOCexuXY-1740115211826)(type-csdn)(url-https://live.csdn.net/v/embed...)(image-https://i-blog.csdnimg.cn/img...)(title-HDMI-SDI-2025)]

8、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以百度网盘链接方式发送,
通过微信获取资料:微信号 hllsq22
微信.jpg
还可以关注我的微信公众号:FPGA教父
公众号.jpg
还可以关注我的CSDN:9527华安
24ee0bda9f366427d90b421a90955f18.jpg
还可以关注我的知乎:FPFA个人练习生
1b8fe79dc52f823e850278530e2be57f.png
还可以关注我的B站:ikun-FPFA
57c5c2d92bcb215635cc4ff7888126d2.jpg
还可以关注我的小红书:FPFA制作人
f18832cbb92bbdbc7a2153a5ae279cd8.jpg
还可以关注我的微信视频号:FPGA教父
ff3609d881d70edc282a31565a9b120f.jpg
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

推荐阅读
关注数
16
内容数
89
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息