[FPGA Video IP] Video Processing Subsystem
Xilinx Video Processing Subsystem IP (PG231) 详细介绍
概述
Xilinx LogiCORE™ IP Video Processing Subsystem (VPSS)(PG231)是一个高度可配置的视频处理模块,设计用于在单一 IP 核中集成多种视频处理功能,包括缩放(Scaling)、去隔行(Deinterlacing)、颜色空间转换(Color Space Conversion, CSC)、色度重采样(Chroma Resampling)等。它支持 AXI4-Stream 或内存映射 AXI4 接口输入输出,通过 AXI4-Lite 接口进行控制,适用于实时视频处理流水线。VPSS 是早期独立视频 IP(如 Video Scaler PG009、Video CSC PG013)的整合升级版本,提供更高的集成度和灵活性,支持多种 AMD FPGA 和 SoC 设备,广泛应用于嵌入式系统、广播设备和高分辨率视频处理。
主要特性
- 接口:
- 输入/输出:
- AXI4-Stream 视频协议(符合 Vivado AXI Reference Guide UG1037),用于实时视频流。
- 内存映射 AXI4 接口(m_axi_mm2s 和 m_axi_s2mm),用于从外部内存(如 DDR3/4)读取或写入帧数据。
- 控制:AXI4-Lite 从接口,用于配置子功能参数、分辨率和颜色格式。
- 输入/输出:
- 子功能:
- 缩放(Scaler):
- 支持上行和下行缩放,分辨率范围从 64x64 到 8192x4320(8K)。
- 使用多相(Polyphase)滤波器,支持 6/8/10/12 抽头(Taps),64 或 128 相(Phases)。
- 支持双线性(Bilinear)、双三次(Bicubic)和基于 Lanczos 算法的插值。
- 去隔行(Deinterlacer):
- 支持运动自适应(Motion Adaptive)和垂直时间滤波(Vertical Temporal Filtering)算法。
- 转换隔行视频(如 NTSC、PAL)为逐行视频。
- 颜色空间转换(CSC):
- 支持 RGB、YUV 4:4:4、YUV 4:2:2、YUV 4:2:0 之间的转换。
- 支持 BT.601、BT.709、BT.2020 颜色编码标准,可编程系数。
- 色度重采样(Chroma Resampler):
- 支持 YUV 4:4:4、4:2:2、4:2:0 之间的子采样转换。
- 使用 4x2 或 2x2 滤波器优化色度平滑度。
- 缩放(Scaler):
- 数据宽度:
- 支持 8/10/12/16 位每颜色分量。
- 每时钟像素数(PPC):
- 支持 1、2、4 PPC,提升高分辨率视频吞吐量。
- 分辨率与帧率:
- 支持从 VGA(640x480)到 8K(7680x4320,需高性能设备)。
- 最大像素时钟频率因设备而异(例如,UltraScale+ 可达 300 MHz)。
- 运行模式:
- 全功能模式(Full-Fledged):支持所有子功能(缩放、去隔行、CSC、色度重采样)。
- 仅缩放模式(Scaler-Only):仅启用缩放功能,优化资源占用。
- 仅 CSC 模式(CSC-Only):仅启用颜色空间转换,适合简单应用。
- 设备支持:
- 兼容 Artix-7、Kintex-7、Virtex-7、Zynq-7000、UltraScale、UltraScale+、Versal AI Core、Versal Premium 等。
- 设计工具:
- 支持 Vivado Design Suite。
- 性能:
- 支持高带宽视频(如 4K@60Hz,2 PPC,或 8K@30Hz,4 PPC)。
- 低延迟设计,适合实时视频处理。
- 其他特性:
- 免费许可,包含在 Vivado 工具中。
- 支持动态配置(分辨率、缩放系数、颜色空间等)。
- 提供中断支持,监控帧完成、错误等事件。
- 支持 .coe 文件加载自定义缩放系数,基于 MATLAB 或 Xilinx C 模型生成。
应用场景
-
视频处理流水线:
- 在视频采集和处理系统中,执行缩放、去隔行、颜色空间转换和色度重采样,优化视频流以适配显示设备或编码器。
- 常用于视频监控、医疗影像处理、工业视觉系统。
-
嵌入式视频系统:
- 在 Zynq-7000 或 Zynq UltraScale+ MPSoC 平台上,处理视频流以驱动 HDMI、DisplayPort 或 SDI 输出。
- 适用于数字标牌、机顶盒、游戏机。
-
广播与专业视频设备:
- 在视频编码器、切换器或广播系统中,处理高分辨率视频(如 4K/8K),支持 BT.709 或 BT.2020 标准。
- 适用于演播室、直播设备和专业视听系统。
-
视频流媒体:
- 在流媒体平台中,将输入视频转换为多种分辨率和颜色格式(如 YUV 4:2:0 用于 H.264/H.265 编码)。
- 适用于视频会议系统、在线直播。
-
汽车与无人机:
- 在汽车辅助驾驶系统(ADAS)或无人机视觉系统中,处理摄像头视频,进行缩放、去隔行和颜色调整以适配显示或分析模块。
- 支持实时、低延迟处理。
-
硬件验证与测试:
- 在视频系统开发中,结合测试图案生成器(TPG)和视频时序控制器(VTC),验证视频处理流水线的功能和性能。
- 适用于 FPGA 原型设计和硬件在环(HIL)测试。
使用指南
设计流程
-
IP 配置:
- 在 Vivado IP Integrator 中添加 Video Processing Subsystem IP 核。
- 选择运行模式(全功能、仅缩放、仅 CSC)。
- 配置子功能:
- 缩放:设置抽头数(6/8/10/12)、相位数(64/128)和缩放系数(默认或自定义 .coe 文件)。
- 去隔行:选择运动自适应或垂直时间滤波算法。
- CSC:选择颜色编码(BT.601/709/2020)和范围(有限/全范围)。
- 色度重采样:选择 4:4:4、4:2:2 或 4:2:0 转换。
- 设置 PPC(1、2、4)、数据宽度(8/10/12/16 位每分量)和颜色格式(RGB、YUV 4:4:4 等)。
- 配置输入/输出接口(AXI4-Stream 或内存映射 AXI4)和最大分辨率。
- 设置 AXI4-Lite 地址范围和中断支持。
-
视频流水线集成:
- AXI4-Stream 模式:
- 输入连接到视频源(如 TPG、Video In to AXI4-Stream)。
- 输出连接到下游模块(如 AXI4-Stream to Video Out、HDMI TX)。
- 内存映射模式:
- 输入通过 AXI4 主接口(m_axi_mm2s)从 DDR 读取帧,搭配 Video Frame Buffer Write IP。
- 输出通过 AXI4 主接口(m_axi_s2mm)写入 DDR,连接到 Video Frame Buffer Read IP。
- 搭配 VTC IP 提供时序信号(如 Vsync、Hsync)。
- 使用 AXI Interconnect 管理多个 AXI4 主接口与内存控制器(如 MIG DDR3/4)的连接。
- AXI4-Stream 模式:
-
时钟管理:
- 使用时钟向导(Clocking Wizard)生成像素时钟、AXI4 主接口时钟和 AXI4-Lite 控制时钟。
- 确保时钟频率支持目标视频带宽(例如,4K@60Hz 需要约 297 MHz,2 PPC)。
- 验证输入、输出和控制接口的时钟域隔离。
compulsion4. 控制与软件开发:
- 通过 AXI4-Lite 接口使用处理器(如 Zynq PS 或 MicroBlaze)配置 VPSS 参数(分辨率、缩放系数、颜色空间等)。
- 使用 Xilinx 提供的裸机驱动(位于 Vitis 嵌入式软件库)或 Linux 驱动(DRM 或 V4L2 框架)简化开发。
- 参考驱动示例(如 xvprocss_example.c)实现动态配置。
- 对于 Linux 系统,启用 CONFIG_VIDEO_XILINX_VPSS 内核选项。
- 验证与调试:
- 使用 Vivado 仿真工具验证 AXI4-Stream 或 AXI4 主接口信号(TValid、TReady、ARADDR、AWADDR)。
- 使用 TPG 生成测试图案(如颜色条、棋盘格)验证缩放、去隔行、CSC 和色度重采样效果。
- 检查状态寄存器(如子功能状态、错误代码)以诊断问题。
- 使用 Vivado ILA 监控硬件中的视频流和内存访问。
- 参考应用笔记 XAPP1285,了解从旧版 Video Scaler/CSC IP 迁移到 VPSS 的方法。
示例设计
以下是一个典型的视频处理设计:
- 模块:
- TPG IP 生成 AXI4-Stream 视频流(1080p60,RGB,隔行)。
- VPSS IP(全功能模式)执行去隔行(运动自适应)、缩放(1080p 到 4K)、CSC(RGB 到 YUV 4:2:0)和色度重采样(4:4:4 到 4:2:0)。
- AXI4-Stream to Video Out IP 转换为并行视频信号。
- VTC IP 提供时序信号,HDMI TX 输出到显示器。
- 控制:
- Zynq PS 通过 AXI4-Lite 配置 VPSS(分辨率、缩放系数、颜色编码)。
- 使用裸机驱动设置 10 抽头多相滤波器和 BT.709 系数。
- 启用中断以监控帧完成和错误。
- 时钟:
- 时钟向导生成 148.5 MHz 像素时钟(1 PPC)、200 MHz AXI4 主接口时钟和 100 MHz AXI4-Lite 时钟。
- 参考:XAPP1285 提供了基于 Zynq UltraScale+ 的 VPSS 参考设计。
使用注意事项
-
内存带宽需求:
- 内存映射模式下,高分辨率(如 4K/8K)或多子功能组合会显著增加 AXI4 主接口的带宽需求。确保内存控制器(如 MIG DDR3/4)支持足够带宽。
- 优化 AXI Interconnect 参数(如突发长度)以提高内存访问效率。
-
PPC 与时钟频率:
- 选择合适的 PPC(1、2、4)以平衡时钟频率和吞吐量。例如,8K@60Hz 可使用 4 PPC 降低时钟频率需求。
- 确保像素时钟支持目标分辨率和帧率,验证 AXI4-Stream 或 AXI4 主接口的吞吐量。
-
缩放系数配置:
- 使用 .coe 文件加载自定义缩放系数,确保系数与滤波器抽头数和相位数匹配。
- 默认系数基于 Lanczos 算法,适合高质量缩放。若需优化资源,可尝试双线性(2 抽头)或双三次(4 抽头)。
-
去隔行性能:
- 运动自适应去隔行适合复杂动态场景,但资源占用较高;垂直时间滤波适合简单场景,资源占用较低。
- 验证输入视频的隔行格式(NTSC、PAL)并确保帧率与 VTC 时序匹配。
-
颜色空间与色度重采样:
- 配置 CSC 时,验证 BT.601/709/2020 编码和范围(有限/全范围)设置,避免颜色失真。
- 对于 YUV 4:2:0,确认下游模块支持子采样格式,验证色度重采样的滤波器设置。
-
AXI4-Stream 协议合规性:
- 在 AXI4-Stream 模式下,确保输入/输出信号(TValid、TReady、TData、TUser、TLast)符合协议要求。
- 若上下游模块不支持 TUser 信号,使用 AXI4-Stream Subset Converter IP 进行转换(参考 PG085)。
-
中断与错误处理:
- 启用中断以监控帧完成、内存访问错误或子功能错误。
- 检查状态寄存器(如错误代码)以诊断缩放、去隔行或颜色转换问题。
-
资源优化:
- VPSS 资源占用随子功能数量、PPC、数据宽度和滤波器复杂度增加。参考 PG231 的资源利用率数据选择合适的 FPGA 设备。
- 使用仅缩放或仅 CSC 模式以降低资源需求。
-
仿真与验证:
- 在设计初期进行充分仿真,使用 TPG 生成测试图案验证子功能效果(缩放清晰度、去隔行平滑度、颜色准确性)。
- 检查输出图像的分辨率、颜色和伪影。
- 使用 Vivado ILA 监控 AXI4-Stream 或 AXI4 主接口的信号时序。
-
迁移注意事项:
- VPSS 整合了 Video Scaler v8.1、Video CSC v7.0 等旧版 IP。迁移时需参考 XAPP1285,注意接口(AXI4-Stream vs. 内存映射)和驱动差异。
- 旧版 .coe 文件可能需调整以适配 VPSS 的多相滤波器格式。
常见问题与解决方法
-
问题:缩放输出图像模糊或有伪影。
- 原因:缩放系数质量差或滤波器抽头数不足。
- 解决:使用更高抽头滤波器(如 10 或 12 抽头),加载高质量 .coe 文件(基于 Lanczos 算法)。
-
问题:去隔行后图像抖动或细节丢失。
- 原因:算法选择不当或输入帧率不匹配。
- 解决:尝试运动自适应算法,验证输入隔行视频的帧率和 VTC 时序。
-
问题:颜色空间转换后图像颜色异常。
- 原因:颜色编码或范围设置错误。
- 解决:验证 BT.601/709/2020 设置,检查有限/全范围配置。
-
问题:内存映射模式下数据流阻塞。
- 原因:内存带宽不足或 AXI4 主接口配置错误。
- 解决:优化内存控制器带宽,检查 AXI4 主接口的突发长度和地址范围。
-
问题:高分辨率视频(如 8K)性能不足。
- 原因:像素时钟频率不足或 FPGA 性能限制。
- 解决:选择高性能设备(如 Versal),使用更高 PPC 或优化时钟频率。
结论
Xilinx Video Processing Subsystem IP (PG231) 是一个集成化的视频处理模块,集成了缩放、去隔行、颜色空间转换和色度重采样功能,适用于视频处理流水线、嵌入式系统和广播设备。其支持 AXI4-Stream 和内存映射接口、多种颜色格式和高分辨率(最高 8K),结合动态配置和免费许可,提供强大的灵活性和易用性。使用时需特别注意内存带宽、PPC 配置、子功能参数和接口协议合规性,以确保系统性能和视频质量。参考 XAPP1285 和 PG231 文档可加速开发和旧版 IP 迁移。
更多详细信息,请参考:
- PG231 Video Processing Subsystem 产品指南
- Vivado AXI Reference Guide (UG1037)
- XAPP1285 应用笔记
- Xilinx 嵌入式软件驱动
- Video Beginner Series
设计工具推荐
- SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!