基于VDMA的远程图像采集系统参考设计

描述

本文作者:AMD 工程师 Jackie Gao

简介

本文参考设计基于 AMD ZYNQ 7000 Device, 使用 VDMA 做原始图像采集系统,在 Petalinux 下做服务器,通过 Socket 发送图像至 Windows 或者 Linux 上位机。

作为验证,可以连接 CMOS,或者使用 AXI TPG 生成仿真的图像数据。

教程中所有涉及的设计及代码均在 Windows 和 Linux 平台下作了验证。

系统设计

1. 系统设计框图参考如下:

服务器

a. 通过 Video In to AXI4-Stream 将 CMOS 输出的 VSYNC,HSYNC 以及数据信号转换成视频流。注意 CMOS 的输入时钟 PCLK 与 AXI4-Stream 工作在不同的频率。

b. 紧跟其后面实例化了一个 AXI VDMA,用于接收输出的视频流。AXI VDMA 通过其 M_AXI_S2MM 端口连接至 AMD ZYNQ 7000 Device 的 HP0 端口,以访问 PS 侧的 DDR 控制器,用作 VDMA 的 Frame Buffer。

由于图像在传输过程中可以会出现当前的 Frame Buffer 被 VDMA 再次写入的情况,所以我们将 Frame Buffer 数量调至16,以减小 图像被污染的概率。如果想完全解决这个问题,需要配置 VDMA 的 GenLock 使用,我们会在之后的设计的讲解。

服务器

c. 系统还实例化了一个 AXI IIC 控制器,用于初始化 CMOS 的寄存器,使其能够正确的工作在期望的频率。也可选用 PS 侧的 IIC 控制器。

2. BD 中需要分配各个 IP 地址如下,可以用 AMD Vivado Design Suite 的自动地址分配工具完成。

服务器

软件架构

系统框图

服务器

开发板上运行 Petalinux,用作视频的服务器。在 Windows/Ubuntu 上位机位移植 Embeddedsw,并通过 Socket 配置 CMOS 和接收图像。最后把图像通过 QT 显示。

环境需求

硬件环境

AMD ZYNQ 7000 Device

OV5640 或者 AXI TPG仿真

Windows10/11 或者 Ubuntu20.04 主机

软件环境

AMD Vivado Design Suite 2022.2

Petalinux 2022.2

CMake > 2.15

OpenCV3.3.1

QT5.15.2

Windows + Visual Studio 或者 Linux + GCC

代码结构

硬件

HW 文件夹里面里面包含 AMD Vivado Design Suite 工程,直接用 AMD Vivado Design Suite 2022.2 打开。

打开后综合实现,并生成 Bitfile。

固件

此参考设计用 Petalinux 制作系统启动镜像,完整的 Petalinux 工程位于 FW 目录下。

执行 petalinux-build 可以编译。

执行 petalinux-package –boot –u-boot –force –fpga XXX.bit 生成 BOOT.BIN文件

软件

axi vdma 和 axi iic 的驱动软件移植自 embeddedsw,主要的改动包括修改 xil_io.c 和 xil_mem.c 文件,用 Socket 的驱动替换默认的 Xil_In32 和 Xil_Out32 的实现,以及内存读写的功能。

软件支持 Windows 和 Linux 的主机,采用 Cmake 环境。如果在 Windows 下,可以选择 Visual Studio 作为编译工具。编译过程如下:

1.cd sw

2.mkdir build

3.cmake .. && make

测试结果

在 Petalinux 下生成的 BOOT.BIN 文件放成 SD 卡,启动开发板。

运行 QT 应用程序,可以看到图像可以被正确的采集。

服务器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分