GTY收发器架构总览:PMA和PCS分层介绍

咱们直接切入正题。GTY收发器内部,说白了就是两大块:PMA 和 PCS。PMA管物理层的模拟活儿,PCS管数字层的协议活儿。刚开始接触的时候,我总觉得这俩名字太抽象。后来做项目时被一个时钟问题折腾了两天,才发现是PMA和PCS之间的通道没配置对。嗯,从那以后我再看架构图,重点就看它们俩怎么分工、怎么配合。

核心分层结构

先给一张整体的结构图,心里有个谱。下图展示了GTY收发器从外部串行线到内部并行数据通路的完整分层:

GTY收发器分层架构(PMA + PCS) PMA(物理介质附件层) TX 串行器 并行→串行转换 RX 解串器 串行→并行转换 时钟与CDR 时钟恢复、分频 TX 驱动器 差分输出驱动 RX 均衡器 CTLE + DFE均衡 PLL 频率合成(LC-VCO) PCS(物理编码子层) 编码/解码 64B/66B, 64B/67B 通道绑定 多通道合并/拆分 弹性缓冲 时钟域跨越调整 Comma对齐 加扰/解扰 PRBS校验 PMA处理模拟信号(高速串行),PCS处理数字协议(并行接口)

PMA:模拟信号的主战场

PMA全称Physical Media Attachment,物理介质附件层。它负责处理线缆上的串行差分信号。说白了,就是和真实的物理世界打交道的那部分。

TX方向:从PCS过来的并行数据,在TX串行器里被高速串行化,然后通过TX驱动器输出差分对。我记得第一次调GTY的TX摆幅,把预加重给忘了,结果10米长的线缆眼图直接闭了……后来老老实实按手册配了TX FIR滤波器。

RX方向:进来的串行信号先经过接收均衡器——包含CTLE(连续时间线性均衡)和DFE(判决反馈均衡)。这俩玩意儿专门对付高频衰减和反射。我有个经验:如果链路误码率降不下来,先查CTLE的增益档位和DFE的tap个数,比盲目改TX摆幅有效得多。

时钟恢复(CDR)是PMA的心脏。它从数据边沿中提取时钟,再用PLL产生稳定的采样时钟。GTY的PLL是LC-VCO结构,抖动性能很好,但一定要给够参考时钟的纯净度——我曾经碰到过参考时钟上有50ps的抖动,结果CDR根本锁不住。

PMA关键指标速查

模块核心功能常见配置项
TX串行器并行→串行,支持8B/10B上游编码后的数据串行化因子(20/40/80)
RX解串器串行→并行,完成位同步解串宽度、交换极性
CDR数据时钟恢复,锁相环参考时钟频率、环路带宽
TX驱动器差分电压输出,可编程摆幅摆幅、预加重、后加重
RX均衡器CTLE + DFE补偿信道损耗CTLE增益、DFE tap系数
PLL产生多个频率的高质量时钟倍频系数、电荷泵电流
个人习惯:我一般先确认PMA侧的参考时钟频率对不对,用IBERT测一下CDR锁定状态,再调均衡。顺序不对容易走弯路。

PCS:数字协议的调度中心

PCS全称Physical Coding Sublayer,物理编码子层。它接收来自FPGA逻辑(即内部并行总线)的数据,做各种数字处理,然后再交给PMA发出去。收方向反过来。

编码/解码:GTY支持64B/66B和64B/67B编码,这是实现DC平衡和时钟嵌入的关键。64B/66B每66位数据加2位同步头,开销很小。我用它做过25G链路,效果不错。64B/67B用在更高效率的场合,比如Interlaken协议。

通道绑定:如果你用多个GTY通道拼成一个逻辑链路(比如4×25G = 100G),这里就负责把数据分到各通道,并在收端重新组装。注意绑定通道的时钟必须同源,否则会出skew问题——我曾经踩过坑,两条lane的PCB走线长度差了1英寸,结果绑定失败,后来把发送端的缓冲延迟做了手动补偿才解决。

弹性缓冲:这个缓冲专门解决PCS时钟域和PMA时钟域的相位差。两边时钟频率有微小偏差时,靠它来插入或删除填充数据。我建议把弹性缓冲的深度设置为合理的值(比如32个字符),太小容易溢出,太大增加延迟。

Comma对齐:接收端在串行比特流里找特定的Comma字符(比如K28.5),一旦找到,就知道字节边界了。这是建立字节同步的基础。Comma字符不能出现在正常数据里,否则会误对齐。

加扰/解扰:有些协议要求数据加扰,避免长串的0或1导致CDR失锁。GTY内置的自同步加扰器,多项式通常为1 + X^39 + X^58。使用时注意发送端和接收端加扰要同步。

PRBS校验:调试阶段最常用的功能。GTY可以内置生成PRBS7/PRBS15/PRBS31等模式,并在接收端自动校验。我调试高速链路,第一步永远是跑PRBS,看误码率。

我曾经遇到的坑:某次项目发现RX端Comma一直对齐不上,折腾一上午,结果发现PCS侧的编码模式没和TX对齐——TX用了64B/66B,RX配了64B/67B。两边编码规则不匹配,Comma对位当然无效。所以配置PCS时,务必保证TX/RX的编码、绑定、加扰全部对称。

PMA与PCS的接口:从并行到串行的桥梁

两者通过一个并行的内部总线连接。这个总线宽度取决于你配置的串行化因子。比如因子为40时,内部总线宽度是40位;因子为80时,宽度80位。时钟频率则是线速率除以因子。

举个例子:线速率25.78125 Gb/s(25G以太网),如果串行化因子取40,那么PCS到PMA之间的并行时钟就是644.53125 MHz。这个时钟要非常干净,因为它直接驱动PMA的相位插值器。

典型配置下内部总线参数

线速率 (Gb/s)串行化因子内部总线宽度 (bit)内部时钟频率 (MHz)
10.31252020515.625
12.54040312.5
25.781254040644.53125
28.1258080351.5625

选因子时要权衡:因子越大,内部时钟越低,对FPGA时序友好;但内部总线位宽变大,布线资源消耗也大。我习惯在低于28G的速率用因子40,高于28G用因子80。

多通道时要注意的架构要点

GTY收发器经常以Quad(4个通道为一组)的形式出现。同一个Quad内的四个通道共享PLL。这意味着什么呢?

  • 四个通道可以用同一个参考时钟,频率必须相同。
  • 如果某个通道需要独立的工作频率(比如不同线速率),那就必须用不同的PLL,不能简单从同一个Quad里取。
  • Quad内通道之间的skew很小(匹配走线),很适合做通道绑定。

跨Quad的通道绑定则需要额外的skew补偿逻辑,因为不同Quad的PLL之间会有相位偏移。Xilinx提供了跨Quad的绑定专用电路,配置时注意使能。