FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的 MIPI 编解码方案
  • 3、本 MIPI CSI-RX IP 介绍
  • 4、个人 FPGA高端图像处理开发板简介
  • 5、详细设计方案
    • 设计原理框图
    • IMX327 及其配置
    • MIPI CSI RX
    • 图像 ISP 处理
    • 图像缓存
    • UVC 时序
    • USB3.0输出架构
  • 6、vivado工程详解
    • FPGA逻辑设计
  • 7、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 8、上板调试验证
    • 准备工作
    • 图像输出演示
  • 9、福利:工程代码的获取

FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+工程源码+技术支持

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、YCrCb444转YCrCb422等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出YCrCb422格式的视频;然后再使用本博提供的图像缓存架构将视频缓存到板载的DDR3中;再使用本博提供的UVC视频时序将视频从DDR3中读出;再将UVC视频送入板载的CYUSB3014-BZXI芯片,通过板载的USB3.0接口发送出去;CYUSB3014-BZXI芯片在Win10下可以免驱使用,用USB3.0数据线连接FPGA开发板和笔记本电脑,打开电脑自带的摄像头软件,选择本开发板的摄像头,即可显示IMX327 MIPI摄像头解码采集的视频了;

免责声明

本工程源码只是本博提供的FPGA高端图像处理开发板的测试例程使用,本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括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 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、详细设计方案

设计原理框图

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

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、YCrCb444转YCrCb422等一系列操作;经过ISP处理后的图像颜色饱满、画质清晰,输出YCrCb422格式的视频;图像 ISP 处理在工程 Block Design中如图:
在这里插入图片描述
这些IP均为Xilinx的免费IP,有的需要配置才能使用,在MicroBlaze软核运行的C语言代码已经提供了配置程序;

图像缓存

本设计使用本博提供的图像缓存读写IP实现视频缓存,该IP由纯verilog代码实现,用户接口为AXI4-Stream,可替换Xilinx官方的VDMA,本博已将他封装为自定义IP;图像缓存模块IP在工程 Block Design中如图:
在这里插入图片描述
需要注意的是,图像缓存架构需调用Xilinx的 MIG IP才能实现与DDR3的物理层交互;

UVC 时序

UVC 时序用于控制视频读出DDR3的时序,然后将读出的视频送入 USB3.0输出架构,UVC 时序很简单,与常用的VGA时序差不多,由纯verilog代码实现,将模块顶层代码拖入 Block Design中,如图:
在这里插入图片描述

USB3.0输出架构

UVC视频送入板载的CYUSB3014-BZXI芯片,通过板载的USB3.0接口发送出去;CYUSB3014-BZXI芯片在Win10下可以免驱使用,用USB3.0数据线连接FPGA开发板和笔记本电脑,打开电脑自带的摄像头软件,选择本开发板的摄像头,即可显示IMX327 MIPI摄像头解码采集的视频了;打开笔记本电脑的设备管理器,即可看到本开发板的USB3.0设备,如下:
在这里插入图片描述
打开电脑自带的摄像头软件后输出如下:
在这里插入图片描述

6、vivado工程详解

FPGA逻辑设计

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:IMX327摄像头–MIPI–4 Lane–RAW12-1920x1080;
输出:USB3.0,分辨率1920x1080;
应用:FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出;
工程Block Design如下:
在这里插入图片描述
由于调用IP较多,分散开来很不好看,也不利于阅读,本博将一些IP进行了再封装,如下图中红框标记部分,该封装只是形式上的好看而已,没有特殊功能,可以通过如下方法将其展开,查看里面的详细组成和结构,如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程移植说明

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

8、上板调试验证

准备工作

需要准备的器材如下:
FPHA开发板;
IMX327 摄像头;
笔记本电脑;

图像输出演示

图像输出演示如下:

图像输出演示

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

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

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

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

相关文章

flask+pyinstaller实现mock接口,并打包到exe运行使用postman验证

flask代码 from flask import Flask, request, jsonifyapp Flask(__name__)app.route("/login", methods[POST]) def login():username request.json.get("username").strip() # 用户名password request.json.get("password").strip() # 密…

SQL--DDL

全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准。 1 SQL通用语法 在学习具体的SQL语句之前,先来了解一下SQL语言的同于语法。 1). SQL语句可以单行或多行书写&#xff0…

解决IntellIJ Idea内存不足

突然有一天我在IDEA打开两个项目时,发生了报错,说我内存不足,我这电脑内存16G怎么会内存不足。下面是我的解决方案。 IntelliJ IDEA 报告内存不足的原因通常与以下几个因素有关: 项目规模较大:如果您正在开发的项目非…

远程手机搭建Termux环境,并通过ssh连接Termux

背景 Termux只能通过鼠标点击,无法使用电脑键盘,输入速度很慢,你想通过ssh 连接Termux,获得友好体验搞了个云手机,想像普通手机那样充当服务器想把自己的手机公开到局域网中供同事调试想把自己的模拟器公开到局域网中…

套路化编程 C# winform 自适应缩放布局

本例程实现基本的自适应缩放布局。 在本例程中你将会学习到如何通过鼠标改变界面比例(SplitContainer)、如何使用流布局(FlowLayoutPanel)排列控件,当然首先需要了解如何设置控件随窗口缩放。 目录 创建项目 ​编辑…

【stm32】hal库学习笔记-ADC模数转换(超详细!)

【stm32】hal库学习笔记-ADC模数转换(超详细!) 本篇章介绍了ADC实现电压检测的三种方式 ADC原理及选型 ADC将连续的模拟电压信号转换为二进制的数字信号 选型参数 速度(采样频率) 功耗 精度 转换原理 ADC hal库驱…

Linux进程信号(2)--信号的保存

目录 1.阻塞信号 1.1 信号其他相关常见概念 1.实际执行信号的处理动作称为信号递达(Delivery) 2.信号从产生到递达之间的状态,称为信号未决(Pending)。 3.进程可以选择阻塞 (Block )某个信号。 1.2信号在内核中的表示 sigset_t 信号集操作函数 使用sigprocm…

安全基础~通用漏洞4

文章目录 知识补充XSS跨站脚本**原理****攻击类型**XSS-后台植入Cookie&表单劫持XSS-Flash钓鱼配合MSF捆绑上线ctfshow XSS靶场练习 知识补充 SQL注入小迪讲解 文件上传小迪讲解 文件上传中间件解析 XSS跨站脚本 xss平台: https://xss.pt/ 原理 恶意攻击者…

802.11n 802.11ac (WiFi 4/5 )的核心要点

802.11n 802.11ac (WiFi 4/5 )是什么? WiFi 4: Ieee 802.11n Enhancements for High Throughput (HT) WiFi 5: Ieee 802.11ac Enhancements for Very High Throughput (VHT&#x…

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式:单机模式、伪集群模式和集群模式。 单机模式:Hadoop 仅作为库存在,可以在单计算机上执行 MapReduce 任务,仅用于开发者搭建学习和试验环境。 伪集群模式:此模式 Hadoop 将以守护进程的…

MacOS Mojavev10.14.6

MacOS Mojave v10.14.6系统安装包是一款专为Mac用户设计的操作系统软件包。Mojave是苹果公司为Mac设备开发的一个操作系统版本,它提供了许多新功能和改进,旨在提高Mac用户的使用体验和工作效率。 安装MacOS Mojave v10.14.6系统后,用户可以享…

蓝桥杯Web应用开发-display属性

display 属性 专栏持续更新中 display 属性可以用来设置元素在页面上的排列方式,也可用来隐藏元素。 display 属性值的说明如下表所示。 属性值说明block元素以块级方式展示。inline元素以内联方式展示。inline-block元素以内联块的方式展示。none隐藏元素。 b…

微信小程序之本地生活案例的实现

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

算法学习——华为机考题库8(HJ46 - HJ55)

算法学习——华为机考题库8(HJ46 - HJ50) HJ46 截取字符串 描述 输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出 数据范围: 字符串长度满足 1≤n≤1000 , 1≤k≤n 输入描述: 1.输入待截取的…

代码随想录算法训练营Day24 | 回溯理论基础、77.组合

回溯理论基础 回溯和递归是相辅相成的,只要有递归就有回溯(执行完一次递归就自动回溯到上一层) 回溯的效率 回溯不是一个高效的算法,而是一个纯暴力的过程 有些问题没有更好的解法,只能使用暴力搜索,这时…

ReactNative实现的横向滑动条

OK,我们先看下效果图 注意使用到了两个库 1.react-native-linear-gradient 2.react-native-gesture-handler ok,我们看下面的代码 import {Image, TouchableWithoutFeedback, StyleSheet, View} from react-native; import LinearGradient from reac…

Linux---信号

前言 到饭点了,我点了一份外卖,然后又开了一把网游,这个时候,我在打游戏的过程中,我始终记得外卖小哥会随时给我打电话,通知我我去取外卖,这个时候游戏还没有结束。我在打游戏的过程中需要把外…

考研中常见的算法-逆置

元素逆置 概述:其实就是将 第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,依次到中间位置。用途:可用于数组的移动,字符串反转,链表反转操作,栈和队列反转等操作。 逆置图解 …

vulhub中Apache APISIX 默认密钥漏洞复现(CVE-2020-13945)

Apache APISIX是一个高性能API网关。在用户未指定管理员Token或使用了默认配置文件的情况下,Apache APISIX将使用默认的管理员Token edd1c9f034335f136f87ad84b625c8f1,攻击者利用这个Token可以访问到管理员接口,进而通过script参数来插入任意…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Menu组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间…