当前位置: 首页 > news >正文

国产高云FPGA实现MIPI视频解码+图像缩放,基于OV5647摄像头,提供Gowin工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 国产高云FPGA基础教程
    • 国产高云FPGA相关方案推荐
    • 我这里已有的 MIPI 编解码方案
    • 我这里已有的FPGA图像缩放方案
  • 3、设计思路框架
    • 工程设计原理框图
    • OV5647摄像头及其配置
    • MIPI-DPHY
    • MIPI-CSI2-RX
    • 视频格式转换
    • Bayer转RGB
    • 图像缩放模块详解
    • 图像缩放模块使用(重点阅读)
    • 图像缩放模块仿真
    • Video Frame Buffer 图像缓存
    • DDR3 控制器
    • HDMI输出架构
    • 工程源码架构
  • 4、Gowin工程源码1详解:OV5647 MIPI缩放转HDMI
  • 5、上板调试验证并演示
    • 准备工作
    • 国产高云FPGA实现MIPI视频缩放转HDMI输出演示
  • 6、工程源码

国产高云FPGA实现MIPI视频解码+图像缩放,基于OV5647摄像头,提供Gowin工程源码和技术支持

1、前言

国产FPGA现状:

“苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于先进制程半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位;然而才短短7年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。
目前对于国产FPGA优势有以下几点:
1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;
2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具;
3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册;
4:采购方便,产业链自主可控,采购便捷;

FPGA实现MIPI视频解码现状:

MIPI视频解码分为D-PHY和CSI-2两大部分,其中D-PHY属于物理层,依托硬件,灵活性不高,方案不多;CSI-2属于协议层,依托代码,灵活性很高,方案很多;所以只要实现了D-PHY,MIPI-CSI解码其实就很灵活了;第一种D-PHY方案是使用FPGA内部资源,目前FPGA内部继承了硬核MIPI D-PHY的可选方案还是很丰富,国产的高云、安路、易灵思等都有,Xilinx则只有UltraScale+高端系列FPGA才有,该方案优点是设计简单,缺点是硬件成本较高;第二种是使用专用的D-PHY芯片,比如MC20901,该方案优点是设计简单,缺点是硬件成本较高;第三种是使用权电阻网络实现D-PHY功能,该方案是Xilinx官方推荐的一种简单、低速的D-PHY方案,通常用于测试,该方案优点是电路简单,硬件成本低,缺点是性能适中,无法用于高端场景;然后D-PHY信号进入FPGA内部的MIPI CSI-2 RX IP实现CSI功能,即实现MIPI视频解码,另外,也可以使用自己写的CSI模块实现CSI功能;本设计使用国产高云系列FPGA,所以无需考虑D-PHY部分;

工程概述

本设计使用国产高云GW5A-LV25UG324ES型号的FPGA做MIPI视频解码转HDMI输出系统;输入视频源为OV5647摄像头,FPGA首先使用纯verilog代码实现的OV5647配置模块对OV5647摄像头做i2c配置,将其配置为MIPI 2 Lane的、RAW8颜色格式的、分辨率为1920x1080@30Hz的状态输出;然后MIPI视频送入高云官方提供的MIPI-DPHY硬核IP实现DPHY功能,分离出LP和HS电路以及控制信号;然后DPHY视频送入高云官方提供的MIPI-CSI2-RX硬核IP实现MIPI视频协议层解码功能,解出有效视频数据和控制数据;然后解码视频送入高云官方提供的MIPI-Byte-To-Pixel-Converter硬核IP实现视频格式转换功能,将解码视频数据包转换成标准像素格式数据,并从同步短包中恢复视频同步信号;然后视频送入纯verilog实现的Bayer转RGB模块实现颜色空间转换,将RAW8图像转换为RGB888图像;然后视频送入纯verilog代码实现的图像缩放模块,将原视频从1920x1080缩放到1280x720,您可修改缩放参数轻松缩放到其他分辨率,工程只是举例,修改方法博客有说明;然后视频送入高云官方提供的Video-Frame-Buffer硬核IP实现视频缓存功能,本设计使用3帧缓存;然后使用纯verilog实现Native视频时序生成模块控制视频从DDR3中读出,并做输出视频同步;然后同步视频送入高云官方提供的DVI-TX硬核IP实现视频接口转换功能,将RGB888视频流编码为HDMI差分视频流输出;最后使用HDMI显示器显示即可;针对市场主流需求,本设计提供1套Gowin工程源码,具体如下:
在这里插入图片描述
现对上述1套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为高云GW5A-LV25UG324ES;输入视频源为OV5647摄像头,FPGA首先使用纯verilog代码是实现的OV5647配置模块对OV5647摄像头做i2c配置,将其配置为MIPI 2 Lane的、RAW8颜色格式的、分辨率为1920x1080@30Hz的状态输出;然后MIPI视频送入高云官方提供的MIPI-DPHY硬核IP实现DPHY功能,分离出LP和HS电路以及控制信号;然后DPHY视频送入高云官方提供的MIPI-CSI2-RX硬核IP实现MIPI视频协议层解码功能,解出有效视频数据和控制数据;然后解码视频送入高云官方提供的MIPI-Byte-To-Pixel-Converter硬核IP实现视频格式转换功能,将解码视频数据包转换成标准像素格式数据,并从同步短包中恢复视频同步信号;然后视频送入纯verilog实现的Bayer转RGB模块实现颜色空间转换,将RAW8图像转换为RGB888图像;然后视频送入纯verilog代码实现的图像缩放模块,将原视频从1920x1080缩放到1280x720,您可修改缩放参数轻松缩放到其他分辨率,工程只是举例,修改方法博客有说明;然后视频送入高云官方提供的Video-Frame-Buffer硬核IP实现视频缓存功能,本设计使用3帧缓存;然后使用纯verilog实现Native视频时序生成模块控制视频从DDR3中读出,并做输出视频同步;然后同步视频送入高云官方提供的DVI-TX硬核IP实现视频接口转换功能,将RGB888视频流编码为HDMI差分视频流输出,输出分辨率为1280x720@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;最后使用HDMI显示器显示即可;本工程适用于国产高云FPGA实现MIPI视频解码转HDMI应用;

本文详细描述了国产高云FPGA图像视频采集系统的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

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

国产高云FPGA基础教程

高云FPGA开发软件Gowin的下载、安装、Licence共享,工程搭建、代码添加、综合、编译、下载、各种IP的调用、配置、使用等基础操作,是做高云FPGA开发的基本功,当然,如果你已是有经验的工程师,则可以省略这一步,为此,我专门开设了专栏,详细讲述国产高云FPGA基础教程,甚至可以说是保姆级的教程,专栏地址如下:
点击直接前往

国产高云FPGA相关方案推荐

鉴于国产高云FPGA的优异表现和市场需求,我专门开设了一个人国产高云FPGA专栏,里面收录了基于国产高云FPGA的图像处理、UDP网络通信、GT高速接口、PCIE等博客,感兴趣的可以去看看,博客地址:点击直接前往

我这里已有的 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有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

我这里已有的FPGA图像缩放方案

我的主页目前有FPGA图像缩放专栏,改专栏收录了我目前手里已有的FPGA图像缩放方案,从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放;从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接;从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等;以下是专栏地址:
点击直接前往

3、设计思路框架

工程设计原理框图

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

OV5647摄像头及其配置

视频输入源为OV5647 MIPI摄像头,FPGA首先使用纯verilog代码是实现的OV5647配置模块对OV5647摄像头做i2c配置,将其配置为MIPI 2 Lane的、RAW8颜色格式的、分辨率为1920x1080@30Hz的状态输出;OV5647摄像头如下:
在这里插入图片描述
OV5647配置模块代码如下:
在这里插入图片描述

MIPI-DPHY

使用高云官方提供的MIPI-DPHY硬核IP实现DPHY功能,分离出LP和HS电路以及控制信号;MIPI-DPHY硬核IP配置如下:
在这里插入图片描述
工程中IP核例化如下:
在这里插入图片描述

MIPI-CSI2-RX

DPHY视频送入高云官方提供的MIPI-CSI2-RX硬核IP实现MIPI视频协议层解码功能,解出有效视频数据和控制数据;MIPI-CSI2-RX硬核IP配置如下:
在这里插入图片描述
工程中IP核例化如下:
在这里插入图片描述

视频格式转换

然后解码视频送入高云官方提供的MIPI-Byte-To-Pixel-Converter硬核IP实现视频格式转换功能,将解码视频数据包转换成标准像素格式数据,并从同步短包中恢复视频同步信号;MIPI-Byte-To-Pixel-Converter硬核IP配置如下:
在这里插入图片描述
工程中IP核例化如下:
在这里插入图片描述

Bayer转RGB

然后视频送入纯verilog实现的Bayer转RGB模块实现颜色空间转换,将RAW8图像转换为RGB888图像;代码如下:
在这里插入图片描述

图像缩放模块详解

图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
在这里插入图片描述
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
依据上图,图像缩放模块内部核心是例化了4个双口RAM,作用是缓存4行图像,以得到4个临近的像素,以此为基础做线性插值;如果是做图像放大操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中插入更多的像素点来扩大分辨率;如果是做图像缩小操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中删除更多的像素点来缩小分辨率;此外,前面描述的工作是实时的、整幅图像全部扫描式的进行,所以需要对RAM的读写操作进行精准控制;

图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
在这里插入图片描述
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:
在这里插入图片描述
FIFO_TYPE选择原则如下:
1:总体原则,选择"gaoyun"好处大于选择"verilog";
2:当你的FPGA逻辑资源不足时,请选"gaoyun";
3:当你图像缩放的视频分辨率较大时,请选"gaoyun";
4:当你的FPGA没有FIFO IP或者FIFO IP快用完了,请选"verilog";
5:当你向自学一下异步FIFO时,,请选"verilog";
6:不同FPGA型号对应的工程FIFO_TYPE参数不一样,但选择原则一样,具体参考代码;

2种插值算法的整合与选择
本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:

input  wire i_scaler_type //0-->bilinear;1-->neighbor

通过输入i_scaler_type 的值即可选择;

输入0选择双线性插值算法;
输入1选择邻域插值算法;

代码里的配置如下:
在这里插入图片描述

图像缩放模块使用(重点阅读)

图像缩放模块使用非常简单,顶层代码里设置了四个参数,如下:
在这里插入图片描述
上图是将输入视频分辨率从1280x720缩放为1920x1080;
如果你想将输入视频分辨率从1280x720缩放为640x480;
则只需修改为如下:
在这里插入图片描述
再比如你想将输入视频分辨率从1280x720缩放为960x540;
则只需修改为如下:
在这里插入图片描述

在本博主这里,想要实现图像缩放,操作就是这么无脑简单,就该两个参数就能搞定貌似高大上的双线性插值图像缩放,这种设计、这种操作、这种工程源码,你还喜欢吗?

图像缩放模块仿真

图像缩放模块需要vivado和matlab联合仿真;
需要注意的是,仿真的目的是为了验证,这一步我已经替你们做完了,所以读者不再需要单独仿真,如果读者是在需要自己仿真玩玩儿,需要自己写仿真代码;vivado和matlab联合仿真详细步骤如下:
第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
邻域插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
双线性插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述
邻域插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述

Video Frame Buffer 图像缓存

调用高云官方的Video Frame Buffer IP核将视频送到外接DDR3中做三帧缓存;该部分是图像采集显示系统的重点,如果是其他FPGA,则需要写一大堆代码才能实现,花费时间和精力很多,但高云FPGA通过集成硬核IP轻松实现了该功能,即Video Frame Buffer IP核;IP使用非常简单,配置如下:
在这里插入图片描述
工程中IP核例化如下:
在这里插入图片描述

DDR3 控制器

调用高云官方的DDR3 Memory Interface IP核实现图像数据到DDR3颗粒的搬运工作,类似于Xilinx的MIG;DDR3 Memory Interface IP配置如下:
在这里插入图片描述
工程中IP核例化如下:
在这里插入图片描述

HDMI输出架构

然后使用纯verilog实现Native视频时序生成模块控制视频从DDR3中读出,并做输出视频同步;然后同步视频送入高云官方提供的DVI-TX硬核IP实现视频接口转换功能,将RGB888视频流编码为HDMI差分视频流输出;最后使用HDMI显示器显示即可;DVI-TX硬核IP配置如下:
在这里插入图片描述
HDMI输出架构代码如下:
在这里插入图片描述

工程源码架构

工程源码架构如下:
在这里插入图片描述
我发布的工程源码均已编译通过,如下:
在这里插入图片描述

4、Gowin工程源码1详解:OV5647 MIPI缩放转HDMI

开发板FPGA型号:国产高云–GW5A-LV25UG324ES;
开发环境:Gowin-V1.9;
输入:OV5647摄像头;MIPI-2 Lane;RAW8色域;分辨率1920x1080@30Hz;
输出:HDMI,逻辑编码;1920x1080黑色背景下叠加显示缩放后的图像;
MIPI-DPHY方案:高云官方硬核IP方案;
MIPI-CSI2-RX方案:高云官方硬核IP方案;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到1280x720,其他分辨率缩放可自行修改;
图像缓存方案:高云官方硬核IP方案,3帧缓存;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握紫光同创FPGA实现MIPI视频解码转HDMI输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、上板调试验证并演示

准备工作

你需要有以下装备才能移植并测试该工程代码:
1:FPGA开发板;
2:OV5647摄像头;
3:HDMI传输线;
4:HDMI显示,要求分辨率支持1920x1080;
开发板连接如下:
在这里插入图片描述

国产高云FPGA实现MIPI视频缩放转HDMI输出演示

国产高云FPGA实现MIPI视频缩放转HDMI输出演示如下:

OV5647-缩放720P

6、工程源码

工程代码如下:
在这里插入图片描述

相关文章:

  • LVS + Keepalived + Nginx 高可用负载均衡系统实验
  • 学习黑客 tcpdump
  • 如何在UI设计中更好地平衡美学与功能性?
  • IP-guard发布新版本4.87.2241.0
  • css 里面写if else 条件判断
  • [Windows] 格式工厂 FormatFactory v5.20.便携版 ——多功能媒体文件转换工具
  • 禅道——安装PHP的ioncube扩展
  • wordpress上传图片时出现服务器无法处理图片
  • 高通usecase理解
  • 对接钉钉消息样例:DING消息、机器人
  • iOS 直播弹幕礼物功能详解
  • 多模态AI终极形态?GPT-5与Stable Diffusion 3的融合实验报告
  • 【49. 字母异位词分组】
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • C# 高效读取大文件
  • Spark on Yarn 高可用模式部署流程
  • 如何提高服务器的QPS来应对618活动的并发流量
  • 如何将带有LFS对象的git仓库推送到gitlab
  • 前端(小程序)学习笔记(CLASS 2):WXML模板语法与WXSS模板样式
  • C语言实现顺序存储结构
  • 世界四大广告公司/企业站seo价格
  • 沈阳做企业网站/网站查询ip
  • 专业的深圳网站建设公司哪家好/nba最新排名东西部
  • wap网站下载/怎样做网络推广
  • 优化网站建设公司/百度关键词规划师工具
  • 铜陵市建设局网站/上海排名seo公司