国产紫光同创FPGA实现SDI视频编解码,基于HSSTHP高速接口,提供3套工程源码和技术支持

目录

国产紫光同创FPGA实现SDI视频编解码,基于HSSTHP高速接口,提供3套工程源码和技术支持

1、前言

国产FPGA现状:

"苟利国家生死以,岂因祸福避趋之!"大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于先进制程半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位;然而才短短7年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。

目前对于国产FPGA优势有以下几点:

1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;

2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具;

3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册;

4:采购方便,产业链自主可控,采购便捷;

FPGA实现SDI视频编解码现状:

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

工程概述

本设计基于紫光同创的Titan2系列FPGA开发板实现SDI视频编解码,输入源为一个3G-SDI相机或者HDMI转3G-SDI盒子,也可以使用HD-SDI或者SD-SDI相机,因为本设计是三种SDI视频自适应的;同轴的SDI视频通过同轴线连接到FPGA开发板的BNC座子,然后同轴视频经过板载的Gv8601a芯片实现单端转差分和均衡EQ的功能;然后差分SDI视频信号进入FPGA内部的HSSTHP高速资源,实现数据高速串行到并行的转换,本博称之为解串;解串后的并行视频再送紫光同创Titan2系列FPGA特有的12G--SDI IP核,进行SDI视频解码操作并输出BT1120视频,至此,SDI视频解码操作已经完成,可以进行常规的图像处理操作了;

本设计的目的是输出解码的SDI视频,针对目前市面上的主流项目需求,本博设计了两种输出方式,一种是HDMI输出,另一种是3G-SDI输出,这两种方式都需要对解码BT1120视频进行转RGB和图像缓存操作;本设计使用BT1120转RGB模块实现视频格式转换;使用纯verilog实现的图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR4;也可以不要缓存直接输出,这种方式的优点是延时很低,适用于低延时场景;图像从DDR4读出后,进入HDMI发送模块输出HDMI显示器,这是HDMI输出方式;或者经过RGB转BT1120模块实现视频格式转换,然后视频进入紫光同创Titan2系列FPGA特有的12G--SDI IP核,进行SDI视频编码操作并输出SDI视频,再经过FPGA内部的GTP高速资源,实现并行数据到高速串行的转换,本博称之为串化,差分高速信号再进入板载的Gv8500芯片实现差分转单端和驱动增强的功能,SDI视频通过FPGA开发板的BNC座子输出,通过同轴线连接到SDI转HDMI盒子连接到HDMI显示器,这是SDI输出方式;本博客提供3套工程源码,具体如下:

现对上述3套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为PG2T390H-6FFBG900;输入视频为3G-SDI相机或者HDMI转3G-SDI盒子,输入分辨率为1920x1080@60Hz,输入视频经过板载的Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA;再经过HSSTHP高速接口将SDI视频解串为并行数据;再经过紫光同创Titan2系列FPGA特有的12G--SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;然后不经过任何缓存,直接将RGB视频送Silicom9134芯片实现RGB转HDMI输出,输出分辨率为1920x1080@60Hz;最后通过HDMI显示器显示图像;该工程不需要缓存,适用于紫光同创Titan2系列FPGA实现SDI转HDMI的低延时场景;

工程源码2

开发板FPGA型号为PG2T390H-6FFBG900;输入视频为3G-SDI相机或者HDMI转3G-SDI盒子,输入分辨率为1920x1080@60Hz,输入视频经过板载的Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA;再经过HSSTHP高速接口将SDI视频解串为并行数据;再经过紫光同创Titan2系列FPGA特有的12G--SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;再经过纯verilog实现的图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR4;然后从DDR45中读出视频送入送Silicom9134芯片实现RGB转HDMI输出,输出分辨率为1920x1080@60Hz;最后通过HDMI显示器显示图像;该工程需要缓存,适用于紫光同创Titan2系列FPGA实现SDI转HDMI的低延时场景;

工程源码3

开发板FPGA型号为PG2T390H-6FFBG900;输入视频为3G-SDI相机或者HDMI转3G-SDI盒子,输入分辨率为1920x1080@60Hz,输入视频经过板载的Gv8601a芯片实现单端转差分和均衡EQ后送入FPGA;再经过HSSTHP高速接口将SDI视频解串为并行数据;再经过紫光同创Titan2系列FPGA特有的12G--SDI IP核将SDI解码BT1120数据;再经过BT1120转RGB模块将BT1120转换为RGB888视频;再经过纯verilog实现的图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR4;然后从DDR4中读出视频送RGB转BT1120模块,将RGB888视频转换为BT1120视频;再经过紫光同创Titan2系列FPGA特有的12G--SDI IP核,将BT1120视频编码为SDI视频;再经过HSSTHP高速接口资源,将SDI并行数据转换为高速串行信号;再经过板载的Gv8500芯片实现差分转单端和驱动增强后输出,输出分辨率为1920x1080@60Hz;最后使用SDI转HDMI盒子连接到HDMI显示器显示;该工程需要缓存,适用于紫光同创Titan2系列FPGA实现SDI转SDI场景;

本博客详细描述了国产紫光同创FPGA实现SDI视频编解码的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

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

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

紫光同创FPGA相关方案推荐

鉴于国产FPGA的优异表现和市场需求,我专门开设了一个人紫光同创FPGA专栏,里面收录了基于紫光同创FPGA的图像处理、UDP网络通信、GT高速接口、PCIE等博客,感兴趣的可以去看看,博客地址:点击直接前往

本博已有的 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--Kintex系列FPGA上的应用

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

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

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

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

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

3、详细设计方案

设计原理框图

设计原理框图如下:

!!!注意

!!!注意
红色箭头:无缓存HDMI输出路径
紫色箭头:有缓存3G-SDI输出路径
绿色箭头:有缓存HDMI输出路径

SDI 输入设备

SDI 输入设备可以是SDI相机,代码兼容HD/SD/3G-SDI三种模式;SDI相机相对比较贵,预算有限的朋友可以考虑用HDMI转SDI盒子模拟SDI相机,这种盒子某宝一百块左右;当使用HDMI转SDI盒子时,输入源可以用笔记本电脑,即用笔记本电脑通过HDMI线连接到HDMI转SDI盒子的HDMI输入接口,再用SDI线连接HDMI转SDI盒子的SDI输出接口到FPGA开发板,如下:

Gv8601a 均衡器

Gv8601a芯片实现单端转差分和均衡EQ的功能,这里选用Gv8601a是因为借鉴了了Xilinx官方的方案,当然也可以用其他型号器件。Gv8601a均衡器原理图如下:

紫光HSSTHP 高速接口

本设计使用紫光同创Titan2系列FPGA特有的HSSTHP高速信号处理资源实现SDI差分视频信号的解串与串化,对于SDI视频接收而言,HSSTHP起到解串的作用,即将输入的高速串行的差分信号解为并行的数字信号;对于SDI视频发送而言,HSSTHP起到串化的作用,即将输入的并行的数字信号串化为高速串行的差分信号;

!!!注意

!!!注意

HSSTHP 高速接口的解串与串化功能集成在了紫光同创官方提供的12G-SDI IP核内部,所以这部分没有独立的代码例化;

紫光12G-SDI IP核

本设计使用紫光同创Titan2系列FPGA特有的12G-SDI IP核实现2G SDI视频编解码,该IP由紫光同创官方提供,集成度很高,具体性能如下:详情可参考《UG052007_Titan2_12GSDI_IP》;

SDI 接收端性能表现如下:

1、支持自动检测接收数据的 SDI 速率模式;

2、支持 SD-SDI、HD-SDI、3G-SDI、6G-SDI 和 12G-SDI 接收模式动态切换;

3、自动检测视频传输格式;

4、检测和捕捉 SMPTE 352 (Payload ID)包;

5、HD-SDI、3G-SDI、6G-SDI 和 12G-SDI 模式下,检查 CRC 错误;

6、SD-SDI 模式下,可选检查 EDH (SMPTE 165)包错误;

7、能够容忍最大±200ppm 频偏。

SDI 发送端性能表现如下:

1、支持 SD-SDI、HD-SDI、3G-SDI、6G-SDI 和 12G-SDI 发送模式动态切换;

2、HD-SDI、3G-SDI、6G-SDI 和 12G-SDI 模式下,支持 1 倍速率或者 1/1.001 倍速率 ,但不支持相互动态切换;

3、支持生成和插入 SMPTE 352 (Payload ID)包;

4、HD-SDI、3G-SDI、6G-SDI 和 12G-SDI 模式下,支持生成和插入 CRC 和 Line Numbers (LN);

5、SD-SDI 模式下,可选生成和插入 EDH (SMPTE 165)包。

12G-SDI IP安装包以附带资料包中,如下:

12G-SDI IP核使用配置十分简单,PDS的UI界面如下:

基于紫光同创FPGA 12G-SDI IP核的SDI视频编解码代码架构如下:

BT1120转RGB

BT1120转RGB模块的作用是将SMPTE SD/HD/3G SDI IP核解码输出的BT1120视频转换为RGB888视频,它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:

图像缓存架构

此模块为点对点视频接收端工程所独有;图像缓存架构实现的功能是将输入视频缓存到板载DDR4中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了紫光官方的HMIC_S IP核作为DDR4控制器,所以图像缓存架构就是实现用户数据到HMIC_S的桥接作用;架构如下:

图像缓存架构由视频缓存帧更新模块+写视频控制逻辑+读视频控制逻辑+AXI4-FULL-Master总线模块组成;AXI4-FULL-Master总线模块实际上就是一个AXI4-FULL总线主设备,与HMIC_S IP核对接,HMIC_S IP核配置为AXI4-FULL接口;写视频控制逻辑、读视频控制逻辑实际上就是一个视频读写状态机,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;写视频控制逻辑每次写入一次突发传输的视频数据,记作Y,即每次向DDR4中写入Y个像素,写M×N÷Y次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以忽略AXI4内部代码,以简单地像使用FIFO那样操作AXI4总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为4帧缓存;图像缓存模块代码架构如下:

DDR4控制器IP安装包以附带资料包中,如下:

视频读取控制

图像缓存架构使用VGA时序模块完成视频读取控制,VGA时序模块负责产生VGA时序,他有两个作用,一是控制图像缓存架构从DDR4中读出缓存的视频,二是将同步后的VGA视频送入下一级模块,在HDMI输出方式下VGA时序模块的像素时钟由用户提供;在SDI输出方式下VGA时序模块的像素时钟由紫光同创Titan2系列FPGA特有的12G-SDI IP核的发送用户时钟提供,在不同的SDI模式下像素时钟不同,比如在3G-SDI模式下像素时钟为148.5M,在HD-SDI的720P@60Hz模式下像素时钟为74.25M;HDMI输出方式下的VGA时序模块代码架构如下:

SDI输出方式下的VGA时序模块代码架构如下:

HDMI输出

在HDMI输出方式下,HDMI输出包括Native视频时序和HDMI编码,Native视频时序的作用是产生传统VGA的、RGB的视频流;HDMI编码采用Silicom9134芯片编码方式,FPGA仅需输出RGB视频流即可;HDMI输出代码架构如下:

RGB转BT1120

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

Gv8500 驱动器

Gv8500芯片实现差分转单端和增强驱动的功能,这里选用Gv8500是因为借鉴了了Xilinx官方的方案,当然也可以用其他型号器件。Gv8500驱动器原理图如下:

SDI转HDMI盒子

在SDI输出方式下需要使用到SDI转HDMI盒子,因为我手里的显示器没有SDI接口,只有HDMI接口,为了显示SDI视频,只能这么做,当然,如果你的显示器有SDI接口,则可直接连接显示,我的SDI转HDMI盒子在某宝购买,不到100块;

工程源码架构

以工程源码2的SDI输入解码转HDMI输出为例,工程源码架构如下,其他工程与之类似:

以工程源码3的SDI输入解码转SDI输出为例,工程源码架构如下,其他工程与之类似:

4、工程源码1详解-->3G-SDI转HDMI,无缓存输出方案

开发板FPGA型号:紫光同创--PG2T390H-6FFBG900;;

开发环境:Pango Design Suite 2021.1

输入:3G-SDI相机或HDMI转SDI盒子,分辨率1920x1080@60Hz;

输出:HDMI ,分辨率1920x1080@60Hz;

SDI视频解串方案:紫光-HSSTHP高速接口解串;

SDI视频解码方案:紫光-12G-SDI解码;

图像缓存方案:无缓存;

工程说明:全国产FPGA实现SDI解码无缓存转HDMI输出方案;

工程作用:此工程目的是让读者掌握紫光同创FPGA实现SDI视频编解码的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

5、工程源码2详解-->3G-SDI转HDMI,有缓存输出方案

开发板FPGA型号:紫光同创--PG2T390H-6FFBG900;;

开发环境:Pango Design Suite 2021.1

输入:3G-SDI相机或HDMI转SDI盒子,分辨率1920x1080@60Hz;

输出:HDMI ,分辨率1920x1080@60Hz;

SDI视频解串方案:紫光-HSSTHP高速接口解串;

SDI视频解码方案:紫光-12G-SDI解码;

图像缓存方案:纯Verilog图像缓存,4帧缓存,DDR4颗粒;

工程说明:全国产FPGA实现SDI解码缓存后转HDMI输出方案;

工程作用:此工程目的是让读者掌握紫光同创FPGA实现SDI视频编解码的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

6、工程源码3详解-->3G-SDI转3G-SDI,有缓存输出方案

开发板FPGA型号:紫光同创--PG2T390H-6FFBG900;;

开发环境:Pango Design Suite 2021.1

输入:3G-SDI相机或HDMI转SDI盒子,分辨率1920x1080@60Hz;

输出:3G-SDI,分辨率1920x1080@60Hz;

SDI视频解串方案:紫光-HSSTHP高速接口解串;

SDI视频解码方案:紫光-12G-SDI解码;

图像缓存方案:纯Verilog图像缓存,4帧缓存,DDR4颗粒;

工程说明:全国产FPGA实现SDI解码缓存后转SDI输出方案;

工程作用:此工程目的是让读者掌握紫光同创FPGA实现SDI视频编解码的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

7、上板调试验证

准备工作

需要准备的器材如下:

FPGA开发板;

SDI摄像头或HDMI转SDI盒子;

SDI转HDMI盒子;

HDMI显示器;

我的开发板了连接如下:

紫光同创FPGA SDI视频解码输出演示

紫光同创FPGA SDI视频解码输出演示如下:

紫光-SDI

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

福利:工程代码的获取

代码太大,无法邮箱发送,以链接方式发送,

资料获取方式:私,或者文章末尾的V名片。

资料如下:

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

相关推荐
仲南音15 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议