国产安路FPGA实现MIPI视频解码转HDMI输出,基于SC500摄像头,提供TD工程源码和技术支持

目录

国产安路FPGA实现MIPI视频解码转HDMI输出,基于SC500摄像头,提供TD工程源码和技术支持

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部分;

工程概述

本文使用国产安路的PH1系列FPGA做MIPI视频解码系统;视频输入源为SC500摄像头,2 Lane模式,FPGA首先使用纯verilog实现的i2c模块对摄像头进行i2c初始化配置,配置为RAW10的分辨率为1920x1080@30Hz的2 Lane MIPI视频输出;然后MIPI视频送入安路FPGA自带的MIPI-DPHY硬核IP,解出HS和LP电路;然后HS电路视频信号送入纯verilog代码实现的MIPI-CSI2-RX模块,实现MIPI协议层解码;然后解码视频送入纯verilog代码实现的RAW10转RAW8模块输出RAW8视频,此时一个像素时钟下输出4个RAW8格式的像素数据;然后RAW8视频送入本博主常用的FDMA图像缓存架构实现视频3帧缓存功能,本设计使用DDR3作为缓存介质;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RAW8视频;然后RAW8视频送入纯verilog代码实现的RAW8转RGB888输出RGB888视频;然后RGB视频送入纯verilog代码实现的自动白平衡模块实现成像质量;然后RGB视频送入纯verilog代码实现的图像剪裁模块去掉边沿的黑色像素;然后视频送入安路官方提供的RGB转HDMI IP实现RGB转HDMI功能,输出分辨率为1920x1080@60Hz;最后视频通过板载HDMI输出接口送显示器显示即可;针对市场主流需求,本设计提供1套TD工程源码,具体如下:

现对上述1套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为国产安路--PH1A90SBG484-3;视频输入源为SC500摄像头,2 Lane模式,FPGA首先使用纯verilog实现的i2c模块对摄像头进行i2c初始化配置,配置为RAW10的分辨率为1920x1080@30Hz的2 Lane MIPI视频输出;然后MIPI视频送入安路FPGA自带的MIPI-DPHY硬核IP,解出HS和LP电路;然后HS电路视频信号送入纯verilog代码实现的MIPI-CSI2-RX模块,实现MIPI协议层解码;然后解码视频送入纯verilog代码实现的RAW10转RAW8模块输出RAW8视频,此时一个像素时钟下输出4个RAW8格式的像素数据;然后RAW8视频送入本博主常用的FDMA图像缓存架构实现视频3帧缓存功能,本设计使用DDR3作为缓存介质;然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RAW8视频;然后RAW8视频送入纯verilog代码实现的RAW8转RGB888输出RGB888视频;然后RGB888视频送入纯verilog代码实现的图像剪裁模块去掉边沿的黑色像素;然后视频送入安路官方提供的RGB转HDMI IP实现RGB转HDMI功能,输出分辨率为1920x1080@60Hz;最后视频通过板载HDMI输出接口送显示器显示即可;该工程适用于国产安路FPGA实现MIPI视频解码应用;

本博客描述了国产安路FPGA实现MIPI视频解码的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

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

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

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

3、设计思路框架

工程设计原理框图

工程设计原理框图如下:

SC500摄像头配置

视频输入源为SC500摄像头,2 Lane模式,FPGA首先使用纯verilog实现的i2c模块对摄像头进行i2c初始化配置,配置为RAW10的分辨率为1920x1080@30Hz的2 Lane MIPI视频输出;SC500摄像头配置模块如下:

需要说明的是,SC500摄像头配置模块包含了AE控制,AE控制的是指就是写摄像头内部寄存器已达到AE目的;此外,我们还提供SC500的参考原理图,主要部分截图如下:

MIPI-DPHY 硬核 IP

然后MIPI视频送入安路FPGA自带的MIPI-DPHY硬核IP,解出HS和LP电路;我们在安路原有MIPI-DPHY 硬核 IP基础上添加了一些代码,目的是使IP使用更加简单,安路的MIPI-DPHY硬核IP详情可参考《IPUG016_MIPIIO用户手册》,该手册我已放到资料盘中,请用户自行打开阅读;MIPI-DPHY 硬核 IP例化如下:

MIPI-CSI2-RX

然后HS电路视频信号送入纯verilog代码实现的MIPI-CSI2-RX模块,实现MIPI协议层解码;为了简化读者对本文的理解,我们将MIPI-CSI2-RX解码后的图像颜色空间转换模块也纳入MIPI-CSI2-RX不分来讲解,所以MIPI-CSI2-RX处理流程如下:

1、HS电路视频信号送入纯verilog代码实现的MIPI-CSI2-RX模块,实现MIPI协议层解码;

2、解码视频送入纯verilog代码实现的RAW10转RAW8模块输出RAW8视频,此时一个像素时钟下输出4个RAW8格式的像素数据;

MIPI-CSI2-RX模块如下:

FDMA图像缓存

FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了安路官方的MIG IP核作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:

FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR3中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简单地像使用FIFO那样操作AXI总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为3帧缓存;图像缓存模块代码架构如下:

相机AE控制

我们采用手动AE控制方式实现相机AE,具体就是采用按键方式控制,AE的具体控制层面体现在SC500摄像头配置模块,里面包含了AE控制,AE控制的是指就是写摄像头内部寄存器已达到AE目的;相机AE控制例化如下:

Bayer转RGB888

然后Native视频时序控制图像缓存架构从DDR3中读取视频,并做Native视频时序同步,输出RAW8视频;然后RAW8视频送入纯verilog代码实现的RAW8转RGB888输出RGB888视频;Bayer转RGB888需要用到3x3的算子窗口,所以需要缓存行视频,然后使用双线性插值算法实现转RGB的像素填充,Bayer转RGB888模块代码架构如下:

自动白平衡

然后RGB视频送入纯verilog代码实现的自动白平衡模块实现成像质量;自动白平衡采用的是灰度世界算法,但是在此基础上对其各个点进行了限制,并且对于绿色,并没有去给其增益,而是维持其本来输入的数据值以输出;自动白平衡模块代码架构如下:

图像剪裁

然后RGB888视频送入纯verilog代码实现的图像剪裁模块去掉边沿的黑色像素;图像剪裁的目的是去掉前面Bayer转RGB888过程中在图像边沿产生的寄生黑色填充像素,是必要的操作,否则影响成像效果;图像剪裁模块代码架构如下:

HDMI视频输出架构

缓存图像从DDR3读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;代码例化如下:

工程源码架构

工程源码架构如下:

本博主发布的工程均已编译完成,且时序收敛,无时序违约,如下:

4、TD工程源码1详解:SC500输入版本

开发板FPGA型号:国产安路--PH1A90SBG484-3;

开发环境:TangDynasty 6.0.2;

输入:SC500摄像头;

摄像头详情:MIPI-2 Lane,RAW10颜色空间,分辨率1920x1080@30Hz;

输出:HDMI,RTL编码,分辨率1920x1080@60Hz;

MIPI-DPHY方案:高云安路硬核IP方案;

MIPI-CSI2-RX方案:纯verilog代码方案;

图像缓存方案:FDMA图像缓存,3帧缓存;

工程源码架构请参考前面第3章节中的《工程源码架构》小节;

工程作用:此工程目的是让读者掌握国产安路FPGA实现MIPI视频解码的设计能力,以便能够移植和设计自己的项目;

工程的资源消耗和功耗如下:

5、上板调试验证并演示

准备工作

你需要有以下装备才能移植并测试该工程代码:

1:FPGA开发板;

2:SC500摄像头;

3:HDMI传输线;

4:HDMI显示,要求分辨率支持1920x1080;

开发板连接如下:

国产安路FPGA实现MIPI视频解码转HDMI输出演示

国产安路FPGA实现MIPI视频解码转HDMI输出演示如下:

CS500-MIPI

6、工程源码

代码太大,无法邮箱发送,以某度网盘链接方式发送,

资料获取方式:私,或者文章末尾的V名片。

网盘资料如下:

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

相关推荐
微帧Visionular14 小时前
AI视频单帧清晰,播放时却闪烁,原因是什么?
人工智能·深度学习·音视频
szxinmai主板定制专家15 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
辰辰观影16 小时前
Windows网盘视频播放器推荐:无广告4K HDR怎么选
音视频
2601_9668274518 小时前
电视端云盘在线播放怎么选?支持4K HDR的应用推荐
音视频
开开心心就好18 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
AI视频工具指南1 天前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
辰辰观影1 天前
无广告播放器推荐来啦
音视频
TrueDei1 天前
GStreamer 使用 valve 分别控制音视频流的暂停与恢复
音视频
一条破秋裤1 天前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频
2601_966827451 天前
视频里的特效字幕怎么翻译?外挂字幕与AI字幕一键处理教程
音视频