4. 视频接口与数据采集

在Lattice FPGA视频图像处理系统中,接口层决定了图像数据能否稳定、正确地进入FPGA内部。不同摄像头和显示设备使用的物理接口与协议差异很大:DVP是并口,MIPI CSI-2是高速差分串行接口,HDMI则面向显示与视频源。理解它们的电气特性、时序结构和数据组织方式,是后续图像缓存、格式转换和算法处理的前提。

一、三种接口的定位与关键差异

DVP(Digital Video Port)是最容易上手的并口方案。它通常包含PCLK像素时钟、VSYNC帧同步、HSYNC行同步以及8/10/12位并行数据线。摄像头在每个PCLK周期输出一个像素,FPGA用同步信号界定帧和行的边界。DVP的优点是逻辑简单、无需高速SerDes,缺点是引脚多、时钟频率受限,长距离传输时信号完整性较差。

MIPI CSI-2面向高分辨率、低功耗场景。它使用D-PHY差分对,包含1对时钟Lane和多条数据Lane,常见配置为1/2/4 Lane。数据以包为单位传输,包括短包(帧起始FS、帧结束FE、行起始LS、行结束LE)和长包(图像数据)。CSI-2还支持多种像素格式,如RAW8/RAW10、RGB565、YUV422等。FPGA接收时需要完成差分信号解串、字节对齐、包解析和像素重组。

HDMI接口常用于视频源输入或显示输出。它基于TMDS差分信号,包含3条数据通道和1条时钟通道,视频数据以像素为单位编码传输,并携带行场同步信息。HDMI接收通常需要均衡、时钟恢复和TMDS解码,再还原为并行像素流。

三种视频接口的数据通路与FPGA接收结构 DVP 并口 PCLK / VSYNC / HSYNC D[11:0] 并行像素 每周期1像素,同步信号定界 FPGA:IO采样 + 同步分离 MIPI CSI-2 CLK Lane + 1/2/4 Data Lane 短包:FS/FE/LS/LE 长包:RAW8/10、RGB、YUV FPGA:D-PHY解串 + 包解析 HDMI 3×TMDS Data + 1×TMDS CLK TMDS编码,含行场同步 常用于视频源或显示输出 FPGA:均衡 + TMDS解码 统一像素流:pixel_data + de + hsync + vsync 图像缓存 / 格式转换 / 算法处理 接口差异集中在物理层与包结构,FPGA内部最终统一为带同步信号的像素流 接收实现的关键:时钟域处理、字节对齐、同步信号重建

二、Lattice FPGA上的接收实现要点

在Lattice FPGA中,DVP接收通常直接使用IO单元采样。关键点是PCLK的时钟域处理:如果PCLK频率较低,可以直接作为像素时钟;如果较高,建议先用PLL生成同频或倍频时钟,再用同步器对VSYNC/HSYNC做跨时钟域处理。数据线在PCLK边沿采样,需注意建立保持时间,必要时在IO处加入输入延迟或使用IDDR原语。

MIPI CSI-2接收更复杂。Lattice部分器件提供专用的D-PHY硬核或软核IP,例如CrossLink系列支持MIPI D-PHY。接收链路一般包括:差分输入缓冲、时钟恢复、串并转换、字节对齐、Lane对齐和包解析。字节对齐是常见难点,因为多Lane之间可能存在偏斜。通常利用短包中的同步字或训练序列完成对齐,再按CSI-2协议解析出像素数据。若使用软核,需要仔细约束时序并验证眼图。

HDMI接收在Lattice FPGA上通常借助TMDS接收IP或外部均衡器。TMDS解码后得到像素数据和同步信号,再转换为内部像素流。对于1080p60,TMDS时钟约148.5MHz,对FPGA的SerDes和时钟资源有明确要求,选型时需确认器件支持的最高速率。

三、摄像头配置实战:以I2C初始化为例

大多数摄像头通过I2C配置内部寄存器,设置分辨率、帧率、像素格式、曝光和增益等。FPGA需要实现I2C主机控制器,按摄像头数据手册写入寄存器序列。以下是一个典型的配置流程示例,参数为教学假设值,实际应以具体摄像头手册为准。

// 示例:OV5640 初始化片段(教学假设,非实测)
// 分辨率 1280x720,RGB565,30fps
I2C_Write(0x78, 0x3103, 0x11); // 系统时钟
I2C_Write(0x78, 0x3017, 0xff); // 使能输出
I2C_Write(0x78, 0x3034, 0x1a); // PLL
I2C_Write(0x78, 0x3035, 0x21); // PLL
I2C_Write(0x78, 0x3036, 0x46); // PLL
I2C_Write(0x78, 0x3808, 0x05); // 水平高字节
I2C_Write(0x78, 0x3809, 0x00); // 水平低字节
I2C_Write(0x78, 0x380a, 0x02); // 垂直高字节
I2C_Write(0x78, 0x380b, 0xd0); // 垂直低字节
I2C_Write(0x78, 0x4300, 0x61); // RGB565
I2C_Write(0x78, 0x5001, 0x01); // 使能AWB

配置完成后,FPGA应检查摄像头是否输出有效同步信号。对于DVP,可用逻辑分析仪观察PCLK、VSYNC、HSYNC和数据线;对于MIPI,则需确认Lane进入高速模式且短包正常。若没有图像,优先检查I2C地址、寄存器写入是否成功、时钟是否稳定、电源和复位时序是否正确。

四、数据采集中的常见问题与判断依据

实际调试中,图像异常往往表现为花屏、偏移、颜色错误或帧不同步。花屏通常与字节对齐或Lane偏斜有关;颜色错误可能是像素格式配置不匹配,例如摄像头输出RAW10而FPGA按RGB565解析;帧不同步则可能是VSYNC极性或帧长寄存器设置错误。建议在FPGA内部加入简单的帧计数器和行计数器,通过LED或逻辑分析仪输出状态,快速定位问题发生在接口层还是后续处理层。

调试建议:先让接口“通”,再让图像“对”。即先确认同步信号和时钟存在,再验证像素数据格式和排列,最后才接入图像算法。这样能把问题隔离在最小范围内。

总结来看,DVP、MIPI CSI-2和HDMI在Lattice FPGA上的接收实现各有侧重:DVP重同步与IO时序,MIPI重解串与包解析,HDMI重TMDS解码与高速约束。掌握摄像头I2C配置和接口调试方法,才能为后续图像处理提供稳定可靠的数据源。