GTY收发器架构总览:PMA和PCS分层介绍
咱们直接切入正题。GTY收发器内部,说白了就是两大块:PMA 和 PCS。PMA管物理层的模拟活儿,PCS管数字层的协议活儿。刚开始接触的时候,我总觉得这俩名字太抽象。后来做项目时被一个时钟问题折腾了两天,才发现是PMA和PCS之间的通道没配置对。嗯,从那以后我再看架构图,重点就看它们俩怎么分工、怎么配合。
核心分层结构
先给一张整体的结构图,心里有个谱。下图展示了GTY收发器从外部串行线到内部并行数据通路的完整分层:
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 | 产生多个频率的高质量时钟 | 倍频系数、电荷泵电流 |
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,看误码率。
PMA与PCS的接口:从并行到串行的桥梁
两者通过一个并行的内部总线连接。这个总线宽度取决于你配置的串行化因子。比如因子为40时,内部总线宽度是40位;因子为80时,宽度80位。时钟频率则是线速率除以因子。
举个例子:线速率25.78125 Gb/s(25G以太网),如果串行化因子取40,那么PCS到PMA之间的并行时钟就是644.53125 MHz。这个时钟要非常干净,因为它直接驱动PMA的相位插值器。
典型配置下内部总线参数
| 线速率 (Gb/s) | 串行化因子 | 内部总线宽度 (bit) | 内部时钟频率 (MHz) |
|---|---|---|---|
| 10.3125 | 20 | 20 | 515.625 |
| 12.5 | 40 | 40 | 312.5 |
| 25.78125 | 40 | 40 | 644.53125 |
| 28.125 | 80 | 80 | 351.5625 |
选因子时要权衡:因子越大,内部时钟越低,对FPGA时序友好;但内部总线位宽变大,布线资源消耗也大。我习惯在低于28G的速率用因子40,高于28G用因子80。
多通道时要注意的架构要点
GTY收发器经常以Quad(4个通道为一组)的形式出现。同一个Quad内的四个通道共享PLL。这意味着什么呢?
- 四个通道可以用同一个参考时钟,频率必须相同。
- 如果某个通道需要独立的工作频率(比如不同线速率),那就必须用不同的PLL,不能简单从同一个Quad里取。
- Quad内通道之间的skew很小(匹配走线),很适合做通道绑定。
跨Quad的通道绑定则需要额外的skew补偿逻辑,因为不同Quad的PLL之间会有相位偏移。Xilinx提供了跨Quad的绑定专用电路,配置时注意使能。