2. 视频图像处理系统架构设计

在Quartus工程中搭建视频图像处理系统,核心不是写几个模块,而是先确定一条从光到屏的完整数据通路,并让这条通路上的接口、时钟、缓存和复位彼此自洽。本节围绕图像传感器接口、FPGA内部处理流水线、帧缓存与显示时序控制、时钟域划分与复位策略四个部分展开,给出可直接映射到RTL结构的架构设计方法。

一、数据通路的整体分层

一条典型的视频通路可以划分为五个层次:采集层(图像传感器及其配置接口)、输入适配层(电平转换、同步信号提取、像素打包)、处理层(FPGA内部流水线)、缓存层(帧缓存与跨时钟域缓冲)、输出层(显示时序控制器与视频DAC/HDMI发送)。数据以像素流的形式单向流动,控制信息(I²C配置、寄存器读写)则以双向方式挂在低速总线上。

以常见的OV5640传感器 + Cyclone IV/V系列FPGA + VGA/HDMI显示为例:传感器输出8位或16位并行数据,伴随PCLK、HREF/DE、VSYNC三个同步信号;FPGA内部以PCLK为写时钟把像素写入帧缓存,再以显示时钟(如VGA 640×480@60Hz对应25.175MHz)读出并生成行场同步。整条通路的关键约束是写速率与读速率必须匹配,否则会出现撕裂或丢帧。

图像传感器 OV5640 PCLK/HREF/VSYNC D[7:0] 输入适配 同步信号提取 像素打包/对齐 写地址生成 FPGA处理流水线 色彩空间转换 3×3 卷积/滤波 亮度/对比度调节 流水线级数:3~5级 帧缓存 SDRAM/DDR 乒乓缓冲 写口/读口分离 显示时序控制 行/场同步生成 消隐区插入 VGA/HDMI输出 写时钟域 (PCLK) 传感器像素时钟,典型 24~48 MHz 驱动采集、输入适配、写缓存 处理时钟域 可与PCLK同源或倍频 流水线运算 读时钟域 (像素时钟) VGA 25.175 MHz / HDMI 像素时钟 驱动读缓存、显示时序 CDC CDC 复位策略 异步复位、同步释放 各时钟域独立复位同步器 软复位用于帧同步重启动

二、图像传感器接口设计

传感器接口分为控制通道和数据通道。控制通道通常使用I²C,FPGA作为主机,通过SCL/SDA写入寄存器完成分辨率、曝光、白平衡、输出格式等配置。以OV5640为例,上电后需要依次写入时钟使能、复位释放、PLL配置、输出格式(如RGB565)、分辨率(如1280×720)等寄存器组,配置完成后传感器才开始输出有效像素。

数据通道的关键是同步信号的处理。PCLK是像素时钟,HREF(或DE)为高时表示当前像素有效,VSYNC下降沿或上升沿标志一帧开始。在Quartus中,建议把这三个信号先经过一级IBUF,再进入输入适配模块。输入适配模块内部用PCLK采样HREF和VSYNC,生成内部的行有效信号de_i和帧起始信号sof_i,同时用行计数器x_cnt和列计数器y_cnt生成写地址。注意:不要直接用VSYNC作为复位,否则会引入亚稳态和毛刺。

三、FPGA内部处理流水线

处理流水线采用逐级寄存、逐拍推进的结构。每一级只完成一个简单运算,级与级之间用寄存器隔离,保证时序收敛。以RGB565输入、需要做3×3高斯滤波为例,流水线可划分为:

  1. 第1级:RGB565拆分为R/G/B三通道,各5/6/5位,扩展到8位。
  2. 第2级:行缓存(Line Buffer),用两个行FIFO缓存前两行像素,形成3×3窗口。
  3. 第3级:乘加运算,9个像素分别乘以高斯核系数,累加后右移。
  4. 第4级:结果截断回RGB565,并寄存输出。

流水线深度决定了处理延迟。上述结构从输入到输出约4个PCLK周期,在1280×720@30fps下,PCLK约74.25MHz,4拍延迟约54ns,完全可接受。Quartus中可用Pipeline Bridge或手动插入寄存器,综合后查看TimeQuest的Fmax是否满足PCLK约束。

四、帧缓存与显示时序控制

帧缓存的作用是解耦写速率与读速率。如果传感器输出1280×720@30fps,显示输出1024×768@60Hz,两者像素率不同,必须用帧缓存做速率匹配。常用方案是乒乓缓冲:两块帧缓存交替读写,写满一帧后切换,读端从另一块读取,避免撕裂。

帧缓存的控制核心是写地址生成和读地址生成。写地址由输入适配模块的x_cnt和y_cnt组合而成,读地址由显示时序控制器的行场计数器生成。两者通过异步FIFO或双口RAM跨时钟域。在Quartus中,推荐使用DCFIFO(双时钟FIFO)IP核,配置为8位或16位宽,深度至少一行像素数。

显示时序控制需要生成符合VGA/HDMI标准的行同步(HSYNC)、场同步(VSYNC)和消隐信号。以1024×768@60Hz为例,像素时钟65MHz,行总周期1344像素,其中有效1024、前沿24、同步136、后沿160;场总周期806行,其中有效768、前沿3、同步6、后沿29。这些参数必须与显示器手册一致,否则会出现画面偏移或不同步。

五、时钟域划分与复位策略

整个系统至少涉及三个时钟域:PCLK域(传感器像素时钟)、处理时钟域(可与PCLK同源或倍频)、显示时钟域(VGA/HDMI像素时钟)。跨时钟域的信号必须经过同步器:单比特控制信号用两级触发器同步,多比特数据用异步FIFO或握手协议。

复位策略推荐异步复位、同步释放。每个时钟域独立使用一个复位同步器,将全局复位信号rst_n同步到该时钟域后再释放。这样既避免了复位释放时的亚稳态,又保证了各时钟域复位的一致性。此外,建议增加一个软复位寄存器,在检测到帧同步丢失或FIFO溢出时,由软件触发重新初始化采集和显示通路。

设计检查要点:① 写速率是否大于等于读速率?若小于,需降低显示分辨率或提高PCLK。② 跨时钟域信号是否全部经过同步?③ 帧缓存深度是否足够容纳至少一行像素?④ 复位释放是否与时钟同步?⑤ TimeQuest中PCLK和显示时钟的约束是否完整?

把上述五部分串起来,就得到一条完整的视频数据通路:传感器在PCLK下输出像素,输入适配模块提取同步信号并生成写地址,处理流水线逐级运算,帧缓存完成速率匹配,显示时序控制器按标准生成行场同步并输出到屏幕。时钟域划分和复位策略则像骨架一样支撑整条通路稳定运行。在Quartus中实现时,建议先用SignalTap抓取PCLK、HREF、VSYNC和写地址,确认采集时序正确,再逐级验证处理流水线和显示输出。