Zynq7020 纯VHDL解码 MIPI 视频,4路图像缩放拼接输出,提供vivado工程源码和技术支持

news2024/11/22 17:48:54

目录

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

1、前言

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

本设计基于Xilinx的Zynq7020 开发板,采集4路OV5640摄像头的2Line MIPI视频,OV5640摄像头引脚接Zynq7020 的BANK34,经过纯VHDL实现的 D-PHY和CSI2 RX模块输出Bayer视频,再经过Bayer转RGB模块输出RGB视频,再经伽马矫正模块增强图像质量,然后调用4个Xilinx官方的Video Scaler 做图像缩放,将输入的1280x720视频缩小到960x540;然后调用4个Xilinx官方的VDMA将图像送入PS端的DDR3中做三帧缓存后读出;调用Xilinx官方VTC模块产生输出视频时序,zynq通过SDK软件动态配置VTC的输出时序,支持1080P、720P和640P三种时序输出,调用Xilinx官方AXI4-Stream to Video Out做数据流转换,输出VGA时序的RGB数据,最后通过纯VHDL实现的RGB转HDMI模块将视频输出显示器;

Zynq7020 纯VHDL解码4路 MIPI 视频,4路图像拼接输出的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于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:实用性达到天花板,采用OV5640摄像头作为输入(主要是便宜),不同于市面上验证性和实验性的工程,本设计直接面向实用工程,贴近真实项目,做类似项目的兄弟可直接拿去用,一个月工资直接拿到手。。。
5:支持高达1920X1080分辨率的MIPI视频解码;
6:时序收敛很到位,考虑到MIPI协议的复杂性和时序的高要求,所以没有采用时序收敛不强的verilog,而是VHDL,虽然阅读性可能会低一些,但用户只需要知道用户接口即可,并不需要去看内部的复杂代码;
7:使用方便,虽然是VHDL代码实现,但均已封装为自定义IP,用户无需关心代码实现的复杂逻辑,仅需调用IP,通过UI界面配置即可使用,当然,如果你想看里面的源码依然可以直接打开观看;
8:同时采集4路非同源时钟的MIPI相机,解码后做4路视频拼接显示,高度符合现实高端项目;

4、详细设计方案

设计原理框图

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

OV5640摄像头及其配置

我使用到的OV5640摄像头输出为2 Line MIPI格式,输出分辨率有720p@60Hz和1080p@30Hz两种,可通过SDK软件选择配置为哪一种;OV5640输出 RAW10数据;zynq通过i2c片内外设配置OV5640,这个操作在SDK软件里完成,PL端硬件无需参与;

D-PHY 模块

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

CSI-2-RX 模块

关于MIPI CSI-2-RX,网上介绍原理和概念的文章一大堆,在此不再重复,这里重点介绍用FPGA实现;
我们采用纯VHDL代码实现MIPI CSI-2-RX功能,为了照顾大家不习惯阅读VHDL代码的习惯,我们已经将改部分代码封装成为了自定义IP,用户无需关心代码实现的复杂逻辑,仅需调用IP,通过UI界面配置即可使用,当然,如果你想看里面的源码依然可以直接打开观看;本MIPI CSI-2-RX只能支持1 line或者2 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图像缓存

调用4路VDMA,其中3路只配置为写模式,只需要将视频写入DDE3,另外1路配置为读写操作,这样设计的目的是做4路视频拼接,4路VDMA写入图像的DDR地址不同,可以保证图像在内存中地址不冲突,但读出图像时仅需1路VDMA执行读操作即可,这既是常规的设计思路,也是减轻HP接口AXI4总线负载的要求;
配置为只写模式的VDMA如下:
在这里插入图片描述
配置为读写模式的VDMA如下:
在这里插入图片描述

Video Scaler 图像缓存

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

RGB转HDMI模块

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

MIPI D-PHY 硬件方案

使用专门MC20901芯片转换到LVDS电平后送入FPGA;
这种方案就不需要介绍了,专用ASIC(MC系列这种方案可以支持到2Gbps/Lane速率以上,只要FPGA的IO速率够用),方案不及自带DPHY的方案,但是也足够用了,综合考虑方案的成本,这种方案也是目前很多公司选用的方案。框图如下:详细原理图联系提供;
在这里插入图片描述

5、vivado工程详解

PL端FPGA硬件设计

开发板FPGA型号:Xilinx–zynq7020–xc7z020clg484-1;
开发环境:Vivado2019.1;
输入:4路OV5640 MIPI 2 Line RAW10;
输出:HDMI显示器,1080P;
应用:Zynq7020 纯VHDL解码4路 MIPI 视频,4路图像拼接输出;
工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

PS端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/1003864.html

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

相关文章

如何短期通过PMP考试?(含pmp干货)

一般PMP的准备考试时间都是一个月到三个月之间,一般都不会花超过半年的时间去准备考试的,毕竟想要学习项目管理的人一般应该都还是讲究高效率的,对待考试肯定也是在短时间内去高效学习备考的。 但对于怎样在短期内能够极好的去迎战PMP考试&a…

回溯算法 —— 子集问题

如果说组合问题可以说是思考如何使用回溯算法收割叶子节点的结果、 那么子集问题就是思考如何使用回溯算法收割每一个节点的结果 回溯算法的解题三部曲:1.确定传入的参数 2.确定终止条件 3.确定单层遍历逻辑 ​​​​​​78. 子集 本题就是经典的子集问题了&…

【SpringMvc 丨跨域】

Spring MVC 支持跨域处理(CORS)。 CORS 简介处理CORS 过滤器CrossOrigin注解java配置xml配置 主页传送门:📀 传送 简介 跨域是指在浏览器的同源策略下,不能执行其他网站的脚本。它是由浏览器的安全限制造成的&#xf…

C++程序入门(helloworld.cpp编写)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

辅助驾驶功能开发-控制篇(01)-基于PID的横向控制算法

1 文档概述 本文档主要描述Lateral Control(横向控制)设计的功能要求、性能要求、算法推导。 2 功能要求 横向控制(Lateral Control)系统根据上层运动规划输出的期望路径、曲率等信息进行跟踪控制,以减少跟踪误差,同时保证车辆行驶平稳性和舒适性。 3 性能要求 控制系统应…

类和对象【基础概念】

全文目录 类的定义定义方式 类的访问限定符封装(面向对象的三大特性之一) 类对象模型类对象的存储方式类对象的大小计算 this指针this指针的特性**this指针可以为空吗?** 类的定义 在C中,C语言中的结构体struct中除了定义变量外还…

深度学习中softmax激活函数的用法

在深度学习中,“softmax” 是一种常用的激活函数,它主要用于多类别分类任务中的输出层。“Softmax” 是 “soft maximum” 的缩写,它通过将输入的实数向量转换为概率分布,用于表示相应类别的概率。

Tomcat多实例部署和动静分离

一、多实例部署: 多实例:多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。 1.前期准备: 1.关闭防火墙:systemctl …

Postman —— 配置环境变量

PostMan是一套比较方便的接口测试工具,但我们在使用过程中,可能会出现创建了API请求,但API的URL会随着服务器IP地址的变化而改变。 这样的情况下,如果每一个API都重新修改URL的话那将是非常的麻烦,所以PostMan中也提供…

【宝藏系列】几款好用的 Spring Boot 内置工具类

【宝藏系列】几款好用的 Spring Boot 内置工具类 文章目录 【宝藏系列】几款好用的 Spring Boot 内置工具类断言对象字符串集合文件资源IO 流反射AOP🍉文末推荐【深入浅出Java虚拟机】 断言 断言是一个逻辑判断,用于检查不应该发生的情况 Assert 关键字…

ARM接口编程—IIC总线(exynos 4412平台)

IIC总线简介 IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线 主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单&#xff…

Vim9用netrw快速打开文件

Vim9有一个自带的文件浏览器——netrw,它的功能很强大。今天我们给它添加两个快捷命令: Ctrl回车键,一次打开多个文件Alt回车键,打开文件后自动关闭目录窗口 一、修改vimrc文件: 操作路径:编辑》启动设置…

Python判断多个文件夹的文件夹名是否包含“分公司”或“营销中心”怎么处理?(方法二)...

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 先帝称之曰能,是以众议举宠为督。 大家好,我是皮皮。 一、前言 前几天在Python最强王者群【哎呦喂 是豆子~】问了一…

SOME/IP

介绍 SOME/IP是一种汽车中间件解决方案,可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域…

AmazonS3Exception: The specified key does not exist

使用S3近端包下载文件时,遇到这个问题,感觉像是设置的桶名称或者文件名没有找到,最后发现是桶名最后多了一个”/“,S3是根据桶名称文件名寻址,中间不需要添加/ 报错桶名:https://img-cdn.abc.com/eb3e9d5d…

机器学习(12)---梯度下降(含手写公式、推导过程和手写例题)

梯度下降 一、概述1.1 梯度下降的用途1.2 梯度下降公式 二、公式讲解2.1 推导过程2.2 例题 一、概述 1.1 梯度下降的用途 1. 使用线性回归的平方误差成本函数时,成本函数不会也永远不会有多个局部最小值。因为它是凸函数,只有单一的全局最小值。通俗地说…

工业机器人仿真参考

最近有一些朋友看到我做的关于Unity3d仿真机器人的项目,本次我在平台做以分享,希望的朋友或者有需要在此基础做开发的可以参考下。 开发工具: 下位机:Unity3D 上位机:Visual Studio 机械臂模型:TH6-QKM…

java word文档 转 html文件

用java将word转为html文档 1、简介2、添加依赖3、代码示例 1、简介 最近,因项目需要,需要对word文档进行解析拆分,感觉直接解析word有点麻烦,于是想到,先将word转为html文档,然后用jsoup解析html文件更方便…

Debian 12快速安装图解

文章目录 Debian 12安装图解创建虚拟机安装系统登录并用光盘离线安装sudo、curl解决Linux下sudo更改文件权限报错保存快照debain添加在线源(配置清华源)参考 Debian 12安装图解 Debian选择CD安装非常慢,本次安装选择DVD离线安装。 下载 https://www.debian.org/CD…

【遥感变化检测综述】—《多时相遥感影像的变化检测研究现状与展望》

作者:张 祖 勋,姜 慧 伟,庞 世 燕,胡 翔 云 论文连接:多时相遥感影像的变化检测研究现状与展望 — 张祖勋 1、内容概述 本文主要从几何和语义两个角度对变化检测方法进行了分析和归纳总结,重点分析了几何信…