使用VHDL语言控制相机

将CMOS相机与ZYNQ-7000系列FPGA SoC连接,并将实时视频输入输出到VGA屏幕。

硬件

软件

概述

在这个项目中,我们将从头开始构建一个FPGA映像平台。 目的是将VGA分辨率CMOS相机与MiniZed Development板连接,并将获取的实时视频输入输出到VGA监视器。 完整的成像流程将在SoC的PL(可编程逻辑)部分中实现。

图略

上图显示了来自OV7670 CMOS摄像机的实时QVGA视频馈送,该视频流被传输到VGA屏幕。

图略

硬件设计

该项目的硬件包括一个OV7670摄像机,一个ZYNQ FPGA SoC微型开发板,一个VGA DAC和一个通用VGA监视器。

MiniZed包含一个Arduino连接器和2个PMOD连接器。 VGA PMOD将连接到两个PMOD,而OV7670摄像头将通过公对母飞线连接到Arduino连接器。 引脚将配置为以2.5V逻辑电平运行,以便兼容电接口。

相机

OV7670是Omnivison提供的VGA分辨率的CMOS并行摄像机。 摄像机可以在1.7V至3V的电压下工作。 摄像机接口由并行的8位总线,同步信号VSYNC和HSYNC,像素时钟,主时钟以及复位和掉电信号组成。

图略

帧捕获模块

图略

摄像机接口代码由两个主要模块组成。 输入的捕获图像和摄像机配置图像。 输入捕获代码负责将像素传输到帧缓冲区。 该模块对来自摄像机的像素进行解码。

每个像素打包成2个连续字节。输入捕捉模块将其转换为RGB444。这样做是为了节省空间,因为VGA接口使用RGB444接口。

该相机支持多种像素图像格式,但是在此应用程序中选择的一种是RGB565,这意味着红色,绿色和蓝色分别获得5、6和5个像素。

图略

摄像机通过SCCB(串行摄像机通信总线)进行配置。这主要与I2C兼容。

VGA

视频存储

顶层设计

设计原理图如下所示。 顶层设计包括ZYNQ-7000 PS部分和PL部分中实现的可编程逻辑模块。 由于所有逻辑都在PL中实现,因此这是一种流传输体系结构。 来自摄像机的所有数据都将直接传输到VGA屏幕。

PL逻辑块如下:

  • OV7670输入捕捉模块
  • OV7670摄像机配置模块
  • 用于存储完整QVGA帧的BRAM
  • ZYNQ-7000
  • 时钟向导
  • 地址生成器
  • VGA IP核

OV7670配置模块在HDL中实现I2C协议,并且从LUT(查找表)中读取命令。

图略

双端口BRAM用于存储和读取数据。 像素时钟源是双端口BRAM的PortA时钟。 BRAM的端口A用于存储摄像机的图像。 BRAM的端口B与地址生成器接口,该地址生成器读取数据并将像素传输到VGA IP模块。

图略

时钟向导生成一个25.175 MHz时钟,为VGA模块提供时钟。这是640x480分辨率所需的时钟。 50MHz的第二个时钟用于为配置模块提供时钟。

图略

在综合和实施阶段之后,将生成比特流。下一步是启动SDK,创建Hello world项目,传输比特流并运行应用程序。

图略

下图显示了完整的硬件平台。 重要的是要使电线的长度短,以避免信号完整性问题。 OV7670连接到MiniZed。 相机硬件在相机前放置一个盒子框架。

图略

一个重要的注意事项是使用正确设置对摄像机进行配置。 下图可以看到配置相机以YCbCr图像格式输出时获得的令人迷惑的效果。 如上所述,上述架构的正确格式是RGB565。

图略

总结

该项目展示了如何将CMOS并行摄像头与FPGA SoC接口。 QVGA摄像机帧以每秒30帧的速度流到VGA监视器,从而在MiniZed SoC上实现了完整的成像平台。

原理图

源代码

详情参阅 - 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值