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

news2024/11/28 5:31:26

目录

  • 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,在输出屏幕左上角和右下角两边拼接输出;

方案的详细输出演示请看后面的“上板调试验证并演示”章节,三种方案的切换或改变只需修改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,在输出屏幕左上角和右下角两边拼接输出;

方案的详细输出演示请看后面的“上板调试验证并演示”章节,三种方案的切换或改变只需修改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,在输出屏幕左上角和右下角两边拼接输出;

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

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名片。
网盘资料如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++ Primer Plus学习记录】do while循环

do while循环是出口条件循环。这意味着这种循环将首先执行循环体,然后再判定测试表达式,决定是否应继续执行循环。如果条件为false,则循环终止;否则,进入新一轮的执行和测试。这样的循环通常至少执行一次,因…

Element的安装与基本使用

文章目录 一.什么是Element?二.Element的安装(Vscode)三.在Vue项目中引入ElementUI组件库四.编写Element的Vue组件文件五.演示如何使用Element官网中的组件根组件中引入Element组件内容进行网页展示 一.什么是Element? Element是饿了么团队研发的一套为开发者与设计师等准备…

Unity工具脚本-检测资源文件夹是否有预制件是指定层级

效果: 先在菜单栏里面找到Tools/CheckPrefabLayers打开窗口 代码: using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class CheckPrefabLayers : EditorWindow {public in…

典型的SAST支持检测标准

这里我们列举了Coverity、Cobot、代码卫士、Klocwork、QAC、C test几款典型的SAST工具,看看他们都是支持那些C、C标准(主要是C、C标准,其它语言较少)呢? 这可以作为厂商研发的方向标。 (结束)

好物分享(领劵优惠好手)

本次分享一个领取领优惠、充值、会员、购物优惠等功能 部分截图 需要的点击下方按钮 前往体验 感谢大家的支持 更多内容请关注微信小程序,源码、插件、模板及时更新

Breadcrumb面包屑(antd-design组件库)简单用法和自定义分隔符

1.Breadcrumb面包屑 显示当前页面在系统层级结构中的位置,并能向上返回。 2.何时使用 当系统拥有超过两级以上的层级结构时; 当需要告知用户『你在哪里』时; 当需要向上导航的功能时。 组件代码来自: 面包屑 Breadcrumb - Ant Des…

【功能测试】软件系统测试报告

1.引言 1.1.目的 本测试报告为 xxx 系统测试报告,本报告目的在于总结测试阶段的测试及测试结果分析,描述系统是否达到需求的目的。 本报告预期参考人员包括测试人员、测试部门经理、开发人员、项目管理人员等。 1.2.参考文档 《xxxx系统需求规格说明…

【MATLAB】RLMD分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 RLMD分解FFTHHT组合算法是一种强大的分析方法,结合了局部均值分解(LMD)、快速傅里叶变换(FFT)和希尔伯特-黄变换(H…

第二证券:机构密集调研消费电子、半导体产业链

据上海证券报记者核算,近一个月来,共有41家消费电子类公司和92家半导体公司(核算标准:申万职业2021,下同)发布出资者调研纪要。其间,有的公司款待了16个批次估计超200家安排,更有公司…

P8A009-A011活动目录安全

设置目录数据库访问权限 【预备知识】 活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。(Active Directory不能运行在Windows Web Server上,但…

SpringBoot : ch10 整合Elasticsearch

前言 欢迎阅读本文,本文将介绍如何在Spring Boot应用程序中整合Elasticsearch。随着信息量的不断增加,对数据的高效管理和检索变得尤为重要。Elasticsearch作为一个强大的开源搜索和分析引擎,为我们提供了一个灵活且高效的解决方案。 在本文…

sqli-labs靶场详解(less1-less10)

目录 less-1 less-2 less 3 less 4 less 5 less-6 less-7 less-8 less-9 less-10 1-10关代码分析 less-1 判断注入点 ?id1 正常 ?id1 报错:to use near 1 ?id1\ 报错:to use near 1\ ?id1 and 11 正常 ?id1 and 11 报错:to …

Debian10安装VMware Tools

一、原系统 首先我在界面按CTRLALTT和CTRLSiftT都没有反应,没关系,我有办法 系统版本 管理员用户 步骤一:打开VMware Tools文件 步骤二、将文件复制到自己熟悉的文件内 步骤三、命令行查看文件是否复制成功存在 步骤四、解压VMware-tools…

一款具有MID认证的单相电表ADL200,可用于光伏逆变器监测,那么这款表尺寸跟参数有哪些呢?

概述 ADL200 单相电子式电能表主要用于计量低压网络的单相有功电能,同时可测量电压、电流、功率等电量, 并可选配 RS485 通讯功能,方便用户进行用电监测、集抄和管理。可灵活安装于配电箱内,实现对不同区域和不 同 负 荷 的 分 项…

Qt右键菜单+动作+qss案例

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置界面颜色样式this->setStyleSheet("background-color:rgb(54,54,54)");//创建文件菜单QMenu *fileMenuItems new QMenu;//菜单添加iconfileMenuItems->se…

JavaWeb后端数据库MySQL的使用

JavaWeb MySQLSQL数据库设计 多表设计1对多1对1多对多 多表查询连接查询内连接外连接左外连接右外连接 子查询事务索引 MySQL MySQL数据模型 关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 SQL SQL:操作关系型数…

丽晶酒店及度假村打造绮丽之境“美食实验室”中国市场首秀

于重庆丽晶酒店以艺术与美食的碰撞演绎“对比之美”,感官之华 2023年11月28日,中国上海 ——基于对当下消费趋势的敏锐洞察,洲际酒店集团旗下奢华品牌丽晶酒店及度假村近年来不断焕新,以崭新形象缔造现代奢华的旅居体验。作为丽晶…

多线程【第二十章】

线程简介 世间有很多工作都是可以同时完成的。例如,人体可以同时进行呼吸、血液循环、思考问题等活动;用户既可以使用计算机听歌,也可以使用它打印文件。同样,计算机完全可以将多种活动同时进行,这种思想放在 Java 中被称为并发&a…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好,下面就来实现相应的功能,目前先针对自定义…

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习,同时也是记录下来,为个人学习使用,文档中有此不当之处,请谅解。 注解与注释是不一样的,注解有更广泛的应用; 通过注解与注释都能提高代码的可读性和规…