作者:Jackie Gao,AMD工程师;来源:AMD开发者社区
本参考设计基于ZYNQ开发板, 使用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端口连接至ZYNQ的HP0端口,以访问PS侧的DDR控制器,用作VDMA的Frame Buffer。
由于图像在传输过程中可以会出现当前的Frame Buffer被VDMA再次写入的情况,所以我们将Frame Buffer数量调至16,以减小 图像被污染的概率。如果想完全解决这个问题,需要配置VDMA的GenLock使用,我们会在之后的设计的讲解。
c. 系统还实例化了一个AXI IIC控制器,用于初始化CMOS的寄存器,使其能够正确的工作在期望的频率。也可选用PS侧的IIC控制器。
2. BD中需要分配各个IP地址如下,可以用Vivado的自动地址分配工具完成。
系统框图
开发板上运行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应用程序,可以看到图像可以被正确的采集。
【直播预告】