fpga解码mipi视频:xilinx artix7-100t低端fpga,基于mipi csi-2 rx subsystem架构实现,提供工程源码和技术支持
1、前言
fpga图像采集领域目前协议最复杂、技术难度最高的应该就是mipi协议了,mipi解码难度之高,令无数英雄竞折腰,以至于xilinx官方不得不推出专用的ip核供开发者使用,不然太高端的操作直接吓退一大批fpga开发者,就没人玩儿了。
本设计基于xilinx的 artix7-100t低端fpga开发板,采集ov5640摄像头的2line 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实现图像三帧缓存功能,vdma调用两个,一个用于视频写入ddr3,另一个用于视频读出ddr3,这样分开读写的目的在于使用axi的带宽;再调用xilinx的video timing controller和axi4-stream tovideo out ip实现视频流从axi4-stream到vga时序的转换;最后用自定义的hdmi发送ip将视频输出显示器显示;整个工程调用microblaze软核做ip的配置,相当于zynq的作用,microblaze的配置在vitis sdk里以c语言软件代码的形式运行,所以整个工程包括fpga逻辑设计和vitis sdk软件设计两部分,需要具备fpga和嵌入式c语言的综合能力,不适合初学者或者小白。。。针对目前市面上主流的fpga,本xilinx系列fpga解码ov5640-mipi视频方案一共移植了13套工程源码,本博文介绍其中基于artix7-35t低端fpga 的1套工程,详情如下:红色箭头表示本博客介绍的工程源码;

本文详细描述了xilinx artix7-100t低端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-35t上解码mipi视频的应用
本方案适应于xilinx系列fpga平台,针对目前市面上主流的fpga,本博将本方案分别移植到了xilinx 的artix7、kintex7、zynq7000、zynq ultrascale等平台共计16套工程源码,本文讲述的是在artix7-100t低端fpga上的应用,想要直接应用于xilinx artix7-35t 系列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套工程源码,本文讲述的是在artix7-100t低端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-100t低端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型号上,该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、详细设计方案
设计原理框图
设计原理框图如下:

ov5640及其配置
输入视频采用廉价的ov5640摄像头模组,配置为mipi模式,2 line,数据格式为raw10,线速率为1000mbps,视频分辨率为1280*720,一个时钟一个像素,ov5640需要sccb总线配置才能运行,该总线等价于i2c总线,调用一个axi-gpio模拟i2c,利用vitis软件配置ov5640,配置部分代码有c语言实现,具体参考vitis程序;axi-gpio调用和sccb软件配置代码截图如下:


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软件配置,调用和配置如下:


bayer转rgb888
调用xilinx的sensor demosaic ip实现rbayer转rgb888功能,该ip通过vitis的c代码软件配置,sensor demosaic调用和c代码软件配置代码截图如下:


伽马校正
调用xilinx的gammer lut ip实现伽马校正功能,该ip通过vitis的c代码软件配置,gammer lut调用和c代码软件配置代码截图如下:


vdma图像缓存
调用xilinx的vdma ip实现图像三帧缓存功能,vdma调用两个,一个用于视频写入ddr3,另一个用于视频读出ddr3,这样分开读写的目的在于使用axi的带宽;该ip通过vitis的c代码软件配置;vdma调用和c代码软件配置代码截图如下:



axi4-stream tovideo out
再调用xilinx的video timing controller和axi4-stream tovideo out ip实现视频流从axi4-stream到vga时序的转换;video timing controller配置为1280*720@60hz,这两个ip不需要软件配置;video timing controller和axi4-stream tovideo out调用截图如下:


hdmi输出
最后用纯verilog实现的hdmi发送模块将视频输出显示器显示,该ip最大输出分辨率只支持1920*1080@60hz;ip调用截图如下:

工程源码架构
该工程由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工程详解
开发板fpga型号:xilinx–artix7–xc7a100tfgg484-2;
开发环境:vivado2022.2;
输入:ov5640摄像头–mipi–2 line–raw10-1280x720@60hz;
输出:hdmi ,分辨率1280x720@60hz;
应用:xilinx artix7-100t低端fpga解码mipi视频;
工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
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开发板,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
mipi-ov5640摄像头,可以自己准备,也可以购买本博主使用的同款开发板,省事儿;
hdmi显示器;
mipi-ov5640摄像头与开发板连接如下:

然后上电并下载bit测试;
输出视频演示
输出如下:
fpga解码mipi视频-ov5640
8、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的v名片。
网盘资料如下:

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

发表评论