3. 视频处理系统需求分析与架构设计

视频处理系统的架构设计从来不是先画框图再填参数,而是从需求约束出发,逐步收敛到软硬件分区。分辨率、帧率、像素格式决定了数据量的下限,延迟、带宽、功耗则决定了实现路径的上限。本节以一条典型的 4K 智能视觉链路为例,说明如何把这些约束量化,并据此完成 Versal 平台上的软硬件划分。

一、从像素流到带宽:先把数据量算清楚

视频系统的第一性约束是数据率。单路视频的原始像素率由分辨率、帧率和像素格式共同决定:

像素率 = 水平像素 × 垂直像素 × 帧率
4K UHD: 3840 × 2160 × 60 fps ≈ 497.7 Mpixel/s

原始带宽 = 像素率 × 每像素比特数
RGB888 (24 bit): 497.7 M × 24 ≈ 11.94 Gbit/s
YUV422 10bit (20 bit): 497.7 M × 20 ≈ 9.95 Gbit/s
YUV420 8bit (12 bit): 497.7 M × 12 ≈ 5.97 Gbit/s

这里有一个容易被忽略的工程细节:视频有效像素之外还有消隐区。以 3840×2160@60 为例,若按 CEA-861 时序,总像素约为 4400×2250,实际像素时钟接近 594 MHz,比有效像素率高出约 14%。DDR 带宽预算必须按含消隐的总量估算,否则会在高负载场景下出现欠载。

把链路各环节叠加,就能得到带宽需求表。下表为示例假设值,用于说明估算方法,并非实测结果:

处理环节数据形态读写次数估算带宽
输入采集(MIPI/HDMI)YUV422 10bit写 1 次≈ 10 Gbit/s
去马赛克/色彩校正RGB888读 1 + 写 1≈ 24 Gbit/s
缩放至 1080pRGB888读 1 + 写 1≈ 12 Gbit/s
AI 推理输入(INT8)1080p 张量读 1≈ 2 Gbit/s
显示输出RGB888读 1≈ 12 Gbit/s

合计约 60 Gbit/s。Versal 的 DDR4/LPDDR4 控制器单通道理论带宽通常在 100 Gbit/s 量级,看似充裕,但实际可用带宽受刷新、bank 冲突和仲裁效率影响,工程上一般按 60%~70% 折算。因此这条链路已经接近单通道的舒适区上限,架构上需要考虑把部分中间结果留在片上而非反复回写 DDR。

二、延迟与功耗:决定分区边界的两个硬指标

延迟需求通常分三档:交互式显示要求端到端小于 1 帧(约 16.7 ms);工业检测类允许 2~3 帧;离线分析类可放宽到百毫秒级。延迟预算要逐级分配,例如采集 2 ms、预处理 3 ms、推理 5 ms、后处理 2 ms、显示 3 ms,合计 15 ms,留出 1.7 ms 余量。

功耗约束则直接限制可用的硬件资源。Versal 的 AI Engine 阵列在满负荷下功耗可观,若系统散热预算只有 15 W,就不能让全部 AIE 同时跑在高占空比。此时应把周期性、规则性强的像素级运算放到 PL 的逻辑资源中,把矩阵密集的推理放到 AIE,把控制、协议栈和调度放到 PS 的 ARM 核,形成三级分工。

经验法则:像素级、逐点、无数据依赖的运算优先放 PL;规则卷积、矩阵乘、向量运算优先放 AIE;涉及操作系统、网络、文件、复杂分支决策的放 PS。跨域数据尽量走 AXI-Stream 直连,避免绕行 DDR。

三、软硬件分区策略

分区不是把功能平均切三份,而是按数据流方向逐段判断“这段运算的算术强度是否值得专用硬件”。算术强度低(每字节数据只做几次运算)的环节,如色彩空间转换、Gamma、简单滤波,放 PL 用流水线实现最划算;算术强度高(每字节做几十到几百次乘加)的环节,如卷积神经网络,放 AIE 才能发挥并行优势。

下图给出这条 4K 链路的软硬件分区与数据流关系。图中标注了各段的数据形态、承载单元和关键约束,便于对照前面的带宽与延迟预算进行核对。

4K@60 智能视觉链路:软硬件分区与数据流 传感器 / HDMI YUV422 10bit ≈10 Gbit/s PL 可编程逻辑 像素级流水线 · 低算术强度 去马赛克 / 色彩校正 缩放 4K→1080p 格式转换 / 张量打包 AI Engine 阵列 矩阵密集 · 高算术强度 CNN 推理 INT8 特征提取 / 后处理 目标框输出 PS ARM 核 控制 · 调度 · 协议 Linux / 驱动 网络 / 存储 决策 / 上报 AXI-S AXI-S AXI-S 显示输出 4K@60 RGB888 ≈12 Gbit/s 叠加后回读 DDR 帧缓冲 ≈60 Gbit/s 需求 · 按 65% 可用折算 关键约束核对 延迟预算:采集 2ms + 预处理 3ms + 推理 5ms + 后处理 2ms + 显示 3ms = 15ms < 16.7ms(1 帧) 带宽预算:DDR 需求 ≈60 Gbit/s,单通道按 65% 可用折算后余量有限,中间结果优先留片上 功耗预算:PL 流水线 + AIE 部分阵列 + PS 双核,示例目标 ≤15W,需按占空比分配

四、分区落地时的三个判断点

第一,判断数据是否需要跨域回写。PL 到 AIE 的直连 AXI-Stream 可以避免一次 DDR 往返,节省约 12 Gbit/s 的读写带宽。只有当数据需要被多个消费者复用或需要跨帧缓存时,才值得写入 DDR。

第二,判断流水线深度与延迟的权衡。PL 中的缩放和格式转换若采用多级流水,吞吐可以提高,但会引入若干行缓冲延迟。对于 4K 图像,一行约 3840 像素,若使用 8 行缓冲,仅缓冲延迟就约 8×3840/594M ≈ 52 μs,多级叠加后需重新核对总延迟预算。

第三,判断 AIE 的占空比。若推理只在每帧的感兴趣区域上执行,AIE 的实际负载可能远低于峰值,此时可以降低时钟或让部分 tile 休眠,把功耗让给 PL 和 DDR。分区方案确定后,应回到带宽、延迟、功耗三张预算表逐项复核,任何一项超限都要回到分区决策重新调整。

常见误区:先按功能模块划分软硬件,再补算带宽和延迟。正确顺序是先算清数据率与延迟预算,再让分区方案去满足这些数字。分区是结果,不是起点。

把上述过程固化为一张可填写的需求分析表,有助于在项目早期快速暴露矛盾。示例字段包括:分辨率与帧率、像素格式与位宽、含消隐的总像素时钟、各环节读写次数、单帧延迟分配、DDR 可用带宽折算系数、PL/AIE/PS 功耗上限。填完后若发现带宽或延迟任一项超限,优先调整的是数据形态(如提前降位宽、提前缩放)和跨域路径,而不是简单增加 DDR 通道。