3. Zynq视频输入通路设计

在Zynq视频处理系统中,输入通路决定了整条流水线的“源头质量”。无论后续是图像增强、编码压缩还是AI推理,一旦输入采集阶段出现丢帧、撕裂、色彩错位或时序违例,后级算法再强也难以恢复。Zynq的可编程逻辑(PL)与处理系统(PS)协同架构,为多类型视频输入提供了灵活的实现基础:PL负责高速串行接收、像素重组与缓冲,PS负责寄存器配置、状态监控与上层调度。本节围绕MIPI CSI-2、HDMI、SDI三类主流输入,以及视频解码芯片的I2C/SPI控制、输入时序约束与采集实现展开。

三类输入通路的物理层与协议层差异

MIPI CSI-2常见于图像传感器和嵌入式摄像头模组,采用D-PHY或C-PHY差分对传输,典型配置为1~4条数据lane加1条时钟lane,单lane速率可达1.5~2.5 Gbps。CSI-2协议层包含短包(帧同步、行同步)和长包(有效像素数据),像素格式以RAW10、RAW12、YUV422、RGB888为主。在Zynq-7000上通常借助SelectIO或专用MIPI IP实现D-PHY接收,再经CSI-2 RX Controller解包为AXI4-Stream像素流。

HDMI输入面向消费级摄像机、机顶盒和PC显卡,电气层为TMDS差分信号,包含3条数据通道和1条时钟通道。HDMI 1.4支持最高1080p60,HDMI 2.0提升至4K60但需要更高线速率。接收端需完成TMDS解码、通道对齐、视频时序提取和音频分离。Zynq上常用HDMI RX Subsystem IP,其内部集成TMDS接收器、视频时序控制器和AXI4-Stream输出接口。

SDI输入主要用于广播级和专业视频设备,采用75Ω同轴电缆传输,常见标准包括SD-SDI(270 Mbps)、HD-SDI(1.485 Gbps)、3G-SDI(2.97 Gbps)乃至12G-SDI。SDI信号经过电缆均衡、时钟恢复和串并转换后,由SDI解码器提取视频、嵌入音频和辅助数据。Zynq PL中可通过GT收发器或专用SDI IP实现接收,输出BT.1120或AXI4-Stream格式。

Zynq 视频输入通路:三类接口 → PL 接收 → PS 控制 → 采集输出 MIPI CSI-2 D-PHY / C-PHY 差分对 1~4 lane + 1 clk 1.5~2.5 Gbps/lane RAW10/12 · YUV422 · RGB888 短包:FS/FE/LS/LE 长包:有效像素数据 典型器件:IMX219 / OV5640 HDMI 输入 TMDS 差分:3 data + 1 clk HDMI 1.4:1080p60 HDMI 2.0:4K60 TMDS 解码 + 通道对齐 视频时序提取 + 音频分离 常用 IP:HDMI RX Subsystem 输出:AXI4-Stream 像素流 SDI 输入 75Ω 同轴电缆 SD-SDI:270 Mbps HD-SDI:1.485 Gbps 3G-SDI:2.97 Gbps 电缆均衡 + 时钟恢复 嵌入音频 + 辅助数据 输出:BT.1120 / AXI4-Stream Zynq PL(可编程逻辑)— 高速接收与像素重组 D-PHY / TMDS / GT 接收 串并转换 · 通道对齐 协议解码与解包 CSI-2 / HDMI / SDI 解码 像素格式转换 RAW→RGB · YUV→RGB VDMA / 帧缓冲 AXI4-Stream → DDR Zynq PS(处理系统)— 配置、控制与调度 I2C/SPI 寄存器配置 · 中断处理 · 帧率监控 · 上层应用接口 I2C/SPI 控制路径贯穿 PS→PL→传感器/解码芯片,实现初始化、参数调整与状态回读

视频解码芯片配置与I2C/SPI控制

对于模拟视频输入(如CVBS、YPbPr)或需要格式转换的场景,通常在前端接入视频解码芯片,例如TVP5150、ADV7180、ADV7611等。这类芯片通过I2C或SPI接口接受寄存器配置,输出BT.656、BT.1120或MIPI CSI-2格式的数字视频流。以ADV7611为例,其I2C从地址为0x98(7位地址0x4C),上电后需依次配置输入通道选择、EDID、HDMI接收使能、色彩空间转换等寄存器。典型初始化序列如下:

// ADV7611 简化初始化示例(I2C 7位地址 0x4C)
i2c_write(0x4C, 0x00, 0x00);  // 选择 HDMI 端口 A
i2c_write(0x4C, 0x01, 0x80);  // 使能 HDMI 接收
i2c_write(0x4C, 0x02, 0x03);  // 设置输出格式为 RGB888
i2c_write(0x4C, 0x03, 0x1E);  // 配置色彩空间转换矩阵
i2c_write(0x4C, 0x04, 0x01);  // 启动视频输出
// 回读状态寄存器确认锁定
status = i2c_read(0x4C, 0x10);
if (status & 0x01) { /* HDMI 已锁定 */ }

在Zynq中,I2C控制器可由PS端的I2C外设实现,也可在PL中通过AXI IIC IP实现。PS端I2C的优势是软件成熟、中断处理方便,适合配置频率较低(100~400 kHz)的寄存器写入;PL端I2C则更适合需要精确时序控制或多路复用的场景。SPI控制通常用于需要更高配置带宽的解码芯片或FPGA配置,Zynq PS端提供SPI控制器,PL端也可通过AXI Quad SPI IP扩展。

I2C总线上挂载多个从设备时,务必确认每个设备的7位地址不冲突。ADV7611的地址由ADDR引脚电平决定,常见配置为0x4C或0x4D。上电后建议先执行一次总线扫描,确认设备应答后再进行寄存器配置。

输入时序约束与采集实现

视频输入时序约束是保证采集稳定性的关键。以1080p60为例,像素时钟为148.5 MHz,行总周期为2200像素时钟,其中有效像素1920,行消隐280;场总周期为1125行,其中有效行1080,场消隐45。在Zynq PL中,需要为像素时钟创建时序约束,确保建立时间和保持时间满足要求。典型XDC约束如下:

# 1080p60 像素时钟约束
create_clock -period 6.734 -name pix_clk [get_ports pix_clk_in]
# 输入数据相对于像素时钟的建立/保持约束
set_input_delay -clock pix_clk -max 2.0 [get_ports {vid_data[*]}]
set_input_delay -clock pix_clk -min 1.0 [get_ports {vid_data[*]}]
# 行同步与场同步约束
set_input_delay -clock pix_clk -max 2.0 [get_ports {vid_hsync vid_vsync vid_de}]
set_input_delay -clock pix_clk -min 1.0 [get_ports {vid_hsync vid_vsync vid_de}]

采集实现通常采用“异步FIFO + 跨时钟域同步”的结构。输入像素流在像素时钟域下写入FIFO,AXI4-Stream接口在PL系统时钟域下读出,FIFO深度需覆盖至少一行像素加消隐余量。对于1080p60,一行有效像素1920个,若像素格式为RGB888(24位),则一行数据量为1920×3=5760字节。FIFO深度建议设置为8192字节以上,以吸收时钟抖动和突发传输延迟。

采集状态机一般包含以下状态:等待帧同步(VSYNC上升沿或FS短包)、等待行有效(DE拉高或LS短包)、像素写入FIFO、行结束处理、帧结束处理。在帧结束时可产生中断通知PS端读取帧缓冲。若使用VDMA,则需配置S2MM通道,设置帧缓冲地址、帧长度和循环模式,并通过AXI4-Stream接口接收像素数据。

输入时序约束中,set_input_delay的值必须根据实际PCB走线延迟和器件手册的建立/保持时间计算,不能直接照搬示例值。若约束过紧会导致时序违例,过松则可能在实际硬件上出现采样错误。建议先用示波器或ILA测量实际数据与时钟的相位关系,再调整约束参数。

多路输入的选择与切换策略

实际系统常需支持多路输入切换,例如同时接入MIPI摄像头和HDMI信号源。此时可在PL中设计一个输入多路复用器(MUX),根据PS端下发的控制寄存器选择当前活跃输入通道。切换时需注意:先停止当前通道的采集,清空FIFO,再配置新通道的接收参数,最后重新使能采集。对于HDMI和SDI这类需要锁定时间的接口,切换后应等待锁定状态寄存器确认稳定后再开始采集,避免输出花屏或撕裂。

若多路输入需要同时采集,则应为每路分配独立的FIFO和VDMA通道,并在PS端通过中断或轮询方式分别读取。此时DDR带宽成为关键约束:以两路1080p60 RGB888为例,每路像素率为148.5 Mpixel/s,每像素3字节,合计约891 MB/s的写入带宽,加上读取和显示带宽,需确保DDR控制器配置和AXI互联带宽满足需求。

采集结果验证与常见问题判断

采集是否成功可通过以下方式判断:读取VDMA状态寄存器确认帧计数递增;通过ILA抓取AXI4-Stream的TUSER(帧起始)和TLAST(行结束)信号,确认时序符合预期;将采集到的帧缓冲通过SDK或Linux应用读出,检查图像是否完整、色彩是否正确。常见问题包括:I2C配置失败导致无数据输出、像素时钟约束不足导致间歇性花屏、FIFO溢出导致丢行、VDMA帧缓冲地址未对齐导致传输错误。排查时建议先确认I2C通信正常,再用ILA观察像素时钟和数据有效信号,最后检查DDR带宽和VDMA配置。

输入通路设计是Zynq视频系统的第一道关口。理解三类接口的物理层差异、掌握解码芯片的寄存器配置方法、建立正确的时序约束、设计可靠的跨时钟域采集结构,才能为后续的图像处理和编码提供稳定、高质量的像素流。