Genesys ZU 3EG(GZU 3EG)高性能影像演示项目的DIY动手指南

嵌入式视觉

1 2142 0

当前 1/4 Step

Step1: 简介

从简单的嵌入式视觉到自动驾驶汽车和无人机,图像处理是这些应用的关键核心。 DIGILENT基于Xilinx MPSoC的GenesysZU(简称GZU)是一个出色的嵌入式视觉平台, 具有内置的DisplayPort功能,并在可编程逻辑IO中支持MIPI DPhy。

我们能够在GZU上创建基于人工智能和机器学习的复杂嵌入式视觉处理系统。

在这个项目中,我们将使用PCAM和DisplayPort创建并运行图像处理链。然后,可以添加高级综合(HLS)IP核,做进一步的图像处理,并在Genesys ZU开发平台上验证这些功能。


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

在开始我们的设计前,我们需要在Vivado中安装Genesys ZU 3EG开发板支持文件。如果没有,我们可以从这里下载。如下所示,将这些文件安装到Vivado安装中的以下位置,请注意,我将整个文件夹放在其中。

image_20200414_42098711eed33.png

完成添加之后,我们可以开始进行硬件设计开发。

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

·      Zynq MPSoC Processing System – 配置完成DisplayPort,I2CGPIO EMIO等功能等处理系统

·      MIPI CSI2 RX Sub System - PCAM接收MIPI CSI2视频流

·      Sensor Demosaic -RAW像素格式转换为RGB像素格式.

·      Gamma LUT - 校正伽玛图像

·      VDMA - 将图像写入处理器系统中的DDR内存

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

·      AXIS to Video Out - AXI流转换为并行视频

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

除了IP,我们还需要考虑时钟架构,为此我们采用了以下方式来实现我们的功能

·      AXI Clock - 150 MHz - 这是为AXI StreamAXI lite接口计时

·      DPHY Reference - 200 MHz - 由时钟向导生成

·      Pixel Clock - 74.25 Mhz – 用于1280X720  60帧率 - 由时钟向导生成

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

image_20200414_46a52c197793e.png

5.jpeg

为了控制和配置PCAM,我们使用I2CGPIOGPIO信号用于启动PCAM并为其供电。 I2C用于配置PCAM摄像头。

我们可以使用处理器GPIO并将其扩展到可编程逻辑以提供单个EMIO GPIO信号。虽然I2CPS IIC0提供,但它已连接到I2C交换机,因此我们需要在应用程序SW中配置该交换机。

6.png

为了在MPSoC中使用DisplayPort口,我们需要在I / O配置下配置DisplayPort外围设备。对于Genesys ZU,这意味着我们使用双重较高的输出,因为Bank 505使用了较高的MGT

7.png

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

8.png

配置好DisplayPort后,我们便可以将实时视频输入到PL端。这个可以在PS-PLConfiguration选项中进行配置。

我们需要做的最终配置是将GPIO设置为提供11EMIO,以便我们可以打开和关闭PCAM的电源


Pcam摄像头将通过I2C配置为在两个MIPI通道上以280 Mbps的数据速率输出10RAW视频。

因此,我们需要配置MIPI CSI-2 RX Subsystem

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

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


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

生成包含每个元素的红色,绿色和蓝色元素的图像,这称为去马赛克,并由Sensor Demosaic IP模块实现。

对于我们的应用,PCAM将以BGBG / GRGR格式输出像素

Bayer Pattern on the PCAM


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

处理的下一步是实施伽玛校正IP内核


最后一步是插入视频直接存储器访问(VDMA)内核,这将使视频数据能够从PS DDR写入到PL端。

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

18.png

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


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

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

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

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

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

完成设计后,我们现在可以使用SDK开发硬件设计并实现软件应用程序。


Step3: 软件开发

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

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


1)配置GPIO并启用PCAM电源

2)将视频模式的1280 x 720设置为60 FPS,并配置测试模式生成器

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

4)配置Senso Demosaic

5)配置伽玛校正

6)使用I2C链接配置PCAM

7)启用对来自VDMA的帧缓冲区的读取和写入

8)设置显示端口

就像处理其他项目一样,我们需要导入硬件分隔符,创建应用程序和BSP

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

BSP设置中,将avbuf更改为dppsu,然后等待BSP重新生成

image_20200414_4bce149932c91.png

通过正确配置BSP,我们可以创建应用程序代码。 BSP将提供与PL中的IP块一起使用所需的所有API函数。

应用程序如下:

#include
#include "platform.h"
#include "xil_printf.h"
#include "xvtc.h"
#include "vga_modes.h"
#include "xv_tpg.h"
#include "xvidc.h"
#include "xavbuf.h"
#include "xavbuf_clk.h"
#include "xvidc.h"
#include "xdpdma_video_example.h"
#include "xiicps.h"
#include "i2c.h"
#include "xaxivdma.h"
#include "xaxivdma_i.h"
#include "xgpiops.h"
#include "xv_demosaic.h"
#include "xv_gamma_lut.h"
#include "math.h"

以下代码请发送“Genesys ZU高性能影像演示代码”到“jing.zhou@digilent.com.cn”索取

Step4: 测试

完成应用程序后,我们可以创建调试配置并下载位文件并运行应用程序软件。

我们应该在监视器上看到一个图像,但是我们也有可以检查的ILA。这些显示ILA将显示从MIPI CSI-2 IP内核和VDMA接收的输入视频流。

21.png

AXIS使用边带信号TuserTlast传输视频帧。 Tuser指示新帧的开始,而Tlast指示行的结束。

22.pngimage_20200414_405c18ccd2683.png

第三个ILA监视AXI流到视频输出,使我们可以监视输出上的锁定信号。

image_20200414_3a7ee46dc87b1.png

当所有这些运行时,您将能够看到

image_20200414_2388b6c69be5a.png

Video Image in Display


设计方案的最终资源利用率如下所示,我们还有足够的空间来实现有趣的算法

 image_20200414_39c096d2d2642.png


评论