GTY Transceiver 概述

各位同学好。今天咱们正式进入GTY的世界。

GTY是什么?说白了,它是Xilinx高端FPGA里负责高速串行通信的那个核心硬核。我这两年调试过不少100G光模块,可以很负责地跟你说:没有GTY,那些动辄上百G的接口根本没法实现。

GTY在Xilinx FPGA中的角色

FPGA内部处理的是并行数据,而外部——比如光纤、背板、PCIe链路——传输的是串行信号。GTY的角色,就是做并行到串行、串行到并行的转换,同时保证信号完整性。

你想想看,一个100G Ethernet接口,内部逻辑跑的是64位或者256位并行总线,频率几百兆。但线缆上跑的却是25Gbps甚至53Gbaud的差分串行信号。这个跨越,就是GTY完成的。

我习惯把GTY称为FPGA的「高速门面」:

  • 速率上限:GTY支持高达32.75Gbps的线速率。UltraScale+器件里,GTY能做到。
  • 电气标准兼容:支持NRZ和PAM4两种调制方式。PAM4是56Gbps以上必用的,我踩过坑,后面细讲。
  • 协议内置:PCIe Gen4、100G Ethernet、Interlaken的PCS层功能,GTY内部直接硬核实现,不消耗逻辑资源。
一句话:GTY = 高速模拟前端(PMA)+ 数字协议适配层(PCS)+ 物理编码子层(PCS细化)。

我有个经验:评估项目能不能用某款FPGA,先看GTY数量和速率。不够的话,后期加外置PHY芯片,成本翻倍不说,走线也头疼得很。

PMA/PCS 分层架构总览

GTY内部架构,可以往上往下拆分。向上对接FPGA内部逻辑(比如DMA、MAC模块),向下连接差分IO引脚。这个分层的核心,就是PMA和PCS。

为什么要分层?

  • PMA:Physical Media Attachment。它是纯模拟+高速数字电路。负责串行信号的收发、时钟恢复、均衡、CDR。说白了就是「搬砖」的,只关心信号长什么样,不关心数据是什么内容。
  • PCS:Physical Coding Sublayer。它是数字逻辑。负责8B/10B编码、64B/66B编码、弹性缓冲、时钟修正、加扰/解扰。它才关心数据内容——比如是不是IDLE字符、有没有错误。

我记得第一次调试GTY时,发现信号质量没问题,但链路始终不通。最后追根溯源,问题出在PCS层的弹性缓冲溢出。这就好比快递员(PMA)把货准时送到了仓库(PCS),但仓库来不及上架,货堆在门口就丢了。从那以后我就记住了:PMA负责「送到」,PCS负责「接好」。

低速率设计中,PCS功能常被误认为可以省略。实际上,即便不用编码,弹性缓冲和时钟修正也是必须的。否则两个不同时钟域的数据直接相撞,丢数据是迟早的事。

来看一个具体的速率映射关系:

线速率 (Gbps)PCS编码有效数据速率 (Gbps)典型协议
10.312564B/66B1010G Ethernet
25.7812564B/66B2525G Ethernet
32.75NRZ或PAM4约32.75PCIe Gen4
53.125PAM4 + RS-FEC约50100G Ethernet (2x50G)

这张表可以理解为:物理层跑得越快,PCS的处理开销就越大。你看PAM4还得额外配FEC(前向纠错),这是由信号质量妥协出来的。

典型应用场景

我主要接触三个方向,给各位拆开讲一讲。

100G Ethernet

一个100G接口,通常由4个25Gbps通道(CAUI-4)或2个50Gbps通道组成。每个通道对应一个GTY。GTY内部的PCS负责64B/66B编码、加扰、通道绑定和初始对齐。我在调试100G光模块时,遇到过通道偏移问题。一个通道比另一个晚到了几十纳秒,结果数据流乱套了。解决方法是利用PCS的「通道绑定」和「SKP补齐」机制。嗯,这块内容后面会单独讲。

PCIe Gen4

PCIe Gen4的单通道速率是16GT/s,双向。GTY在这个场景下扮演的是PHY层。PCS部分(由内置的PCIe硬核接管)负责8B/10B编码(Gen4及以前还是8B/10B)、加扰、链路训练状态机。我曾经掉进过一个坑:PCIe链路训练失败,原因是GTY的Tx预加重参数没调好。后来在Vivado的线束向导里手动调整了Tx FIR系数,问题才解决。那个下午花了6个小时,想想都胃疼。

Interlaken

Interlaken是芯片间互联协议,常见于交换机和网络处理器。它不需要MAC层,直接用PCS的64B/67B编码。GTY配合Interlaken硬核,能实现远距离高速可靠连接。我建议刚接触Interlaken的同学,先关注它的协议元组格式(metadata + payload),这是和Ethernet最大的区别。

一张图看清 GTY 内部结构

我画个整体框图,先看一眼全局。

GTY Transceiver 内部结构总览 FPGA 逻辑侧 DMA / 协议栈 / 用户数据 并行总线: 32/64/128 bit 时钟域: PMA 恢复时钟 PCS 层 8B/10B / 64B/66B 编码 弹性缓冲 / 时钟修正 加扰 / 解扰 通道绑定 / 对齐 PMA 层 SerDes (串化 / 解串) CDR (时钟恢复) Tx / Rx 均衡 (CTLE/DFE) PLL / 时钟生成 差分 IO 引脚 说明:数据流方向 Tx 方向:FPGA 逻辑 → PCS 编码/缓冲 → PMA 串化/加均衡 → 差分IO Rx 方向:差分IO → PMA 均衡/CDR/解串 → PCS 解码/去抖 → FPGA 逻辑 核心要点:PCS 处理协议内容,PMA 处理物理信号;时钟域从 PMA 恢复时钟分支到 PCS 弹性缓冲区。 我曾经掉进过:忽视 PCS 弹性缓冲深度配置 → 大数据包连续发时溢出 → 链路偶发断开。
上面这张图,建议保存下来。后面讲PMA时,你会反复回看它。我个人习惯把GTY理解为三层快递系统:FPGA是发货方(并行包裹),PCS是分拣中心(编码+缓冲),PMA是快递员(串行传输)。各层只管自己的事,层之间通过标准接口传递数据。

好了,第一章就到这里。你对GTY的整体定位、PMA/PCS分工和典型应用场景应该有概念了。后面我们会逐层拆解,先从PMA的SerDes讲起,再到PCS的编码和弹性缓冲。慢慢来,别急。