FRL物理层协议基础:信号编码、眼图模板、均衡器类型和链路建立阶段
做量产测试这些年,我越来越觉得一个道理——
不懂物理层,你根本看不懂测试结果。
FRL(Fixed Rate Link)是HDMI 2.1的核心物理层技术,它跑在最高12Gbps的速率上。信号到了这个频率,什么串扰、反射、抖动全来了。你想想看,一个眼图闭合了,你连问题出在哪儿都不知道,还怎么判定Pass/Fail?
所以这一章,我把FRL物理层里最关键的四个东西掰开揉碎了讲:信号编码、眼图模板、均衡器类型和链路建立阶段。掌握了这些,你量产测试时的很多困惑自然就解开了。
本章核心脉络:FRL物理层 = 编码保证DC平衡 + 眼图定义判决边界 + 均衡器修复通道损伤 + 链路训练完成握手。四个环节缺一不可。
信号编码:不要小看这个“固定字”
FRL有三种编码模式:3Gbps以下用8b/10b,更高带宽用128b/130b。我个人习惯,在量产测试中直接看链路有没有报编码错误——只要编码层出了CRC错,十有八九是物理层未锁定或均衡没到位。
其实8b/10b和128b/130b的核心目标一样:维持DC平衡,保证数据流里0和1的数量尽量相等。这样接收端的AC耦合电容才不会饱和。128b/130b比8b/10b的开销小得多(1.5% vs 20%),所以高数据率时非它不可。
一个小技巧:在量产测试脚本里,如果看到LANEx_CRCE_Status反复跳变,优先查均衡器系数,不要急着怀疑线缆。我曾经被一根短bench cable坑了三天——那个连接器里的接触电阻大了20mΩ,就直接导致CTLE收敛失败。
眼图模板:判定的“及格线”
眼图模板说白了就是在示波器上画一个禁止进入的多边形。信号眼必须完全包住模板,不能有任何一比特碰到边缘。嗯,这句话说了无数遍,但真到量产测试时,你会发现很多人把余量测错。
我建议你这么看眼图结果:
- 眼高(Eye Height)—— 垂直张开幅度,至少大于FRL规范的门限(比如12Gbps时要求≥100mV)。
- 眼宽(Eye Width)—— 水平张开时间,通常要求≥0.5UI。
- 模板遮蔽比(Mask Margin)—— 实测眼距离模板边界的余量,单位dB。量产推荐留3dB以上。
| 数据速率 (Gbps) | 最小眼高 (mV) | 最小眼宽 (UI) | 模板余量 (dB) |
|---|---|---|---|
| 3.0 | 200 | 0.6 | ≥4 |
| 6.0 | 150 | 0.55 | ≥3.5 |
| 12.0 | 100 | 0.5 | ≥3 |
你看,速率越高,余量越小。这就是为什么12Gbps眼图测试最容易翻车。我在产线遇到过好几次:开放板测没问题,一装进整机眼高就掉到80mV。后来发现是SDD21不够,均衡器没压住插损摆荡。
均衡器类型:修复通道的“三剑客”
FRL的均衡器是自适应的,量产测试时你不需要手动调系数,但你必须知道它收敛了没有。三种均衡器各司其职:
- CTLE(连续时间线性均衡器)—— 在接收端放大高频成分,压低低频。它是第一道防线。如果CTLE增益到了上限眼图还不好,说明信道损耗太大。
- DFE(判决反馈均衡器)—— 消除码间串扰(ISI)。它用前几个比特的判决结果来修正当前比特。注意:DFE对突发性噪声敏感,量产测试中要确保无Impulse Noise。
- FFE(前馈均衡器)—— 发送端预加重。一般在Source端做。测试时你不需要管它的系数,但要看DFE是否报错——发端预加重不够会导致DFE系数过大。
避坑指南:我曾经在一次批量测试中,发现某批HDMI线缆的插入损耗处于规范上限,CTLE增益打到最大才勉强收敛,但量产测试系统噪声一波动就失败。后来我们把PCB走线加粗了0.1mm,CTLE余量瞬间提了2dB。所以做均衡器测试,一定要看余量,不要只看过没过。
链路建立阶段:从Training到Lock
FRL的链路建立不是一瞬间的事,它分三个阶段:
- HPD检测 & 源端初始化—— 接收端拉高HPD,源端检测到后开始发送TMDS时钟。
- Training Phase—— 发送端发Training Pattern,接收端做均衡器自适应,同时进行lane对齐。这个阶段你会看到CTLE/DFE系数在变化。
- 锁定状态 (Lock)—— 均衡器收敛、CDR锁相、数据字对齐。此时LANEx_Ready = 1,链路正式建立。
量产测试的快速判定本质上就是在HPD后等待一个Training Timeout,然后读寄存器看Lock状态。标准规定Training必须在5ms内完成,我一般给7ms余量。
// 典型链路建立判定逻辑(伪代码)
if (HPD == HIGH) {
delay_ms(7); // 等待Training完成
if (reg_Read(LANE0_READY) &&
reg_Read(LANE1_READY) &&
reg_Read(LANE2_READY) &&
reg_Read(LANE3_READY)) {
// 所有lane都Locked
status = PASS;
} else {
status = FAIL;
// 报告失败lane编号及均衡器状态
}
}
你可能会问:为什么有些产品Training一直不过?我踩过的坑有两种:一是HPD电平不干净有毛刺,接收端反复复位;二是Source端的TMDS时钟稳定性不够,导致CDR在锁定边缘震荡。归根结底,物理层的每个细节都可能卡住链路训练。
记住:读懂物理层的这四个基础模块,你才能在量产测试阶段快速定位问题。编码错误->查均衡器;眼图闭合->查通道损耗;Training失败->先看HPD和时钟。这样整理好思路,测试效率至少提升一倍。