1. FMC128视频输入输出子卡概述
FMC128是一款基于FMC(FPGA Mezzanine Card)标准的工业级视频处理子卡,我在实际项目中多次使用这款板卡进行高清视频采集与处理系统的开发。它的核心功能是提供1路HD-SDI输入输出通道和1路复合视频(CVBS)输入输出通道,特别适合需要同时处理高清和标清视频信号的工业视觉应用场景。
这块板卡最突出的特点是其硬件兼容性设计。采用标准的FMC HPC(High Pin Count)接口,可以直接插接在Xilinx全系列开发板上使用,包括Virtex-6/Virtex-7、Kintex UltraScale、Zynq-7000和Zynq UltraScale+等平台。我在多个项目中使用过与KC705、ZC706等开发板的组合方案,机械和电气连接都非常稳定。
从应用场景来看,FMC128特别适合以下三类需求:
- 工业相机测试平台搭建 - 通过HD-SDI接口可以连接720P/1080P工业相机,同时通过复合视频接口接入传统模拟摄像头
- 视频处理算法验证 - 利用FPGA实现视频编解码、图像增强等算法的实时处理验证
- 多格式视频信号源模拟 - 可同时输出HD-SDI和CVBS信号,用于视频系统测试
2. 硬件架构与技术参数解析
2.1 HD-SDI接口设计
HD-SDI部分采用Xilinx FPGA的GTX收发器直接实现,这种设计我在多个项目验证过其可靠性。板卡支持两种传输速率:
- 1.485Gb/s(对应720p50/60、1080i50/60等格式)
- 2.97Gb/s(对应1080p50/60格式)
实际使用中需要注意,GTX参考时钟必须配置为148.5MHz(对于1.485Gb/s)或148.5/1.001MHz(用于NTSC制式)。我在初期使用时曾因时钟配置错误导致链路无法锁定,后来通过Xilinx的IBERT工具才排查出问题。
接口采用标准的75Ω BNC连接器,布线时要注意保持阻抗连续。有个实用技巧:在PCB设计时,从FPGA到连接器的走线长度最好控制在3英寸以内,过长的走线会导致信号完整性下降。
2.2 复合视频接口实现
复合视频输入采用ADI的ADV7180解码芯片,这是一款支持多制式的视频解码器。在FMC128上它被配置为PAL制式(我国常用的电视标准),最高支持720×576分辨率。
输出端使用SAF7129编码芯片,同样固定为PAL制式。这里有个实际应用中的经验:当需要处理NTSC信号时,需要修改芯片寄存器配置,但硬件电路不需要改动。
2.3 机械与电气特性
板卡严格遵循ANSI/VITA 57.1-2008标准,尺寸为69×76.5mm。安装时需要注意:
- 四个安装孔直径2.7mm
- 建议使用M2.5规格的螺丝固定
- 安装时需确保FMC连接器完全插合
供电方面采用+12V单电源输入,最大电流0.5A。实测功耗约2W,在工业环境中表现出良好的稳定性。工作温度范围-20℃到+70℃,完全满足大多数工业应用需求。
3. 软件开发与系统集成
3.1 FPGA逻辑设计要点
对于Xilinx平台,HD-SDI部分需要使用专用的SMPTE IP核。根据我的经验,建议采用以下配置:
verilog复制// HD-SDI RX配置示例
vid_phy_controller vid_phy_controller_inst (
.tx_refclk_gt(148.5MHz), // 参考时钟
.rx_serial_p(HD_SDI_P), // 差分输入正端
.rx_serial_n(HD_SDI_N), // 差分输入负端
.rx_video_clk(vid_clk), // 恢复的视频时钟
.rx_video_data(vid_data) // 视频数据总线
);
复合视频接口的FPGA侧需要实现:
- 对ADV7180的I2C配置
- 视频数据采集时序控制
- 可能的去隔行处理(针对交错视频)
3.2 驱动开发注意事项
在Zynq平台上开发Linux驱动时,需要注意:
- 为ADV7180和SAF7129编写I2C驱动
- 配置VDMA用于视频数据传输
- 设置正确的视频时序参数
一个常见的坑是DMA缓冲区对齐问题。建议将帧缓冲区按4KB边界对齐,可以避免很多奇怪的性能问题。
3.3 典型应用代码结构
一个基本的视频处理应用通常包含以下模块:
- 视频采集模块(HD-SDI/CVBS)
- 色彩空间转换(YUV到RGB)
- 图像处理算法(如边缘检测)
- 视频输出模块
以下是简单的伪代码示例:
c复制void video_pipeline() {
// 初始化视频输入
hdsdi_input_init();
cvbs_input_init();
// 创建处理线程
while(1) {
frame = capture_frame();
processed = image_processing(frame);
output_frame(processed);
}
}
4. 实际应用案例与调试技巧
4.1 工业视觉检测系统搭建
在某液晶面板检测项目中,我们使用FMC128实现了以下功能链:
- 通过HD-SDI接入4K相机(通过下变换器连接到板卡)
- 使用CVBS接口接入生产线监控摄像头
- 在FPGA中实现缺陷检测算法
- 通过千兆以太网将结果上传到服务器
这个方案的优势在于可以同时处理不同来源的视频信号,且延迟可控。
4.2 常见问题排查指南
根据我的经验,以下是几个典型问题及解决方法:
问题1:HD-SDI链路无法锁定
- 检查GTX参考时钟频率
- 验证BNC连接器阻抗是否匹配
- 使用眼图仪检查信号质量
问题2:复合视频图像有噪点
- 检查电源滤波电容
- 调整ADV7180的AGC设置
- 确保视频信号幅度达到1Vpp标准
问题3:FPGA侧收不到视频数据
- 验证I2C配置是否成功
- 检查视频时序参数(如Hsync/Vsync极性)
- 确认DMA引擎已正确初始化
4.3 性能优化建议
-
对于高清视频处理,建议:
- 使用AXI Stream接口提高数据传输效率
- 采用双缓冲机制避免帧丢失
- 优化内存访问模式
-
在多通道处理时:
- 合理分配FPGA资源
- 使用时间分割复用技术
- 考虑采用部分重配置技术
5. 扩展应用与进阶技巧
5.1 多板卡级联方案
在需要处理多路视频的场合,可以通过以下方式扩展:
- 使用带多个FMC接口的载板(如Xilinx VC709)
- 开发PCIe扩展箱实现多卡并行
- 设计自定义背板进行板卡互连
我曾在一个广电项目中成功实现了4块FMC128的并行工作,总吞吐量达到12Gbps。
5.2 与CameraLink设备的集成
虽然FMC128本身不支持CameraLink,但可以通过以下方式桥接:
- 使用CameraLink到HD-SDI转换器
- 开发基于FPGA的协议转换模块
- 采用现成的接口转换板卡
这种方案在医疗影像设备中特别有用,可以实现传统设备与现代系统的无缝对接。
5.3 低延迟视频处理实现
对于需要极低延迟的应用(如工业控制),建议:
- 绕过DDR直接处理视频流
- 使用FPGA内部的Block RAM作为缓冲区
- 优化处理流水线级数
在机器人视觉系统中,我们成功将端到端延迟控制在3ms以内,这对实时控制至关重要。