基于MIPI的高性能成像系统

本文介绍了一个基于Ultrascal+ FPGA平台的图像处理系统,利用MIPI CSI2接收摄像头数据,通过可编程逻辑设计实现图像处理流水线,包括MIPI CSI2接收、去拜耳化、Gamma校正等步骤。该系统适用于嵌入式视觉应用,如自动驾驶和无人机。同时,文章详细阐述了PL端设计和软件开发过程,包括硬件组件的选择、DisplayPort的配置以及I2C和GPIO的使用。
摘要由CSDN通过智能技术生成

使用 Ultrascal+ 高效实现具有图像处理 IP 核的图像处理流水线系统。

本项目用到的品台

硬件组件

Digilent Genesys ZU  × 1 (FPGA平台) Digilent PCAM5 × 1 (MIPI摄像头)

软件组件

AMD-Xilinx Vivado 设计套件

4bf3e76abcbc77a00c4e6f52f724c3e2.png

介绍

从简单的嵌入式视觉到自动驾驶汽车和无人机,图像处理是许多应用的核心。Xilinx MPSoC 具有内置的 DisplayPort(DP) 功能,并在可编程逻辑 IO 中支持 MIPI DPhy,从这两方面看,这是一个出色的嵌入式视觉平台。

同时使用人工智能和机器学习功能使我们能够创建一个复杂的嵌入式视觉处理系统。

在这个项目中,我们将探索使用 PCAM(FMC扩展板) 和 Display Port 建立和运行图像处理。然后,我们可以添加图像处理 IP 内核以进一步展示FPGA的处理图像的能力。

19abbae2fc65b9426fef8f3cc07d35b9.png

可编程逻辑设计(PL端设计)

在我们的设计中,我们将包括以下 IP

  • Zynq MPSoC Processing System - 启用 DisplayPort、I2C 和 GPIO EMIO

  • MIPI CSI2 RX Sub System - 从 PCAM 接收 MIPI CSI2 流。

  • Sensor Demosaic - 将 RAW 像素格式转换为 RGB 像素格式。

  • Gamma LUT - gamma图像校正

  • VDMA - 将映像写入PS中的 DDR 内存

  • Video Timing Generator - 生成输出视频时序

  • AXIS to Video Out - 从 AXI 流转换为视频流

  • Clock Wizards - 用于生成视频像素时钟和 MIPI CSI2 参考时钟

除了 IP,我们还需要考虑时钟架构,对于这个解决方案,我们设计了以下时钟树:

  • AXI 时钟 - 150 MHz - 这为 AXI Stream 和 AXI lite 接口提供时钟

  • DPHY 参考时钟 - 200 MHz - 由Clock Wizards生成

  • Pixel Clock - 74.25 Mhz - 用于 1280 x 720 60 FPS - 由Clock Wizards生成

完成的框图应如下所示,内核配置如下所示。

f22466963bc8bbfa527e5801d256c32b.png 55f05094f4eb21b16fce20e6271a050e.png

为了控制和配置 PCAM5(FMC-MIPI扩展板),我们使用 I2C 和 GPIO,GPIO 信号用于启用 PCAM5 并为其供电。而 I2C 用于配置 PCAM5 本身。

我们可以使用EMIO GPIO将处理器 GPIO 扩展到可编程逻辑。虽然 I2C 由 PS IIC0 提供,但是我们需要在应用程序软件中配置器启用。

72139932915b554be000ee9e566b1f9d.png

要启用 MPSoC 中的显示端口,我们需要在 I/O 配置页面下配置 DisplayPort 外设。硬件上使用了  Bank 505 的MGT。

34156da9a17934b168369575808e9ce2.png

我们还需要配置通过 EMIO 连接到 PL 的辅助引脚。这意味着我们需要以不同于 PS 中的 MIO 的方式处理它们,辅助输出使能引脚低电平有效,因此我们需要在使用 EMIO 时对信号使用反相器。

fc0129cbcfbf9c8d7f67c6ddf93bb817.png

配置好 DisplayPort 后,我们就可以启用 PL 的实时视频输入。这在 PS-PL 配置下可用。

2411c44a6d513d5ca1f22243779c7add.png

最后配置是设置 GPIO 以提供一个 1 位的 EMIO,这样我们就可以打开和关闭 PCAM5。

fbd210b87879f3e662f9b35b8663fb00.png

Sensor将通过 I2C 进行配置,最后通过两个 MIPI 通道以 280 Mbps 的数据速率输出 10 位 RAW 视频。

因此,我们需要配置 MIPI CSI-2 RX 子系统

0e9a935eebee03cbe5932058e4715447.png

由于我们只有一个 MIPI 接口,我们将配置 MIPI 内核以包含所有共享逻辑。如果我们在同一个 bank 上有多个 MIPI 接口,则下一个 MIPI 接口将被配置为使用示例设计中的共享逻辑。

fbcd877990937b4334f6898614f38a85.png

MIPI 接口的最终设置是为 MIPI 通道和时钟选择 IO bank 和引脚分配。正如我们在这里定义的那样,我们不需要将它们添加到定义引脚位置的 XDC 文件中。

0f7b3525d8166569d6fddafd299fd3ec.png

创建可用图像的下一步是转换原始图像,其中包含有关每个像素一个颜色通道的信息。

在包含红色、绿色和蓝色元素的图像中,这称为去拜耳化,由 Sensor Demosaic IP 块实现。

对于我们的应用程序,PCAM5 将以以下格式输出像素 BGBG/GRGR

184f8a0ab93535e1b70a071d371a8d47.png

绿色是红色和蓝色的两倍,因为我们的眼睛对绿色更敏感,如果可见光谱位于中间,则绿色比位于两端的红色和蓝色更敏感。

b40e719831506c9ef30e25b3970a785e.png

处理的下一步是实现Gamma校正 IP 内核

e252874c0cec94e6d8ae27819008fff1.png

最后一个阶段是插入一个VDMA,这将使视频数据能够从 PS DDR 写入到内存中。

b32e55ecce226ac89af8e9338eff15c6.png

为了向显示端口提供输出视频的时序,我们在发生器模式下使用VTC。

2bcbf15ee97cf04cd71561bf15ce7fb8.png

最后阶段是 AXIS 到视频输出 IP,这将采用视频时序控制器、时序信号和 AXI 视频流来创建具有正确时序的输出视频。

69089f5a51876fe02ad4ba9a2d9fc7c6.png

其输出将连接到显示端口视频实时输入。

这需要一点思考,实时视频输入具有 36 位视频输入,像素的每个元素为 12 位。我们正在使用每个元素 10 位,这使其整体为 30 位。

通过填充 LSB,到视频输出的 AXIS 流将按比例放大输出块,从每像素 30 位到每像素 36 位。

确保 AXIS 到 Video Out IP 内核输出的颜色通道与 DisplayPort 实时视频输入正确对齐。最简单的方法是在 AXI Stream 中使用 AXIS 子集转换器根据需要切换颜色通道。

为了帮助调试和理解设计,我还在设计中包含了几个集成逻辑分析仪。

随着设计的完成,我们现在可以构建硬件设计并使用 SDK 实现软件应用程序。

软件开发

完成硬件设计后,下一步是编写将在可编程逻辑中配置 IP 的软件。此配置将允许他们通过视频,可以显示在 DisplayPort 监视器上。

因此,我们的应用软件将执行以下步骤

  1. 配置 GPIO 并启用 PCAM5 电源

  1. 将 Video Mode 1280 x 720 设置为 60 FPS 并配置VTC

3)配置VDMA帧大小和内存存储

  1. 配置 Senso Demosaic

  1. 配置伽玛校正

  1. 使用 I2C 链路配置 PCAM5

  1. 启用从 VDMA 读取和写入帧缓冲区

  1. 设置显示端口

就像我们处理其他项目一样,我们需要导入硬件规范、创建应用程序和 BSP。

为了能够在显示端口上使用实时视频源,我们需要首先更新 BSP 设置并重新生成它。

在 BSP 设置中将 avbuf 更改为 dppsu 并等待 BSP 重新生成。

3e21d82007f0560d9b3e3590a50f38f8.png

正确配置 BSP 后

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值