3. 视频图像处理系统的数据流与带宽规划

在 Versal 上做视频图像处理,算法能不能跑起来,往往不取决于 PL 里有多少 DSP,而取决于数据能不能按时、按量地送到该去的地方。一条 4K60 的 RGB 视频流,每秒要搬运约 1.5 GB 的像素数据;如果中间还要做多路缩放、格式转换、帧缓存和 AI 推理,实际带宽需求会迅速放大到数倍。因此,数据流与带宽规划是系统架构阶段必须先算清楚的事,而不是等系统跑不动了再回头补救。

一、从分辨率、帧率到像素率

视频数据流的基本度量是像素率(Pixel Rate),即每秒需要处理的像素个数:

像素率 = 水平总像素数 × 垂直总行数 × 帧率
其中:水平总像素数 = 有效宽度 + HBlank
      垂直总行数   = 有效高度 + VBlank

以 3840×2160@60Hz 为例,若采用 CEA-861 的典型时序,HTotal 约为 4400,VTotal 约为 2250,则像素率约为 4400 × 2250 × 60 ≈ 594 Mpixel/s。注意这里用的是含消隐区的总像素数,因为视频流水线在消隐期同样要消耗时钟周期,只有有效像素才写入存储。行场时序中的 HBlank、VBlank、HSync、VSync、DE(Data Enable)共同决定了数据流的节奏:DE 有效期间像素有效,消隐期间可以插入其他处理或让总线空闲。

二、像素格式与色彩空间对带宽的影响

同样的分辨率与帧率,像素格式不同,带宽可以相差数倍。常见格式的每像素比特数如下:

像素格式每像素位宽4K60 单路带宽(近似)
RGB888 / YUV444 8bit24 bit≈ 1.78 GB/s
YUV422 8bit16 bit≈ 1.19 GB/s
YUV420 8bit12 bit≈ 0.89 GB/s
RGB101010 10bit30 bit≈ 2.23 GB/s

色彩空间的选择直接影响后续处理链。RGB 适合显示与合成,YUV 适合压缩与传输;YUV420 在色度上做了 2×2 下采样,带宽最省,但色度分辨率下降,不适合做精细的色键或文字叠加。工程上常见的做法是:采集端用 YUV422 降低输入带宽,处理链内部按需转成 RGB 做高质量缩放或合成,输出前再转回目标格式。每一次格式转换都意味着一次读写,必须计入带宽预算。

三、带宽估算方法

单路视频的裸数据带宽为:

带宽 = 像素率 × 每像素位宽 / 8   (单位:Byte/s)

但实际系统带宽远不止裸数据。以一条典型的“采集→缩放→叠加→输出”链路为例,若每一级都经过 DDR 帧缓存,则同一帧数据会被多次写入和读出。假设 4K60 YUV422 输入,经缩放后仍为 4K60,叠加一层 OSD,输出 RGB888,各级均走 DDR:

  • 采集写入 DDR:1.19 GB/s
  • 缩放读取 + 写入:1.19 + 1.19 = 2.38 GB/s
  • 叠加读取 + 写入:1.78 + 1.78 = 3.56 GB/s
  • 输出读取:1.78 GB/s
  • 合计约 8.9 GB/s

这还没算刷新、CPU 访问、AI 推理取数等开销。工程上通常再留 30%~50% 余量,因此一条 4K60 处理链对 DDR 的实际需求可能接近 12 GB/s。若 DDR 控制器理论带宽为 20 GB/s,看似够用,但实际有效带宽受刷新、行激活、读写切换影响,通常只能达到理论值的 60%~75%,此时系统已经接近瓶颈。

四、NoC 与 DDR 带宽分配

Versal 的 NoC(Network on Chip)是连接 PL、PS、DDR 与 AI Engine 的片上互连骨干。它把带宽以“路径”为单位进行分配,每条路径有独立的读/写通道和 QoS 设置。规划时要把每一路视频流拆成若干 NoC 主端口到从端口(如 DDR 控制器)的路径,分别估算其峰值与平均带宽,再汇总到 DDR 控制器的总预算上。

关键原则有三点:第一,按峰值而非平均值分配,因为视频是突发性很强的负载,一帧数据往往在行有效期内集中传输;第二,读写路径分开考虑,DDR 的读写切换会带来额外开销;第三,给关键路径设置更高的 QoS 优先级,避免 AI 推理或 CPU 访问把视频流挤掉,导致画面撕裂或丢帧。

4K60 视频处理链数据流与带宽分配示意 视频输入 4K60 YUV422 采集/写入 1.19 GB/s DDR 帧缓存 总需求 ≈ 8.9 GB/s 含余量 ≈ 12 GB/s 有效带宽 60%~75% 缩放 读+写 2.38 GB/s OSD 叠加 读+写 3.56 GB/s 输出 RGB888 读取 1.78 GB/s NoC 互连骨干 按路径分配带宽 · 读写通道独立 · QoS 优先级保障关键视频流 裸数据 1.19 GB/s 各级均经 DDR 读写各一次

五、规划流程与检查要点

实际项目中,建议按以下顺序推进:先确定输入输出规格(分辨率、帧率、像素格式、色彩空间),再列出处理链每一级的读写行为,逐级计算带宽并汇总到 DDR 与 NoC 预算;然后为每条 NoC 路径分配带宽和 QoS,最后用仿真或实际测量验证。验证时重点观察 DDR 控制器的利用率、NoC 路径的延迟与吞吐、以及画面是否出现撕裂、丢帧或色度异常。若 DDR 利用率长期超过 75%,就应考虑减少中间帧缓存、改用片上缓存、降低色度采样或提高数据复用率,而不是简单地提高时钟频率。

一个实用的经验法则:把 DDR 有效带宽按理论值的 65% 估算,NoC 单条路径的持续吞吐按峰值的 80% 估算,再留 30% 系统余量。这样得到的预算虽然保守,但能避免后期因带宽争抢导致的画面异常。

带宽规划的本质,是在分辨率、帧率、格式、缓存策略和互连资源之间做权衡。算得越早,架构改动的代价越小;等到系统集成阶段才发现带宽不够,往往只能牺牲画质或帧率来妥协。