相关推荐recommended
FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持
作者:mmseoamin日期:2024-02-24

目录

  • 1、前言
    • 免责声明
    • 2、相关方案推荐
      • 我这里已有的 MIPI 编解码方案
      • 本方案在Xilinx Artix7-100T上解码MIPI视频的应用
      • 本方案在Xilinx Kintex7上解码MIPI视频的应用
      • 本方案在Xilinx Zynq7000上解码MIPI视频的应用
      • 本方案在Xilinx Zynq UltraScale上解码MIPI视频的应用
      • 纯VHDL代码解码ov5640-MIPI视频方案
      • 3、本 MIPI CSI2 模块性能及其优缺点
      • 4、详细设计方案
        • 设计原理框图
        • OV5640及其配置
        • 权电阻硬件方案
        • MIPI CSI-2 RX Subsystem
        • 图像缓存
        • VGA时序
        • isp处理
        • 视频输出
        • 工程源码架构
        • 5、vivado工程详解
        • 6、工程移植说明
          • vivado版本不一致处理
          • FPGA型号不一致处理
          • 其他注意事项
          • 7、上板调试验证
            • 准备工作
            • RAW10原始图像输出演示
            • isp处理后的RGB888图像输出演示
            • 8、福利:工程代码的获取

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

              1、前言

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

              本设计基于Xilinx的 Artix7-35T低端FPGA开发板采集OV5640摄像头的2Line MIPI视频,本方案最大的价值就是在低端的、资源紧凑型的、项目预算不高等条件下选用的Xilinx Artix7-35T FPGA上实现了MIPI视频解码,解决了行业目前在该领域的空白;OV5640摄像头配置为MIPI模式,RAW10数据格式,MIPI引脚经过权电阻分离出LP电路后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D_PHY+CSI_RX2功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;此时的视频是原始的RAW10数据,输出路径有两种,一种是经DDR缓存后依然以RAW10数据输出HDMI显示器,只不过图像为黑白色;另一种是DDR缓存后再经过Bayer转RGB和伽马校正(isp处理)后以RGB888数据输出HDMI显示器,区别是图像为彩色的;两种路径通过isp模块的parameter参数设置;默认使用isp处理;针对目前市面上主流的FPGA,本Xilinx系列FPGA解码OV5640-MIPI视频方案一共移植了15套工程源码,本博文介绍其中基于Artix7-35T低端FPGA 的1套工程,详情如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第1张

              本文详细描述了Xilinx Artix7-35T低端FPGA解码MIPI视频的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;

              提供完整的、跑通的工程源码和技术支持;

              工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

              关于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-100T上解码MIPI视频的应用

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

              点击直接前往

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

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

              点击直接前往

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

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

              点击直接前往

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

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

              点击直接前往

              纯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解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第2张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第3张

              并且,在越高端的FPGA型号上,该IP支持的高端性能也越多;

              由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,NIPI视频解码的稳定性很好,且使用及其简单,缺点是看不到源码,出了问题后不好排查,只能在输入输出接口添加ila进行逐级追踪;

              本方案使用的FPGA型号为Xilinx Artix7-100T,属于低端FPGA的MIPI解码应用,再小型的Artix7-35T或者Spartan7、Spartan6等就已经不能使用MIPI CSI-2 RX Subsystem了;

              4、详细设计方案

              本设计基于Xilinx的 Artix7-35T低端FPGA开发板,采集OV5640摄像头的2Line MIPI视频,OV5640摄像头配置为MIPI模式,RAW10数据格式,引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D_PHY+CSI_RX2功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;此时的视频是原始的RAW10数据,输出路径有两种,一种是经DDR缓存后依然以RAW10数据输出HDMI显示器,只不过图像为黑白色;另一种是DDR缓存后再经过Bayer转RGB和伽马校正后以RGB888数据输出HDMI显示器,区别是图像为彩色的,两种路径通过isp模块的parameter参数设置;

              设计原理框图

              设计原理框图如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第4张

              OV5640及其配置

              输入视频采用廉价的OV5640摄像头模组,配置为MIPI模式,2 Line,数据格式为RAW10,线速率为1000Mbps,视频分辨率为1280*720,一个时钟一个像素,OV5640需要SCCB总线配置才能运行,该总线等价于I2C总线,本设计采用纯verilog实现的i2c控制器配置OV5640,代码位置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第5张

              权电阻硬件方案

              使用Xilinx官方推荐的权电阻硬件方案将输入的差分MIPI对恢复HS和PL,原理图部分截图如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第6张

              注意:权电阻方案只在低速率的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视频流格式输出;调用和配置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第7张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第8张

              图像缓存

              调用Xilinx的MIG与DDR3交互形成图像缓存架构,调用Xilinx FIFO封装用户接口,对图像进行乒乓操作,形成2帧图像缓存,输入数据位宽为16bit,输出数据位宽为16bit,代码中有详细中文注释,很好理解和阅读,如果打开后注释为乱码,请用notepad++打开就好了;代码位置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第9张

              VGA时序

              VGA时序模块产生1280x720@60Hz的分辨率视频,即用于控制视频从DDR3中读出,又作为VGA时序输出给HDMI输出模块,代码位置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第10张

              isp处理

              由于OV5640-MIPI视频输出的是RAW10视频,所以需要isp处理,包括Bayer转RGB888和伽马校正,当然,isp并非一定要做,有的项目需求恰好就是要输出显示RAW10原视频,所以在代码里我专门设置了ISP_BYPASS参数,该参数配置说明如下:

              parameter ISP_BYPASS = 0:视频进行isp处理,输出RGB888视频;

              parameter ISP_BYPASS = 1:视频不进行isp处理,输出RAW10原视频;

              isp模块代码位置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第11张

              默认采用isp处理后的RGB888视频输出,模块例化如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第12张

              视频输出

              视频从FDMA读出后,经过VGA时序模块和HDMI发送模块后输出显示器,代码位置如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第13张

              VGA时序配置为1920X1080,HDMI发送模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往

              工程源码架构

              工程源码架构如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第14张

              5、vivado工程详解

              开发板FPGA型号:Xilinx–Artix7–xc7a35tfgg484-2;

              开发环境:Vivado2022.2;

              输入:OV5640摄像头–MIPI–2 Line–RAW10-1280x720;

              输出:HDMI ,分辨率720P;

              应用:Xilinx Artix7-35T低端FPGA解码MIPI视频;

              工程代码架构请参考第4章节“设计思路框架”的“工程源码架构”小节内容;

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

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第15张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第16张

              可以看到,在资源相当紧张的Artix7-35T低端FPGA上,本方案消耗的逻辑资源是很少的,还剩余了大量资源可供用户其他使用,足以证明本方案的先进性;

              6、工程移植说明

              vivado版本不一致处理

              1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;

              2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第17张

              3:如果你的vivado版本高于本工程vivado版本,解决如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第18张

              打开工程后会发现IP都被锁住了,如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第19张

              此时需要升级IP,操作如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第20张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第21张

              FPGA型号不一致处理

              如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第22张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第23张

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第24张

              更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

              其他注意事项

              1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;

              2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;

              3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

              7、上板调试验证

              准备工作

              需要准备的器材如下:

              FPHA开发板;

              OV5640摄像头;

              HDMI显示器;

              RAW10原始图像输出演示

              该输出方案需要在代码中改为如下才能输出,如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第25张

              输出如下:

              RAW10原始图像输出

              isp处理后的RGB888图像输出演示

              该输出方案需要在代码中改为如下才能输出,如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第26张

              输出如下:

              RGB888图像输出演示

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

              福利:工程代码的获取

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

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

              网盘资料如下:

              FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持,在这里插入图片描述,第27张