FPGA解码MIPI视频:Xilinx Zynq UltraScale系列FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供5套工程源码和技术支持


FPGA解码MIPI视频:Xilinx Zynq UltraScale系列高端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供5套工程源码和技术支持

1、前言

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

工程概述

本设计基于Xilinx的 zynq UltraScale系列高端FPGA开发板,采集OV5640摄像头的2Lane MIPI视频,OV5640摄像头配置为MIPI模式,引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能; 再调用Xilinx的Gammer LUT IP实现伽马校正功能;再调用Xilinx的VDMA IP实现图像三帧缓存功能;再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;最后调用PS端DP接口将视频输出显示器显示;本方案提供5套工程源码,5套工程源码的区别在于使用的zynq主控芯片不同,分别是Zynq UltraScale Xczu2cg、Xczu4ev、Xczu7ev、Xczu3eg、Xczu9eg;针对目前市面上主流的FPGA,本Xilinx系列FPGA解码OV5640-MIPI视频方案一共移植了13套工程源码,本博文介绍其中基于zynq UltraScale高端FPGA 的5套工程,详情如下:
在这里插入图片描述
这里说明一下提供的5套工程源码的作用和价值,如下:

工程源码9
FPGA开发板型号为Xilinx–Zynq–UltraScale–xczu2cg-sfvc784-1-e,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,再经过VDMA实现视频三帧缓存,图像缓存介质为Zynq PS端DDR4;最后视频以DP接口输出,输出分辨率为1280x720@60Hz;该方案适用于Xilinx Zynq-UltraScale系列FPGA的MIPI解码应用;

工程源码10
FPGA开发板型号为Xilinx–Zynq–UltraScale–xczu3eg-sfvc784-2-i,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,再经过VDMA实现视频三帧缓存,图像缓存介质为Zynq PS端DDR4;最后视频以DP接口输出,输出分辨率为1280x720@60Hz;该方案适用于Xilinx Zynq-UltraScale系列FPGA的MIPI解码应用;

工程源码11
FPGA开发板型号为Xilinx–Zynq–UltraScale–xczu4ev-sfvc784-2-i,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,再经过VDMA实现视频三帧缓存,图像缓存介质为Zynq PS端DDR4;最后视频以DP接口输出,输出分辨率为1280x720@60Hz;该方案适用于Xilinx Zynq-UltraScale系列FPGA的MIPI解码应用;

工程源码12
FPGA开发板型号为Xilinx–Zynq–UltraScale–xczu7ev-ffvc1156-2-i,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,再经过VDMA实现视频三帧缓存,图像缓存介质为Zynq PS端DDR4;最后视频以DP接口输出,输出分辨率为1280x720@60Hz;该方案适用于Xilinx Zynq-UltraScale系列FPGA的MIPI解码应用;

工程源码13
FPGA开发板型号为Xilinx–Zynq–UltraScale–xczu9eg-ffvb1156-2-i,输入视频为OV5640摄像头,MIPI模式,2 Line,RAW10输出像素,分辨率配置为1280x720@60Hz;经过MIPI CSI-2 RX Subsystem实现MIPI解码并输出AXI4-Stream视频流,再经过Sensor Demosaic实现Bayer转RGB,再经过Gammer LUT实现伽马校正,再经过VDMA实现视频三帧缓存,图像缓存介质为Zynq PS端DDR4;最后视频以DP接口输出,输出分辨率为1280x720@60Hz;该方案适用于Xilinx Zynq-UltraScale系列FPGA的MIPI解码应用;

本文详细描述了Xilinx Zynq UltraScale高端FPGA解码MIPI视频的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;整个工程调用Zynq软核做IP的配置,Zynq的配置在Vitis SDK里以C语言软件代码的形式运行,所以整个工程包括FPGA逻辑设计和Vitis SDK软件设计两部分,需要具备FPGA和嵌入式C语言的综合能力,不适合初学者或者小白;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于MIPI协议,请自行搜索,csdn就有很多大佬讲得很详细,我就不多写这块了;

免责声明

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

2、相关方案推荐

我这里已有的 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有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

本方案在Xilinx Artix7-35T上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Zynq7000中端FPGA上的应用,想要直接应用于Xilinx Artix7-35T 系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Artix7-100T上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Zynq7000中端FPGA上的应用,想要直接应用于Xilinx Artix7-100T 系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Kintex7上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Artix7-100T低端FPGA上的应用,想要直接应用于Xilinx Kintex7系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Zynq7000上解码MIPI视频的应用

本方案适应于Xilinx系列FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7000、Zynq UltraScale等平台共计16套工程源码,本文讲述的是在Kintex7中端FPGA上的应用,想要直接应用于Xilinx Zynq7000系列FPGA上的ov5640-MIPI视频解码应用的读者,可以参考我之前写得博客,里面包括了Zynq7020、Zynq7030、Zynq7035、Zynq7045、Zynq7100等平台;以下是博客地址:
点击直接前往

纯VHDL代码解码ov5640-MIPI视频方案

与上述基于MIPI CSI-2 RX Subsystem方案不同,本博也提供基于纯VHDL代码解码ov5640-MIPI视频的方案,该方案的区别与优势在于可以看到VHDL源码而非单纯的IP,能看到源码的意思就是你可以任意修改源码以适配自己的项目,其意义与价值无需多言,该方案目前已在Xilinx Zynq7020上移植成功,共有两套工程源码,一套是单路ov5640-MIPI视频解码后HDMI输出;另一套是4路ov5640-MIPI视频解码经缩放拼接后HDMI 4分屏输出;感兴趣的可以参考我之前的博客;
单路MIPI解码输出博客地址如下:
点击直接前往
4路MIPI解码缩放拼接输出博客地址如下:
点击直接前往

3、本 MIPI CSI2 模块性能及其优缺点

由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,所以性能上就取决于你的FPGA型号,理论上FPGA越高端,支持的IO线速率或者GT高速接口线速率就越高,就能跑速率更高的MIPI视频;
该IP适应性极强,支持的MIPI相机性能参数如下:
在这里插入图片描述
在这里插入图片描述
并且,在越高端的FPGA型号上,该IP支持的高端性能也越多;
由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,NIPI视频解码的稳定性很好,且使用及其简单,缺点是看不到源码,出了问题后不好排查,只能在输入输出接口添加ila进行逐级追踪;
本方案使用的FPGA型号为Xilinx zynq 7000系列,属于中端FPGA的MIPI解码应用,再小型的Artix7-35T或者Spartan7、Spartan6等就已经不能使用MIPI CSI-2 RX Subsystem了;

4、详细设计方案

设计原理框图

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

OV5640及其配置

输入视频采用廉价的OV5640摄像头模组,配置为MIPI模式,2 Lane,数据格式为RAW10,线速率为1000Mbps,视频分辨率为1280X720,一个时钟一个像素,OV5640需要SCCB总线配置才能运行,该总线等价于I2C总线,使用Zynq PS端自带的i2c片内外资源,利用Vitis软件配置OV5640,配置部分代码有C语言实现,具体参考Vitis程序;

MIPI-DPHY硬件权电阻方案

使用Xilinx官方推荐的权电阻硬件方案将输入的差分MIPI对恢复HS和PL,原理图部分截图如下:
在这里插入图片描述
注意:权电阻方案只在低速率的MIPI模式下可用,高速率的MIPI请用专用芯片实现,比如MC20001,MC系列这种方案可以支持到2Gbps/Lane速率以上,只要FPGA的IO速率够用;

MIPI CSI-2 RX Subsystem

调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;该IP不需要额外的SDK软件配置,调用和配置如下:
在这里插入图片描述
在这里插入图片描述

Sensor Demosaic图像格式转换

调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能,该IP通过Vitis的C代码软件配置,Sensor Demosaic调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

Gammer LUT伽马校正

调用Xilinx的Gammer LUT IP实现伽马校正功能,该IP通过Vitis的C代码软件配置,Gammer LUT调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

VDMA图像缓存

调用Xilinx的VDMA IP实现图像三帧缓存功能,由于输出使用DP,直接从内存读取视频,所以VDMA只用到了写通道,VDMA 通过Vitis的C代码软件配置;VDMA调用和C代码软件配置代码截图如下:
在这里插入图片描述

DP输出

使用Zynq PS端自带的DP片内外资源,利用Vitis软件驱动,配置部分代码由C语言实现,将视频以DP接口形式输出显示器显示;具体参考Vitis程序;
在这里插入图片描述

工程源码架构

该工程由vivado Block Design设计和SDK软件设计构成;
vivado Block Design设计主要是MIPI解码、ISP处理、图像缓存、图像输出等逻辑部分设计;
SDK软件设计主要是对Block Design设计中使用到的各种IP进行初始化和配置;
vivado Block Design设计架构如下:
在这里插入图片描述
综合后的工程代码架构如下:
在这里插入图片描述
Vitis SDK C语言软件是为了配置FPGA调用的IP,用VItis打开即可查看,代码内容如下:
在这里插入图片描述
由于工程中用到了HLS生成的IP,Sensor Demosaic和Gammer LUT,可能会出现综合编译失败,或者警告后在Vitis SDK里找不到设备ID等情况,此时需要更改电脑系统时间或者打上官方补丁解决这件事情,具体方法参考这位大佬博文:
直接点击前往

5、vivado工程9详解:Zynq-UltraScale-xczu2cg版本

开发板FPGA型号:Xilinx–Zynq–UltraScale–xczu2cg-sfvc784-1-e;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1280x720@60Hz;
应用:Xilinx Zynq-UltraScale系列高端FPGA解码MIPI视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程10详解:Zynq-UltraScale-xczu3eg版本

开发板FPGA型号:Xilinx–Zynq–UltraScale–xczu3eg-sfvc784-2-i;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1280x720@60Hz;
应用:Xilinx Zynq-UltraScale系列高端FPGA解码MIPI视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程11详解:Zynq-UltraScale-xczu4ev版本

开发板FPGA型号:Xilinx–Zynq–UltraScale–xczu4ev-sfvc784-2-i;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1280x720@60Hz;
应用:Xilinx Zynq-UltraScale系列高端FPGA解码MIPI视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、vivado工程12详解:Zynq-UltraScale-xczu7ev版本

开发板FPGA型号:Xilinx–Zynq–UltraScale–xczu7ev-ffvc1156-2-i;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1280x720@60Hz;
应用:Xilinx Zynq-UltraScale系列高端FPGA解码MIPI视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

9、vivado工程13详解:Zynq-UltraScale-xczu9eg版本

开发板FPGA型号:Xilinx–Zynq–UltraScale–xczu9eg-ffvb1156-2-i;
开发环境:Vivado2022.2;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720@60Hz;
输出:HDMI ,分辨率1280x720@60Hz;
应用:Xilinx Zynq-UltraScale系列高端FPGA解码MIPI视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

10、工程移植说明

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

11、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
MIPI-OV5640摄像头,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
HDMI显示器;
MIPI-OV5640摄像头与开发板连接如下:
在这里插入图片描述
然后上电并下载bit测试;

输出视频演示

输出如下

FPGA解码MIPI视频-ov5640

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

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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MIPI CSI-2 RX子系统是一种用于接收MIPI CSI-2协议视频数据的子系统。它可以将从摄像头或其他视频源发送的数据流转换为可用于处理和显示的数字信号。该子系统通常用于嵌入式系统和移动设备中,以实现高质量的视频捕捉和处理。 ### 回答2: MIPI CSI-2 RX子系统是一种可以接收MIPI CSI-2协议视频数据的系统。MIPI CSI-2协议通常用于连接摄像头和处理器之间的视频信息传输。由于MIPI CSI-2协议具有高带宽、低功耗和可靠性等优点,因此它被广泛应用于移动设备、智能家居、汽车、医疗设备等领域。 MIPI CSI-2 RX子系统主要由两个部分组成:硬件和软件。硬件部分包括CSI-2接收器、像素处理模块、数据转换器、DMA控制器等。它们协同工作,完成对MIPI CSI-2数据的接收、解析、转换和存储等功能。而软件部分则由驱动程序和应用程序组成,它们充当了控制和管理硬件部件的角色。 MIPI CSI-2 RX子系统的优势在于它可以实现高清晰度的视频传输,并且消耗极少的电力。它还支持并行传输,可以同时传输多个数据流,从而提高了数据传输的效率。此外,它还可以通过软件控制来调整和优化像素处理等功能,以适应不同场景下的应用需求。 需要注意的是,MIPI CSI-2 RX子系统虽然可以接收MIPI CSI-2协议的视频数据,但是它并不具备对视频数据进行编码和解码的能力。如果需要对视频数据进行编码和解码,需要额外添加相应的模块或设备。 总之,MIPI CSI-2 RX子系统作为连接摄像头和处理器之间的重要接口,具有方便、高效、低功耗、高网络带宽等优势,将成为未来智能设备的重要技术支撑。 ### 回答3: MIPI CSI-2 RX子系统是一种数据传输接口,被广泛应用于移动设备、工业相机和医疗设备等领域。这种子系统主要是指在芯片上实现接收MIPI Camera Serial Interface 2 (CSI-2)协议的模块,它可以接收来自相机或其它视频设备的数据,然后将这些数据传递给后续的图像处理部分进行处理和分析。 MIPI CSI-2 RX子系统的主要功能是处理和解压缩从相机或其它视频设备传输过来的视频流数据。它可以接收来自相机的原始视频数据,通过内部的解码器和视频处理器对其进行分析和处理,然后转换成计算机可以理解的数码信号。这些数码信号可以被用于实现多种功能,例如图像处理、分析和计算机视觉。 在MIPI CSI-2 RX子系统中,还包括一个数据通道,用于传输通过MIPI CSI-2协议传输的相关数据,例如图像的分辨率和格式。这些数据可以被用于配置后续的图像处理器,以确保它们能够正确地处理和分析来自相机或其它视频设备的数据流。 总之,MIPI CSI-2 RX子系统是一种重要的数据传输接口,它能够接收和处理从相机或其它视频设备传输过来的数据流,为后续的图像处理和计算机视觉提供数据支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值