1、前言
FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。
本设计基于Xilinx的Kintex7开发板,采集IMX291/IMX290摄像头的 1080P 4Line MIPI视频,摄像头引脚接Kintex7的 BANK16 LVDS_25 差分引脚,经过纯vhdl实现的 CSI2 RX模块输出Bayer视频,再经过Bayer转RGB模块输出RGB视频,再经过图像增强模块增强图像质量,这里主要用到了白平衡,然后将图像送入DDR3中做三帧缓存后读出,再生成标准的VGA时序和HDMI输出模块,最后输出HDMI显示器;
本文详细描述了设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于MIPI协议,请自行搜索,csdn就有很多大佬讲得很详细,我就不多写这块了;
2、Xilinx官方主推的MIPI解码方案
Xilinx官方主推的MIPI解码方案是专用IP核,在vivado的ip仓库里输入MIPI就会看到如下的一堆IP:
Xilinx方案使用很简单,调用IP就行,用SDK配置即可使用,MIPI解码后的数据格式为AXIS,方便与他家的VDMA之类的IP对接,你无须关心复杂的MIPI协议即可畅玩儿MIPI,但问题就来了,如果你用的FPGA不是Xilinx家的怎么办?
关于Xilinx自家的MIPI方案,请参考我之前写的文章;Xilinx的MIPI方案
3、我已有的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有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏
4、本 MIPI CSI2 模块性能及其优越性
本方案MIPI解码后的视频时序为VGA时序,即行同步,场同步,数据有效,数据信号;方便后端直接处理;
解串部分使用Xilinx源语,本工程用到的是7系列源语,更高级别的FPGA应用,需要更改源语参数,但问题不大;
一个字:牛逼,表现如下:
1:纯Vhdl代码实现,学习性和阅读性达到天花板;
2:移植性还可以,只要兼容Xilinx解串源语的FPGA均可移植;
3:算法达到天花板,标准的CSI2接收协议实现解码;
4:实用性达到天花板,采用OV4689摄像头作为输入,不同于市面上验证性和实验性的工程,本设计直接面向实用工程,贴近真实项目,MIPI输入,2路视频输出,做类似项目的兄弟可直接拿去用,一个月工资直接拿到手。。。
5:支持高达4K分辨率的MIPI视频解码;
6:时序收敛很到位,考虑到MIPI协议的复杂性和时序的高要求,所以没有采用时序收敛不强的verilog,而是VHDL,虽然阅读性可能会低一些,但用户只需要知道用户接口即可,并不需要去看内部的复杂代码;
7:自定义IP封装,方便Xilinx系列FPGA用户调用和使用;
5、vivado工程介绍
工程设计架构如下:
开发板FPGA型号:Xilinx Kintex7 xc7k325tffg900-2;
开发环境:vivado2020.2;
输入:IMX291/IMX290;4line;分辨率1920x1080;
输出:HDMI;分辨率1920x1080;
工程Block Design如下:
4line MIPI解码模块详解,点击这个+号可展开IP;
展开后的4line MIPI解码模块如下:
4line MIPI解码模块配置界面如下:
bayer转RGB不需要配置;
白平衡图像增强模块配置界面如下:
展开后的图像缓存与缩放解码模块如下:
写控制器模块配置界面如下:
读控制器模块配置界面如下:
工程代码架构如下:
逻辑资源消耗和功耗如下:
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、上板调试验证
IMX291/IMX290摄像头,这种某宝一百多的便宜货。。。
使用移植方法说明:
1、本工程vivado版本为2020.2,较低版本打开后即使另存为也可能出现问题,较高版本打开后升级IP,理论上不会出问题,这也是xilinx被AMD收购后出现的vivado软件越做越差的表现,所以建议使用vivado2020.2打开使用本工程;
2、本工程各个功能模块源码与IP一共放在顶层文件,请勿删除 其中任何一个文件,否则编译不通过;
工程运行如下:文章来源:https://www.toymoban.com/news/detail-421695.html
8、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式1:私,或者文章末尾的V名片。
资料获取方式2:文章末尾的XX号,回复 002003
网盘资料如下:文章来源地址https://www.toymoban.com/news/detail-421695.html
到了这里,关于FPGA解码4line MIPI视频 IMX291/IMX290摄像头采集 提供工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!