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

目录

  • 1、前言
    • 免责声明
  • 2、我这里已有的 MIPI 编解码方案
  • 3、本 MIPI CSI2 模块性能及其优越性
  • 4、详细设计方案
    • 设计原理框图
    • IMX214 摄像头及其配置
    • D-PHY 模块
    • CSI-2-RX 模块
    • Bayer转RGB模块
    • 伽马矫正模块
    • VDMA图像缓存
    • Video Scaler 图像缓存
    • DP 输出
  • 5、vivado工程详解
    • PL端FPGA硬件设计
    • PS端Vitis SDK软件设计
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
  • 8、福利:工程代码的获取

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路视频拼接显示,高度符合现实高端项目;
9:Zynq 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名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/111656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】第25节:行为型模式之“访问者模式”

一、简介 访问者模式允许一个或者多个操作应用到一组对象上,设计意图是解耦操作和对象本身,保持类职责单一、满足开闭原则以及应对代码的复杂性。 二、优点 分离操作和数据结构增加新操作更容易集中化操作 三、适用场景 数据结构稳定,操…

职场好物:乐歌M9S升降办公电脑台,告别久坐办公,升职加薪就选它

办公是现代生活不可避免的组成部分,科技的快速发展,给了我们更多新的生活方式,促使我们更加关注自己的身体状况,我们挨过了饭都吃不饱的年代,随着办公人群的不断扩张,不知道你有没有发现身边人或多或少都有…

光学雨量计:更灵敏可靠、更智能的降雨监测工具

光学雨量计:更灵敏可靠、更智能的降雨监测工具 降雨量信息是评估大气环境和降水研究的关键指标,也是环境监测和农业安全监测的重要参数。目前,我们通常使用翻斗式或光学雨量计来监测降雨量,这些工具能够感知自然界的降雨量&#…

数据智能化管理:企业网站备案信息API的应用案例

引言 在数字化时代,企业备案信息管理变得愈发重要。无论是为了合规性还是提高业务运营效率,企业都需要有效管理其网站备案信息。幸运的是,现代技术为企业提供了强大的工具,如企业网站备案信息API,可帮助他们更智能地管…

pycharm怎么运行python代码

创建项目 在PyCharm中,你可以创建一个项目来组织和管理你的Python代码。项目是一个存放代码文件的文件夹,它可以包含多个模块和包。 启动PyCharm后,选择“Create New Project”来创建一个新项目。 在弹出的对话框中,选择项目的位…

2023年云栖大会来啦!!(2022年就已经深受震撼)

2023云栖大会已经开始啦,让我们来回顾回顾去年的云栖大会吧。 云栖大会是中国阿里巴巴集团每年举办的一项技术盛会,前身可追溯到2009年的地方网站峰会,2011年演变为阿里云开发者大会,2015年正式更名为“云栖大会”,并且…

英语——歌曲篇——500 Miles(离家五百里)

乡村音乐(country music)《500 Miles(离家五百里)》以一种怀乡、寻根 的意识,用思念留住时光还有一点哲理的味道,乡村音乐多年以来都不曾淡出大家的视野,确实有值得留恋的情怀。 500 Miles [The Brothers Four离家五…

双轮差速模型机器人通过线速度、角速度计算机器人位姿

已知上一时刻机器人位置P_OLD (x,y,),机器人当前时刻的线速度和角速度(v,),短时间内t内,机器人在线性部分和非线性部分的增量为 线性部分: 非线性部分: 由于可能非常小,导致非线性部分数值不稳定&#xf…

基于Selenium+Python的web自动化测试框架详解

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…

【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

文章目录 1. 写在前面2. 页面配置规划3. 制定模板格式4. 模板引擎实现5. 模板爬虫优势 1. 写在前面 作为一名爬虫开发者来说,涉及数据采集和爬虫开发时,往往都面临着各种挑战。包括技术复杂性、维护成本以及数据源结构的不断变化 早期我们对爬虫开发方式…

虚拟机风格>解释器风格

1.解释器风格 解释器作为一种体系结构,主要用于构建虚拟机,以弥合程序语义和计算机硬件之间的间隙。在解释器结构中,主要包括一个执行引擎和三个存储器。它的实质是利用软件创建的一种虚拟机,因此,解释器风格又被称为…

OS 死锁

资源问题 引起死锁的主要是需要采用互斥访问方法的、不可被抢占的资源 可重用资源和可消耗资源 可重用资源 定义:一种可供用户重复使用多次的资源 性质: 每个可重用资源中的单元,只能分配给一个进程使用,不允许多个进程共享…

iOS的应用生命周期以及应用界面

在iOS的原生开发中,我们需要特别关注两个东西:AppDelegate和ViewController。我们主要的编码工作就是在AppDelegate和ViewControlle这两个类中进行的。它们的类图如下图所示: AppDelegate是应用程序委托对象,它继承了UIResponder类…

分布式:一文吃透分布式事务和seata事务

目录 一、事务基础概念二、分布式事务概念什么是分布式事务分布式事务场景CAP定理CAP理论理解CAPCAP的应用 BASE定理强一致性和最终一致性BASE理论 分布式事务分类刚性事务柔性事务 三、分布式事务解决方案方案汇总XA规范方案1:2PC第一阶段:准备阶段第二…

【C++的OpenCV】第十四课-OpenCV基础强化(三):单通道Mat元素的访问之data和step属性

🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…

Python Django 之全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置:settings.py2.1 注册 APP:INSTALLED_APPS2.2 模板路径:TEMPLATES2.3 静态文件:STATICFILES_DIRS2.4 数据库:DATABASES2.5 允许访问的主机:ALLOWED_HOSTS 1 …

【Linux】进程的概念

文章目录 1. 基本概念2. 进程的描述3. 进程的一些基本操作3.1 查看进程3.2 结束进程3.3 通过系统调用获取进程标示符3.4 通过系统调用来创建子进程 4. 进程状态4.1 操作系统的进程状态4.2 Linux对于这些状态的处理方式 1. 基本概念 什么是进程? 在回答这个问题之前…

C++标准模板(STL)- 类型支持 (复合类型类别,is_member_pointer,is_reference,is_compound)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

kafka为什么如此之快?

天下武功&#xff0c;唯快不破。同样的&#xff0c;kafka在消息队列领域&#xff0c;也是非常快的&#xff0c;这里的块指的是kafka在单位时间搬运的数据量大小&#xff0c;也就是吞吐量&#xff0c;下图是搬运网上的一个性能测试结果&#xff0c;在同步发送场景下&#xff0c;…

详解:WMS系统IQC来料检验

WMS系统IQC来料检验是仓库管理系统(WMS)中的一个重要环节,它的目的是对进仓原材料进行抽样检验,以确保入库的原材料符合质量标准。WMS系统通过对仓库的收货、存储、配送、装车和信息管理等过程实现集中化、规范化、标准化、自动化的管理。IQC即进货质量抽查。 IQC来料检验的目的…