嵌入式视觉系统的构建模块

分享到:
12456
下一篇 >

传统嵌入式视觉系统采用FPGA/处理器组合来实现,也有越来越多地使用将高性能处理器与FPGA相结合的片上系统来实现。在本文中我们将会介绍嵌入式视觉系统的**元素;如何简便快捷地使用软件 API 和 IP 库构建嵌入式视觉系统,如何把算法开发的增值部分添加到图像处理链中。

从监控摄像头等简单监控系统到更**的应用,例如当今*新款汽车配备的**驾驶员辅助系统

彩色滤波器阵列使用贝尔滤色片为每个输出像素赋予一个 RGB 值

RGB 到 YUV色域转换,将 RGB 色域转换为 HDMI 驱动器优选的 YUV 色域输出格式。RGB 到 YCRCB色域转换器

将 YUV 从 4:4:4 格式重新缩放为 4:2:2 格式。 色度重采样

配置视频 DMA 以传输图像帧到 PS DDR。 AXI VDMA

配置同一视频 DMA,以从 PS DDR 读取图像帧。 AXI VDMA

将 AXI Stream 转换回并行格式。 AXIS 到视频输出

为输出视频时序提供时序参考生成器。 视频时序控制器

除了确保系统正常运行,我们还需要两个 AXI 互联。一个是高性能 AXI 互联,另一个是通用AXI 互联,以及每个时钟域所需的复位模块。

图像处理应用需要一系列的时钟域,大部分时钟域我们可以使用 Zynq 内部的 PS 提供给 PL的时钟。就该应用而言,我们需要下列时钟:

108 MHz – 这是以 1280x1024 分辨率和 60 Hz帧速率输出图像所需的像素时钟速率。

75 MHz – 用于存储器映射的 AXI 和 AXI Lite 接口。

150 MHz – 用于图像处理链,也称为AXI Streaming时钟。AXI Stream 时钟的速率必须至少与像素速率相同。但是我们必须考虑处理链中的所有 IP 核的吞吐量。虽然大多数模块能够每时钟周期处理一个像素,留出部分裕度并减少所需的缓存是明智的做法。

200 MHz – 提供给 Python 1300C CIS 设备作为基准。

为实现像素时钟,我们需要使用时钟向导来生成该 108MHz 像素时钟,因为该时钟需要极为准确的设置。虽然在用 PL 架构时钟设置时,75MHz和150MHz时钟允许部分容差,但 200MHz时钟也要求**。与 108MHz 时钟不同的是该时钟可由 PL 架构时钟**生成。

所使用的 IP 模块的时钟结构如下表所示:

在 Vivavdo 方框图编辑器中的整个实现方案如下面两个图所示。这两个图分别显示的是图像处理链的上游和下游。您还能够看到使用通用 AXI 互联和高性能 AXI 互联实现的 ARM 内核处理器的互联情况。

图2:EVK实例设计 — 突出显示的是上游图像处理链

图3:EVK实例设计 — 突出显示的是下游图像处理链

一旦我们完成设计验证,并为AXI外设分配地址(可自动完成)后,我们就能在 Vivado 2015.4 中构建硬件并将其导入到 SDK 2015.4 软件开发环境中。我们需要在该环境中编写一些简单软件,让系统启动并运行。

在 SDK 内部,我们不仅需要在 Zynq 内配置设计,还需要在使用设计之前在 EVK 上配置部分元素。记住在本实例中 PS 起着系统监视和控制功能,因此必须对整个嵌入式视觉系统进行配置,而不仅仅是在 Zynq 中配置 Vivado 设计。

我们需要开发用于配置下列内容的软件:

使用SPI 接口的 Python 1300C 摄像头

AXI Python 1300C 接口模块

AXI VDMA,从 DDR 内存读取和向 DDR 内存写入帧

AXI 彩色滤波器阵列

用于 AD7511 的 HDMI 输出设备。该设备使用 I2C 进行配置

I2C 多路复用器及其连接的相关外设

用于控制 Python 1300C 设备电源轨的 I2C IO 扩展器

该 EVK 使用 Zynq PS I2C 控制器对 HDMI 输出设备进行配置,来对 Python 设备供电。安富利还向我们提供了能用来控制 I2C 并进行如下配置的 API:

ADV7511 – 用于 HDMI 输出的 API

CAT9554 – 用于位于摄像头模块上的 I2C I/O 扩展器的 API

TCA9548 – 用于位于 EVCC 上的 I2C 多路复用器的 API

PCA9534 – 用于位于 EVCC 上的 I2C IO 扩展器的 API

OnSemi_Python_SW – 用于 Python 1300C 的 API

XAXIVDMA_EXT – 用于配置 VDMA 的 API

XIICPS_EXT – 用于驱动外部 I2C 的 API

我们所需做的就是将这些 API 与赛灵思软件 API 耦合,用于图像处理链中的 IP,这样我们就能快速创建软件可执行文件。要创建软件应用,我们需要将硬件设计导入到 SDK 中,为硬件创建板级支持包 (BSP)。该 BSP 内置所有所需的赛灵思 API,在与安富利的 API 耦合后,就能够驱动图像处理链中的硬件和 Zynq。

软件本身需要执行下列步骤:

初始化所有的 AXI 外设

为图像传感器轨加电

对安森美 Python 1300C、彩色滤波器阵列和 VDMA 进行配置

完成这些步骤后,当软件运行在 EVK 上您将看到图像正被输出到您所选定的 HDMI 监控器上,如下图所示。

图4:使用演示系统抓取的居民区场景的一帧图像

结论

在本文中我们介绍了嵌入式视觉系统的**元素;如何简便快捷地使用软件 API 和 IP 库构建嵌入式视觉系统,如何把算法开发的增值部分添加到图像处理链中。

你可能感兴趣: 技术文章 图片 嵌入式 FPGA 嵌入式视觉
无觅相关文章插件,快速提升流量