《DFZU2EG_4EV MPSoc之FPGA开发指南》第三十三章 OV5640摄像头HDMI显示实验​

时间:2022-12-27 09:58:35

OV5640摄像头HDMI显示实验​

在OV5640摄像头RGB-LCD显示实验中,成功LCD屏实时显示出了摄像头采集的图像。本章将使用FPGA开发板实现对OV5640的数字图像采集并在HDMI显示器上实时显示。

本章包括以下几个部分:

  1. 简介
  2. 实验任务
  3. 硬件设计
  4. 程序设计
  5. 下载验证


简介

“OV5640摄像头RGB-LCD显示实验”中对OV5640的视频传输时序、SCCB协议以及寄存器的配置信息等内容作了详细的介绍,如果大家对这部分内容不是很熟悉的话,请参考“OV5640摄像头RGB-LCD显示实验OV5640简介部分。

实验任务

本节实验任务是使用DFZU2EG/4EV MPSoC开发板及OV5640摄像头实现图像采集并通过HDMI接口驱动HDMI显示器,并实时显示出图像。

硬件设计

摄像头扩展接口原理图及OV5640模块说明与“OV5640摄像头RGB-LCD显示实验完全相同,请参考“OV5640摄像头RGB-LCD显示实验硬件设计部分。HDMI接口部分的硬件设计参考“HDMI彩条显示实验”硬件设计部分

由于OV5640、HDMI接口DDR4引脚数目且在前面相应章节中已经给出们的管脚列表,这里不再列出管脚分配。

程序设计

根据实验任务,首先我们设计如33.4.1所示的系统框图,本章实验的系统框架延续了“OV5640摄像头RGB-LCD显示实验”的整体架构。本次实验包括以下模块: DDR4控制器模块、摄像头驱动顶层模块、时钟模块、视频显示模块和HDMI顶层模块。其中DDR4控制器顶层模块和摄像头驱动模块完全延用了“OV5640摄像头RGB-LCD显示实验”中的模块没有做任何修改,而MMCM时钟IP核模块、HDMI驱动模块和视频显示模块也是完全延用了“HDMI彩条显示实验”中的模块没有做任何修改,所以本节实验完全可以看成是将“OV5640摄像头RGB-LCD显示实验”中的LCD显示模块替换成了“HDMI彩条显示实验”中的HDMI显示模块。因此本节实验就不再对程序代码做讲解了,大家有不懂的地方可以去看前面的“OV5640摄像头RGB-LCD显示实验”和“HDMI彩条显示实验”这两个例程。下面我们来分析一下本节实验软件工程的整体架构。

OV5640摄像头HDMI显示系统框图如下图所示:

《DFZU2EG_4EV MPSoc之FPGA开发指南》第三十三章  OV5640摄像头HDMI显示实验​


33.4.1顶层系统框图

我们先来分析一下上图中的时钟网络,首先板载时钟发生器芯片提供一对差分时钟(系统时钟),直接进入MIG IP核,一方面作为MIG IP核的驱动时钟另一方面由MIG IP核内部派生出一路50MHz的时钟进入ov5640顶层模块和MMCM时钟IP核模块。而MMCM时钟IP核模块又分频出三路时钟(像素时钟、2.5倍像素时钟、5倍像素时钟,频率大小由HDMI显示分辨率决定)进入HDMI驱动模块,其中像素时钟还进入了视频显示模块作为视频显示模块的驱动时钟。分析完了时钟网络之后我们再来看看数据流,先是ov5640顶层模块配置ov5640摄像头,配置成功后采集ov5640摄像头传入的数据,并将数据传输到DDR4顶层模块;DDR4顶层模块通过MIG IP核驱动外部DDR4芯片,将摄像头数据写入DDR4芯片,当接收到视频显示模块的读数据请求后就会把外部DDR4芯片中缓存的数据再读回来传递给视频显示模块;视频显示模块会将数据和行场同步信息一起发给HDMI驱动模块,HDMI驱动模块会将像素数据、行场同步信息以及像素时钟分别进行TMDS编码(不了解TMDS编码的同学可以看前面的HDMI彩条显示实验),最后驱动HDMI显示器,将摄像头采集到的图像显示在HDMI显示屏上。

顶层模块的原理图如下图所示:

《DFZU2EG_4EV MPSoc之FPGA开发指南》第三十三章  OV5640摄像头HDMI显示实验​


33.4.2顶层模块原理图

FPGA顶层模块(ov5640_hdmi例化以下五个模块:时钟模块clk_wiz_0)、OV5640驱动模块ov5640_dri)、DDR控制模块(ddr4_top)、HDMI驱动模块(dvi_transmitter_top)以及视频显示驱动模块(video_driver

时钟模块clk_wiz_0):时钟模块通过调用MMCM IP核实现,共输出3时钟频率分别为75Mhz时钟(HDMI像素时钟)、187.5Mhz(HDMI像素时钟的2.5倍频)时钟和375Mhz时钟(HDMI像素时钟的5倍频)。其中75Mhz时钟就是根据HDMI显示规范来设定的标准像素驱动时钟,因为本节实验采用的是720P的分辨率所以像素时钟选择75Mhz(实际规范是74.5Mhz,这里比实际规范要求的时钟频率稍微大一点,不影响功能)。而187.5Mhz时钟和375Mhz时钟分别是像素时钟的2.5倍和5倍,他们的作用是一个用于10bit进4bit出的ram,另一个是用于10bit并行数据转1bit串行数据,详细讲解请参考前面的HDMI彩条显示实验例程。

OV5640驱动模块ov5640_dri):OV5640驱动模块负责驱动OV5640 SCCB接口总线,将像素时钟驱动下的传感器输出的同步信号行同步信号以及8位数据转换DDR读写控制模块的写使能信号和16位写数据信号完成对OV5640传感器图像的采集。

DDR控制模块(ddr4_top):DDR读写控制器模块负责驱动DDR片外存储器,缓存图像传感器输出的图像数据。模块将MIG IP核复杂的读写操作封装类似FIFO的用户接口,非常方便用户的使用

有关DDR控制模块的详细介绍请大家参考“OV5640摄像头RGB-LCD显示实验”章节

视频显示驱动模块(video_driver):视频显示驱动模块主要作用就是生成HDMI的行场同步时序和数据读取请求,并将摄像头的rgb565数据转换成rgb888数据。

HDMI驱动模块(dvi_transmitter_top):HDMI驱动模块的作用就是将行场同步信息、像素数据以及像素时钟进行TMDS编码,再将并行数据转换成串行数据输出给外界的HDMI显示屏,从而实现将摄像头采集的图像数据在HDMI显示屏上显示的功能。

有关HDMI视频显示驱动模块和HDMI驱动转换模块的详细介绍请大家参考“HDMI彩条显示实验”章节

下载验证

编译完工程之后我们就可以开始下载程序。将双目OV5640摄像头(本节实验只使用双目摄像头模块的其中一个摄像头)模块插在DFZU2EG/4EV MPSoC开发板J19扩展口上,并将HDMI电缆一端连接到开发板上的HDMI插座、另一端连接到显示器。将下载器一端连电脑,另一端与开发板上的JTAG端口连接,然后连接电源线后拨动开关按键给开发板上电。硬件实物连接如下图所示:

《DFZU2EG_4EV MPSoc之FPGA开发指南》第三十三章  OV5640摄像头HDMI显示实验​


33.5.1DFZU2EG/4EV MPSoC开发板连接HDMI显示器

下来我们下载程序,验证OV5640 HDMI实时显示功能。下载完成后观察HDMI显示器显示的图案如下图示,说明OV5640 HDMI实时显示程序下载验证成功

《DFZU2EG_4EV MPSoc之FPGA开发指南》第三十三章  OV5640摄像头HDMI显示实验​


33.5.2实时显示图像