FPGA高端项目:解码索尼IMX327 MIPI相机+2路视频融合叠加,提供开发板+工程源码+技术支持

目录

FPGA高端项目:解码索尼IMX327 MIPI相机+2路视频融合叠加,提供开发板+工程源码+技术支持

1、前言

FPGA图像采集领域目前协议最复杂、技术难度最高之一的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。

本设计基于Xilinx的Kintex7-325T中端FPGA开发板,采集2路IMX327 MIPI摄像头的4 Lane MIPI视频,IMX327 摄像头配置为 MIPI4 Lane RAW12模式,输出有效分辨率为1920x1080@60Hz;IMX327 MIPI摄像头引脚经过权电阻方案分出LP电路后接入FPGA的HS BANK的LVDS差分IO;采用自定义的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12格式视频,该IP由本博免费提供;至此,MIPI视频解码工作完成,但此时的视频还是原始的RAW12格式,远远达不到输出显示要求,所以还需进行图像处理操作,也就是图像ISP操作;本博提供及其完整的图像ISP,具体流程包括Bayer转RGB888、自动白平衡、色彩校正、伽马校正、RGB888转YCrCb444、图像增强、YCrCb444转RGB888、AE自动曝光等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出RGB888格式的视频;然后再使用Xilinx官方的VDMA图像缓存架构将视频缓存到板载的DDR3中,为了降低延时,仅缓存了1帧,其中一路VDMA配置为读写模式,另一路VDMA配置为只写模式,两路VDMA缓存图像的地址不一样;多路视频融合叠加采用HLS方案,底层视频为输入的第1路视频,叠加层视频为第2路视频经过缩放后得到,2路视频融合在一起输出,可通过SDK软件动态配置2路视频融合的透明度、叠加层视频的缩放大小、叠加层视频的显示位置等信息;;然后在VGA时序的控制下将缓存视频从DDR3中读出,再使用本博常用的HDMI输出模块将图像输出到显示器显示即可;针对目前市面上主流的索尼IMX系列相机,本方案一共移植了1套工程源码,详情如下:

工程源码1:Xilinx Kintex7-325T FPGA 解码索尼的 IMX327 MIPI相机,IMX327 被配置为 4 Lane RAW12 1080P分辨率;经FPGA解码、ISP图像处理、图像缓存、视频融合叠加、VGA时序同步、HDMI视频输出等操作后,通过板载的HDMI接口输出显示器;本工程的相机接在配套FPGA开发板的P4接口;

IMX327-MIPI相机在FPGA开发板P3口和P4口的连接方式如下图:

2、相关方案推荐

本博主所有FPGA工程项目-->汇总目录

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

我这里已有的 MIPI 编解码方案

我这里目前已有丰富的基于FPGA的MIPI编解码方案,主要是MIPI解码的,既有纯vhdl实现的MIPI解码,也有调用Xilinx官方IP实现的MIPI解码,既有2line的MIPI解码,也有4line的MIPI解码,既有4K分辨率的MIPI解码,也有小到720P分辨率的MIPI解码,既有基于Xilinx平台FPGA的MIPI解码也有基于Altera平台FPGA的MIPI解码,还有基于Lattice平台FPGA的MIPI解码,后续还将继续推出更过国产FPGA的MIPI解码方案,毕竟目前国产化方案才是未来主流,后续也将推出更多MIPI编码的DSI方案,努力将FPGA的MIPI编解码方案做成白菜价。。。

基于此,我专门建了一个MIPI编解码的专栏,并将MIPI编解码的博客都放到了专栏里整理,对FPGA编解码MIPI有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

3、本 MIPI CSI-RX IP 介绍

本设计采用本博自研的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12颜色视频,该IP由本博免费提供;该IP目前只适用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12图像,输入分辨率最高支持4K @30帧;IP UI配置界面如下:

该自定义IP只提供网表不提供源码,但用户依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一样,没有本质区别,因为MIPI CSI-2 RX Subsystem也是看不到源码的;MIPI CSI-RX IP资源消耗如下:

4、个人 FPGA高端图像处理开发板简介

本博客提供的工程源码需配合本博提供的FPGA高端图像处理开发板才能使用,亦或者读者自己拿去移植,但本博推荐使用本博客提供的工程源码需配合本博提供的FPGA高端图像处理开发板,该开发板截图如下:

此开发板专为高端FPGA图像处理设计,适合公司项目研发、研究所项目预研、高校项目开发、个人学习进步等场景需求,本博之前专门写过一篇博文详细介绍了该开发板的情况,感兴趣的请移步那篇博文,博客地址如下:
点击直接前往

5、详细设计方案

设计原理框图

工程源码的设计原理框图如下:

IMX327 及其配置

本设计使用本博提供的专用SONY公司的 IMX327 MIPI相机,该相机输出分辨率达到了1920x1080,采用焦距可调的镜头,清晰度极高,适用于高端项目开发,相机截图如下:

IMX327 MIPI相机需要 i2c配置才能正确使用,本设计调用本博自定义的i2c主机IP实现对IMX327的配置,该IP挂载与AXI-Lite总线上,通过MicroBlaze软核运行的C语言代码实现配置,此外,本博还设计了自动曝光程序,实时读取IMX327 RAW12像素,通过写IMX327对应寄存器的方式实现实时的自动曝光算法,使得IMX327在暗黑的环境下也能输出明亮的图像;

本博提供的FPGA开发板有两个MIPI CSI-RX接口,分别位于P3、P4接口,因此可以接两个MIPI相机,其中,P4接口的相机采用螺丝固定方式连接,适用于FPGA开发板需要移动的项目,如小车等;P3接口的相机采用FPC软排线方式连接,适用于FPGA开发板不需要移动的项目,如固定检测等,具体连接方式如下图:

MIPI CSI RX

本设计采用自定义的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12颜色视频,该IP由本博免费提供;该IP目前只适用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12图像,输入分辨率最高支持4K @30帧;IP UI配置界面如下:

该自定义IP只提供网表不提供源码,但用户依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一样,没有本质区别,因为MIPI CSI-2 RX Subsystem也是看不到源码的;

图像 ISP 处理

本博提供及其完整的图像ISP,具体流程包括Bayer转RGB888、自动白平衡、色彩校正、伽马校正、RGB888转YCrCb444、图像增强、YCrCb444转RGB888、AE自动曝光等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出YCrCb422格式的视频;图像 ISP 处理在工程 Block Design中如图:

这些IP均为Xilinx的免费IP,有的需要配置才能使用,在MicroBlaze软核运行的C语言代码已经提供了配置程序;其中AE自动曝光采用SDK C语言AE算法实现,FPGA实时读取IMX327的亮度值,然后与AE模型进行比较,亮度不足则补光,亮度太高则降光,通过控制IMX327内部寄存器实现,C代码需要在MicroBlaze软核运行;

HLS多路视频融合叠加

多路视频融合叠加设计框图如下如所示:

多路视频融合叠加由底层视频和叠加层视频融合叠加而成,底层视频为输入的第1路视频,叠加层视频为第2路视频经过缩放后得到,两路视频融合在一起输出,可通过SDK软件动态配置2路视频融合的透明度、叠加层视频的缩放大小、叠加层视频的显示位置等信息;;设计加采用HLS方案C++代码实现,并综合成RTL后封装为IP,可在vivado中调用该IP,关于这个方案详情,请参考我之前的博客,博客链接如下:
点击直接前往

该IP在vivado中的综合资源占用情况如下:

HLS多路视频融合叠加需要在SDK中运行驱动和用户程序才能正常工作,我在工程中给出了C语言程序,具体参考工程源码;

图像缓存

工程使用VDMA图像缓存方案,VDMA架构使用Xilinx官方力推的VDMA图像缓存架构实现图像1帧缓存,VDMA图像缓存架构由Video In to AXI4-Stream、VDMA、Video Timing Controller、AXI4-Stream To Video Out构成;其在Block Design中如下:

VDMA需要驱动才能正常工作,本工程提供C语言驱动;

HDMI输出

HDMI输出架构由VGA时序和HDMI输出模块构成,VGA时序负责产生输出的1920x1080@60Hz的时序,并控制FDMA数据读出,HDMI输出模块负责将VGA的RGB视频转换为差分的TMDS视频,代码架构如下:

HDMI输出模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往

工程源码架构

工程源码的vivado Block Design设计截图如下:

工程源码截图如下:

工程源码需要运行MicroBlaze软核,用于配置ISP、VDMA等;SDK工程架构如下:

SDK代码中配置如下,用户可根据自己的需求任意修改;

第1路视频为底层视频,分辨率为1920x1080;

第2路视频为叠加层视频,分辨率为1920x1080,从叠加层视频坐标(760,340)处为原点取一块600x600的区域作为叠加融合视频;

将上一步取到的600x600的叠加融合视频进行图像缩放,缩放为960x540;

将上一步960x540的叠加融合视频从底层视频的(0,0)坐标开始叠加,底层与叠加层的透明度设置为40;

时序约束

由于本工程使用的时钟较多,有MIPI输入的差分时钟,有MIG使用的差分时钟,有MIPI相机使用的像素时钟,有HDMI模块使用的差分时钟,所以必须做时序分组约束,在代码的XDC文件里已经做好;此外,由于MIG输出的用户时钟达到了200M,所以整个系统的时钟太高,又加之整个工程使用的AXI总线较多,就导致时序很不收敛,所以我们将MIPI解码输出的时钟控制在100M,这样一来,图像从MIPI解码到VDMA之间时钟保持在100M的较低频率下,而软核控制的AXI总线系统依然跑200M,所以时序就收敛很多;如果不做上述时序约束,会导致MicroBlaze软核程序直接跑飞,整个系统无法运行吗,甚至在SDK里都无法进入DEBUG;

6、工程源码1详解-->IMX327解码+2路视频融合叠加+HDMI输出

开发板FPGA型号:Xilinx--Kintex7--xc7k325tffg676-2;

开发环境:Vivado2019.1;

输入1:IMX327 MIPI相机,4 Lane,分辨率1920x1080@60Hz;

输入2:IMX327 MIPI相机,4 Lane,分辨率1920x1080@60Hz;

输出:HDMI,分辨率1920x1080@60Hz下叠加缩放后的图像输出;

多路视频融合叠加:自研HLS方案;

图像缓存方案:VDMA方案;

图像缓存路径:DDR3;

工程作用:此工程目的是让读者掌握FPGA实现IMX327相机MIPI解码+图像缩放+转HDMI的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第5章节"工程源码架构"小节内容;

工程的资源消耗和功耗如下:

7、工程移植说明

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

8、上板调试验证

准备工作

需要准备的器材如下:

本博提供的FPGA开发板;

本博提供的IMX327 MIPI相机;

HDMI显示器;

我的开发板了连接如下:

视频输出演示

IMX327-2视频融合叠加

9、福利:工程代码的获取

福利:工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,

资料获取方式:私,或者文章末尾的V名片。

网盘资料如下:

相关推荐
我喜欢就喜欢9 小时前
基于qt vs下的视频播放
开发语言·qt·音视频
bigbig猩猩9 小时前
FPGA(现场可编程门阵列)的时序分析
fpga开发
安步当歌9 小时前
【WebRTC】视频采集模块中各个类的简单分析
音视频·webrtc·视频编解码·video-codec
EasyGBS10 小时前
国标GB28181公网直播EasyGBS国标GB28181软件管理解决方案
大数据·网络·音视频·媒体·视频监控·gb28181
Johnstons13 小时前
AnaTraf | 网络性能监控系统保障音视频质量的秘籍
网络·音视频·网络流量监控·网络流量分析·npmd
lrlianmengba13 小时前
推荐一款非常好用的视频编辑软件:Movavi Video Editor Plus
音视频
SZ17011023113 小时前
ffplay 实现视频流中音频的延迟
音视频·延迟
Terasic友晶科技14 小时前
第2篇 使用Intel FPGA Monitor Program创建基于ARM处理器的汇编或C语言工程<二>
fpga开发·汇编语言和c语言
LNTON羚通14 小时前
CPU算法分析LiteAIServer视频智能分析平台视频智能分析:抖动、过亮与过暗检测技术
大数据·目标检测·音视频·视频监控
码农阿豪15 小时前
基于Zynq FPGA对雷龙SD NAND的测试
fpga开发·sd nand·spi nand·spi nand flash·工业级tf卡·嵌入式tf卡