当前位置: 首页 > article >正文

FPGA多路红外相机视频拼接输出,提供2套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的红外相机图像处理解决方案
    • 本博已有的已有的FPGA视频拼接叠加融合方案
  • 3、工程详细设计方案
    • 工程设计原理框图
    • 红外相机
    • FDMA多路视频拼接算法
    • FDMA图像缓存
    • 视频读取控制
    • HDMI视频输出架构
    • 工程源码架构
  • 4、vivado工程源码1详解:2路视频拼接版本
  • 5、vivado工程源码2详解:4路视频拼接版本
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
    • 准备工作
    • 2路视频拼接输出效果演示
    • 4路视频拼接输出效果演示
  • 8、工程代码的获取

FPGA多路红外相机视频拼接输出,提供2套工程源码和技术支持

1、前言

近年来,高端局战争已发生了翻天覆地的变化,以我国云南边境的某外国内战为例,某地方武装正在雨林中猥琐发育,突然天降大批无人机和配套的导弹,甚至简体中文版使用手册也附带其中,于是该地方武装人员操作无人机对敌军造成了巨大损失,敌军被打蒙后,决定学习我军的夜战传统昼伏夜出,结果晚上也被无人机精准击杀,原来无人机上安装了红外摄像头,从空中俯视,敌军被一个个看得一清二楚。。。。于是敌军又学聪明了,听到无人机声音后立马躲进小树林,结果依然被无人机精准击杀,原来无人机上还安装了热成像摄像头,从空中俯视,敌军依然被一个个看得一清二楚。。。。敌军这下彻底服了,立马下跪投降,于是骚扰我国的缅北电诈集团被团灭,话事人也被送到国境内审判,这就是己不战而夺城,也是无人机+红外相机+热成像仪在现代战争中的小试牛刀;本设计采用FPGA为平台,实时采集红外相机,经过图像缓存后用HDMI输出;

工程概述

本设计基于Xilinx系列FPGA为平台,搭建红外相机实时采集系统,视频输入源为红外相机,相机输出LVCMOS数字视频接口,即包含 1 个时钟信号线、1 个帧同步(场同步)信号线、1 个行同步信号线、1 个使能信号线和 14 个并行数据信号线。当一帧数据到来时, 帧同步信号置高电平,表示接下来的数据为同一帧数据,这一帧数据结束后帧同步信号置低电平,表示该帧数据结束。同样当一行数据到来时,行同步信号置高 电平,当该行数据结束后,行同步信号置低电平,视频分辨率为640x512;输入视频直接送入本博主常用的FDMA图像缓存架构实现图像两帧缓存,缓存介质为板载DDR3或者Zynq的PS端DDR;然后Native视频时序控制FDMA从DDR3中读取视频并同步输出RGB888视频流;然后使用RGB转HDMI模块或者专用芯片实现RGB视频流转HDMI差分视频信号;最后用显示器显示视频即可;针对市场主流需求,本博客设计并提供1套工程源码,具体如下:

工程源码1

开发板FPGA型号为Xilinx-ZU19EG-xczu19eg-ffvc1760-2-i;视频输入源为红外相机,相机输出LVCMOS数字视频接口,视频分辨率为640x512,将输入红外相机视频复制为2份以模拟2路视频输入;输入视频直接送入本博主常用的FDMA图像缓存架构实现图像两帧缓存,将不同的视频写入不同的内存地址再统一读出来,以达到拼接效果,缓存介质为板载DDR3或者Zynq的PS端DDR;然后Native视频时序控制FDMA从DDR3中读取视频并同步输出RGB888视频流;然后使用silicom9134专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz黑色背景下叠加2路640x512的有效视频;最后通过HDMI显示器显示;由此形成FPGA+红外相机+视频拼接+HDMI的实时图传架构;该工程适用于FPGA采集红外相机应用;

工程源码2

开发板FPGA型号为Xilinx-ZU19EG-xczu19eg-ffvc1760-2-i;视频输入源为红外相机,相机输出LVCMOS数字视频接口,视频分辨率为640x512,将输入红外相机视频复制为4份以模拟4路视频输入;输入视频直接送入本博主常用的FDMA图像缓存架构实现图像两帧缓存,将不同的视频写入不同的内存地址再统一读出来,以达到拼接效果,缓存介质为板载DDR3或者Zynq的PS端DDR;然后Native视频时序控制FDMA从DDR3中读取视频并同步输出RGB888视频流;然后使用silicom9134专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz黑色背景下叠加4路640x512的有效视频;最后通过HDMI显示器显示;由此形成FPGA+红外相机+视频拼接+HDMI的实时图传架构;该工程适用于FPGA采集红外相机应用;

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

免责声明

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

2、相关方案推荐

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

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

我这里已有的红外相机图像处理解决方案

我的主页有FPGA红外相机图像处理专栏,该专栏有关于红外相机图的各种图像处理;以下是专栏地址:
点击直接前往

本博已有的已有的FPGA视频拼接叠加融合方案

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

3、工程详细设计方案

工程设计原理框图

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

红外相机

视频输入源为红外相机,相机输出LVCMOS数字视频接口,即包含 1 个时钟信号线、1 个帧同步(场同步)信号线、1 个行同步信号线、1 个使能信号线和 14 个并行数据信号线。当一帧数据到来时, 帧同步信号置高电平,表示接下来的数据为同一帧数据,这一帧数据结束后帧同步信号置低电平,表示该帧数据结束。同样当一行数据到来时,行同步信号置高 电平,当该行数据结束后,行同步信号置低电平,视频分辨率为640x512;红外相机视频输出时序如下:
在这里插入图片描述
LVCMOS 视频数据每一个像素的数据对应 1 个时钟周期。每一帧的数据量与 机芯探测器的面阵大小相同,机芯探测器面阵大小为 640512,LVCMOS 每一帧 包含 640512=327680 个像素的数据,每行有 640 个数据,共有 512 行。即每个 行同步信号高电平持续的时间为 640 个时钟周期,在一帧数据期间,行同步信号 共有 512 次被置为高电平。在上图中,同步信号和数据信号都是在时钟的上升沿 进行变化,在实际的程序设计中,可以令信号在时钟的下降沿开始变化,以便于接收端在时钟的上升沿进行采样。

FDMA多路视频拼接算法

纯verilog多路视频拼接方案如下:以4路视频拼接为例;
在这里插入图片描述
输出屏幕分辨率为1920X1080;
需要拼接的4路视频分辨率为960X540;
4路输入刚好可以占满整个屏幕;
多路视频的拼接显示原理如下:
在这里插入图片描述
以把 2 个摄像头 CAM0 和 CAM1 输出到同一个显示器上为列,为了把 2 个图像显示到 1 个显示器,首先得搞清楚以下关系:
hsize:每 1 行图像实际在内存中占用的有效空间,以 32bit 表示一个像素的时候占用内存大小为 hsize X 4;
hstride:用于设置每行图像第一个像素的地址,以 32bit 表示一个像素的时候 v_cnt X hstride X 4;
vsize:有效的行;
因此很容易得出 cam0 的每行第一个像素的地址也是 v_cnt X hstride X 4;
同理如果我们需要把 cam1 在 hsize 和 vsize 空间的任何位置显示,我们只要关心 cam1 每一行图像第一个像素的地址,可以用以下公式 v_cnt X hstride X 4 + offset;
uifdma_dbuf 支持 stride 参数设置,stride 参数可以设置输入数据 X(hsize)方向每一行数据的第一个像素到下一个起始像素的间隔地址,利用 stride 参数可以非常方便地摆放输入视频到内存中的排列方式。
关于uifdma_dbuf,可以参考我之前写的文章点击查看:FDMA实现视频数据三帧缓存
根据以上铺垫,每路摄像头缓存的基地址如下:
CAM0:ADDR_BASE=0x80000000;
CAM1:ADDR_BASE=0x80000000+(1920-960)X4;
CAM2:ADDR_BASE=0x80000000+(1080-540)X1920X4;
CAM3:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-960)X4;
地址设置完毕后基本就完事儿了;

FDMA图像缓存

使用本博常用的FDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR3;FDMA图像缓存架构由FDMA、FDMA控制器、缓存帧选择器构成、Xilinx MIG IP核构成;图像缓存使用Xilinx vivado的Block Design设计,他的作用是将图像送入DDR中做3帧缓存再读出显示,目的是匹配输入输出的时钟差和提高输出视频质量,FDMA图像缓存架构如下图所示:截图为4路视频拼接,其他多路视频拼接与之类似;
在这里插入图片描述
这里多路视频拼接时,调用多路FDMA进行缓存,具体讲就是每一路视频调用1路FDMA,以4路视频拼接为例:
调用4路FDMA,其中三路配置为写模式,因为这三路视频在这里只需要写入DDR3,读出是由另一个FDMA完成,配置如下:
在这里插入图片描述
另外1路FDMA配置为读写模式,因为4路视频需要同时一并读出,配置如下:
在这里插入图片描述
视频拼接的关键点在于4路视频在DDR3中缓存地址的不同,还是以4路视频拼接为例,4路FDMA的写地址以此为:
第一路视频缓存写基地址:0x80000000;
第二路视频缓存写基地址:0x80000f00;
第三路视频缓存写基地址:0x803f4800;
第四路视频缓存写基地址:0x803f5700;
视频缓存读基地址:0x80000000;

视频读取控制

FDMA图像缓存架构使用VGA时序模块完成视频读取控制,Native视频时序模块负责产生VGA时序,他有两个作用,一是控制FDMA控制器从DDR3中读出缓存的视频,二是将同步后的VGA视频送入下一级模块;

HDMI视频输出架构

缓存图像从DDR3读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;然后使用silicom9134专用芯片实现RGB视频流转HDMI差分视频信号,输出分辨率为1920x1080@60Hz黑色背景下叠加640x512的有效视频;最后通过HDMI显示器显示;silicom9134需要i2c配置才能使用,代码中配置如下:
在这里插入图片描述

工程源码架构

工程Block Design设计如下:
在这里插入图片描述
综合后的工程源码架构如下:
在这里插入图片描述
工程使用了Zynq系列FPGA;PL端时钟由Zynq软核提供,所以需要运行运行SDK以启动Zynq,所以需要在SDK里运行一个简单的hello world程序,SDK软件代码架构如下:
在这里插入图片描述
工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:
在这里插入图片描述
上图只是举例,资源消耗并非本工程的实际消耗,实际消耗请看下文的《工程代码详解》;

4、vivado工程源码1详解:2路视频拼接版本

开发板FPGA型号:Xilinx-ZU19EG-xczu19eg-ffvc1760-2-i;
FPGA开发环境:Vivado2019.1;
输入:红外相机,分辨率640x512@30Hz;
输出:HDMI,silicom9134芯片编码方案,1920x1080@60Hz背景下叠加显示2路拼接的640x512的有效图像;
图像缓存方案:自研FDMA方案;
图像缓存介质:板载DDR3;
视频拼接方案:自研FDMA方案;
视频拼接应用:2路视频拼接;
实现功能:FPGA多路红外相机视频拼接输出;
工程作用:此工程目的是让读者掌握FPGA多路红外相机视频拼接输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、vivado工程源码2详解:4路视频拼接版本

开发板FPGA型号:Xilinx-ZU19EG-xczu19eg-ffvc1760-2-i;
FPGA开发环境:Vivado2019.1;
输入:红外相机,分辨率640x512@30Hz;
输出:HDMI,silicom9134芯片编码方案,1920x1080@60Hz背景下叠加显示4路拼接的640x512的有效图像;
图像缓存方案:自研FDMA方案;
图像缓存介质:板载DDR3;
视频拼接方案:自研FDMA方案;
视频拼接应用:4路视频拼接;
实现功能:FPGA多路红外相机视频拼接输出;
工程作用:此工程目的是让读者掌握FPGA多路红外相机视频拼接输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程移植说明

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

7、上板调试验证

准备工作

需要准备的器材如下:
红外相机,没有的可以找本博提供;
FPGA开发板,没有开发板可以找本博提供;
HDMI显示器和HDMI线缆;
我的开发板了连接如下:
在这里插入图片描述

2路视频拼接输出效果演示

2路视频拼接输出效果演示如下:

红外-2路

4路视频拼接输出效果演示

4路视频拼接输出效果演示如下:

红外-4路

8、工程代码的获取

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


http://www.kler.cn/a/459622.html

相关文章:

  • Spring Boot 中的 classpath详解
  • JS实现SVG的TEXT标签自动换行功能
  • 【欢迎讨论方案一的可行性】SpringBoot集成netty,在handler中调用@Component注解的类
  • Spring Boot 3 构建统一的请求响应参数、异常处理、以及统一的异常状态码
  • Nacos服务注册和发现
  • GAN对抗生成网络(二)——算法及Python实现
  • 【Leetcode 热题 100】17. 电话号码的字母组合
  • 【Golang 面试题】每日 3 题(九)
  • BLIP论文笔记
  • w124中药实验管理系统
  • PySide6 SQLite3 做的 电脑组装报价系统
  • 玩转OCR | 腾讯云智能结构化OCR初体验
  • 区块链期末复习3:跨链原子交换其他加密货币
  • java—网络编程TCP和UDP
  • 探索RAG(检索增强生成):三大RAG技术的特点与应用场景
  • 分子动力学中优化算法和积分算法
  • CountDownLatch 和 CyclicBarrier
  • 【最新】西陆房产系统源码+uniapp全开源+环境教程
  • 【Logback详解】
  • 《代码随想录》Day17打卡
  • JVM 性能监控工具之命令行篇
  • 小程序配置文件 —— 13 全局配置 - window配置
  • 0041__OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系
  • 基于特征工程(pca分析)、小波去噪以及数据增强,同时采用基于注意力机制的BiLSTM、随机森林、ARIMA模型进行序列数据预测
  • 使用Python实现量子算法优化:探索量子计算的无限可能
  • Spark Runtime Filter