第四章 FPGA内部SerDes硬核:Xilinx GTH/GTY与Intel Transceiver

各位同学,今天我们来聊聊FPGA里最硬核的部分——SerDes。说白了,就是那些高速串行收发器。我做了这么多年光通信,可以负责任地告诉你:不会调SerDes,就等于没入门高速设计

为什么这么说?你想想看,现在25G、100G甚至400G的光模块,哪个离得开SerDes?Xilinx有GTH、GTY,Intel有Transceiver,这些硬核才是真正决定链路质量的关键。

FPGA SerDes硬核 Xilinx GTH/GTY Intel Transceiver 通道绑定与速率配置 眼图测试与链路调优 常见链路抖动问题排查

4.1 Xilinx GTH与GTY:到底有什么区别?

先说说Xilinx家的两个主力。GTH和GTY,名字就差一个字母,性能可差不少。

参数 GTH GTY
最大速率 16.3 Gbps 32.75 Gbps
典型应用 10G/25G光模块 100G/400G光模块
PLL类型 CPLL + QPLL CPLL + QPLL + GTYPLL
功耗 较低 较高(但性能更强)

我个人习惯是:25G以下用GTH,25G以上必须上GTY。别想着省钱用GTH跑28G,我试过,眼图惨不忍睹。

小技巧:在Vivado里例化Transceiver时,记得勾选"Enable TX/RX Equalizer"。很多新手忽略这个,结果链路跑不起来。其实说白了,均衡器就是帮你补偿PCB走线损耗的。

4.2 Intel Transceiver:Altera时代的遗产

再说说Intel(原Altera)家的。Arria 10和Stratix 10上的Transceiver,我个人觉得在易用性上比Xilinx好一些。为什么?因为Intel的PHY IP封装得更完善,你不需要手动调那么多参数。

不过要注意:Intel的Transceiver分两种——HSSI和LVDS SerDes。HSSI才是真正的高速串行接口,别搞混了。

核心区别:Xilinx的GTH/GTY用GT Wizard配置,Intel的用ALTGX/PHY IP。前者灵活但复杂,后者封装好但定制性差。选哪个?看你项目需求。

4.3 通道绑定:把多个SerDes拧成一股绳

做100G光通信,一个SerDes通道不够用怎么办?通道绑定(Channel Bonding)就是干这个的。

说白了,就是把多个SerDes通道捆绑成一个逻辑通道。比如4个25G通道绑在一起,就成了100G。

我在项目中遇到过一个问题:绑定后的通道之间有时序偏差。为什么?因为每个通道的PLL锁定时间不一样,PCB走线长度也有差异。

解决办法是:

  • 使用Skew Compensation功能,手动调整每个通道的延迟
  • 在发送端插入对齐字符(比如COM码),接收端根据对齐字符做同步
  • 检查PCB走线,尽量保证等长
警告:通道绑定不是越多越好。我见过有人把8个通道绑在一起,结果因为一个通道的PLL失锁,整个链路都挂了。建议:能用4个通道就别用8个

4.4 速率配置:别被"自动协商"坑了

速率配置这块,很多新手喜欢用自动协商。嗯,这里要注意:自动协商在FPGA SerDes里并不靠谱

为什么?因为光模块和FPGA之间的速率协商,往往需要握手协议。如果两端支持的速率不一致,自动协商可能会陷入死循环。

我建议的做法是:

  1. 先确定光模块支持的速率(看datasheet)
  2. 在GT Wizard里手动设置线速率(Line Rate)
  3. 设置参考时钟频率(比如156.25MHz用于25G)
  4. 检查PLL分频比是否正确

// 以Xilinx GTH为例,25G速率配置
// 参考时钟:156.25 MHz
// 线速率:25.78125 Gbps (25G光模块标准)
// PLL分频比:N = 66, M = 4

// 在GT Wizard中设置:
// Line Rate: 25.78125
// Reference Clock: 156.25
// TX PLL: QPLL0
// RX PLL: QPLL0
// Data Width: 64 (内部数据位宽)

4.5 眼图测试:链路质量的照妖镜

眼图测试,说白了就是看信号质量好不好。我每次调完链路,第一件事就是打开眼图看看。

怎么看?

  • 眼高(Eye Height):越大越好,一般要求大于200mV
  • 眼宽(Eye Width):越大越好,一般要求大于0.5UI
  • 抖动(Jitter):越小越好,一般要求小于0.3UI

我记得有一次,眼图看起来很好,但链路就是有误码。后来发现是码间干扰(ISI)造成的。眼图看着干净,但实际采样点位置不对。

调优技巧:如果眼图闭合,先调TX的预加重(Pre-emphasis),再调RX的均衡器(CTLE/DFE)。我一般先给预加重加3dB,看看眼图有没有改善。

4.6 链路调优:从"能跑"到"跑得好"

链路调优是个细活。我总结了一套流程:

  1. 粗调:确保链路能锁定,有数据输出
  2. 眼图优化:调整TX/RX参数,让眼图打开
  3. 误码率测试:跑PRBS码型,看BER是否达标
  4. 压力测试:跑实际业务数据,看长时间稳定性

我曾经遇到一个案例:链路在常温下跑得好好的,一进高温箱就掉线。排查了半天,发现是温度漂移导致PLL失锁。解决办法是:在代码里加一个PLL失锁检测,失锁后自动重新锁定。

4.7 常见链路抖动问题排查

抖动是SerDes链路最大的敌人。常见的抖动问题有:

抖动类型 原因 排查方法
随机抖动(RJ) 热噪声、电源噪声 检查电源纹波,加去耦电容
确定性抖动(DJ) 码间干扰、反射 调整均衡器,检查PCB阻抗
周期抖动(PJ) 时钟串扰 检查时钟走线,加屏蔽
占空比失真(DCD) TX/RX偏置不平衡 调整TX swing,检查AC耦合电容

排查抖动,我有个习惯:先看频谱,再看眼图。频谱仪能告诉你抖动的主要频率成分,眼图能告诉你抖动对信号的影响程度。

避坑指南:我曾经被一个"幽灵抖动"折磨了两周。眼图时好时坏,误码率忽高忽低。最后发现是隔壁板卡的电源噪声通过地平面耦合过来了。解决办法:在PCB布局时,把SerDes电源和数字电源隔离开。

好了,这一章的内容就到这里。SerDes调优是个经验活,多动手、多踩坑,慢慢就熟练了。


专注资料整理