首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

  • 25-03-04 14:22
  • 2126
  • 7791
blog.csdn.net

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • FPGA图像处理方案
    • FPGA图像缩放方案
    • FPGA视频拼接叠加融合方案推荐
  • 3、设计思路详解
    • HLS 图像缩放介绍
    • Video Mixer介绍
  • 4、vivado工程介绍
    • PL 端 FPGA 逻辑设计
    • PS 端 SDK 软件设计
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • 输出静态演示
    • 输出动态演示
  • 7、福利:工程源码获取

Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

1、前言

没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx Zynq7000系列FPGA Zynq7020实现HLS图像缩放+视频拼接,输入视频源采用OV5640摄像头模组;调用Zynq软核的片内i2c控制器将OV5640配置为1280x720@30Hz分辨率;然后调用两路自定义IP采集OV5640摄像头视频DVP转RGB888,这里的两路输入均来自同一个OV5640,即用一路来模拟两路输入;然后调用两路Xilinx官方的Video In to AXI4-Stream IP核将RGB视频流转换为AXI4-Stream视频流;添加两路自定义的HLS图像缩放IP核,将输入视频进行任意尺寸图像缩放操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的VDMA IP将视频做PS侧DDR3的视频缓存操作,调用Zynq将VDMA配置为两帧帧缓存,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的Video Mixer IP将两路缓存的视频做视频拼接操作,调用Zynq配置两路视频的不同显示位置,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP将AXI4-Stream视频流转换为RGB视频流;然后添加自定义的HDMI发送IP将RGB视频转换为TMDS的差分视频送显示器显示;

提供一套vivado2019.1版本的工程源码和技术支持,通过SDK的配置可做成三套不同的缩放拼接方案,详情如下:

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;
  • 1
  • 2
  • 3

方案的详细输出演示请看后面的“上板调试验证并演示”章节,三种方案的切换或改变只需修改SDK软件代码,无需修改FPGA逻辑工程;

本博客详细描述了Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;整个工程调用Zynq软核做IP的配置,Zynq的配置在SDK里以C语言软件代码的形式运行,所以整个工程包括FPGA逻辑设计和SDK软件设计两部分,需要具备FPGA和嵌入式C语言的综合能力,不适合初学者或者小白;

提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

FPGA图像处理方案

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

FPGA图像缩放方案

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

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

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

3、设计思路详解

没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx Zynq7000系列FPGA Zynq7020实现HLS图像缩放+视频拼接,输入视频源采用OV5640摄像头模组;调用Zynq软核的片内i2c控制器将OV5640配置为1280x720@30Hz分辨率;然后调用两路自定义IP采集OV5640摄像头视频DVP转RGB888,这里的两路输入均来自同一个OV5640,即用一路来模拟两路输入;然后调用两路Xilinx官方的Video In to AXI4-Stream IP核将RGB视频流转换为AXI4-Stream视频流;添加两路自定义的HLS图像缩放IP核,将输入视频进行任意尺寸图像缩放操作,该操作通过Zynq软核SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的VDMA IP将视频做PS侧DDR3的视频缓存操作,调用Zynq将VDMA配置为两帧帧缓存,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的Video Mixer IP将两路缓存的视频做视频拼接操作,调用Zynq配置两路视频的不同显示位置,其本质为通过AXI_Lite 做寄存器配置;然后调用两路Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP将AXI4-Stream视频流转换为RGB视频流;然后添加自定义的HDMI发送IP将RGB视频转换为TMDS的差分视频送显示器显示;

提供一套vivado2019.1版本的工程源码和技术支持,通过SDK的配置可做成三套不同的缩放拼接方案,详情如下:

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;
  • 1
  • 2
  • 3

方案的详细输出演示请看后面的“上板调试验证并演示”章节,三种方案的切换或改变只需修改SDK软件代码,无需修改FPGA逻辑工程;vivado工程源码设计框图如下:
在这里插入图片描述
框图解释:箭头表示数据流向,箭头内文字表示数据格式,箭头外数字表示数据流向的步骤;

HLS 图像缩放介绍

由于工程所用到的IP都是常用IP,所以这里重点介绍一下HLS图像缩放IP;
支持最大分辨率:1920x1080@60Hz;但可以修改HLS源码增大分辨率,前提是你的FPGA逻辑资源要够大;
输入视频格式:AXI4-Stream;
输出视频格式:AXI4-Stream;
需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置;目前只适用于Xilinx Zynq7000系列FPGA使用,但可以修改HLS工程的器件类型来适应其他器件,比如Artix7、Kintex7等等;
提供自定义的配置API,通过调用该库函数即可轻松使用,具体参考SDK代码;
提供HLS工程源码,可任意修改,HLS版本为2019.1;
模块占用的FPGA逻辑资源如下:
请谨慎评估你的FPGA资源情况;
在这里插入图片描述

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、vivado工程介绍

PL 端 FPGA 逻辑设计

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2019.1;
输入:OV5640摄像头,分辨率1280x720p;
输出:HDMI,1080P分辨率下的有效拼接视频区域显示;
工程作用:Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示;
工程BD如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
工程的资源消耗和功耗如下:
在这里插入图片描述

PS 端 SDK 软件设计

PS 端 SDK 软件工程代码架构如下:
在这里插入图片描述
主函数通过如下的3个宏定义设计了3种不同的图像缩放拼接方案,代码如下:
在这里插入图片描述
3种不同的图像缩放拼接方案详情如下:

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;
  • 1
  • 2
  • 3

根据前面的宏定义,主函数进行相应的图像缩放操作,并打印相关信息,代码如下:
在这里插入图片描述

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、上板调试验证并演示

准备工作

Zynq7000系列开发板;
OV5640摄像头;
HDMI显示器或者LCD显示屏,我用到的LCD显示屏为4.3寸分辨率800x480;

输出静态演示

ov5640输入分辨率1280x720,HDMI输出分辨率960x1080;
在这里插入图片描述
ov5640输入分辨率1280x720,HDMI输出分辨率1920x540;
在这里插入图片描述
ov5640输入分辨率1280x720,HDMI输出分辨率960x540;
在这里插入图片描述

输出动态演示

录制了一个小视频,输出动态演示如下:

缩放拼接

7、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

源码技术支持加我微信哦
微信名片
注:本文转载自blog.csdn.net的9527华安的文章"https://blog.csdn.net/qq_41667729/article/details/134624480"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top