当前位置:首页 > 新闻资讯 > FPGA之家动态 >

Zynq7020 使用 Video Processing Subsystem 实现图像缩放

时间:2024-07-05      来源:网络搜集 关于我们 0

目录

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名片。

网盘资料如下:


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


————————————————


                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/qq_41667729/article/details/140011948


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言