首页 最新 热门 推荐

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

紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示,OV7725采集,提供PDS工程源码和技术支持

  • 25-03-04 14:40
  • 3541
  • 11279
blog.csdn.net

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • FPGA图像缩放方案推荐
    • FPGA视频拼接叠加融合方案推荐
    • 紫光同创FPGA图像采集方案推荐
    • 紫光同创FPGA图像缩放方案推荐
    • 紫光同创FPGA视频拼接方案推荐
  • 3、设计思路框架
    • 为什么选择OV7725摄像头?
    • 视频源选择
    • OV7725摄像头配置及采集
    • 动态彩条
    • 缓冲FIFO
    • 图像缩放模块详解
      • 设计框图
      • 代码框图
      • 2种插值算法的整合与选择
    • HDMA图像缓存
      • 输入输出视频
      • HDMA缓冲FIFO
      • HDMA控制模块
    • HDMI输出
  • 4、PDS工程详解
  • 5、上板调试验证并演示
    • 准备工作
    • 静态演示
    • 动态演示
  • 6、福利:工程源码获取

紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示,OV7725采集,提供PDS工程源码和技术支持

1、前言

“苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;在此,请收下我一声谢谢啊!!!!!!

2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于辣鸡段位,国产FPGA仰望Xilinx情不自禁道:你以为躲在这里就找不到你吗?没用的,你那样拉轰的男人,无论在哪里,都像黑夜里的萤火虫那样的鲜明、那样的出众,你那忧郁的眼神,稀嘘的胡渣子,神乎其技的刀法,还有那杯Dry martine,都深深的迷住了我。。。然而才短短4年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,面对此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。
言归正传,目前对于国产FPGA的共识有以下几点:
1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;
2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具
3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册。。
4:采购方便,产业链自主可控,采购便捷

没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用紫光同创的PGL22G-6MBG324 FPGA实现图像缩放多路视频拼接方案;视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你得手里没有摄像头,或者你得开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的`define宏定义进行,上电默认使用OV7725作为视频源,输入分辨率配置为640x480@60Hz;FPGA采集到输入视频后,使用纯verilog代码实现的图像缩放模块,将输入视频从640x480缩放为640x720的分辨率,之所以缩放为这个尺寸,是因为输出分辨率为1280x720,这样两路640x720视频做拼接,刚好可以而分屏占满整个屏幕输出,效果更为美观。。。将图像数据复制一份,这样就有了两路一模一样的视频,用来模拟两路视频输入,如果你的手里有两个摄像头,则直接输入两路即可,原谅我太穷,买不起两个OV7725摄像头,只能这样模拟了。。。使用本人开发的HDMA视频缓存架构方案实现图像的乒乓缓存,不同的视频缓存与DDR3中不同的地址区域,读出视频时却一次性读完,从而达到视频拼接的输出效果;读出视频后,用纯verilog显示的HDMI输出模块送显示器显示即可;本设计提供1套Pango Design Suite 2021.4版本的工程源码

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

免责声明

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

2、相关方案推荐

本工程是图像缩放和视频拼接的整合版,在此之前,我分别推出过FPGA图像缩放方案和FPGA视频拼接方案,所以推荐如下:

FPGA图像缩放方案推荐

该方案使用纯verilog代码实现任意尺寸图像缩放,详细请参考我之前的博客,博客链接如下:
直接点击前往

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

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

紫光同创FPGA图像采集方案推荐

FPGA图像采集是做图像处理的基础,FPGA图像采集显示的核心在于图像的DDR缓存,紫光同创FPGA自带DDR控制器IP,该IP带AXI4-FULL从机接口,所以对于图像的DDR缓存,就相对简单了,我之前专门出过一篇紫光同创FPGA采集OV7725摄像头HDMI显示的博客,感兴趣的可以前往查看,以下是博客地址:
点击直接前往

紫光同创FPGA图像缩放方案推荐

本设计使用紫光同创FPGA做图像的任意尺寸缩放,我之前专门出过一篇紫光同创FPGA图像缩放方案的博客,建议先仔细读读该博客,以下是博客地址:
点击直接前往

紫光同创FPGA视频拼接方案推荐

本设计使用紫光同创FPGA做视频拼接,我之前专门出过一篇紫光同创FPGA图像缩放方案的博客,建议先仔细读读该博客,以下是博客地址:
点击直接前往

3、设计思路框架

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你得手里没有摄像头,或者你得开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的`define宏定义进行,上电默认使用OV7725作为视频源,输入分辨率配置为640x480@60Hz;FPGA采集到输入视频后,使用纯verilog代码实现的图像缩放模块,将输入视频从640x480缩放为640x720的分辨率,之所以缩放为这个尺寸,是因为输出分辨率为1280x720,这样两路640x720视频做拼接,刚好可以而分屏占满整个屏幕输出,效果更为美观。。。将图像数据复制一份,这样就有了两路一模一样的视频,用来模拟两路视频输入,如果你的手里有两个摄像头,则直接输入两路即可,原谅我太穷,买不起两个OV7725摄像头,只能这样模拟了。。。使用本人开发的HDMA视频缓存架构方案实现图像的乒乓缓存,不同的视频缓存与DDR3中不同的地址区域,读出视频时却一次性读完,从而达到视频拼接的输出效果;读出视频后,用纯verilog显示的HDMI输出模块送显示器显示即可;本设计提供1套Pango Design Suite 2021.4版本的工程源码

工程设计框图如下:
在这里插入图片描述

为什么选择OV7725摄像头?

紫光同创FPGA做图像缩放,理论上可以选择使用任何摄像头作为视频输入源,比如廉价的OV7725、OV5640等,但紫光同创的PGL22G-6MBG324 FPGA PLL无法输出742.5M的时钟,所以在开发板没有HDMI编码芯片的情况下,紫光同创的PGL22G-6MBG324 FPGA最大只能输出1280X720@60Hz的视频,如果使用OV5640,则不好做图像放大的试验,因为OV5640的输出分辨率就已经达到了1280X720;反观OV7725摄像头则很合适,因为OV7725摄像头输出分辨率为640X480@60Hz,可以做图像缩放的放大试验,放大到1280X720@60Hz,刚好达到紫光同创的PGL22G-6MBG324 FPGA的输出分辨率上线,也可以做做图像缩放的缩小试验;此外,OV7725摄像头也更便宜。。。

视频源选择

视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV7725摄像头模组;如果你得手里没有摄像头,或者你得开发板没有摄像头接口,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的`define宏定义进行,上电默认使用OV7725作为视频源;视频源选择如下:
在这里插入图片描述
视频源选择逻辑代码部分如下:
在这里插入图片描述
选择逻辑如下:
当(注释) define COLOR_IN时,输入源视频是动态彩条;
当(不注释) define COLOR_IN时,输入源视频是OV7725;

OV7725摄像头配置及采集

OV7725摄像头需要i2c配置才能使用,需要将DVP接口的视频数据采集为RGB565或者RGB888格式的视频数据,这两部分均用verilog代码模块实现,代码位置如下:
在这里插入图片描述
其中摄像头配置为分辨率640x480;
摄像头采集模块支持RGB565和RGB888格式的视频输出,可由参数配置,如下:
在这里插入图片描述
RGB_TYPE=0输出本RGB565格式;
RGB_TYPE=1输出本RGB888格式;
设计选择RGB888格式;

动态彩条

动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,以工程1为例,配置为辨率640x480,动态彩条模块代码位置和顶层接口和例化如下:
在这里插入图片描述
在这里插入图片描述

缓冲FIFO

缓冲FIFO的作用是为了解决跨时钟域的问题,当视频不进行缩放时不存在视频跨时钟域问题,但当视频缩小或放大时就存在此问题,用FIFO缓冲可以使图像缩放模块每次读到的都是有效的输入数据,注意,原视频的输入时序在这里就已经被打乱了;

图像缩放模块详解

设计框图

本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植;代码以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
视频输入时序要求如下:
在这里插入图片描述
输入像素数据在dInValid和nextDin同时为高时方可改变;
视频输出时序要求如下:
在这里插入图片描述
输出像素数据在dOutValid 和nextdOut同时为高时才能输出;

代码框图

代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植;
图像缩放的实现方式很多,最简单的莫过于Xilinx的HLS方式实现,用opencv的库,以c++语言几行代码即可完成,关于HLS实现图像缩放请参考我之前写的文章HLS实现图像缩放
网上也有其他图像缩放例程代码,但大多使用了IP,导致在其他FPGA器件上移植变得困难,通用性不好;相比之下,本设计代码就具有通用性;代码架构如图;
在这里插入图片描述
其中顶层接口部分如下:
在这里插入图片描述

2种插值算法的整合与选择

本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:

input  wire i_scaler_type //0-->bilinear;1-->neighbor
  • 1

通过输入i_scaler_type 的值即可选择;

输入0选择双线性插值算法;
输入1选择邻域插值算法;

关于这两种算法的数学差异,请参考我之前写的文章HLS实现图像缩放

HDMA图像缓存

HDMA图像缓存的本质就是一个封装了用户接口的AXI4-FULL-MASTER总线,HDMA对外与DDR3交互,紫光同创FPGA自带的DDR3控制器的用户接口为AXI4-FULL总线,HDMA对内例化两个FIFO与FPGA内部逻辑交互,所以开发者在使用HDMA时,已无需再关心复杂的为AXI4-FULL协议,只需要像使用FIFO那样简单即可;HDMA架构如下:
在这里插入图片描述
代码架构如下:
在这里插入图片描述

输入输出视频

输入视频的数据格式为RGB,即典型的pclk、vs、de、rgb形式的VGA视频时序,但需要注意的是,因为输入视频直接与FIFO交互,FIFO的AXI侧的数据位宽为128位,为了数据的不错位,输入视频的rgb信号接口不能为传统的24位,这里可以设置为16或者32位,代码中通过参数配置,我配置为32位,相比于之前的HDMA,这里增加了一路视频输入接口,如下:
在这里插入图片描述

HDMA缓冲FIFO

例化两个FIFO作为FPGA逻辑数据与AXI4数据的缓冲,所谓缓冲,即数据位宽的转换、时钟域的转换、读写时机的控制等部分,FPGA逻辑侧的数据位宽为32位,AXI4侧的数据位宽为128位;以写FIFO为例,配置如下:
在这里插入图片描述

HDMA控制模块

HDMA控制模块的主要功能是实现AXI4-FULL主机和图像缓存读写地址切换两大功能;AXI4-FULL主机比较简单,照着AXI4-FULL时序图写就完事儿了,图像缓存读写地址切换就难了,本设计通过顶层的参数来配置图像缓存的帧数,如下:
HDMA_PINGPANG_EN=1则图像做两帧乒乓缓存;
HDMA_PINGPANG_EN=0则图像做单帧缓存;
本设计配置为HDMA_PINGPANG_EN=1;
为了实现2路视频的多帧缓存,在DDR3中开辟了4片内存区域,如下:
内存1和内存2用于第一路输入视频的乒乓缓存;
内存3和内存4用于第二路输入视频的乒乓缓存;
我们需要做的是控制两路视频分别写入对应的内存区域即可,这样就实现了不同的视频缓存于不同的内存区域,但读视频时却一次性读完,然后一次性输出到显示器,这样就达到了两路视频拼接二分频现实的效果;这里代码层面更为清晰,具体请参考代码;

HDMI输出

HDMI输出包括VGA时序和HDMI编码模块,VGA时序在紫光PGL22G-6MBG324 FPGA上只能做到720P,因为此FPGA可能太低端了,无法输出742.5M的串行时钟,当然,你用HDMI编码芯片是可以实现1080P的,所以这里只能做到720P的输出分辨率;HDMI编码模块待用原语实现,和Xilinx家的一样,代码结构如下:
在这里插入图片描述

4、PDS工程详解

开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725摄像头或动态彩条,分辨率640x480;
输出:HDMI,分辨率1280x720下二分屏显示两路640x720缩放拼接视频;
工程作用:紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示;
工程代码架构如下:
在这里插入图片描述
工程的资源消耗如下:
在这里插入图片描述
工程已经综合编译完成,如下:
在这里插入图片描述

5、上板调试验证并演示

准备工作

你需要有以下装备才能移植并测试该工程代码:
1:FPGA开发板;
2:OV7725摄像头,如果没有也可以,就选择动态彩条;
3:HDMI传输线;
4:HDMI显示,要求分辨率支持1280x720;

静态演示

OV7725输入640x480分辨率两路视频缩放+拼接,HDMI输出静态演示如下:
在这里插入图片描述
动态彩条输入640x480分辨率两路视频缩放+拼接,HDMI输出静态演示如下:
在这里插入图片描述

动态演示

动态视频演示如下:

紫光同创FPGA-OV7725-图像缩放+拼接

6、福利:工程源码获取

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

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

/ 登录

评论记录:

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

分类栏目

后端 (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