详细介绍:Xilinx系列FPGA实现12G-SDI音视频编解码,支持4K60帧分辨率,提供2套工程源码和技术支持
目录
- 1、前言
- 工程概述
- 免责声明
- 2、相关方案推荐
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的任务
- 我这里已有的 GT 高速接口解决方案
- 我目前已有的SDI编解码方案
- 3、详细设计方案
- 设计框图
- 12G-SDI输入源
- 12G-SDI硬件均衡方案
- UHD-SDI GT-->串并/并串转换
- UHD-SDI RX SUbsystem-->12G-SDI视频解码
- UHD-SDI Audio-->12G-SDI音频编解码
- SPDIF/AES3-->外部音频编解码
- 12G-SDI输出嵌入音频流选择
- UHD-SDI TX SUbsystem-->12G-SDI视频编码
- 12G-SDI转HDMI盒子
- PL端逻辑工程源码架构
- PS端软件工程源码架构
- 4、Vivado工程源码1详解-->ZU7EV版本
- 5、Vivado工程源码2详解-->KU3P版本
- 6、工程移植说明
- vivado版本不一致处理
- FPGA型号不一致处理
- 其他注意事项
- 7、上板调试验证
- 准备工作
- FPGA实现12G-SDI音视频编解码演示
- 8、工程代码的获取
Xilinx系列FPGA实现12G-SDI音视频编解码,支持4K60帧分辨率,给出2套工程源码和技术支持
FPGA构建12G-SDI音视频编解码
1、前言
12G-SDI 是一种由电影与电视工程师协会(SMPTE) 制定的串行数字接口标准,具体规范为 SMPTE ST 2082,通过单根同轴电缆(BNC接口)传输未经压缩的4K超高清(UHD/2160p)视频信号,并支持高达60帧/秒(60p)的帧率,主要应用于专业广播、大型现场活动、高端制作切换台、4K演播室、以及得超高分辨率视频采集和处理的高端工业应用(如质量检测、医学成像)。下图清晰地展示了SDI标准从标清到4K的演进路径:
目前实现12G-SDI的主流方案?
构建12G-SDI物理层接口,首要有以下三种技术路径:
1、专用ASIC芯片方案:
比如LMH1218 / LMH1228(发射器/接收器);MaxLinear的GN4128;Rohm的BU12XXXX系列;优点是成熟稳定、功耗低、性价比高、创建简单(设置寄存器即可);缺点是灵活性极差(功能固定,无法修改)、难以定制、可能依赖特定供应商。
2、专用FPGA IP核 + 高速收发器方案:
比如Xilinx 的 SDI IP核(支持直至12G-SDI);Intel (Altera) 的SDI IP核;Lattice Semiconductor的解决方案;优点是高度灵活、可集成(可将视频处理、音频嵌入、协议转换等功能一体集成)、易于升级和修改、不受供应商限制;缺点是开发难度高(需FPGA专业知识)、成本较高(FPGA和IP核许可)、功耗相对较高。
3、分立器件方案:
主要用于早期方案或特殊定制场景,目前已非常少见,基本被ASIC和FPGA方案取代;
FPGA建立12G-SDI的优势
纵然ASIC方案是很多成品设备的选择,但FPGA方案在高端、灵活和定制化的应用中具有无可比拟的优势,尤其是在原型验证和新产品开发阶段,具体优势体现如下:
1、极高的灵活性与可定制性:
通过协议适应性强:一颗FPGA许可经过重新编程,轻松支持从SD-SDI到12G-SDI的所有SDI标准,甚至能够应对未来可能的新标准。
作用集成:你行在FPGA内部除了达成SDI接口外,还同时集成视频处理(如缩放、降噪、色彩空间转换)、音频处理(如嵌入/解嵌、混音)、格式转换(如HDMI 2.0转12G-SDI)、数据封装等众多效果。这意味着可以用一颗芯片实现整个系统的核心逻辑,极大简化板级设计。
2、加速产品上市与迭代:
快速原型验证:FPGA允许你在硬件制造出来之前,就在开发板上验证和调试整个视频处理流程,显著缩短开发周期。
易于升级:如果在产品发布后发现必须修复bug或增加新功能,能够通过更新FPGA的比特流(bitstream)文档来实现硬件功能的“空中升级”,而无需修改PCB硬件。
3、克服ASIC的限制:
避免芯片缺货风险:在全球芯片供应不稳定的情况下,FPGA的通用性使其更容易获得,且不同型号间有可替代性。
实现独特功能:当你的产品需要一些特殊功能(如自定义的加密水印、非标准的视频时序、专有的图像预处理算法)时,ASIC无法提供帮助,而FPGA行让你自由实现这些差异化功能。
4、高性能与确定性延迟:
FPGA的并行处理架构非常适合视频流处理,行实现极高的数据吞吐量。
对于广播级应用,信号延迟必须是确定和可预测的。FPGA设计许可达成精确到像素级别的低延迟处理,这是基于软件的操作系统无法保证的。
工程概述
本设计基于Xilinx系列FPGA的GTY高速收发器实现12G-SDI音视频编解码,即包括了SDI视频的编解码,也包括了内嵌音频的编解码,属于较为高端的应用项目;本设计使用的开发板FPGA型号为Zynq UltraScale+ xczu7ev-ffvc1156-2-i和Kintex UltraScale+xcku3p-ffva676-1-e;
输入源为一个配置为4K60帧分辨率的笔记本电脑,电脑通过HDMI线缆连接到HDMI转12G-SDI转接盒,转接盒再通过BNC线缆连接到FPGA开发板的12G-SDI输入接口,这是目前较为经济的12G-SDI输入设备方案;12G-SDI信号随后进入板载的M23554G芯片实现单端转差分和均衡EQ功能;然后差分SDI信号直接进入FPGA内部的 GTY高速收发器,并调用Xilinx官方的UHD-SDI GT IP核实现串并转换,并输出32bit位宽的并行AXIS流;随后AXIS流送入Xilinx官方的UHD-SDI RX SUbsystem IP 核实现12G-SDI协议层解码,并提取出64bit位宽视频流和8通道10bit深度的内嵌音频流;然后音频流送入Xilinx官方的UHD-SDI Audio IP 核建立音频采集并输出32bit位宽的AXIS音频流,这里把SDI内嵌的音频流记作A;
通过到这里,输入12G-SDI的音视频流都已经分离出来了;为了使工程具有更广泛的适应性,还设计了外部音频嵌入SDI视频方案,即把外部音频流嵌入到本地SDI视频中输出,比如边说话边录视频应用;外部音频流能够选用耳机输出,应用BNC线缆连接到FPGA开发板外部音频输入接口,再送入板载的SN65HVD10DR芯片实现差分信号转单端;然后音频信号送入Xilinx官方的SPDIF/AES3 IP核完成音频采集并输出32bit位宽的AXIS音频流,这里把外部输入的音频流记作B;
然后使用音频流A和B同时送入Xilinx官方的AXI4-Stream Switch IP核实现二进一出的二选一操作,即选择哪一路视频作为SDI视频流的内嵌音频一同进行12G-SDI编码输出,默认使用SDI输入的内嵌音频流A;之后选择好的音频流送入Xilinx官方的UHD-SDI Audio IP核实现音频嵌入处理,将32bit位宽的AXIS音频流处理为8通道10bit深度的SDI内嵌音频流;继而内嵌音频流和和之前解码好的SDI视频流同时送入Xilinx官方的UHD-SDI TX SUbsystem IP 核实现12G-SDI协议层编码,即将SDI音频流嵌入到SDI视频流的行场效应中去,随视频流一同传输;然后编码好的SDI并行数据送入Xilinx官方的UHD-SDI GT IP核实现并串转换,即将32bit位宽的并行AXIS流转换为高速差分信号;然后差分SDI信号送入板载的M23145G芯片完成差分转单端和驱动增强的功能;接着12G-SDI视频通过FPGA开发板的BNC座子输出,通过同轴线连接到12G-SDI转HDMI盒子转接盒连接到HDMI显示器显示即可;本博客给予1套工程源码;
本博客详细描述了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、详细设计方案
设计框图
设计原理框图如下:
本设计时钟架构如下:
Zynq或者MicroBlaze通过i2c接口配置si5328时钟芯片生成148.35M差分时钟给GTY高速BANK作为UHD-SDI GT IP核的参考时钟;
Zynq或者MicroBlaze凭借i2c接口设置si570时钟芯片生成148.5M差分时钟给GTY高速BANK作为UHD-SDI GT IP核的南桥时钟;
参考,具体项目可用其他替代IC方案;就是si5328和si570只
12G-SDI输入源
输入源为一个部署为4K60帧分辨率的笔记本电脑,电脑通过HDMI线缆连接到HDMI转12G-SDI转接盒,转接盒再依据BNC线缆连接到FPGA开发板的12G-SDI输入接口,这是目前较为经济的12G-SDI输入设备方案;如下:
12G-SDI硬件均衡方案
12G-SDI接收端均衡芯片有很多,本设计采用Mindspeed公司的M23554G芯片做均衡处理,同时将单端信号转为差分信号;
12G-SDI发送端均衡芯片有很多,比如Mindspeed公司的M23145G芯片做均衡处理,同时将差分信号转为单端信号;
UHD-SDI GT–>串并/并串转换
12G-SDI视频进入FPGA时为差分高速串行信号,必须使用Xilinx官方的GT高速接口做转换,即将差分高速串行信号转换为并行数据;反过来,12G-SDI视频输出时则需做并串转换处理,即将并行数据转换为差分高速串行信号;本设计使用Xilinx官方的UHD-SDI GT IP核建立上述能力;UHD-SDI GT IP核配置如下:
对于12G-SDI接收,UHD-SDI GT IP核做串并转换输出32bit位宽的并行AXIS流;
对于12G-SDI发送,UHD-SDI GT IP核做并串转换输出高速差分信号;
UHD-SDI RX SUbsystem–>12G-SDI视频解码
然后AXIS流送入Xilinx官方的UHD-SDI RX SUbsystem IP 核实现12G-SDI协议层解码,并提取出64bit位宽视频流和8通道10bit深度的内嵌音频流;UHD-SDI RX SUbsystem IP 核配置如下:
该IP需要软件调整,本设计提供了vitis软件驱动,详情请参考vitis工程;
UHD-SDI Audio–>12G-SDI音频编解码
然后音频流送入Xilinx官方的UHD-SDI Audio IP 核实现8通道音频采集并输出32bit位宽的AXIS音频流,这里把SDI内嵌的音频流记作A;UHD-SDI Audio IP 核配置如下:
SPDIF/AES3–>外部音频编解码
为了使工程具有更广泛的适应性,还设计了外部音频嵌入SDI视频方案,即把外部音频流嵌入到本地SDI视频中输出,比如边说话边录视频应用;外部音频流能够选用耳机输出,应用BNC线缆连接到FPGA开发板外部音频输入接口,再送入板载的SN65HVD10DR芯片实现差分信号转单端;然后音频信号送入Xilinx官方的SPDIF/AES3 IP核实现音频采集并输出32bit位宽的AXIS音频流,这里把外部输入的音频流记作B;SPDIF/AES3 IP 核配置如下:
12G-SDI输出嵌入音频流选择
继而使用音频流A和B同时送入Xilinx官方的AXI4-Stream Switch IP核实现二进一出的二选一执行,即选择哪一路视频作为SDI视频流的内嵌音频一同进行12G-SDI编码输出,默认采用SDI输入的内嵌音频流A;然后选择好的音频流送入Xilinx官方的UHD-SDI Audio IP核建立音频嵌入处理,将32bit位宽的AXIS音频流处理为8通道10bit深度的SDI内嵌音频流;如下:
UHD-SDI TX SUbsystem–>12G-SDI视频编码
然后选择好的音频流送入Xilinx官方的UHD-SDI Audio IP核建立音频嵌入处理,将32bit位宽的AXIS音频流处理为8通道10bit深度的SDI内嵌音频流;继而内嵌音频流和和之前解码好的SDI视频流同时送入Xilinx官方的UHD-SDI TX SUbsystem IP 核实现12G-SDI协议层编码,即将SDI音频流嵌入到SDI视频流的行场效应中去,随视频流一同传输;UHD-SDI TX SUbsystem IP 核配置如下:
该IP得软件配置,本设计提供了vitis软件驱动,详情请参考vitis工程;
12G-SDI转HDMI盒子
由于我的手里没有可直接接收12G-SDI视频的显示设备,所以只能用12G-SDI转HDMI盒子借助HDMI显示器表现,盒子较贵,我用的秋叶原的,价格1000+;
PL端逻辑工程源码架构
提供2套工程源码,以工程源码1为例,vivado Block Design设计如下:
提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
PS端软件工程源码架构
PS端软件工程源码架构如下:
4、Vivado工程源码1详解–>ZU7EV版本
开发板FPGA型号:Zynq UltraScale+ xczu7ev-ffvc1156-2-i;
开发环境:Vivado2020.2;
输入:12G-SDI视频(内嵌音频),分辨率为4K60帧;
输出:12G-SDI视频(内嵌音频),分辨率为4K60帧;
输入12G-SDI视频均衡芯片:M23554G;
输出12G-SDI视频驱动芯片:M23145G;
12G-SDI解串/串化方案:Xilinx官方UHD-SDI-GT(采用GTY高速收发器)IP核;
12G-SDI音视频解码方案:Xilinx官方SMPTE UHD-SDI RX SUBSYSTEM IP核;
12G-SDI音视频编码方案:Xilinx官方SMPTE UHD-SDI TX SUBSYSTEM IP核;
12G-SDI内嵌音频编解方案:Xilinx官方UHD-SDI Audio IP核;
外部音频编解方案:Xilinx官方SPDIF/AES3 IP核;
工程作用:让读者掌握FPGA构建12G-SDI音视频编解码的设计能力,以便能够移植和设计自己的工程;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
5、Vivado工程源码2详解–>KU3P版本
开发板FPGA型号:Kintex UltraScale+xcku3p-ffva676-1-e;
制作环境:Vivado2020.2;
输入:12G-SDI视频(内嵌音频),分辨率为4K60帧;
输出:12G-SDI视频(内嵌音频),分辨率为4K60帧;
输入12G-SDI视频均衡芯片:M23554G;
输出12G-SDI视频驱动芯片:M23145G;
12G-SDI解串/串化方案:Xilinx官方UHD-SDI-GT(使用GTY高速收发器)IP核;
12G-SDI音视频解码方案:Xilinx官方SMPTE UHD-SDI RX SUBSYSTEM IP核;
12G-SDI音视频编码方案:Xilinx官方SMPTE UHD-SDI TX SUBSYSTEM IP核;
12G-SDI内嵌音频编解方案:Xilinx官方UHD-SDI Audio IP核;
外部音频编解方案:Xilinx官方SPDIF/AES3 IP核;
工程作用:让读者掌握FPGA搭建12G-SDI音视频编解码的设计能力,以便能够移植和设计自己的项目;
工程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开发板,推荐应用本博的开发板;
12G-SDI视频源,推荐本博的信号发生器;
12G-SDI转HDMI盒子;
HDMI线;
4K显示器;
以工程源码1为例,板子连接如下:
FPGA实现12G-SDI音视频编解码演示
以工程源码1为例,FPGA实现12G-SDI音视频编解码如下:
FPGA实现12G-SDI音视频编解码
8、工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送
网盘资料如下: