FRL物理层协议基础:信号编码、眼图模板、均衡器类型和链路建立阶段

做量产测试这些年,我越来越觉得一个道理——

不懂物理层,你根本看不懂测试结果。

FRL(Fixed Rate Link)是HDMI 2.1的核心物理层技术,它跑在最高12Gbps的速率上。信号到了这个频率,什么串扰、反射、抖动全来了。你想想看,一个眼图闭合了,你连问题出在哪儿都不知道,还怎么判定Pass/Fail?

所以这一章,我把FRL物理层里最关键的四个东西掰开揉碎了讲:信号编码、眼图模板、均衡器类型和链路建立阶段。掌握了这些,你量产测试时的很多困惑自然就解开了。

本章核心脉络:FRL物理层 = 编码保证DC平衡 + 眼图定义判决边界 + 均衡器修复通道损伤 + 链路训练完成握手。四个环节缺一不可。

FRL 物理层核心模块 信号编码 8b/10b · 128b/130b 眼图模板 电压/时间余量 均衡器 CTLE · DFE · FFE 链路建立 Training · Lock 编码保证DC平衡 → 眼图定义判决标准 → 均衡器补偿信道损耗 → 链路训练建立稳定连接 检测编码错误 数据字对齐 眼高 · 眼宽 模板遮蔽比 CTLE/DFE系数 收敛状态 Training完成 Lane Locked 量产测试判定基础:四维指标缺一不可

信号编码:不要小看这个“固定字”

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收敛失败。

眼图模板:判定的“及格线”

眼图模板说白了就是在示波器上画一个禁止进入的多边形。信号眼必须完全包住模板,不能有任何一比特碰到边缘。嗯,这句话说了无数遍,但真到量产测试时,你会发现很多人把余量测错。

我建议你这么看眼图结果:

  1. 眼高(Eye Height)—— 垂直张开幅度,至少大于FRL规范的门限(比如12Gbps时要求≥100mV)。
  2. 眼宽(Eye Width)—— 水平张开时间,通常要求≥0.5UI。
  3. 模板遮蔽比(Mask Margin)—— 实测眼距离模板边界的余量,单位dB。量产推荐留3dB以上。
FRL各速率眼图典型参数(量产测试推荐值)
数据速率 (Gbps)最小眼高 (mV)最小眼宽 (UI)模板余量 (dB)
3.02000.6≥4
6.01500.55≥3.5
12.01000.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的链路建立不是一瞬间的事,它分三个阶段:

  1. HPD检测 & 源端初始化—— 接收端拉高HPD,源端检测到后开始发送TMDS时钟。
  2. Training Phase—— 发送端发Training Pattern,接收端做均衡器自适应,同时进行lane对齐。这个阶段你会看到CTLE/DFE系数在变化。
  3. 锁定状态 (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和时钟。这样整理好思路,测试效率至少提升一倍。