FPGA实现 12G-SDI 视频编解码,支持4K60帧,提供2套工程源码+开发板+技术支持
1、前言
Xilinx系列FPGA实现12G-SDI视频编解码目前有两种方案:
一是使用Xilinx 7系列FPGA的GT高速接口解串+SMPTE UHD-SDI编解码,这种方案的优点是对FPGA型号要求较低,价格便宜,普通的GTX就能满足要求,缺点是灵活度不高,没有ARM加持,做嵌入式应用不太方便;另一是使用Xilinx UltraScale+系列FPGA的GT高速接口解串+UHD-SDI GT编解码,这种方案的优点是灵活度较高,一般都采用Zynq UltraScale+系列FPGA,易于嵌入式应用,缺点是对FPGA型号要求较高,价格偏贵,至少需要GTH才能满足要求;基于这两种主流方案,本设计共推出2套vivado2020.2版本的工程源码,具体如下:
下面对上述2套工程源码做如下解释:
工程源码1:
工程源码1采用zynq UltraScale+MPSoCsXCZU4EV的高端型号FPGA;12G-SDI 视频接收过程为:输入源为本博主自研的12G-SDI彩条发生器,能够产生一个4K60帧的12G-SDI彩条视频,并通过BNC同轴线输出;然后接入本博主提供的FPGA开发板,然后进入板载的TI公司的LMH1219芯片做均衡处理,同时将单端信号转为差分信号;然后视频进入Xilinx官方提供的UHD-SDI GT IP核做解串处理,该IP调用GTH高速接口资源将SDI视频解串为AXI4-Stream视频流和控制流,然后进入Xilinx官方提供的SMPTE UHD-SDI RX SUBSYSTEM IP核做SDI视频解码处理,将视频转为RGB;到这里,12G-SDI 视频解码工作就完成了,解码后的视频为并行的TTL电平的数据,此时可以供用户做后续处理,比如缓存、颜色转换、缩放、图像识别等,本设计不做处理,直接编码后依然以12G-SDI形式输出;
12G-SDI 视频发送过程为:接收并解码的12G-SDI 视频经过AXI4-Stream Data FIFO做数据缓冲,然后进入Xilinx官方提供的SMPTE UHD-SDI TX SUBSYSTEM IP核做SDI视频编码处理,将RGB视频编码为SDI视频;然后视频进入Xilinx官方提供的UHD-SDI GT IP核做解串处理,该IP调用GTH高速接口资源将SDI视频从AXI4-Stream视频流串化为高速差分信号输出,差分信号再进入板载的TI公司的LMH1218芯片做均衡处理,同时将差分信号转为单端信号,并通过板载的BNC接口输出;要想显示12G-SDI视频,还得需要一个12G-SDI转HDMI的转换器,再接入显示器即可显示;
工程源码2:
工程源码2采用Kintex7-32T的低端型号FPGA;12G-SDI 视频接收过程为:输入源为本博主自研的12G-SDI彩条发生器,能够产生一个4K60帧的12G-SDI彩条视频,并通过BNC同轴线输出;然后接入本博主提供的FPGA开发板,然后进入板载的TI公司的LMH1219芯片做均衡处理,同时将单端信号转为差分信号;然后视频进入Xilinx官方提供的GTX高速接口资源做解串处理,这里并没有调用IP,而是参考官方直接用GTX原语,GTX高速接口资源将高速差分SDI视频解串为并行数据;然后进入Xilinx官方提供的SMPTE UHD-SDI IP核做SDI视频解码处理,将视频解码为TTL电平数据;到这里,12G-SDI 视频解码工作就完成了,解码后的视频为并行的TTL电平的数据,此时可以供用户做后续处理,比如缓存、颜色转换、缩放、图像识别等,本设计不做处理,调用一个ILA对数据做观测,将图像数据留给用户,用户根据自身需要做处理,灵活性很高;
12G-SDI 视频发送过程为:FPGA内部产生一个12G-SDI视频彩条,然后进入Xilinx官方提供的SMPTE UHD-SDI IP核做SDI视频编码处理,将彩条视频编码为SDI视频;然后视频进入Xilinx官方提供的GTX高速接口资源做解串处理,这里并没有调用IP,而是参考官方直接用GTX原语,GTX高速接口资源将并行的SDI视频串化为高速差分信号,差分信号再进入板载的TI公司的LMH1218芯片做均衡处理,同时将差分信号转为单端信号,并通过板载的BNC接口输出;要想显示12G-SDI视频,还得需要一个12G-SDI转HDMI的转换器,再接入显示器即可显示;
本博客详细描述了Xilinx系列FPGA实现12G-SDI 视频编解码的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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编解码;专栏地址链接:点击直接前往
3、详细设计方案
设计框图
工程源码1的详细设计方案框图如下:
工程源码2的详细设计方案框图如下:
12G-SDI彩条发生器
本博主热爱SDI视频开发,自研了一款12G-SDI彩条发生器,如下:
该设备价格低廉但很好用,可产生3G、6G、12G等多种分辨率的SDI视频彩条,通过一个按键切换,具体切换逻辑如下:
上电默认输出1080P@60Hz的彩条;
按第一下按键:输出1080P@50Hz的彩条;
按第二下按键:输出4K@60Hz的彩条;
按第三下按键:输出4K@50Hz的彩条;
按第四下按键:输出4K@30Hz的彩条;
按第五下按键:输出4K@25Hz的彩条;
该彩条发生器非常适合做SDI视频输入源,需要它的朋友,向本博主可有偿提供;
12G-SDI硬件均衡方案
12G-SDI接收端使用TI公司的LMH1219芯片做均衡处理,同时将单端信号转为差分信号;
12G-SDI发送端使用TI公司的LMH1218芯片做均衡处理,同时将差分信号转为单端信号;
LMH1219和LMH1218可做硬件回环处理,这样可以将SDI视频做到极低的延时,本设计默认做了硬件回环处理,若需要FPGA接收SDI视频经处理再输出,需要i2c总线配置LMH1218,本设计工程即是这种方式;
另外,需要做LMH1219和LMH1218硬件回环的朋友,可联系本博主有偿提供硬件设计或成品;
GT高速接口资源使用
工程源码1使用Xilinx官方提供的UHD-SDI GT IP核,可解串和串化3G、6G、12G SDI视频,本设计配置为2G SDI,如下:
该IP直接调用GTH高速接口资源实现SDI视频的解串与串化,使用和配置非常方便,但需要指定SDI硬件连接的GT块位置和GT时钟引脚,此外,该IP不需要软件配置,可使用官方例程进行配套连接;
工程源码2使用Xilinx官方提供的GTX,可解串和串化3G、6G、12G SDI视频,这里并没有调用IP,而是参考官方直接用GTX原语,代码如下:
12G-SDI编解码–IP核使用
工程源码1使用Xilinx官方提供的SMPTE UHD-SDI RX SUBSYSTEM,可解码3G、6G、12G SDI视频,本设计配置为12G SDI,如下:
该IP需要软件配置,本设计提供了vitis软件驱动,详情请参考vitis工程;
工程源码2使用Xilinx官方提供的SMPTE UHD-SDI,可解码3G、6G、12G SDI视频,本设计配置为12G SDI,如下:
该IP不需要软件配置,但需要配合GTX捆绑使用;
数据缓存
工程源码1才有此功能,工程源码2没有;由于追求低延时,本设计没有采用DDR缓存,而是采用官方推荐方案,采用AXI4-Stream Data FIFO做数据缓冲,这里很简单,不再赘述;
SMPTE UHD-SDI TX SUBSYSTEM IP核使用
工程源码1才有此功能,工程源码2没有;SMPTE UHD-SDI TX SUBSYSTEM由Xilinx官方提供,可编码3G、6G、12G SDI视频,本设计配置为2G SDI,如下:
该IP需要软件配置,本设计提供了vitis软件驱动,详情请参考vitis工程;
12G-SDI转HDMI盒子
由于我的手里没有可直接接收12G-SDI视频的显示设备,所以只能用12G-SDI转HDMI盒子通过HDMI显示器显示,盒子较贵,我用的秋叶原的,价格1000+;
工程源码架构
工程源码架构包括vivado Block Design逻辑设计和vitis SDK软件设计;
工程源码1的Block Design逻辑设计架构截图如下,工程源码2没有使用Block Design设计:
工程源码1综合后的源码架构如下:
工程源码2综合后的源码架构如下:
工程源码1的Vitis SDK软件代码如下,工程源码2没有Vitis SDK软件代码:
4、Vivado工程1详解–>Zynq UltraScale ZU4EV版本
开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2020.2;
输入:12G-SDI彩条发生器,分辨率为4K@60帧;
输出:12G-SDI;
FPGA实现 12G-SDI 视频编解码;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA实现 12G-SDI 视频编解码的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
5、Vivado工程2详解–>Kintex7-325T版本
开发板FPGA型号:Xilinx–Kintex7-325T–xc7k325tffg676-3;
开发环境:Vivado2020.2;
输入:12G-SDI彩条发生器,分辨率为4K@60帧;
输出:12G-SDI;
FPGA实现 12G-SDI 视频编解码;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA实现 12G-SDI 视频编解码的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
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开发板,推荐使用本博的开发板;
12G-SDI视频源,推荐本博的信号发生器;
12G-SDI转HDMI盒子;
HDMI线;
4K显示器;
以工程源码1为例,板子连接如下:
视频输出演示
以工程源码1为例,视频输出演示如下:
FPGA编解码12G-SDI文章来源:https://www.toymoban.com/news/detail-858425.html
8、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
文章来源地址https://www.toymoban.com/news/detail-858425.html
到了这里,关于FPGA实现 12G-SDI 视频编解码,支持4K60帧,提供2套工程源码+开发板+技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!