1. Lattice FPGA视频图像处理系统概述

视频图像处理系统本质上是一条从光信号到可用图像数据的实时流水线:传感器输出像素流,经过时序对齐、色彩重建、降噪、缩放、增强、格式转换,最终送入显示或编码接口。这条流水线对延迟、吞吐和功耗都有硬性要求,而Lattice FPGA的定位正是"低功耗、小封装、确定性实时"的边缘视频处理平台。本章先建立系统级认知:课程要达成什么目标、Lattice FPGA在整机中处于什么位置、典型场景有哪些,以及一个视频处理系统从需求到上板要经过哪些设计环节。

课程目标与能力定位

本课程的目标不是泛泛地讲FPGA语法,而是让学习者具备独立搭建一条可工作的视频处理链路的能力。具体可拆成四层:

  • 接口层:能读懂并实现常见视频接口时序,包括MIPI CSI-2、DVP并口、BT1120、HDMI的像素时钟、行场同步与消隐关系。
  • 数据通路层:能用流水线结构实现像素级处理,理解行缓存(Line Buffer)、帧缓存(Frame Buffer)、跨时钟域FIFO的作用与代价。
  • 算法映射层:能把3×3卷积、中值滤波、直方图统计、双线性缩放等算法映射为可综合的定点流水结构。
  • 系统集成层:能完成时钟规划、复位设计、DDR带宽估算、时序约束与上板调试。

这四层对应一个判断标准:给定"输入1080p60、输出720p60、需做3×3锐化"这样的需求,学习者应能估算资源、划分时钟域、写出可综合代码并定位画面异常。

Lattice FPGA在视频图像处理中的定位

视频处理芯片方案大致分三类:专用ISP/SoC(集成度高、算法固定、灵活性差)、GPU/DSP(算力强、功耗与成本高)、FPGA(并行流水、延迟确定、接口灵活)。Lattice FPGA处在第三类的低功耗细分区间,其价值集中在三点。

第一是确定性延迟。FPGA以像素时钟逐拍推进,处理延迟可按行数精确计算。例如3×3卷积需要2行缓存,在1080p下延迟约为2行加若干拍,折算约30μs量级,这对工业检测、机器视觉的触发同步至关重要。

第二是接口桥接能力。实际系统里传感器是MIPI,主控要DVP或BT1120,显示屏又要HDMI,Lattice FPGA可作为协议转换中枢,把不同电平、不同时序、不同时钟域的接口统一起来。

第三是低功耗与小封装。以CrossLink-NX、Certus-NX等器件为例,典型视频桥接应用功耗在数百毫瓦量级,适合嵌入式、便携与多路摄像头模组场景。需要说明的是,具体功耗与资源数据应以所选器件手册和实际综合报告为准,此处仅为量级参考。

选型时先看三件事:需要几路视频输入、最大分辨率与帧率、是否需要外挂DDR。若只是接口转换与轻量处理,小容量器件加片内缓存即可;若要做多帧降噪或帧率转换,则必须评估DDR带宽。

典型应用场景

Lattice FPGA的视频方案常见于以下场景:

  • 多路摄像头聚合:将2~4路MIPI摄像头合并为一路MIPI或USB输出,用于会议终端、车载环视。
  • 工业机器视觉:Camera Link或MIPI采集,做实时二值化、边缘检测后送主控,延迟要求严格。
  • 显示接口转换:eDP转LVDS、MIPI转HDMI,用于笔记本、平板、医疗显示。
  • 图像预处理前端:在SoC前做去马赛克、坏点校正、自动曝光统计,减轻主处理器负担。
  • AR/VR与穿戴设备:低功耗、小体积是首要约束,处理以几何校正和畸变校正为主。

系统级设计流程

一个视频处理系统的设计流程可以概括为"需求→架构→实现→验证→上板"五个阶段,但每个阶段的产出物必须明确。

需求阶段要确定分辨率、帧率、像素格式、接口类型、延迟上限与功耗预算。例如:输入1920×1080@60Hz、YUV422、8bit,输出1280×720@60Hz,允许延迟不超过1帧。

架构阶段要完成时钟域划分与数据流规划。典型做法是:输入像素时钟域接收数据,写入异步FIFO;处理核运行在统一处理时钟域;输出侧再跨回显示时钟域。同时估算带宽,例如1080p60、YUV422、8bit的像素率为1920×1080×60≈124.4M像素/秒,每像素2字节即约249MB/s,若做帧缓存读写各一次,DDR侧需约500MB/s,这个数字直接决定DDR位宽与频率选择。

实现阶段把算法写成流水线代码,重点是行缓存与窗口生成。以3×3卷积为例,需要两个行缓存加若干移位寄存器,在每个像素时钟产生一个3×3窗口,再与系数相乘累加。

验证阶段用仿真注入测试图样,观察输出是否符合预期,并检查行场同步、消隐区与边界处理。

上板阶段用逻辑分析仪或片内调试工具抓取实际时序,定位画面撕裂、颜色错位、闪烁等问题。

下面的SVG把这条系统链路与关键参数关系画在一起,便于建立整体印象。

Lattice FPGA 视频图像处理系统链路与关键参数 图像传感器 MIPI CSI-2 / DVP 1080p60 · YUV422 接收与跨时钟 异步FIFO · 位宽转换 像素时钟域 → 处理域 视频处理核(流水线) 行缓存 → 3×3窗口生成 卷积 / 中值 / 缩放 / 增强 定点运算 · 逐拍推进 帧缓存 / DDR 读写各约249MB/s 帧率转换 · 多帧降噪 显示 / 编码输出 HDMI / eDP / LVDS 720p60 输出 关键参数关系 像素率 = 宽 × 高 × 帧率 = 1920×1080×60 ≈ 124.4 Mpx/s 数据率 = 像素率 × 每像素字节数 YUV422 8bit → 约 249 MB/s 延迟构成(示例量级) 跨时钟FIFO:数拍 3×3卷积行缓存:约2行 ≈ 30μs 帧缓存:约1帧 ≈ 16.7ms 总延迟需满足系统上限 系统级设计流程 需求定义 分辨率/帧率/延迟 架构划分 时钟域/带宽估算 RTL实现 行缓存/流水线 仿真验证 测试图样/边界 上板调试 时序抓取/定位

把这张图记牢,后续每一章都会回到其中的某个环节:接口时序对应"接收与跨时钟",行缓存与窗口生成对应"处理核",带宽与帧率转换对应"帧缓存",而时序约束与调试对应"上板调试"。

一个可执行的设计示例

假设需求为:输入1280×720@60Hz、RGB888、DVP接口,输出同分辨率、经3×3锐化后送HDMI。可按如下方式落地。

时钟规划:DVP像素时钟约74.25MHz,HDMI像素时钟同为74.25MHz,处理核统一运行在74.25MHz,输入输出各加一级异步FIFO以吸收抖动。带宽估算:1280×720×60≈55.3M像素/秒,RGB888每像素3字节,约166MB/s,无需外挂DDR,用片内Block RAM做行缓存即可。

行缓存设计:3×3窗口需要缓存两行,每行1280像素×24bit,两个行缓存共约2×1280×24bit≈61.4Kbit,可用两块简单双口RAM实现。窗口生成用移位寄存器链,每个像素时钟输出一个3×3窗口。

锐化系数示例:中心系数取5,上下左右取-1,即

0  -1   0
-1   5  -1
0  -1   0

累加后做饱和截断到0~255。若结果偏暗或出现彩色噪点,先检查系数和是否为1(本例为1),再检查边界像素是否做了复制填充而非补零。

验证方法:仿真时注入棋盘格与渐变图,观察输出边缘是否增强、平坦区是否保持;上板后用逻辑分析仪抓取hsync、vsync与data有效窗口,确认消隐区未被误处理。

常见误区:把行缓存写成"先存整帧再处理",会浪费大量Block RAM并引入整帧延迟;正确做法是只缓存必要的行数,边进边出。