Xilinx Zynq 7000系列中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供5套工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、我这里已有的 MIPI 编解码方案
  • 3、本 MIPI CSI2 模块性能及其优缺点
  • 4、详细设计方案
    • 设计原理框图
    • OV5640及其配置
    • 权电阻硬件方案
    • MIPI CSI-2 RX Subsystem
    • Sensor Demosaic图像格式转换
    • Gammer LUT伽马校正
    • VDMA图像缓存
    • AXI4-Stream toVideo Out
    • HDMI输出
  • 5、vivado工程1:Zynq7020版本
    • FPGA逻辑设计
    • Vitis SDK软件设计
    • Vitis HLS补丁
  • 6、vivado工程2:Zynq7030版本
  • 7、vivado工程3:Zynq7035版本
  • 8、vivado工程4:Zynq7045版本
  • 9、vivado工程5:Zynq7100版本
  • 10、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 11、上板调试验证
  • 12、福利:工程代码的获取

Xilinx Zynq 7000系列中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供5套工程源码和技术支持

1、前言

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

本设计基于Xilinx的 zynq 7000系列中端FPGA开发板,采集OV5640摄像头的2Line MIPI视频,OV5640摄像头配置为MIPI模式,引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能; 再调用Xilinx的Gammer LUT IP实现伽马校正功能;再调用Xilinx的VDMA IP实现图像三帧缓存功能,VDMA调用两个,一个用于视频写入DDR3,另一个用于视频读出DDR3,这样分开读写的目的在于使用AXI的带宽;再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;最后用自定义的HDMI发送IP将视频输出显示器显示;
本方案提供5套工程源码,5套工程源码的区别在于使用的zynq主控芯片不同,分别是Zynq7020、Zynq7030、Zynq7035、Zynq7045、Zynq7100;5套工程源码详情如下:

______________________________________________________________________________
|vivado工程    | 第一套工程 | 第二套工程 | 第三套工程| 第四套工程 | 第五套工程|
|vivado版本    |  2021.1   |   2021.1  |   2021.1  |   2021.1  |   2021.1  |
|输入视频      |OV5640-MIPI|OV5640-MIPI|OV5640-MIPI|OV5640-MIPI|OV5640-MIPI|
|输出视频      |    HDMI   |    HDMI   |    HDMI   |    HDMI   |    HDMI   |
|Zynq芯片      |  Zynq7020 |  Zynq7030 |  Zynq7035 |  Zynq7045 |  Zynq7100 |
_______________________________________________________________________________

本文详细描述了Xilinx zynq 中端FPGA解码MIPI视频的设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;整个工程调用Zynq软核做IP的配置,Zynq的配置在Vitis SDK里以C语言软件代码的形式运行,所以整个工程包括FPGA逻辑设计和Vitis SDK软件设计两部分,需要具备FPGA和嵌入式C语言的综合能力,不适合初学者或者小白;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于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 模块性能及其优缺点

由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,所以性能上就取决于你的FPGA型号,理论上FPGA越高端,支持的IO线速率或者GT高速接口线速率就越高,就能跑速率更高的MIPI视频;
该IP适应性极强,支持的MIPI相机性能参数如下:
在这里插入图片描述
在这里插入图片描述
并且,在越高端的FPGA型号上,该IP支持的高端性能也越多;
由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核,NIPI视频解码的稳定性很好,且使用及其简单,缺点是看不到源码,出了问题后不好排查,只能在输入输出接口添加ila进行逐级追踪;
本方案使用的FPGA型号为Xilinx zynq 7000系列,属于中端FPGA的MIPI解码应用,再小型的Artix7-35T或者Spartan7、Spartan6等就已经不能使用MIPI CSI-2 RX Subsystem了;

4、详细设计方案

本设计基于Xilinx的 zynq 7000系列中端FPGA开发板,采集OV5640摄像头的2Line MIPI视频,OV5640摄像头配置为MIPI模式,引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO;调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能; 再调用Xilinx的Gammer LUT IP实现伽马校正功能;再调用Xilinx的VDMA IP实现图像三帧缓存功能,VDMA调用两个,一个用于视频写入DDR3,另一个用于视频读出DDR3,这样分开读写的目的在于使用AXI的带宽;再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;最后用自定义的HDMI发送IP将视频输出显示器显示;
本方案提供5套工程源码,5套工程源码的区别在于使用的zynq主控芯片不同,分别是Zynq7020、Zynq7030、Zynq7035、Zynq7045、Zynq7100;

设计原理框图

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

OV5640及其配置

输入视频采用廉价的OV5640摄像头模组,配置为MIPI模式,2 Line,数据格式为RAW10,线速率为1000Mbps,视频分辨率为1280*720,一个时钟一个像素,OV5640需要SCCB总线配置才能运行,该总线等价于I2C总线,调用一个AXI-GPIO模拟I2C,利用Vitis软件配置OV5640,配置部分代码有C语言实现,具体参考Vitis程序;AXI-GPIO调用和SCCB软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

权电阻硬件方案

使用Xilinx官方推荐的权电阻硬件方案将输入的差分MIPI对恢复HS和PL,原理图部分截图如下:
在这里插入图片描述
注意:权电阻方案只在低速率的MIPI模式下可用,高速率的MIPI请用专用芯片实现,比如MC20001,MC系列这种方案可以支持到2Gbps/Lane速率以上,只要FPGA的IO速率够用;

MIPI CSI-2 RX Subsystem

调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能,该IP由Xilinx免费提供,将MIPI视频解码后以AXIS视频流格式输出;调用和配置如下:
在这里插入图片描述
在这里插入图片描述

Sensor Demosaic图像格式转换

调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能,该IP通过Vitis的C代码软件配置,Sensor Demosaic调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

Gammer LUT伽马校正

调用Xilinx的Gammer LUT IP实现伽马校正功能,该IP通过Vitis的C代码软件配置,Gammer LUT调用和C代码软件配置代码截图如下:
在这里插入图片描述
在这里插入图片描述

VDMA图像缓存

调用Xilinx的VDMA IP实现图像三帧缓存功能,VDMA调用两个,一个用于视频写入DDR3,另一个用于视频读出DDR3,这样分开读写的目的在于使用AXI的带宽;该IP通过Vitis的C代码软件配置;VDMA调用和C代码软件配置代码截图如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AXI4-Stream toVideo Out

再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换;Video Timing Controller配置为1280*720@60Hz,这两个IP不需要软件配置;Video Timing Controller和AXI4-Stream toVideo Out调用截图如下:
在这里插入图片描述
在这里插入图片描述

HDMI输出

最后用自定义的HDMI发送IP将视频输出显示器显示,该IP最大输出分辨率只支持1920*1080@60Hz;IP调用截图如下:
在这里插入图片描述

5、vivado工程1:Zynq7020版本

FPGA逻辑设计

开发板FPGA型号:Xilinx–Zynq7020–xc7z020clg400-2;
开发环境:Vivado2021.1;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280*720;
输出:HDMI ,分辨率720P;
应用:Xilinx Zynq 7000系列中端FPGA解码MIPI视频;
工程Block Design如下:
在这里插入图片描述
由于调用IP较多,分散开来很不好看,也不利于阅读,我们将MIPI解码和缓存的核心IP进行了再封装,如上图中红框标记部分,该封装只是形式上的好看而已,没有特殊功能,可以通过如下方法将其展开,查看里面的详细组成和结构,如下:
在这里插入图片描述
展开后如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
工程的资源消耗和功耗如下:
在这里插入图片描述

Vitis SDK软件设计

Vitis SDK C语言软件是为了配置FPGA调用的IP,用VItis打开即可查看,代码内容如下:
在这里插入图片描述

Vitis HLS补丁

由于工程中用到了HLS生成的IP,Sensor Demosaic和Gammer LUT,可能会出现综合编译失败,或者警告后在Vitis SDK里找不到设备ID等情况,此时需要更改电脑系统时间或者打上官方补丁解决这件事情,具体方法参考这位大佬博文:直接点击前往

6、vivado工程2:Zynq7030版本

开发板FPGA型号:Xilinx–Zynq7030–xc7z030ffg676-2;
开发环境:Vivado2021.1;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280*720;
输出:HDMI ,分辨率720P;
应用:Xilinx Zynq 7000系列中端FPGA解码MIPI视频;
工程Block Design、工程代码架构、工程的资源消耗、Vitis SDK软件设计和第5章节的“vivado工程1:Zynq7020版本”大同小异;

7、vivado工程3:Zynq7035版本

开发板FPGA型号:Xilinx–Zynq7035–xc7z035ffg676-2;
开发环境:Vivado2021.1;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280*720;
输出:HDMI ,分辨率720P;
应用:Xilinx Zynq 7000系列中端FPGA解码MIPI视频;
工程Block Design、工程代码架构、工程的资源消耗、Vitis SDK软件设计和第5章节的“vivado工程1:Zynq7020版本”大同小异;

8、vivado工程4:Zynq7045版本

开发板FPGA型号:Xilinx–Zynq7045–xc7z045ffg900-2;
开发环境:Vivado2021.1;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280*720;
输出:HDMI ,分辨率720P;
应用:Xilinx Zynq 7000系列中端FPGA解码MIPI视频;
工程Block Design、工程代码架构、工程的资源消耗、Vitis SDK软件设计和第5章节的“vivado工程1:Zynq7020版本”大同小异;

9、vivado工程5:Zynq7100版本

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2021.1;
输入:OV5640摄像头–MIPI–2 Line–RAW10-1280*720;
输出:HDMI ,分辨率720P;
应用:Xilinx Zynq 7000系列中端FPGA解码MIPI视频;
工程Block Design、工程代码架构、工程的资源消耗、Vitis SDK软件设计和第5章节的“vivado工程1:Zynq7020版本”大同小异;

10、工程移植说明

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软核;

11、上板调试验证

需要准备的器材如下:
FPHA开发板;
OV5640摄像头;
HDMI显示器;
输出如下:
在这里插入图片描述

12、福利:工程代码的获取

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

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

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

相关文章

Redis 事务是什么?又和MySQL事务有什么区别?

目录 1. Redis 事务的概念 2. Redis 事务和 MySQL事务的区别? 3. Redis 事务常用命令 1. Redis 事务的概念 下面是在 Redis 官网上找到的关于事务的解释,这里划重点,一组命令,一个步骤。 也就是说,在客户端与 Redi…

Python | 机器学习之聚类算法

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之聚类算法概念 1.1 机器学习 1.2 聚类算法 2. 聚类算法 2.1 实验目的…

Vue.js的生命周期钩子

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

GPT 学习法:恐怖算力 + 精确算法,实现复杂文献轻松的完美理解、在庞大的不确性中找到确定性

GPT 学习法:恐怖算力 精确算法,实现复杂文献轻松的完美理解、在庞大的不确性中找到确定性 复杂文献 - 恐怖算力 精确算法,复杂文献轻松的完美理解GPT 理解法 - 举例子、归纳、逻辑链推导本质、图示、概念放大器实战案例:学习高精…

DDR3内容相关

1、DDR3 全称第三代双倍速率同步动态随机存储器。 特点:①掉电无法保存数据,需要周期性的刷新。②时钟上升沿和下降沿都 会传输数据。③突发传输,突发长度 Burst Length 一般为 8。 2、DDR3 的存储:bank、行地址和列地址 数据怎么…

使用 Redis 构建轻量的向量数据库应用:图片搜索引擎(一)

本篇文章聊聊更轻量的向量数据库方案:Redis。 以及基于 Redis 来快速实现一个高性能的本地图片搜索引擎,在本地环境中,使用最慢的稠密向量检索方式来在一张万图片中查找你想要的图片,总花费时间都不到十分之一秒。 写在前面 接着…

⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL事务 ⑨【事务】1. 事务概述2. 操作事务3…

2023年咨询实务速记突破【专题总结】

需要完整资料的可以联系我获取

xshell连接云服务器(保姆级教程)

文章目录 1. 前言2. 查看云服务器的信息3. xshell7连接云服务器 1. 前言 云服务器,也被称为Elastic Compute Service (ECS),是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。它源于物理服务器集群资源池,可以像从大海中取水一样&am…

【软考篇】中级软件设计师 第二部分(二)

中级软件设计师 第二部分(二) 十三. 死锁问题十四. 段页式存储14.1 页式存储14.1.1 缺页中断14.1.2 页面置换算法 14.2 段式存储14.3 段页式存储 十五. 索引文件十六. 文件目录16.1 树形目录结构16.2 位示图 十三. 死锁问题 多刷题 系统不可能发生死锁的…

【Linux】Linux基础IO(下)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

智能供应链中的预测算法:理论与实践

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 智能供应链已经成…

linux高级篇基础理论(详细文档)二

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技…

技术贴 | SQL 执行 - 执行器优化

本期技术贴主要介绍查询执行引擎的优化。查询执行引擎负责将 SQL 优化器生成的执行计划进行解释,通过任务调度执行从存储引擎里面把数据读取出来,计算出结果集,然后返回给客户。 在关系型数据库发展的早期,受制于计算机 IO 能力的…

Live800:客服行业的发展历程及未来前景

随着信息技术和互联网的高速发展,客服行业也在不断变革和发展。客服行业是一个服务型的行业,其发展历程也与人们对服务需求的变化密切相关。本文将介绍客服行业的发展历程和未来前景。 客服行业的发展历程 20世纪70年代,客服行业主要以电话服…

SAM分割模型的5个典型用例

Meta AI 于2023 年推出的分割任意模型 (SAM) 彻底改变了我们对图像分割的质量标准。 给定输入图像,SAM 尝试分割图像中的所有对象并生成分割掩模。 使用 SAM,你可以分割对象,然后,可以使用模型来利用该信息,例如用于为…

【开源】基于Vue.js的校园二手交易系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6…

μC/OS-II---时间管理(os_time.c)

目录 时间管理相关(os_time.c)Task延迟按时、分、秒、毫秒延时恢复被延时的Task返回系统当前的Tick计数值设置系统的Tick计数值 时间管理相关(os_time.c) Task延迟 void OSTimeDly (INT32U ticks) {INT8U y; #if OS_CRITI…

Kibana:使用 “链接” 面板简化 Kibana 仪表板导航 - Links panel

作者:Teresa Alvarez Soler 我们很高兴地宣布 Kibana 仪表板的最新功能版本:链接面板(Links panel),这是在仪表板之间组织和导航的简单方法。 此功能在 Kibana 8.11 的技术预览版中提供。 有时你可能希望创建多个主题…

Rust实战教程:构建您的第一个应用

大家好!我是lincyang。 今天,我们将一起动手实践,通过构建一个简单的Rust应用来深入理解这门语言。 我们的项目是一个命令行文本文件分析器,它不仅能读取和显示文件内容,还会提供一些基础的文本分析,如计算…