Zynq UltraScale+ XCZU5EV 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持-CSDN博客


Zynq UltraScale+ XCZU5EV 纯VHDL解码 IMX214 MIPI 视频2路视频拼接输出提供vivado工程源码和技术支持

1、前言

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

本设计基于Xilinx的Zynq UltraScale+ XCZU5EV 开发板采集2路IMX214 摄像头的4Line MIPI视频IMX214 摄像头引脚接Zynq UltraScale+ XCZU5EV 的LVDS BANK经过MC20901芯片将IMX214 的MIPI信号转换为LVDS信号输出给FPGA然后CSI2 RX模块输出Bayer视频再经过Bayer转RGB模块输出RGB视频再经伽马矫正模块增强图像质量然后调用2个Xilinx官方的Video Scaler 做图像缩放将输入的1920x1080视频缩小到960x1080然后调用2个Xilinx官方的VDMA将图像送入PS端的DDR3中做三帧缓存后读出最后通过板载的DP接口将视频输出显示器

本文详细描述了FPGA 纯VHDL解码 IMX214 MIPI 视频2路视频拼接输出的设计方案工程代码编译通过后上板调试验证可直接项目移植适用于在校学生做毕业设计、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的数字成像和图像传输领域
提供完整的、跑通的工程源码和技术支持
工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
关于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有项目需求或学习兴趣的兄弟可以去我的专栏看看专栏地址如下
点击直接前往专栏

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

一个字牛逼表现如下
1纯VHDL代码实现学习性和阅读性达到天花板
2移植性还可以只要兼容Xilinx解串源语的FPGA均可移植
3算法达到天花板标准的CSI2接收协议实现解码
4实用性达到天花板采用IMX214 摄像头作为输入(主要是便宜)不同于市面上验证性和实验性的工程本设计直接面向实用工程贴近真实项目做类似项目的兄弟可直接拿去用一个月工资直接拿到手。。。
5支持高达1920X1080分辨率的MIPI视频解码
6时序收敛很到位考虑到MIPI协议的复杂性和时序的高要求所以没有采用时序收敛不强的verilog而是VHDL虽然阅读性可能会低一些但用户只需要知道用户接口即可并不需要去看内部的复杂代码
7使用方便虽然是VHDL代码实现但均已封装为自定义IP用户无需关心代码实现的复杂逻辑仅需调用IP通过UI界面配置即可使用当然如果你想看里面的源码依然可以直接打开观看
8同时采集2路非同源时钟的MIPI相机解码后做2路视频拼接显示高度符合现实高端项目
9Zynq UltraScale+ XCZU5EV 作为主控很高端

4、详细设计方案

设计原理框图

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

IMX214 摄像头及其配置

我使用到的IMX214 摄像头输出为4 Line MIPI格式输出分辨率为1080p@60Hz输出 RAW10数据Zynq UltraScale+ XCZU5EV 通过调用IIC配置IMX214 这个操作在SDK软件里完成

D-PHY 模块

D-PHY采用硬件方案实现用MC20901芯片(主要是便宜性能一般)将IMX214 的MIPI信号转换为LVDS信号输出给FPGA原理框图如下
在这里插入图片描述

CSI-2-RX 模块

关于MIPI CSI-2-RX网上介绍原理和概念的文章一大堆在此不再重复这里重点介绍用FPGA实现
我们采用纯VHDL代码实现MIPI CSI-2-RX功能为了照顾大家不习惯阅读VHDL代码的习惯我们已经将改部分代码封装成为了自定义IP用户无需关心代码实现的复杂逻辑仅需调用IP通过UI界面配置即可使用当然如果你想看里面的源码依然可以直接打开观看本MIPI CSI-2-RX只能支持4 line的MIPI视频数据格式支持RAW10
本工程中的CSI-2-RX自定义IP调用如下
在这里插入图片描述
MIPI CSI-2-RX纯VHDL源码如下
在这里插入图片描述

Bayer转RGB模块

关于MIPI Bayer转RGB网上介绍原理和概念的文章一大堆在此不再重复这里重点介绍用FPGA实现
我们采用纯VHDL代码实现MIPI Bayer转RGB功能为了照顾大家不习惯阅读VHDL代码的习惯我们已经将改部分代码封装成为了自定义IP用户无需关心代码实现的复杂逻辑仅需调用IP通过UI界面配置即可使用当然如果你想看里面的源码依然可以直接打开观看
本工程中的Bayer转RGB自定义IP调用如下
在这里插入图片描述
MIPI Bayer转RGB纯VHDL源码如下
在这里插入图片描述

伽马矫正模块

关于MIPI 伽马矫正网上介绍原理和概念的文章一大堆在此不再重复这里重点介绍用FPGA实现
我们采用纯VHDL代码实现MIPI 伽马矫正功能为了照顾大家不习惯阅读VHDL代码的习惯我们已经将改部分代码封装成为了自定义IP用户无需关心代码实现的复杂逻辑仅需调用IP通过UI界面配置即可使用当然如果你想看里面的源码依然可以直接打开观看
本工程中的伽马矫正自定义IP调用如下
在这里插入图片描述
MIPI 伽马矫正纯VHDL源码如下
在这里插入图片描述

VDMA图像缓存

调用2路VDMA配置为写模式只需要将视频写入DDR4这样设计的目的是做2路视频拼接2路VDMA写入图像的DDR地址不同可以保证图像在内存中地址不冲突读出图像时仅需在SDK里调用DP显示的API库函数即可这既是常规的设计思路也是减轻HP接口AXI4总线负载的要求
配置为只写模式的VDMA如下
在这里插入图片描述

Video Scaler 图像缓存

调用2个Xilinx官方的Video Scaler 做图像缩放将输入的1920x1080视频缩小到960x1080这样做的目的是将2路视频拼接到输出分辨率为1920x1080的显示器上去Video Scaler的缩放操作在SDK中完成IP如下
在这里插入图片描述

DP 输出

Zynq UltraScale+ XCZU5EV 开发板板载了一路DP输出接口在SDK里直接DP显示的API库函数即可不过需要注意的是在建立SDK工程时DP驱动名称主要手动更改如图
在这里插入图片描述

5、vivado工程详解

PL端FPGA硬件设计

开发板FPGA型号Xilinx–Zynq UltraScale±-xazu5ev-sfvc784-1-i
开发环境Vivado2020.2
输入2路IMX214 MIPI 4 Line RAW10
输出HDMI 2分频拼接显示1080P
应用FPGA 纯VHDL解码 IMX214 MIPI 视频2路视频拼接输出
工程Block Design如下
在这里插入图片描述
工程代码架构如下
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下
在这里插入图片描述

PS端Vitis SDK软件设计

SDK C语言软件代码架构如下
在这里插入图片描述

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、上板调试验证

输出如下
在这里插入图片描述

8、福利工程代码的获取

福利工程代码的获取
代码太大无法邮箱发送以某度网盘链接方式发送
资料获取方式私或者文章末尾的V名片。
网盘资料如下
在这里插入图片描述
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“Zynq UltraScale+ XCZU5EV 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持-CSDN博客” 的相关文章