目录
- 1、前言
- 工程概述
- 免责声明
- 2、相关方案推荐
- FPGA图像处理方案
- FPGA视频拼接叠加融合方案推荐
- 4K视频输入输出方案
- Video Mixer视频拼接方案
- 3、详细设计方案
- 设计框图
- TPG测试彩条
- VDMA图像缓存
- Video Mixer介绍
- HDMI 1.4/2.0 Transmitter Subsystem
- Video PHY Controller
- 输出均衡电路
- 视频输出显示
- FPGA开发板
- 工程源码架构
- 4、工程源码详解-->XCZU4EV版本
- 5、工程移植说明
- vivado版本不一致处理
- FPGA型号不一致处理
- 其他注意事项
- 6、上板调试验证并演示
- 准备工作
- 输出效果演示
- 7、福利:工程代码的获取
Xilinx系列FPGA实现4K视频拼接,基于Video Mixer实现,提供1套工程源码和技术支持
1、前言
没玩过视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像视频拼接方案如下:
1:纯Verilog方案,但该方案很少能做到4K分辨率;
2:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;
本博客使用Xilinx的HLS方案实现4K视频拼接,具体是使用Xilinx官方推出了Video Mixer IP核,该IP可轻松支持4K视频拼接,但遗憾的是仅可在Xilinx自家系列FPGA上使用,或许复旦微也可以;
工程概述
本设采用Xilinx官方的Video Mixer IP核为核心,实现4K视频拼接;输入源4路Xilinx官方的Video Test Pattem Generator IP核产生4路分辨率为1920x1080@60Hz的彩条视频,彩条视频为单像素模式(一个时钟24bit像素),输出接口为AXI4-Stream,每路彩条的形状不一样,分别为竖条彩条形状、交叉网格形状、棋盘形状、格子形状;然后调用4路Xilinx官方的XDMA将4路彩条视频写入FPGA板载DDR4中缓存;然后调用Xilinx官方的Video Mixer将4路彩条视频从DDR4中读出并做拼接处理,拼接方案为4路视频沾满4K分辨率显示器,即4路视频做4分屏拼接显示;然后给到Xilinx官方HDMI 1.4/2.0 Transmitter Subsystem IP核做4K视频的编码工作,可同时编码视频流和音频流,本工程没有音频输入;输出3路AXI4-Stream流和DDC控制信号,3路AXI4-Stream流进入Xilinx官方的Video PHY Controller IP核做4K视频并串转化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号,该IP需使用FPGA GT高速接口资源;输出的差分视频信号从GT BANK上输出,进入到板载的DP159或其他同等功能的芯片做均衡处理,然后连接到HDMI2.0输出接口;HDMI2.0周边电路需要i2c配置,所以还需要调用Zynq或者MicroBlaze软核进行配置,软核开发工具为Vitis SDK;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
FPGA图像处理方案
我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往
FPGA视频拼接叠加融合方案推荐
我的主页目前有FPGA视频拼接叠加融合专栏,改专栏收录了我目前手里已有的FPGA视频拼接叠加融合方案,从实现方式分类有基于HSL实现的视频拼接、基于纯verilog代码实现的视频拼接;从应用上分为单路、2路、3路、4路、8路、16路视频拼接;视频缩放+拼接;视频融合叠加;从输入视频分类可分为OV5640摄像头视频拼接、SDI视频拼接、CameraLink视频拼接等等;以下是专栏地址:
点击直接前往
4K视频输入输出方案
Xilinx系列FPGA有一套专用的基于GT高速接口资源的4K视频实现方案,我之前出过专门的博客,博客链接如下:
点击直接前往
Video Mixer视频拼接方案
Video Mixer是Xilinx官方推出的视频拼接方案,我之前出过专门的博客,博客链接如下:
点击直接前往
3、详细设计方案
设计框图
本设计使用的是Xilinx官方推荐的方案,设计框图如下:
TPG测试彩条
输入源4路Xilinx官方的Video Test Pattem Generator IP核产生4路分辨率为1920x1080@60Hz的彩条视频,彩条视频为单像素模式(一个时钟24bit像素),输出接口为AXI4-Stream,每路彩条的形状不一样,分别为竖条彩条形状、交叉网格形状、棋盘形状、格子形状;效果如下:
TPG测试彩条在Block Design中如下:
VDMA图像缓存
调用4路Xilinx官方的XDMA将4路彩条视频写入FPGA板载DDR4中缓存;VDMA只使用写模式,配置为3帧缓存,配置如下:
VDMA在Block Design中如下:
Video Mixer介绍
由于工程所用到的IP都是常用IP,所以这里重点介绍一下Video Mixer IP;
支持最大分辨率:8K,即可以处理高达8K的视频;
支持最多16层视频拼接叠加,即最多可拼接16路视频;
输入视频格式:AXI4-Stream;
输出视频格式:AXI4-Stream;
需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;
提供自定义的配置API,通过调用该库函数即可轻松使用,具体参考SDK代码;
模块占用的FPGA逻辑资源更小,相比于自己写的HLS视频拼接而言,官方的Video Mixer资源占用大约减小30%左右,且更高效:
Video Mixer逻辑资源如下,请谨慎评估你的FPGA资源情况;
本设计采用4路视频拼接模式,视频输入为Memory模式,即Video Mixer通过AXI4总线主动去DDR4中读取视频,视频背景分辨率为3840x2160,配置如下:
HDMI 1.4/2.0 Transmitter Subsystem
用XIlinx方案做4K HDMI视频收发必须要用到此IP,需要输出的4K HDMI视频先进入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K 高清视频的编码工作,同时编码视频流和音频流,这里的音频流并没有数据传入,只是做了预留,用户可根据需求决定是否加入音频;输出3路AXI4-Stream流和DDC控制信号;DMI 1.4/2.0 Transmitter Subsystem配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
Video PHY Controller
用XIlinx方案做4K HDMI2.0视频收发必须要用到此IP,Video PHY Controller IP核主要做解串和串化的工作,利用FPGA GT资源,在发送端做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号;Video PHY Controller配置如下:
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
输出均衡电路
在HDMI输出端需要加均衡器电路,大体方案如下:
图中IC型号只做参考,具体根据你的项目方案而定;
视频输出显示
视频输出显示需要支持4K@60Hz,一般情况下,1千块以内的显示器是不支持的,我是用的是家里的电视机,品牌为小米电视EA55-2022款(@雷军,雷总请给鸡腿),你可以查询一下你的电视是否支持4K@60Hz。。。
FPGA开发板
为了确保工程与硬件FPGA开发板的适配性,推荐使用本博主同款开发板,以减少移植难度和快速验证,当然,如果你有自己的FPGA板子,也可以用自己的,只不过需要根据你板子将工程移植一下;本博主现有两款FPGA开发板可配套本工程的两套代码,分别如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Zynq UltraScale+ FPGA开发板
需要这两款开发板的请联系博主。。。
工程源码架构
工程源码架构包括vivado Block Design逻辑设计和vitis SDK软件设计;
Block Design逻辑设计架构截图如下:
综合后的源码架构如下:
Vitis SDK软件代码如下:
4、工程源码详解–>XCZU4EV版本
开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2022.2;
输入:4路Xilinx官方TGP生成彩条,单像素,分辨率1920x1080@60Hz;
图像拼接方案:Xilinx官方Video Mixer方案;
图像拼接示例:3840x2160背景下拼接4路1920x1080视频,即4分屏;
输出:小米电视,HDMI2.0,分辨率3840x2160@60Hz;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
软核类型:Zynq UltraScale+ MPSoC;
使用GT资源类型:GTH;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频拼接的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
5、工程移植说明
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软核;
6、上板调试验证并演示
准备工作
试验需要准备以下设备:
FPGA开发板,可以自行购买,也可以找本博主购买同款开发板;
HDMI线;
4K分辨率显示器;
以工程源码1的开发板为例进行上板调试;
连接如下:
输出效果演示
输出效果静态演示如下:
输出效果动态演示如下:
FPGA-4K视频拼接
7、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务: