UFS PHY 发送端参数(Tx EQ、预加重、去加重)
发送端参数的调优,是整个链路调试的起点。很多人一上来就死磕接收端均衡,其实信号质量好不好,源头先得干净。我做过好几个项目,最后发现接收端怎么调都调不好,回头一看,是发送端预加重根本没开对。嗯,先花点时间把发送端理清楚,后面会省很多事。
预加重(Pre-emphasis)与去加重(De-emphasis)
这两个概念经常被搞混。说白了,它们都是针对高频分量的补偿。高速信号在传输线上衰减,高频成分丢得更多,所以我们要预先“抬”一下高频,或者“压”一下低频。
- 预加重:在信号跳变沿(高频分量)处,增加幅度,让高频能量更大。参数一般是增益倍数(如 +3dB、+6dB)。
- 去加重:保持跳变沿幅度不变,降低非跳变沿(平稳段)的幅度。相当于相对突出高频。参数一般是衰减量(如 -3dB、-6dB)。
我个人的习惯:如果链路比较短(比如板内走线 < 5cm),预加重和去加重可以不开,或者只给很小一档。如果走线超过10cm或者经过连接器,基本必须开。记得有个项目,信号眼图始终不张开,我试着把去加重从 -3dB 调到 -6dB,眼高立刻提升了 30%。
| 参数 | 原理 | 常用范围 | 适用场景 |
|---|---|---|---|
| 预加重 | 提升跳变沿幅度 | +3dB ~ +9dB | 链路衰减中等,高频损失明显 |
| 去加重 | 降低非跳变沿幅度 | -3dB ~ -12dB | 链路衰减较大,或接收端均衡能力弱 |
核心经验:预加重和去加重本质是同一件事的两种实现方式。硬件实现上,很多 PHY 只支持一种,或者通过同一组寄存器映射。调试时先看芯片手册,别做无用功。
Tx 均衡器(Tx Equalizer)
Tx EQ 是更通用的说法。它通常包含一个有限冲激响应(FIR)滤波器。通过多个抽头(tap)来预补偿信道的频率响应。最简单的 Tx EQ 有 3 个抽头:前标(pre-cursor)、主标(main cursor)、后标(post-cursor)。
- Pre-cursor:调节当前符号之前那个符号的影响,通常用于消除码间串扰(ISI)的前沿部分。
- Main cursor:主抽头,决定信号幅度,一般归一化为 1,调节范围很小。
- Post-cursor:调节当前符号之后那个符号的影响,补偿通道的后沿拖尾。
实际调试中,我一般先固定 main cursor = 1,然后扫 post-cursor 系数(从 -0.1 到 -0.4 左右),再微调 pre-cursor。曾经有一块板子,跑 UFS 3.0,死活过不了一致性测试。我试了十几种组合,最后发现是 post-cursor 给得太大了,导致眼图中心塌陷。降到 -0.15 之后,一切正常。
调试技巧:如果手头有示波器,先看眼图。如果眼高不够,加大预加重或去加重;如果眼宽不够,减小后标系数。别同时动好几个参数,一步一步来。
发送端参数联合调优流程
你想想看,发送端这几个参数其实是连在一起的。预加重/去加重和 Tx EQ 的抽头系数,最终都会影响驱动器的输出波形。下面这张图是我自己整理的调试流程,比较实用。
曾经踩过的坑:有次我调 UFS 2.1 的发送端,把去加重和 post-cursor 同时开得很大,结果信号出现过冲,烧了接收端输入保护二极管。硬件同事差点要打我。后来我才明白,预加重/去加重和 Tx EQ 的后标抽头在频率补偿上是重叠的,不能简单叠加。建议先只开一类,另一种保留默认或关掉。
参数设置示例(寄存器配置)
以某款 UFS PHY 为例,发送端参数通常通过 MIPI MPHY 的配置寄存器访问。下面是一段伪代码,展示如何设置 3-tap Tx EQ:
// 伪代码:配置 UFS PHY 发送端 3-tap 均衡器
// 目标:主抽头 = 1.0,前标 = -0.08,后标 = -0.20
UFS_PHY_Write(TX_EQ_CTRL, 0x01); // 使能 Tx EQ 模块
// 设置各抽头系数(假设有符号 Q8 格式)
UFS_PHY_Write(TX_PRE_CURSOR, 0xF8); // -0.08 的十六进制补码
UFS_PHY_Write(TX_MAIN_CURSOR, 0x80); // 1.0
UFS_PHY_Write(TX_POST_CURSOR, 0xE0); // -0.20
// 设置预加重模式(如果芯片支持)
UFS_PHY_Write(TX_PREEMPHASIS, 0x03); // +6dB
注意不同厂家的寄存器位宽和量化方式不同。我一般先读回默认值,确定是补码格式还是偏移二进制格式,写错一位数,可能眼图就关掉了。
调试中的常见误区
- 预加重和去加重同时开到最大——信号会过冲,甚至产生负电压,引发接收端损坏。
- 只调发送端不调接收端——发送端只是起点,接收端的 CTLE 和 DFE 同样重要,后面章节再细说。
- 盲目参考参考设计的寄存器值——不同 PCB 板材、走线长度、连接器品牌,最佳值差异很大。我习惯在目标板上做 scan,而不是复制粘贴。
- 忽略温度变化——高温下铜损增大,预加重可能需要提一档。要是产测只在室温做,到了客户机房可能就误码了。
调试时准备一份参数表格,记录每组系数对应的眼图高度、眼图宽度、抖动 RMS。数据多了,规律自然就出来了。我自己的表格里还会加上温度和电压,方便复现问题。