1. GTP/GTX收发器基础:SerDes原理、PMA/PCS架构、时钟架构与参考时钟选择

各位同学好,我是老李。做FPGA高速接口设计十几年了,今天咱们聊聊GTP/GTX收发器的基础。说实话,这玩意儿刚接触时我也觉得头大——一堆缩写、一堆寄存器、还有各种时钟约束。但搞明白了,你会发现它其实挺有章法的。

1.1 SerDes原理:串行化与解串行化

SerDes,全称Serializer/Deserializer。说白了,就是把并行数据转成串行发出去,收回来再转回并行。为什么要这么折腾?

你想想看,如果一根线上传8位数据,需要8根线。但用SerDes,一根差分对就够了。对于背板、光模块这些场景,少一根线就是省一大笔钱。

核心思想:用高速串行链路替代并行总线,降低引脚数、减少PCB布线压力、提高传输距离。

GTP/GTX的SerDes内部,发送端有个并转串的移位寄存器,接收端有个串转并的移位寄存器。时钟频率决定了数据率。比如GTP最高能跑到6.6Gbps,GTX能到12.5Gbps。我当年做的一个项目,用GTP跑5Gbps,结果眼图一直张不开,后来发现是参考时钟抖动太大——嗯,这个后面细说。

1.2 PMA/PCS架构:物理介质接入与物理编码子层

GTP/GTX收发器内部,分两大块:PMA和PCS。你可以把PMA理解成「纯模拟的物理层」,PCS是「数字逻辑的处理层」。

PMA层

  • 发送端:Serializer(并转串)、TX Buffer、预加重/去加重电路
  • 接收端:RX Buffer、CDR(时钟数据恢复)、De-serializer(串转并)
  • 时钟:PLL(锁相环)产生高速时钟

PMA是纯模拟电路,你没法用Verilog去控制它内部细节。只能通过配置寄存器来调参数。比如预加重的强度、接收均衡的档位。我在项目中遇到过,一块板子在不同温度下眼图差异很大,就是靠调PMA的均衡参数搞定的。

PCS层

  • 8B/10B编码:把8位数据编码成10位,保证直流平衡、提供时钟信息
  • 弹性缓冲:处理两个时钟域之间的相位差
  • 通道绑定:多通道对齐
  • PRBS生成/校验:用于链路测试

PCS是数字逻辑,你可以用IP核的配置界面去选。比如用8B/10B还是64B/66B编码,要不要加CRC校验。我个人习惯,调试阶段先用8B/10B,因为它简单、好定位问题。

小提示:GTP只支持8B/10B编码,GTX支持8B/10B和64B/66B。如果你需要更高的编码效率(比如10G以上),选GTX的64B/66B。

1.3 时钟架构与参考时钟选择

时钟是高速收发器的命脉。时钟抖了,眼图就糊了。眼图糊了,误码率就上去了。误码率上去了,项目就黄了。

时钟架构

GTP/GTX的时钟架构,核心是PLL。PLL把参考时钟倍频到线速率。比如参考时钟125MHz,要跑5Gbps,倍频系数就是40。

收发器内部一般有两个PLL:

  • CPLL(Channel PLL):每个通道独立,锁定时间快,但抖动性能一般
  • QPLL(Quad PLL):四个通道共享,抖动性能好,适合高速率

我建议:速率低于6.6Gbps用CPLL,高于6.6Gbps用QPLL。当然,具体还要看你的参考时钟质量。

GTP/GTX收发器时钟架构 参考时钟 CPLL QPLL TX PMA RX PMA PCS 8B/10B编码 弹性缓冲 图例说明 参考时钟输入(差分或单端) CPLL:每个通道独立,锁定快,适合中低速 QPLL:四通道共享,抖动低,适合高速

参考时钟选择

参考时钟的选择,直接决定了收发器能不能稳定工作。我见过太多人在这上面栽跟头。

参数 要求 说明
频率 根据线速率和PLL倍频系数确定 常用:125MHz、156.25MHz、100MHz
抖动 RMS抖动 < 1ps(典型值) 抖动大了,CDR锁不住,误码率飙升
精度 ±50ppm以内 晶振或温补晶振(TCXO)
电平 LVDS、LVPECL、HCSL 差分信号抗干扰能力强

注意:千万不要用FPGA内部PLL产生的时钟作为GTP/GTX的参考时钟!内部PLL的抖动太大,会导致收发器无法正常工作。我曾经有个同事图省事,直接从内部PLL引了个时钟给GTP,结果眼图完全闭合,查了两天才发现是参考时钟的问题。

1.4 实际设计中的避坑指南

做高速收发器设计,有几个坑是新人最容易踩的:

  • 参考时钟布线:参考时钟要走专用时钟引脚,不要走普通IO。否则抖动会恶化。
  • 电源去耦:GTP/GTX的模拟电源(MGTAVCC、MGTAVTT)必须做好去耦,每个引脚放一个0.1uF电容,靠近引脚放置。
  • PCB阻抗控制:差分对阻抗100Ω,单端50Ω。走线长度匹配,误差不超过5mil。
  • AC耦合电容:GTP/GTX的收发链路必须加AC耦合电容,典型值0.1uF。我见过有人忘了加,结果直流偏置不对,信号直接畸变。

经验之谈:调试GTP/GTX时,先用IBERT(集成误码率测试)核跑一下。它能帮你快速判断硬件链路有没有问题。如果IBERT都跑不过,那肯定是硬件问题,别急着调逻辑。

好了,这一章的内容就到这里。SerDes原理、PMA/PCS架构、时钟架构,这三块是GTP/GTX的基础。搞懂了这些,后面配置IP核、写控制逻辑就会顺手很多。

可可精品资料库