第二章 GTY架构与工作原理:收发器内部解剖
各位同学,今天我们深入GTY收发器的心脏。先讲一个我早年翻车的经历:第一次用GTY做12.5Gbps链路,以为照着例程把端口连上就完事了,结果眼图根本睁不开。后来才发现,我连PCS和PMA各自管什么、时钟从哪来到哪去都没搞清楚。所以这一章,咱们把架构掰开揉碎了讲。
2.1 收发器的“五脏六腑”:PCS与PMA
GTY收发器内部不是一个黑盒子,它分两大功能区——PCS(物理编码子层)和PMA(物理介质附加子层)。说白了,PCS管协议、编解码、对齐这些“数字活”,PMA管串化、解串、时钟恢复这些“模拟活”。
PCS主要干了这些事:
- 编码/解码:8B/10B、64B/66B、64B/67B 你想用哪个,配一下寄存器就行。我记得第一次做100G项目,用了64B/66B,结果忘记配置同步头模式,数据全乱了——从那以后我再也不敢跳过PCS配置。
- 弹性缓冲与时钟修正:跨时钟域时用弹性缓冲,时钟修正就是插删空闲字符。项目中遇到过因为弹性缓冲深度不够导致的连续CRC错误,后来我把深度从4调到了8,问题解决。
- 通道绑定与极性反转:多通道对齐时靠通道绑定,PCB走线反了?直接配寄存器反转极性,不用改板子。这个技巧我用了无数次。
- PRBS与环回:调试利器。我建议上板第一件事就是配个PRBS31,跑环回,链路通不通十分钟见分晓。
PMA主要管这些:
- 串化器/解串器:PMA内部的SerDes把并行数据转成高速串行,反过来也一样。速率跟你配的参考时钟和PLL倍频有关。
- 时钟数据恢复:接收端PMA里的CDR电路从串行数据里恢复出时钟和数据。注意,CDR锁定需要一段时间,我做过一个项目,复位后给链路的等待时间太短,结果前几百个包全丢了——加个CDR锁定标志检查就好了。
- 发送预加重与接收均衡:高速信号经过PCB会失真,GTY的发送端有3~5级预加重,接收端有CTLE、DFE。我曾经调试一条25G链路,什么参数都正常就是误码高,最后发现DFE的抽头系数设成了默认值,根据通道损耗手调了两级就搞定了。
一个小习惯: 我每次做新板子,都是先配PMA的环回模式测参考时钟和电源,再开PCS的环回测编码,最后跑外部环回测整体通路。分步验证能省一整天排查时间。
2.2 时钟结构:GTY的“心跳”
GTY的时钟分三大层级,你想想看,就像城市供水系统:源头、泵站、水龙头。
- 参考时钟(GTREFCLK):源头。通常来自板上的晶振或者外部时钟芯片,通过专用引脚进入GTY的时钟缓冲器。频率可以是125MHz、156.25MHz、312.5MHz等,取决于你想要的线路速率。我习惯用156.25MHz做通用参考,因为2分频就是10G常用的155.52MHz附近。
- PLL(CPLL、QPLL):泵站。GTY里有两种PLL——CPLL四路共享一个,QPLL四路也共享一个。CPLL适合较低速率(~12.5Gbps以下),QPLL适合高速率(最高30.5Gbps)。这两个PLL的锁定时间、抖动特性不同。我曾经在25G项目里用了CPLL,结果抖动超标,换成QPLL后眼图立马清爽。
- 分频/倍频路径:水龙头。PLL输出经过分频器,生成TX位宽时钟、RX位宽时钟、以及各个PCS子模块用的时钟。注意:TX位宽时钟和TX并行数据时钟必须同源,否则弹性缓冲会溢出。
避坑提醒: GTY的参考时钟输入有差分要求,最好不要用单端时钟走长线接入。我见过一个板子用单端晶振,结果抖动大到GTY根本锁不住,换差分晶振后一调就过。
时钟关系可以用下面这张图来理解(见SVG):
2.3 数据通路:从串行到并行再到用户
咱们先走一遍发送通路,再走接收通路。嗯,你看完就会发现,本质上就是个串转并、并转串的过程,但中间加了很多“安检站”。
发送通路(TX)
- 用户接口:FPGA逻辑通过AXI-Stream或内部并行总线把数据送给GTY。注意数据位宽可配:16位、32位、64位甚至128位。我记得用64位位宽时,时钟频率必须对齐线速率,比如25.78125Gbps时,位宽时钟约403MHz——你算算就能明白。
- PCS编码:进PCS后先编码(8B/10B或64B/66B等),然后经过弹性缓冲、加扰(可选)、通道绑定等。这里有个坑:如果你用了64B/66B,同步头必须要处理,我曾经忘记在用户侧加同步头检测器,结果接收端一直失锁。
- PMA串化:编码后的并行数据进PMA,由串化器按线路速率逐位输出。注意GTY的串化器支持2:1、4:1多种结构,但最终都是把并行时钟域数据转到高速串行时钟域。
- 预加重输出:最后经过发送预加重驱动,通过差分对送到PCB。
接收通路(RX)
- 输入均衡:串行信号进来,PMA先做CTLE(连续时间线性均衡)和DFE(判决反馈均衡)。我调试25G链路时,DFE的抽头数调到5才收敛,这是因为PCB走线损耗偏大。
- CDR时钟恢复:CDR从数据边沿恢复出时钟,再用这个时钟去采样数据。CDR的环路带宽可调,窄带宽抗抖动好但锁定慢,宽带宽锁定快但容易受噪声干扰。我个人习惯:先宽带宽锁定,锁定后再切到窄带宽。
- 解串:串行数据转回并行,送入PCS。
- PCS解码与对齐:PCS做码型解码、弹性缓冲处理、通道去偏斜,最后送用户接口。注意:如果用了加扰,这里要解扰。
实战经验: 我曾经有一次接收通路老是报8B/10B错误码,查了三天,最后发现是GTX(上一代)与GTY的极性配置寄存器地址不同,我照搬了旧代码。所以每次换芯片型号,一定要重新看一遍寄存器手册——DRP操作尤其容易踩这个坑。
2.4 关键指标速查表
| 模块 | 关键参数 | 典型范围 | 我常用的值 |
|---|---|---|---|
| PLL | CPLL 锁定频率 | 0.5~12.5GHz | 10.3125GHz (10G) |
| PLL | QPLL 锁定频率 | 9.8~30.5GHz | 25.78125GHz (25G) |
| PMA TX | 预加重级数 | 3~5 抽头 | 通常用3抽头 |
| PMA RX | CTLE 增益 | 0~15dB | 根据插损先算再调 |
| PCS | 弹性缓冲深度 | 4, 8, 16, 32 字符 | 8 (多通道建议16) |
| 时钟 | 参考时钟频率 | 125M, 156.25M, 312.5M | 156.25MHz |
这张表其实是我自己做项目时贴在显示器上的,每次配新速率就扫一眼。你也可以根据自己的链路预算微调。