首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Zynq7020 纯VHDL解码 MIPI 视频,HDMI输出,支持 ISP 动态配置,提供vivado工程源码和技术支持

  • 25-03-04 14:02
  • 2638
  • 11197
blog.csdn.net

目录

  • 1、前言
    • 免责声明
  • 2、我这里已有的 MIPI 编解码方案
  • 3、本 MIPI CSI2 模块性能及其优越性
  • 4、详细设计方案
    • 设计原理框图
    • OV5640摄像头及其配置
    • D-PHY 模块
    • CSI-2-RX 模块
    • Bayer转RGB模块
    • 伽马矫正模块
    • RGB转HDMI模块
    • ISP 动态配置
      • OV5640输入分辨率控制
      • OV5640调焦控制
      • OV5640输入数据格式控制
      • OV5640写寄存器控制
      • OV5640读寄存器控制
      • 伽马矫正系数控制
      • 自动白平衡控制
    • MIPI D-PHY 硬件方案
  • 5、vivado工程详解
    • PL端FPGA硬件设计
    • PS端SDK软件设计
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
  • 8、福利:工程代码的获取

1、前言

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

本设计基于Xilinx的Zynq7020 开发板,采集OV5640摄像头的2Line MIPI视频,OV5640摄像头引脚接Zynq7020 的BANK35,经过纯VHDL实现的 D-PHY和CSI2 RX模块输出Bayer视频,再经过Bayer转RGB模块输出RGB视频,再经伽马矫正模块增强图像质量,然后调用Xilinx官方VDMA将图像送入PS端的DDR3中做三帧缓存后读出;调用Xilinx官方VTC模块产生输出视频时序,zynq通过SDK软件动态配置VTC的输出时序,支持1080P、720P和640P三种时序输出,调用Xilinx官方AXI4-Stream to Video Out做数据流转换,输出VGA时序的RGB数据,最后通过纯VHDL实现的RGB转HDMI模块将视频输出显示器;在SDK软件端,通过串口与PC交互,PC发送指令给SDK软件,可动态配置ISP,ISP功能包括控制OV5640输入分辨率、控制OV5640输入图像格式、任意修改OV5640内部寄存器值、任意读取OV5640内部寄存器值、任意修改伽马矫正系数(输出效果不同)、控制切换自动白平衡方式(有三种模式:高级、简单和禁用);

本文详细描述了Zynq7020 纯VHDL解码 MIPI 视频HDMI输出的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于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界面配置即可使用,当然,如果你想看里面的源码依然可以直接打开观看;

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源码如下:
在这里插入图片描述

RGB转HDMI模块

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

ISP 动态配置

在SDK软件端,通过串口与PC交互,PC发送指令给SDK软件,可动态配置ISP,ISP功能包括控制OV5640输入分辨率、控制OV5640输入图像格式、任意修改OV5640内部寄存器值、任意读取OV5640内部寄存器值、任意修改伽马矫正系数(输出效果不同)、控制切换自动白平衡方式(有三种模式:高级、简单和禁用);具体如下:
当下载bit后,PC端的串口调试助手会收到打印的提示信息;

Please press the key corresponding to the desired option:
a. Change Resolution
b. Change Liquid Lens Focus
d. Change Image Format (Raw or RGB)
e. Write a Register Inside the Image Sensor
f. Read a Register Inside the Image Sensor
g. Change Gamma Correction Factor Value
h. Change AWB Settings
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此时,你可以输入a、b、d、e、f、g、h案件来动态配置摄像头;这里说明如下:

OV5640输入分辨率控制

当你输入 a 后,会看到如下打印信息:

1. 1280 x 720, 60fps
2. 1920 x 1080, 15fps
3. 1920 x 1080, 30fps
  • 1
  • 2
  • 3

输入 1 ,OV5640输入分辨率为1280 x 720, 60fps;
输入 2 ,OV5640输入分辨率为1920 x 1080, 15fps;
输入 3 ,OV5640输入分辨率为1920 x 1080, 30fps;

OV5640调焦控制

也就是上面的输入 b 时的功能,但此功能我调试一直失败中,暂不知道问题出在哪里,所以直接跳过,不再赘述;

OV5640输入数据格式控制

当你输入 d 后,会看到如下打印信息:

Please press the key corresponding to the desired setting:
1. Select image format to be RGB, output still Raw
2. Select image format & output to both be Raw
  • 1
  • 2
  • 3

输入 1 ,OV5640输入数据格式为RGB;
输入 2 ,OV5640输入数据格式为RAW;
注意:RGB格式仅在调试中使用,因为本工程为MIPI,所以请务必配置为RAW;

OV5640写寄存器控制

当你输入 e 后,会看到如下打印信息:

Please enter address of image sensor register, in hex, with small letters:
  • 1

此时你需要输入需要写的OV5640寄存器地址,注意是输入十六进制数;
地址输入完后,会看到如下打印信息:

Please enter value of image sensor register, in hex, with small letters:
  • 1

此时你需要输入需要写的OV5640寄存器数据,注意是输入十六进制数;
自此,OV5640写寄存器操作完成;

OV5640读寄存器控制

当你输入 f 后,会看到如下打印信息:

Please enter address of image sensor register, in hex, with small letters:
  • 1

此时你需要输入需要读的OV5640寄存器地址,注意是输入十六进制数;
地址输入完后,会看到读回的数据;

伽马矫正系数控制

当你输入 g 后,会看到如下打印信息:

Please press the key corresponding to the desired Gamma factor:
1. Gamma Factor = 1
2. Gamma Factor = 1/1.2
3. Gamma Factor = 1/1.5
4. Gamma Factor = 1/1.8
5. Gamma Factor = 1/2.2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输入 1 ,伽马矫正系数为1;
输入 2 ,伽马矫正系数为1/1.2;
输入 3 ,伽马矫正系数为1/1.5;
输入 4 ,伽马矫正系数为1/1.8;
输入 5 ,伽马矫正系数为1/2.2;

自动白平衡控制

当你输入 h 后,会看到如下打印信息:

Please press the key corresponding to the desired AWB change:
1. Enable Advanced AWB
2. Enable Simple AWB
3. Disable AWB
  • 1
  • 2
  • 3
  • 4

输入 1 ,自动白平衡为高级模式,此时效果最佳;
输入 2 ,自动白平衡为简单模式,此时效果一般;
输入 3 ,自动白平衡功能被禁用,此时输出可能为黑色;

MIPI D-PHY 硬件方案

本设计使用xilinx官方推荐的电阻网络方案,要求800M Hz以下,走线30mm以内;板载MIPI接口原理图部分如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后差分信号组连到BANK35,如下:
在这里插入图片描述

5、vivado工程详解

PL端FPGA硬件设计

开发板FPGA型号:Xilinx–zynq7020–xc7z020clg400-1;
开发环境:Vivado2019.1;
输入:OV5640 MIPI 2 Line RAW10;
输出:HDMI显示器,720P;
应用:Zynq7020 纯VHDL解码 MIPI 视频HDMI输出;
工程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名片。
网盘资料如下:
在这里插入图片描述

源码技术支持加我微信哦
微信名片
注:本文转载自blog.csdn.net的9527华安的文章"https://blog.csdn.net/qq_41667729/article/details/132690083"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top