3. PolarFire收发器与高速视频接口设计
在视频图像处理系统中,当分辨率提升到 1080p60、4K30 甚至更高,或者需要把多路视频汇聚到一条链路上传输时,并行 LVDS 接口的引脚数量、走线难度和时钟偏斜问题会迅速变得不可接受。PolarFire 器件内置的高速 SerDes 收发器正是为解决这类问题而设计的:它把宽位并行视频数据串行化,通过一对差分线传输,在接收端再恢复出数据和时钟。理解 SerDes 架构、CDR、8b/10b 编码以及 SDI、DisplayPort 协议,是设计高速视频接口的基础。
SerDes 架构与 CDR 的基本原理
SerDes 是 Serializer/Deserializer 的缩写,发送方向称为 TX,接收方向称为 RX。以 PolarFire 的收发器为例,TX 侧的核心路径是:FPGA 内部并行数据先进入 FIFO 做时钟域跨越,再经过编码器(如 8b/10b 或 64b/66b),然后由串行化器按位依次移出,最后经差分驱动器送到外部通道。RX 侧则相反:差分接收器把微弱信号放大并整形,CDR 从数据跳变中恢复出采样时钟,解串器把串行位流还原为并行字,再经解码和弹性缓冲输出给 FPGA 逻辑。
CDR(Clock Data Recovery,时钟数据恢复)是接收端最关键的部分。它不依赖单独的随路时钟,而是利用数据流本身的电平跳变来调整本地振荡器相位,使采样点始终落在数据眼图的中心。如果数据长时间没有跳变,CDR 会进入“保持”状态,靠本地时钟维持相位。因此,协议层必须保证足够的跳变密度,这正是 8b/10b 编码存在的重要原因之一。
8b/10b 编码的作用与代价
8b/10b 编码把每 8 位数据映射为 10 位符号,主要目的有三个:第一,保证串行流中有足够的 0/1 跳变,让 CDR 能持续锁定相位;第二,维持直流平衡,使差分线上的平均电压接近零,避免交流耦合电容积累电荷;第三,提供 K 码(控制字符),用于帧对齐、链路初始化和错误检测。代价是 25% 的带宽开销:如果视频数据率为 1.485 Gbps,编码后线路速率变为 1.485 × 10/8 = 1.85625 Gbps,这正是 SDI HD 的典型速率。
在 PolarFire 中配置收发器时,需要根据协议选择编码模式。SDI 使用 8b/10b,DisplayPort 的主链路则使用 8b/10b 或 64b/66b(取决于速率和版本)。如果选错编码方式,接收端无法正确对齐字边界,表现为链路无法建立或图像出现随机噪点。
SDI 与 DisplayPort 协议要点
SDI(Serial Digital Interface)是广播视频领域最常用的串行接口,常见速率包括 270 Mbps(SD)、1.485 Gbps(HD)、2.97 Gbps(3G)、5.94 Gbps(6G)和 11.88 Gbps(12G)。SDI 的帧结构由行同步码(SAV/EAV)和有效视频区组成,接收端通过检测特定的定时基准码(TRS)来恢复行场同步。在 PolarFire 上实现 SDI 接收,通常需要收发器工作在对应速率,并在 FPGA 逻辑中实现 TRS 检测、行缓冲和格式转换。
DisplayPort 则面向多通道、高分辨率场景,主链路(Main Link)由 1、2 或 4 条差分对组成,每条通道速率可为 1.62、2.7、5.4 或 8.1 Gbps。DisplayPort 使用微包(Micro Packet)结构传输视频流,并通过 AUX 通道进行链路训练、EDID 读取和速率协商。与 SDI 相比,DisplayPort 的链路建立过程更复杂,需要先完成时钟恢复、通道对齐和均衡训练,才能开始传输有效视频。
| 协议 | 典型速率 | 编码 | 通道数 | 典型应用 |
|---|---|---|---|---|
| SDI HD | 1.485 Gbps | 8b/10b | 1 | 广播摄像机、监视器 |
| SDI 3G | 2.97 Gbps | 8b/10b | 1 | 1080p60 视频 |
| DisplayPort 1.2 | 5.4 Gbps/lane | 8b/10b | 1/2/4 | 4K30 显示 |
| DisplayPort 1.4 | 8.1 Gbps/lane | 8b/10b | 1/2/4 | 4K60、8K |
使用 Transceiver 实现视频输入输出的关键步骤
以 PolarFire 实现一路 3G-SDI 输入为例,实际设计流程如下。第一步,在 Libero SoC 中例化 Transceiver 硬核,选择 SDI 模式或自定义模式,设置线路速率为 2.97 Gbps,参考时钟选择 148.5 MHz(对应 2.97 Gbps / 20,因为 8b/10b 后每 20 位对应 16 位数据)。第二步,配置 TX 和 RX 的 FIFO 深度、均衡器设置和预加重参数。对于短距离背板,预加重可设为 0 dB;对于长电缆,需要根据眼图测试结果调整。第三步,在 FPGA 逻辑中实现 SDI 接收状态机:检测 TRS 码、提取行号和场号、把 10 位符号解码为 8 位视频数据,并写入行缓冲。第四步,通过 AXI4-Stream 或原生视频接口把数据送到图像处理流水线。
发送方向则相反:视频源产生并行像素流,插入 TRS 和辅助数据,经 8b/10b 编码后送入收发器 TX,最终以差分信号输出。调试时,最直接的观察点是收发器的状态寄存器:CDR 锁定状态、字对齐状态、8b/10b 解码错误计数。如果 CDR 未锁定,应检查参考时钟频率和差分对极性;如果字对齐失败,应检查编码模式是否匹配;如果解码错误计数持续增长,通常说明信号完整性不足,需要调整预加重或检查电缆长度。
最后需要强调,SerDes 链路能否稳定工作,不仅取决于 FPGA 配置,还取决于 PCB 设计。差分对应保持 100 Ω 差分阻抗,长度匹配控制在 5 mil 以内,避免过孔和跨分割。对于 DisplayPort 的 4 通道应用,通道间偏斜应小于 0.5 UI,否则链路训练可能失败。把这些硬件约束和协议参数一起考虑,才能设计出可靠的高速视频接口。