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

作者:Jackie Gao,AMD工程师;来源:AMD开发者社区

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

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

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

系统设计

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

01.png


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

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

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

02.png

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

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

03.png

软件架构

系统框图

04.png

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

环境需求

硬件环境

  • ZYNQ-7000开发板

  • OV5640或者AXI TPG仿真

  • Windows10/11或者Ubuntu20.04主机

软件环境

  • Vivado Design Suite 2022.2

  • Petalinux 2022.2

  • CMake > 2.15

  • OpenCV3.3.1

  • QT5.15.2

  • Windows + Visual Studio或者Linux + GCC

代码结构

硬件

  • hw文件夹里面里面包含vivado工程,直接用vivado 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应用程序,可以看到图像可以被正确的采集。

05.png

最新文章

最新文章