FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

news/2024/4/29 12:14:31/文章来源:https://blog.csdn.net/qq_41667729/article/details/136994371

目录

  • 1、前言
  • 2、相关方案推荐
    • 本博主所有FPGA工程项目-->汇总目录
    • 我这里已有的 MIPI 编解码方案
  • 3、本 MIPI CSI-RX IP 介绍
  • 4、个人 FPGA高端图像处理开发板简介
  • 5、详细设计方案
    • 设计原理框图
    • IMX327 及其配置
    • MIPI CSI RX
    • 图像 ISP 处理
    • 图像缓存
    • HDMI输出
    • 工程源码架构
  • 6、工程源码1详解-->IMX327解码+FDMA图像缓存+HDMI输出
  • 7、工程源码2详解-->IMX327解码+VDMA图像缓存+HDMI输出
  • 8、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 9、上板调试验证
    • 准备工作
    • 视频输出演示
  • 10、福利:工程代码的获取

FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

1、前言

FPGA图像采集领域目前协议最复杂、技术难度最高之一的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。本设计基于Xilinx的Kintex7-325T中端FPGA开发板,采集IMX327 MIPI摄像头的4 Lane MIPI视频,IMX327 摄像头配置为 MIPI4 Lane RAW12模式,输出有效分辨率为1920x1080@60Hz;IMX327 MIPI摄像头引脚经过权电阻方案分出LP电路后接入FPGA的HS BANK的LVDS差分IO;采用自定义的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12格式视频,该IP由本博免费提供;至此,MIPI视频解码工作完成,但此时的视频还是原始的RAW12格式,远远达不到输出显示要求,所以还需进行图像处理操作,也就是图像ISP操作;本博提供及其完整的图像ISP,具体流程包括Bayer转RGB888、自动白平衡、色彩校正、伽马校正、RGB888转YCrCb444、图像增强、YCrCb444转RGB888、AE自动曝光等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出RGB888格式的视频;然后再使用本博常用的FDMA的图像缓存架构或者Xilinx官方的VDMA图像缓存架构将视频缓存到板载的DDR3中;然后在VGA时序的控制下将缓存视频从DDR3中读出,再使用本博常用的HDMI输出模块将图像输出到显示器显示即可;针对目前市面上主流的索尼IMX系列相机,本方案一共移植了2套工程源码,详情如下:
在这里插入图片描述
这里说明一下提供的2套工程源码的作用和价值,如下:
工程源码1:Xilinx Kintex7-325T FPGA 解码索尼的 IMX327 MIPI相机,IMX327 被配置为 4 Lane RAW12 1080P分辨率;经FPGA解码、ISP图像处理、图像缓存、FDMA图像缓存(自研)、VGA时序同步、HDMI视频输出等操作后,通过板载的HDMI接口输出显示器;本工程的相机接在配套FPGA开发板的P4接口;

工程源码1:Xilinx Kintex7-325T FPGA 解码索尼的 IMX327 MIPI相机,IMX327 被配置为 4 Lane RAW12 1080P分辨率;经FPGA解码、ISP图像处理、图像缓存、VDMA图像缓存(Xilinx官方IP)、VGA时序同步、HDMI视频输出等操作后,通过板载的HDMI接口输出显示器;本工程的相机接在配套FPGA开发板的P4接口;

IMX327-MIPI相机在FPGA开发板P4口的连接方式如下图:
在这里插入图片描述

2、相关方案推荐

本博主所有FPGA工程项目–>汇总目录

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以写了一篇汇总目录的博文并置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。博客链接如下:
点击直接前往

我这里已有的 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 CSI-RX IP 介绍

本设计采用本博自研的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12颜色视频,该IP由本博免费提供;该IP目前只适用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12图像,输入分辨率最高支持4K @30帧;IP UI配置界面如下:
在这里插入图片描述
该自定义IP只提供网表不提供源码,但用户依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一样,没有本质区别,因为MIPI CSI-2 RX Subsystem也是看不到源码的;MIPI CSI-RX IP资源消耗如下:
在这里插入图片描述

4、个人 FPGA高端图像处理开发板简介

本博客提供的工程源码需配合本博提供的FPGA高端图像处理开发板才能使用,亦或者读者自己拿去移植,但本博推荐使用本博客提供的工程源码需配合本博提供的FPGA高端图像处理开发板,该开发板截图如下:
在这里插入图片描述
此开发板专为高端FPGA图像处理设计,适合公司项目研发、研究所项目预研、高校项目开发、个人学习进步等场景需求,本博之前专门写过一篇博文详细介绍了该开发板的情况,感兴趣的请移步那篇博文,博客地址如下:
点击直接前往

5、详细设计方案

设计原理框图

工程源码1-FDMA缓存版本的设计原理框图如下:
在这里插入图片描述
工程源码2-VDMA缓存版本的设计原理框图如下:
在这里插入图片描述

IMX327 及其配置

本设计使用本博提供的专用SONY公司的 IMX327 MIPI相机,该相机输出分辨率达到了1920x1080,采用焦距可调的镜头,清晰度极高,适用于高端项目开发,相机截图如下:
在这里插入图片描述
IMX327 MIPI相机需要 i2c配置才能正确使用,本设计调用本博自定义的i2c主机IP实现对IMX327的配置,该IP挂载与AXI-Lite总线上,通过MicroBlaze软核运行的C语言代码实现配置,此外,本博还设计了自动曝光程序,实时读取IMX327 RAW12像素,通过写IMX327对应寄存器的方式实现实时的自动曝光算法,使得IMX327在暗黑的环境下也能输出明亮的图像;

本博提供的FPGA开发板有两个MIPI CSI-RX接口,分别位于P3、P4接口,因此可以接两个MIPI相机,其中,P4接口的相机采用螺丝固定方式连接,适用于FPGA开发板需要移动的项目,如小车等;P3接口的相机采用FPC软排线方式连接,适用于FPGA开发板不需要移动的项目,如固定检测等,具体连接方式如下图:
在这里插入图片描述

MIPI CSI RX

本设计采用自定义的MIPI CSI RX解码IP实现MIPI的D_PHY+CSI_RX功能,输出AXI4-Stream格式的RAW12颜色视频,该IP由本博免费提供;该IP目前只适用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12图像,输入分辨率最高支持4K @30帧;IP UI配置界面如下:
在这里插入图片描述
该自定义IP只提供网表不提供源码,但用户依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一样,没有本质区别,因为MIPI CSI-2 RX Subsystem也是看不到源码的;

图像 ISP 处理

本博提供及其完整的图像ISP,具体流程包括Bayer转RGB888、自动白平衡、色彩校正、伽马校正、RGB888转YCrCb444、图像增强、YCrCb444转RGB888、AE自动曝光等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出YCrCb422格式的视频;图像 ISP 处理在工程 Block Design中如图:
在这里插入图片描述
这些IP均为Xilinx的免费IP,有的需要配置才能使用,在MicroBlaze软核运行的C语言代码已经提供了配置程序;其中AE自动曝光采用SDK C语言AE算法实现,FPGA实时读取IMX327的亮度值,然后与AE模型进行比较,亮度不足则补光,亮度太高则降光,通过控制IMX327内部寄存器实现,C代码需要在MicroBlaze软核运行;

图像缓存

工程源码1使用本博常用的FDMA图像缓存架构,该架构由纯verilog代码搭建并封装为自定义IP,其在Block Design中如下:
在这里插入图片描述
关于FDMA更详细的介绍,请参考我之前的博客,博文链接如下:
点击直接前往

工程源码2使用VDMA图像缓存方案,VDMA架构使用Xilinx官方力推的VDMA图像缓存架构实现图像3帧缓存,VDMA图像缓存架构由Video In to AXI4-Stream、VDMA、Video Timing Controller、AXI4-Stream To Video Out构成;其在Block Design中如下:
在这里插入图片描述
VDMA需要驱动才能正常工作,本工程提供C语言驱动;

HDMI输出

HDMI输出架构由VGA时序和HDMI输出模块构成,VGA时序负责产生输出的1920x1080@60Hz的时序,并控制FDMA数据读出,HDMI输出模块负责将VGA的RGB视频转换为差分的TMDS视频,代码架构如下:
在这里插入图片描述
HDMI输出模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往

工程源码架构

本博客提供2套工程源码,2套代码的vivado Block Design设计具有相似性,以工程1为例,Block Design截图如下,工程2与之类似;
在这里插入图片描述
工程1的工程源码截图如下,工程2与之类似;
在这里插入图片描述
2套工程源码需要运行MicroBlaze软核,用于配置ISP、VDMA等;以工程2为例,SDK工程架构如下:
在这里插入图片描述

6、工程源码1详解–>IMX327解码+FDMA图像缓存+HDMI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:IMX327 MIPI相机,4 Lane,分辨率1920x1080@60Hz;
输出:HDMI,分辨率1920x1080@60Hz;
图像缓存方案:自研的FDMA方案;
图像缓存路径:DDR3;
工程作用:此工程目的是让读者掌握FPGA实现IMX327相机MIPI转HDMI的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第5章节“工程源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程源码2详解–>IMX327解码+VDMA图像缓存+HDMI输出

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:IMX327 MIPI相机,4 Lane,分辨率1920x1080@60Hz;
输出:HDMI,分辨率1920x1080@60Hz;
图像缓存方案:Xilinx官方的VDMA方案;
图像缓存路径:DDR3;
工程作用:此工程目的是让读者掌握FPGA实现IMX327相机MIPI转HDMI的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第5章节“工程源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、工程移植说明

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

9、上板调试验证

准备工作

需要准备的器材如下:
本博提供的FPGA开发板;
本博提供的IMX327 MIPI相机;
HDMI显示器;
我的开发板了连接如下:
在这里插入图片描述

视频输出演示

以工程源码1为例,输出演示如下,工程源码2输出效果与之类似:

FPGA解码IMX327-MIPI相机转HDMI输出

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

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

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

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

相关文章

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表,可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…

YOLOv8全网独家改进: 红外小目标 | 注意力改进 | 多膨胀通道精炼(MDCR)模块,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:多膨胀通道精炼(MDCR)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv8原创自研 https://blog…

Day24 代码随想录(1刷) 回溯

目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1…

Vue生命周期,从听说到深入理解(全面分析)

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶…

基于深度学习的OCR,如何解决图像像素差的问题?

基于深度学习的OCR技术在处理图像像素差的问题时确实面临一定的挑战。图像像素差可能导致OCR系统无法准确识别文本,从而影响其精度和可靠性。尽管已经有一些方法如SRN-Deblur、超分SR和GAN系列被尝试用于解决这个问题,但效果并不理想。然而,这…

论文阅读-Policy Optimization for Continuous Reinforcement Learning

摘要 我们研究了连续时间和空间环境下的强化学习( RL ),其目标是一个具有折扣的无限时域,其动力学由一个随机微分方程驱动。基于连续RL方法的最新进展,我们提出了占用时间(专门针对一个折现目标)的概念,并展示了如何有效地利用它…

【超图 SuperMap3D】【基础API使用示例】51、超图SuperMap3D - 绘制圆|椭圆形面标注并将视角定位过去

前言 引擎下载地址:[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 绘制圆形或者椭圆形效果 核心代码 entity viewer.entities.add({// 圆中心点position: { x: -1405746.5243351874, y: 4988274.8462937465, z: 370…

关于异业联盟模式做成小程序的可行性分析

随着移动互联网的快速发展,小程序作为一种轻量级应用,受到了越来越多企业和用户的青睐。而异业联盟模式则是一种有效的商业合作方式,能够实现资源共享、优势互补和共同发展。将异业联盟模式做成小程序,不仅可以提高用户体验&#…

Pytorch的hook函数

hook函数是勾子函数,用于在不改变原始模型结构的情况下,注入一些新的代码用于调试和检验模型,常见的用法有保留非叶子结点的梯度数据(Pytorch的非叶子节点的梯度数据在计算完毕之后就会被删除,访问的时候会显示为None&…

react-navigation:

我的仓库地址:https://gitee.com/ruanjianbianjing/bj-hybrid react-navigation: 学习文档:https://reactnavigation.org 安装核心包: npm install react-navigation/native 安装react-navigation/native本身依赖的相关包: react-nativ…

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测(完整源码和数据…

工业镜头常用参数之实效F(Fno.)和像圈

Fno. 工业镜头中常用到的参数F,有时候用F/#,Fno.来表示,指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示,也可通过镜头数值孔径(NA)和光学放大倍率(β)来计算。有效Fno.…

maven的依赖继承

先说一下创建子maven工程的步骤 继承 继承的作用:在父工程中,统一管理项目中的依赖信息,进行统一的版本控制 继承的背景是:对一个大型的项目进行了模块拆分,一个project下,创建了很多的module&#xff0c…

golang grpc和protobuf的版本降级问题(version4 -> version3)

最后更新于2024年3月28日 10:57:52 简中没查到类似的文章。一点小事闹麻了,搞了一天,特意发出来造福大家。 所谓的版本就是下面这个东西proto.ProtoPackageIsVersion4或者proto.ProtoPackageIsVersion3: 目的 为了适配旧代码&#xff0c…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点: 1.进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)…

百度智能小程序源码系统简洁版 SEO关键词排名推广优化 带完整的安装代码包以及搭建教程

移动互联网的快速发展,小程序以其轻量级、无需下载、即用即走的特点,迅速成为了各大平台争相推广的重要产品形态。百度智能小程序作为百度生态下的重要一环,凭借其强大的流量入口和丰富的功能组件,为开发者提供了广阔的创作空间。…

fastadmin学习05-开启debug以及配置

FastAdmin 框架提供了对 .env 环境变量配置的支持,并附带一个默认示例文件 .env.sample。在安装后,框架并不会自动启用 env 环境变量,需要手动将 .env.sample 复制为 .env 并进行配置。 如果不开启.env会读取database.php中的配置 下面测试…

基于单片机智能可控电源系统设计

**单片机设计介绍,基于单片机智能可控电源系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能可控电源系统设计的主要目标是实现电源的智能控制、监测和保护功能,以满足不同应用场景下…

计算机网络:物理层 - 信道极限容量

计算机网络:物理层 - 信道极限容量 实际信道中的数字信号奈式准则香农公式练习 实际信道中的数字信号 信号在传输过程中会受到各种因素的影响,如图所示: 这是一个数字信号,当它通过实际的信道后,波形会产生失真&#…