1. Zynq平台与视频图像处理系统概览
Zynq-7000 系列是 Xilinx(现 AMD)推出的全可编程 SoC,它把一颗双核 ARM Cortex-A9 处理器系统(Processing System,PS)与一片可编程逻辑(Programmable Logic,PL)集成在同一芯片内。理解这套架构,是后续做视频编解码与图像处理工程的前提:视频链路里既有需要高吞吐、低延迟、强并行的像素级运算,也有需要灵活调度、协议栈、文件系统和网络交互的控制逻辑,Zynq 的价值正在于让这两类任务各归其位。
PS 与 PL 的分工与协同
PS 侧包含双核 Cortex-A9、L1/L2 缓存、DDR 控制器、DMA 控制器、中断控制器 GIC、以及 USB、以太网、SD、UART 等外设接口。它擅长运行 Linux 或裸机程序,负责流程控制、参数配置、协议处理和人机交互。PL 侧由可编程逻辑单元、DSP48E1 乘法累加单元、Block RAM 和大量可配置 IO 组成,适合实现像素流水线、卷积、色彩空间转换、缩放、滤波等数据并行度极高的运算。
两者之间不是简单的“主从”关系,而是通过若干条物理通道协同:AXI GP(General Purpose)接口用于 PS 对 PL 寄存器的低速读写,适合配置参数;AXI HP(High Performance)接口让 PL 作为主设备直接访问 DDR,适合视频帧这类大块数据搬运;AXI ACP(Accelerator Coherency Port)则让 PL 访问能保持与 CPU 缓存一致,适合小数据量、需与软件共享的场景。此外还有中断线,PL 完成一帧处理后可通过 IRQ 通知 PS 取数据。
典型视频编解码与图像处理链路
一条完整的视频链路通常从视频源开始。以 HDMI 输入为例,信号经 HDMI RX 子系统解码为并行像素流,写入 VDMA(Video DMA)的帧缓冲,VDMA 通过 AXI HP 口把帧数据搬进 DDR。PL 中的图像处理 IP 再从 DDR 读取帧,完成去噪、缩放、色彩空间转换或边缘增强,处理结果写回另一块帧缓冲。随后编码模块(可用软核或硬核 H.264/H.265)读取处理后的帧进行压缩,码流经 PS 的网络协议栈发送,或直接送显示控制器输出。
这里的关键是帧缓冲的管理。以 1080p、YUV422、8bit 为例,一帧约 1920×1080×2 ≈ 4.15 MB。若采用三帧缓冲(采集、处理、显示各一帧),仅帧缓存就需约 12.4 MB,DDR 带宽压力集中在 VDMA 与处理 IP 的读写上。因此工程上常把处理 IP 设计成流式接口,尽量在 PL 内部完成行缓存,减少对 DDR 的反复访问。
开发流程与工具链
Zynq 视频系统的开发通常分三条线并行推进。第一条是 PL 硬件设计:在 Vivado 中搭建 Block Design,例化 Zynq PS、VDMA、视频处理 IP、AXI 互联和时钟/复位模块,完成综合、实现并导出 XSA。第二条是 PS 软件:在 Vitis 中创建平台工程和应用工程,编写驱动初始化、DMA 配置、中断服务程序,必要时用 OpenCV 或自定义算法做参考实现。第三条是系统集成:用 PetaLinux 构建设备树、根文件系统和启动镜像,把 BOOT.BIN、image.ub 写入 SD 卡启动。
一个可参考的起步配置
下面给出一个教学用的最小系统参数示例(非实测结果,仅用于说明配置思路):
| 项目 | 示例取值 | 说明 |
|---|---|---|
| 分辨率 | 1920×1080 @ 60Hz | 像素时钟约 148.5 MHz |
| 像素格式 | YUV422 8bit | 每像素 2 字节 |
| 帧缓冲 | 3 帧,DDR 中连续分配 | 约 12.4 MB |
| VDMA 接口 | AXI HP0 / HP1 | 读写分离,避免争用 |
| 配置接口 | AXI GP0 | PS 读写 IP 寄存器 |
| 中断 | PL IRQ → PS GIC | 帧完成通知 |