第四章 FPGA内部SerDes硬核:Xilinx GTH/GTY与Intel Transceiver
各位同学,今天我们来聊聊FPGA里最硬核的部分——SerDes。说白了,就是那些高速串行收发器。我做了这么多年光通信,可以负责任地告诉你:不会调SerDes,就等于没入门高速设计。
为什么这么说?你想想看,现在25G、100G甚至400G的光模块,哪个离得开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,我试过,眼图惨不忍睹。
4.2 Intel Transceiver:Altera时代的遗产
再说说Intel(原Altera)家的。Arria 10和Stratix 10上的Transceiver,我个人觉得在易用性上比Xilinx好一些。为什么?因为Intel的PHY IP封装得更完善,你不需要手动调那么多参数。
不过要注意:Intel的Transceiver分两种——HSSI和LVDS SerDes。HSSI才是真正的高速串行接口,别搞混了。
4.3 通道绑定:把多个SerDes拧成一股绳
做100G光通信,一个SerDes通道不够用怎么办?通道绑定(Channel Bonding)就是干这个的。
说白了,就是把多个SerDes通道捆绑成一个逻辑通道。比如4个25G通道绑在一起,就成了100G。
我在项目中遇到过一个问题:绑定后的通道之间有时序偏差。为什么?因为每个通道的PLL锁定时间不一样,PCB走线长度也有差异。
解决办法是:
- 使用Skew Compensation功能,手动调整每个通道的延迟
- 在发送端插入对齐字符(比如COM码),接收端根据对齐字符做同步
- 检查PCB走线,尽量保证等长
4.4 速率配置:别被"自动协商"坑了
速率配置这块,很多新手喜欢用自动协商。嗯,这里要注意:自动协商在FPGA SerDes里并不靠谱。
为什么?因为光模块和FPGA之间的速率协商,往往需要握手协议。如果两端支持的速率不一致,自动协商可能会陷入死循环。
我建议的做法是:
- 先确定光模块支持的速率(看datasheet)
- 在GT Wizard里手动设置线速率(Line Rate)
- 设置参考时钟频率(比如156.25MHz用于25G)
- 检查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)造成的。眼图看着干净,但实际采样点位置不对。
4.6 链路调优:从"能跑"到"跑得好"
链路调优是个细活。我总结了一套流程:
- 粗调:确保链路能锁定,有数据输出
- 眼图优化:调整TX/RX参数,让眼图打开
- 误码率测试:跑PRBS码型,看BER是否达标
- 压力测试:跑实际业务数据,看长时间稳定性
我曾经遇到一个案例:链路在常温下跑得好好的,一进高温箱就掉线。排查了半天,发现是温度漂移导致PLL失锁。解决办法是:在代码里加一个PLL失锁检测,失锁后自动重新锁定。
4.7 常见链路抖动问题排查
抖动是SerDes链路最大的敌人。常见的抖动问题有:
| 抖动类型 | 原因 | 排查方法 |
|---|---|---|
| 随机抖动(RJ) | 热噪声、电源噪声 | 检查电源纹波,加去耦电容 |
| 确定性抖动(DJ) | 码间干扰、反射 | 调整均衡器,检查PCB阻抗 |
| 周期抖动(PJ) | 时钟串扰 | 检查时钟走线,加屏蔽 |
| 占空比失真(DCD) | TX/RX偏置不平衡 | 调整TX swing,检查AC耦合电容 |
排查抖动,我有个习惯:先看频谱,再看眼图。频谱仪能告诉你抖动的主要频率成分,眼图能告诉你抖动对信号的影响程度。
好了,这一章的内容就到这里。SerDes调优是个经验活,多动手、多踩坑,慢慢就熟练了。