简介
本文参考设计基于 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 应用程序,可以看到图像可以被正确的采集。
请点击阅读原文,查看并下载相关附件。
AMD 自适应 SOC 及 FPGA 中文技术支持社区