Xilinx系列FPGA实现4K视频缩放+拼接+HDMI2.0输出,基于Video Processing Subsystem + Video Mixer方案,提供9套工程源码和技术支持


Xilinx系列FPGA实现4K视频缩放+拼接+HDMI2.0输出,基于Video Processing Subsystem + Video Mixer方案,提供9套工程源码和技术支持

1、前言

Xilinx系列FPGA实现4K视频收发现状:
目前Xilinx系列FPGA实现提供了多种4K视频收发方案;对于纯FPGA而言,需要用到GT高速接口资源实现编解码,但要求K7及其以上系列FPGA,以HDMI2.0为例,Xilinx官方提供了基于Video PHY Controller为核心的一整套HDMI2.0收发方案,此外,还可以直接使用GT高速接口IP核配置为GT-HDMI编解码模式,或者配置为DP编解码模式;对于Zynq系列FPGA而言,既可以使用PL端的GT高速接资源做4K视频收发,也可以使用PS端的DP外设做4K视频收发;本博主擅长Xilinx系列FPGA实现HDMI2.0视频收发方案设计,本设计采用基于Video PHY Controller为核心的一整套HDMI2.0收发方案,最高支持3840x2160@60Hz;

工程概述

本设计基于Xilinx系列FPGA的GT高速接口实现4K视频缩放拼接转HDMI2.0输出解决方案,最高支持4K@60Hz分辨率;视频输入源为多路(2路或者4路甚至更多路)OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,然后采集摄像头视频;然后采集条视频送入多路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入多路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从多路VDMA读出后送入Xilinx官方的Video Mixer IP核实现多路视频拼接;然后送入AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;

上述IP和IC需要SDK或者vitis配置,所以需要调用MicroBlaze或者Zynq软核;针对目前市面上主流的项目需求,本博客共设计了9套工程源码,详情如下:
在这里插入图片描述
现对上述9套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Kintex7-xc7k325t‐2ffg676;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用GTX高速接口,适用于Xilinx-Kintex7系列FPGA实现HDMI2.0视频收发应用;

工程源码2

开发板FPGA型号为Xilinx–>Kintex7-UltraScale-xcku040-ffva1156-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Kintex7-UltraScale系列FPGA实现HDMI2.0视频收发应用;

工程源码3

开发板FPGA型号为Xilinx–>Kintex7-UltraScale+ xcku3p-ffva676-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTY高速接口,适用于Xilinx-Kintex7-UltraScale+系列FPGA实现HDMI2.0视频收发应用;

工程源码4

开发板FPGA型号为Xilinx-Zynq UltraScale+ xczu4ev-sfvc784-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

工程源码5

开发板FPGA型号为Xilinx-Zynq UltraScale+ xczu4ev-sfvc784-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为4路,以模拟4路视频输入;然后送入4路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入4路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入4路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从4路VDMA读出后送入Xilinx官方的Video Mixer IP核实现4路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加4路1920x1080的拼接视频,即3840x2160的4分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

工程源码6

开发板FPGA型号为Xilinx-Zynq UltraScale+ xczu7ev-2ffvc156;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

工程源码7

开发板FPGA型号为Xilinx-Zynq UltraScale+ xczu7ev-2ffvc156;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为4路,以模拟4路视频输入;然后送入4路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入4路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入4路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从4路VDMA读出后送入Xilinx官方的Video Mixer IP核实现4路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加4路1920x1080的拼接视频,即3840x2160的4分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

工程源码8

开发板FPGA型号为Xilinx–>Xilinx-Zynq UltraScale+ xczu15eg-ffvb1156-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为2路,以模拟2路视频输入;然后送入2路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入2路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入2路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从2路VDMA读出后送入Xilinx官方的Video Mixer IP核实现2路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加2路1920x1080的拼接视频,即3840x2160的2分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

工程源码9

开发板FPGA型号为Xilinx–>Xilinx-Zynq UltraScale+ xczu15eg-ffvb1156-2-i;视频输入源为OV5640摄像头,如果你的FPGA开发板没有视频输入接口,或者你的手里没有摄像头时,可以使用FPGA逻辑实现的动态彩条模拟输入视频,代码里通过parametr参数选择视频源,默认使用OV5640摄像头;FPGA首先对摄像头进行i2c初始化配置,输出分辨率配置为1280x720@30Hz,然后采集的摄像头视频复制为4路,以模拟4路视频输入;然后送入4路Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转 AXI4-Stream视频流;然后送入4路Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放,由1280x720放大到1920x1080;然后送入4路Xilinx官方的VDMA IP核实现视频三帧缓存;视频从4路VDMA读出后送入Xilinx官方的Video Mixer IP核实现4路视频拼接;然后送入Xilinx官方的AXI4-Stream Data FIFO IP核实现视频缓冲;然后送入Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核实现HDMI2.0视频编码;然后送入Xilinx官方的Video PHY Controller IP核实现并串转换,并输出高速差分的HDMI2.0视频,输出分辨率配置为3840x2160@60Hz;输出效果为在3840x2160背景下叠加4路1920x1080的拼接视频,即3840x2160的4分屏显示;HDMI2.0视频再送入板载的DP159或其他同等功能的驱动芯片,以增强高速信号的输出驱动能力;最后使用HDMI2.0线缆连接至显示器即可输出显示采集的视频;本设计使用UltraScale-GTH高速接口,适用于Xilinx-Zynq UltraScale+ MPSoC系列FPGA实现HDMI2.0视频收发应用;

本博客详细描述了Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

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

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

我已有的4K/8K视频处理解决方案

我的主页有FPGA 4K/8K视频处专栏,该专栏有4K/8K视频处理,包括简单的4K/8K视频收发、4K/8K视频缩放、4K/8K视频拼接等等;以下是专栏地址:
点击直接前往

我已有的FPGA图像处理方案

我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往

Video Processing Subsystem图像缩放应用

本设计采用Vivado2022.2版本设计,该版本属于高版本,不能使用HLS2019.2及其以下版本生成的HLS IP,所以也就不能使用本博客自研的HLS图像缩放IP,只能使用Video Processing Subsystem,关于Video Processing Subsystem,之前写过一篇博客,可以参考学习,以下是博客地址:
点击直接前往

Video Mixer视频拼接方案

Video Mixer是Xilinx官方推出的视频拼接方案,我之前出过专门的博客,博客链接如下:
点击直接前往

FPGA视频拼接叠加融合方案推荐

我的主页目前有FPGA视频拼接叠加融合专栏,改专栏收录了我目前手里已有的FPGA视频拼接叠加融合方案,从实现方式分类有基于HSL实现的视频拼接、基于纯verilog代码实现的视频拼接;从应用上分为单路、2路、3路、4路、8路、16路视频拼接;视频缩放+拼接;视频融合叠加;从输入视频分类可分为OV5640摄像头视频拼接、SDI视频拼接、CameraLink视频拼接等等;以下是专栏地址:
点击直接前往

3、详细设计方案

设计框图

本设计使用的是Xilinx官方推荐的方案,该方案大致如下:
在这里插入图片描述
以4路视频缩放拼接为例,具体到本设计的工程详细设计方案框图如下:
在这里插入图片描述

硬件设计架构

4K HDMI2.0 硬件设计架构如下:
在这里插入图片描述
本博主提供FPGA HDMI2.0视频收发的参考原理图,为PDF版本,里面包含了详细的电路设计,可节省你的硬件开发时间,如下:
在这里插入图片描述

FPGA开发板

本UP主有下列FPGA开发板均可实现4K@60Hz视频 HDMI2.0的收发,本博客仅仅是介绍了其中Zynq UltraScale+系列的开发板实现方案,需要其他方案的朋友可以在博客末尾联系到本UP,现有开发板方案如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Xilinx Kintxe7 UltraScale FPGA开发板;
3–>Xilinx Kintxe7 UltraScale+ FPGA开发板;
4–>Zynq UltraScale+ MPSoC FPGA开发板;
关于本博客使用的这款开发板详细信息,请参考我之前的博客,对这块开发板感兴趣的朋友可以咨询本UP获得;博客链接如下:
点击直接前往

输入Sensor之–>OV5640摄像头+动态彩条

输入Sensor是本工程的输入设备,其一为OV5640摄像头,此外本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:
在这里插入图片描述
SENSOR_TYPE=0;则输出OV5640摄像头采集的视频;
SENSOR_TYPE=1;则输出动态彩条的视频;

OV5640摄像头需要i2c初始化配置,本设计配置为1280x720@30Hz分辨率,本设计提供纯verilog代码实现的i2c模块实现配置功能;此外,OV5640摄像头还需要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频,本设计提供纯verilog代码实现的图像采集模块实现配置功能;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;将OV5640摄像头配置采集和动态彩条进行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:
在这里插入图片描述
将模块顶层直接拖入Block Design设计中如下:
在这里插入图片描述

Video In To AXI4-Stream

Xilinx官方的Video In To AXI4-Stream IP核实现Native视频转AXI4-Stream视频流,功能十分简单,不需要软件配置,Block Design设计中如下:
在这里插入图片描述

Video Processing Subsystem 图像缩放

由于工程所用到的IP都是常用IP,所以这里重点介绍一下Video Processing Subsystem;
Video Processing Subsystem有缩放、去隔行、颜色空间转换等功能,这里仅使用图像缩放功能;其特点如下:
优点1:适用于Xilinx所有系列的FPGA器件和所有的Vivado版本;
优点2:支持8K最大分辨率:即可以处理高达8K的视频;
优点3:输入视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点4:输出视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点5:模块占用的FPGA逻辑资源更小,相比于自己写的HLS图像缩放而言,官方的Video Processing Subsystem资源占用大约减小30%左右,且更高效:
注意!!!!
注意!!!!
注意!!!!
注意!!!!
缺点1:需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置,设计难度现对复杂,对新手小白不太友好;
缺点2:Xilinx官方提供的Video Processing Subsystem IAP并不能实现任意尺寸的图像缩放,只能在IAP中视频分辨率查找表范围内进行缩放操作,如果想要实现自定义任意尺寸缩放,需要修改Xilinx官方提供的API源代码,对新手小白极其友好,有此类需求的朋友可以联系博主,提供私人定制服务,也就是我帮你修改Xilinx官方提供的API源代码,以实现自定义任意尺寸缩放操作;

Video Processing Subsystem逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述
Video Processing Subsystem 在Block Design设计中如下:
在这里插入图片描述

VDMA 图像缓存

采集视频送入Xilinx官方的VDMA IP核实现视频三帧缓存,功能十分简单,VDMA需要Vitis或者SDK软件配置,Block Design设计中如下:
在这里插入图片描述

Video Mixer 多路视频拼接详解

这里重点介绍一下Xilinx官方的Video Mixer IP;
支持最大分辨率:8K,即可以处理高达8K的视频;
支持最多16层视频拼接叠加,即最多可拼接16路视频;
输入视频格式:AXI4-Stream;
输出视频格式:AXI4-Stream;
需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;
提供自定义的配置API,通过调用该库函数即可轻松使用,具体参考SDK代码;
模块占用的FPGA逻辑资源更小,相比于自己写的HLS视频拼接而言,官方的Video Mixer资源占用大约减小30%左右,且更高效:以工程源码1的2路视频拼接为例,Video Mixer逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述
关于这个Video Mixer视频拼接方案详情,请参考我之前的博客,博客链接如下:
点击直接前往
以工程源码2为例,其在Block Design中如下:
在这里插入图片描述

HDMI 1.4/2.0 Transmitter Subsystem

调用Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K音视频的编码工作,同时编码4K视频流和音频流并输出3路AXI4-Stream流和DDC控制信号;HDMI 1.4/2.0 Transmitter Subsystem配置如下:
在这里插入图片描述
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;
值得注意的是,该IP使用的GT高速接口PLL类型要根据TX端输入的参考时钟而定,具体要结合你的原理图设计考虑,并非固定配置,详情可咨询博主;

Video PHY Controller

Video PHY Controller可做HDMI2.0视频的接收和发送的解串与串化;对于HDMI2.0视频接收而言,可将原来高速串行信号解串为3路20bit的AXI4-Stream并行数据;然后调用Xilinx官方的HDMI 1.4/2.0 Receiver Subsystem IP核做4K超清视频的解码工作,同时解码出AXI4-Stream流的音频流和视频流;对于HDMI2.0视频发送而言,可将原3路20bit的AXI4-Stream并行数据串化为高速串行信号,输出的差分视频数据信号直接从FPGA的GT高速BANK输出,差分时钟信号直接从FPGA的LVDS高速BANK输出;以HDMI2.0收发模式为例,Video PHY Controller配置如下:
在这里插入图片描述
该IP需要在Vitis SDK中做进一步详细配置,详情参考Vitis SDK C语言软件代码;

视频输出显示

视频输出显示需要支持4K@60Hz,一般情况下,1千块以内的显示器是不支持的,我是用的是家里的电视机,品牌为小米电视EA55-2022款,你可以查询一下你的电视是否支持4K@60Hz,此外,使用的HDMI线缆也必须支持4K@60Hz,在保证显示线缆和显示器OK的情况下再做输出测试,可以解决很大部分调试排查时间;

vivado逻辑工程源码架构

工程源码架构包括vivado Block Design逻辑设计和vitis SDK软件设计;
以工程源码5为例,Block Design逻辑设计架构截图如下:
在这里插入图片描述
以工程源码5为例,综合后的源码架构如下:
在这里插入图片描述

vitis软件工程源码架构

Vitis软件代码如下:
在这里插入图片描述
!!!注意
!!!注意
!!!注意
代码为了兼容不同板卡的外围IC,所以代码显得冗余复杂,图中标记的为必须使用到的代码,大多数保持默认即可;
工程源码1使用的是vivado2019.1的SDK;

4、工程源码1详解–>Kintex7-325T,2路视频缩放拼接

开发板FPGA型号:Xilinx–>Kintex7-xc7k325t‐2ffg676;
FPGA开发环境:Vivado1919.1;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的2路1920x1080的视频拼接2分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:GTX高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解–>KU040,2路视频缩放拼接

开发板FPGA型号:Xilinx–>Kintex7-UltraScale-xcku040-ffva1156-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的2路1920x1080的视频拼接2分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解–>KU3P,2路视频缩放拼接

开发板FPGA型号:Xilinx–>Kintex7-UltraScale+ xcku3p-ffva676-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的2路1920x1080的视频拼接2分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTY高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程源码4详解–>ZU4EV,2路视频缩放拼接

开发板FPGA型号:Xilinx-Zynq UltraScale+ xczu4ev-sfvc784-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的2路1920x1080的视频拼接2分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、工程源码5详解–>ZU4EV,4路视频缩放拼接

开发板FPGA型号:Xilinx-Zynq UltraScale+ xczu4ev-sfvc784-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的4路1920x1080的视频拼接4分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,4路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、工程源码6详解–>ZU7EV,2路视频缩放拼接

开发板FPGA型号:Xilinx-Zynq UltraScale+ xczu7ev-2ffvc156;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的4路1920x1080的视频拼接4分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

10、工程源码7详解–>ZU7EV,4路视频缩放拼接

开发板FPGA型号:Xilinx-Zynq UltraScale+ xczu7ev-2ffvc156;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的4路1920x1080的视频拼接4分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,4路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

11、工程源码8详解–>ZU15EG,2路视频缩放拼接

开发板FPGA型号:Xilinx–>Xilinx-Zynq UltraScale+ xczu15eg-ffvb1156-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的2路1920x1080的视频拼接2分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,2路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

12、工程源码9详解–>ZU15EG,4路视频缩放拼接

开发板FPGA型号:Xilinx–>Xilinx-Zynq UltraScale+ xczu15eg-ffvb1156-2-i;
FPGA开发环境:Vivado2022.2;
输入:OV5640摄像头或FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI2.0,3840x2160@60Hz分辨率下的4路1920x1080的视频拼接4分屏显示;
图像缩放方案:Xilinx官方Video Processing Subsystem方案;
图像缩放案例:1280x720放大到1920x1080;
图像缓存方案:Xilinx官方VDMA方案,3帧缓存;
视频拼接方案:Xilinx官方Video Mixer方案,4路频拼接;
HDMI2.0发送方案:Xilinx系列FPGA GT高速接口方案;
使用GT高速接口类型:UltraScale-GTH高速接口;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA实现4K视频缩放拼接HDMI2.0输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

13、工程移植说明

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软核;

14、上板调试验证并演示

准备工作

FPGA开发板,推荐使用本博的开发板;
OV5640摄像头,没有则选择彩条输入;
HDMI显示器或者电视;
HDMI线;
以工程源码4为例,开发板连接如下:
在这里插入图片描述

HDMI2.0-4K视频缩放拼接演示

HDMI2.0-4K视频缩放拼接演示如下:

4K缩放拼接

15、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41667729/article/details/146379697
今日推荐