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

news2024/9/25 21:25:50

目录

  • 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、福利:工程代码的获取

1、前言

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

本设计基于Xilinx的Zynq UltraScale+ XCZU9EG 开发板,采集2路IMX214 摄像头的4Line MIPI视频,IMX214 摄像头引脚接Zynq UltraScale+ XCZU9EG 的LVDS BANK,经过MC20901芯片将IMX214 的MIPI信号转换为LVDS信号输出给FPGA,然后CSI2 RX模块输出Bayer视频,再经过Bayer转RGB模块输出RGB视频,再经伽马矫正模块增强图像质量,然后调用2个Xilinx官方的Video Scaler 做图像缩放,将输入的1920x1080视频缩小到960x1080;然后调用2个Xilinx官方的VDMA将图像送入PS端的DDR4中做三帧缓存后读出;最后通过板载的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+ XCZU9EG 作为主控,很高端;

4、详细设计方案

设计原理框图

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

IMX214 摄像头及其配置

我使用到的IMX214 摄像头输出为4 Line MIPI格式,输出分辨率为1080p@60Hz;输出 RAW10数据;Zynq UltraScale+ XCZU9EG 通过调用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+ XCZU9EG 开发板板载了一路DP输出接口,在SDK里直接DP显示的API库函数即可,不过需要注意的是,在建立SDK工程时,DP驱动名称主要手动更改,如图:
在这里插入图片描述

5、vivado工程详解

PL端FPGA硬件设计

开发板FPGA型号:Xilinx–Zynq UltraScale±-xczu9eg-ffvb1156-2-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名片。
网盘资料如下:
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux安装nginx 1.25.2

1.下载nginx-1.25.2.tar.gz放在/opt下 wget http://nginx.org/download/nginx-1.25.2.tar.gz 2.解包 Nginx 软件包: tar -xvf nginx-1.25.2.tar.gz 3.安装 Nginx 依赖: 在安装 Nginx 之前,需要先安装一些依赖库:pcre、openss…

某大型车企:加强汽车应用安全防护,开创智能网联汽车新篇章

​某车企是安徽省最大的整车制造企业,致力于为全球消费者带来高品质汽车产品和服务体验,是国内最早突破百万销量的汽车自主品牌。该车企利用数字技术推动供应链网络的新型互动,加快数字化转型,持续进行场景创新、生态创新&#xf…

无线测温产品在菲律宾某工厂配电项目的应用

摘要:配电系统是由多种配电设备和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。由于配电系统作为电力系统的一个环节直接面向终端用户,它的完善与否直接关系着广大用户的用电可靠性和用电质量,因而在电力系统中具有…

总结使用React做过的一些优化

一、修改css模拟v-show {!flag && <MyComponent style{{display: none}} />} {flag && <MyComponent />}<MyComponent style{{ display: flag ? block : none }} />二、循环使用key const todosList todos.map(item > {<li key{it…

分享:身份证读卡器java工程乱码解决办法

身份证读卡器java工程乱码解决办法 1、窗口>首选项>常规>工作空间 文本文件编码选择&#xff1a;缺省值&#xff08;GBK&#xff09; 2、工程>属性>资源 文本文件编码选择&#xff1a;从容器继承&#xff08;GBK&#xff09; IDE for Eclipse Committers (in…

MES生产管理系统与供应链协同管理

MES生产管理系统在制造业中发挥着越来越重要的作用&#xff0c;它与供应链管理密切相关&#xff0c;对于提高供应链的协同和优化有着重要的意义。本文将探讨MES管理系统与供应链管理之间的关系&#xff0c;包括实时数据共享、生产计划协调和供应链效率提升等方面。 MES系统能够…

npm install 报node-sass command failed

一、前言 最近在前端项目Vue项目install时会出现node-sass command failed的错误&#xff0c;原因是NodeJS和node-sass的版本不对应导致的&#xff0c;本文将给出解决方案。 二、解决方案 以下是NodeJS和node-sass版本的对照关系&#xff1a;

彩虹知识商城7.0.3小森升级版新增供货商开心学习版

彩虹知识商城7.0.3小森升级版新增供货商开心学习版 1.新增邮件提醒功能&#xff0c;支持给用户发订单、结算等邮件通知 2.支持给管理员发送提现、域名审核等邮件通知 3.支持设置手续费最低扣除金额 4.修复了其他一些已知问题

QT 自定义窗体加载完成函数

使用信号和槽函数&#xff0c;具体如下&#xff1a; QT-如何在窗口/对话框显示后自动执行指定任务_qt 界面显示完在调用函数-CSDN博客文章目录QT-如何在窗口/对话框显示后自动执行指定任务一、如何实现在窗口展示出来后&#xff0c;执行某个函数二、如何成功实现判断条件后选择…

怒刷LeetCode的第28天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;迭代 方法三&#xff1a;斐波那契数列公式 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;栈 方法二&#xff1a;路径处理类 方法三&#xff1a;正则表达式 方法…

生活废品回收系统 JAVA语言设计和实现

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的生活废品回收系统包含资源类型模块、资源品类模块、回收机构模块、回收机构模块、资源销售单模块、资源交易单模块、资源交易单模块&#xff0c;还包含系统自带的用户管理、部门管理、角…

QGIS003:【04地图导航工具栏】-地图显示、新建视图、时态控制、空间书签操作

摘要&#xff1a;QGIS地图导航工具栏包括平移地图、居中显示、放大、缩小、全图显示、缩放到选中要素、缩放到图层、缩放到原始分辨率、上一视图、下一视图、新建地图视图、新建3D地图视图、新建空间书签、打开空间书签、时态控制面板、刷新等选项&#xff0c;本文介绍各选项的…

Linux软件包和进程管理

一、RPM软件包管理 1、RPM管理工具 &#xff08;1&#xff09;RPM是红帽包管理(Redhat Package Manager)的缩写。 由Red Hat公司提出的一种软件包管理标准。 是Linux各发行版中应用最广泛的软件包格式之一&#xff08;还有debian的发行版deb安装包&#xff09;。 RPM功能通过…

借助文心大模型4.0轻松搞定统计报表

在10月17日的百度世界2023上&#xff0c;文心大模型4.0版本正式发布&#xff01;会上百度董事长李彦宏为我们展示了文心大模型4.0在多轮对话、搜索、地图、商业智能、智能会议、智能视频等方面的强悍。 对此我们保持疑问&#xff0c;那文心大模型4.0真有这么好&#xff1f;我们…

base_lcoal_planner的LocalPlannerUtil类中getLocalPlan函数详解

本文主要介绍base_lcoal_planner功能包中LocalPlannerUtil类的getLocalPlan函数&#xff0c;以及其调用的transformGlobalPlan函数、prunePlan函数的相关内容 一、getLocalPlan函数 getLocalPlan函数的源码如下&#xff1a; bool LocalPlannerUtil::getLocalPlan(const geomet…

网络协议--广播和多播

12.1 引言 在第1章中我们提到有三种IP地址&#xff1a;单播地址、广播地址和多播地址。本章将更详细地介绍广播和多播。 广播和多播仅应用于UDP&#xff0c;它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议&#xff0c;它意味着分别运行于两主…

用 Rust 和 cURL 库制作一个有趣的爬虫

目录 一、介绍 二、准备工作 三、代码实现 四、解析 HTML 并提取特定元素示例 总结 本文将介绍如何使用 Rust 编程语言和 cURL 库制作一个有趣的网络爬虫。我们将通过实例代码来展示如何抓取网页内容、处理数据和解析 HTML 结构。同时&#xff0c;还将探讨爬虫技术的原理、…

语义分割的常用方法和评价准则

常用方法 目前主流的语义分割网络一般是遵循下采样,上采样,特征融合,然后重复该过程,最后经过softmax像素分类。 评价准则 语义分割的评价准则为: 1.像素精度(pixel accuracy):每一类像素正确分类的个数/ 每一类像素的实际个数。

Linux C语言开发-D4数据类型

数据类型分类 bool类型&#xff1a;非零为真&#xff08;true&#xff09;&#xff0c;零为假&#xff08;false&#xff09;&#xff0c;其在<stdbool.h>头文件中 2552的8次方-1 1272的7次方-1 -128的补码是&#xff1a;10000000 一定要注意长度和范围&#xff0c;防…

【C语言】实现通讯录管理系统

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家实现通讯录&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 前言二. 通讯录的实现2.1 写出基本框架2.2 制作menu菜单2.3 创建联系人和通讯录结构体2.4 …