FPGA高速收发器基础:GTH/GTY收发器、PMA与PCS层结构、时钟架构

做FPGA设计这些年,我接触过不少高速接口项目。说实话,收发器这块是很多工程师的“拦路虎”。你想想看,动不动就是几Gbps甚至几十Gbps的速率,稍微一个时序没处理好,整个链路就废了。今天咱们就来聊聊Xilinx 7系列和UltraScale系列里最常见的GTH和GTY收发器。

什么是GTH/GTY收发器?

GTH和GTY,说白了就是FPGA内部集成的硬核高速串行收发器。它们不是用LUT搭出来的软逻辑,而是芯片上专门划出一块区域,用模拟电路实现的物理层收发模块。

我个人的理解是:GTH是7系列和UltraScale里的主流收发器,支持从几百Mbps到十几Gbps的速率。而GTY是UltraScale+里才有的“猛兽”,速率能飙到30Gbps以上。我在一个100G光通信项目里用过GTY,那家伙跑28Gbps时眼图依然很干净,确实厉害。

关键区别速览:

  • GTH:最大线速率约13.1 Gbps(7系列)/ 16.3 Gbps(UltraScale)
  • GTY:最大线速率可达30.5 Gbps(UltraScale+)
  • GTH:支持PCIe Gen3、10G Ethernet、SATA等
  • GTY:支持100G Ethernet、Interlaken、PCIe Gen4等

嗯,这里要注意:选型时别只看速率。GTY的功耗比GTH高不少,而且布局布线约束也更严格。如果你的项目只需要跑10Gbps,用GTH就足够了,没必要上GTY给自己找麻烦。

PMA与PCS层结构

每个收发器通道,内部都分成两大块:PMA(物理介质适配层)和PCS(物理编码子层)。我习惯把PMA看成是“模拟肌肉”,PCS是“数字大脑”。

PMA层:模拟信号的硬功夫

PMA负责最底层的模拟信号处理。它包含:

  • 串行器(Serializer):把并行数据转成高速串行流
  • 解串器(Deserializer):把串行流还原成并行数据
  • 时钟数据恢复(CDR):从数据流中提取时钟
  • 发送均衡器(TX Equalizer):预加重/去加重,补偿信道损耗
  • 接收均衡器(RX Equalizer):CTLE + DFE,消除码间干扰

我曾经在一个背板项目中吃过亏——背板走线长度超过30英寸,信号衰减得一塌糊涂。后来把TX预加重调到最大,RX的CTLE也开到高增益,才算把眼图睁开。所以说,PMA的均衡器参数不是摆设,一定要根据实际信道去调。

PCS层:数字逻辑的精细活

PCS负责编码、解码、对齐、时钟补偿等数字处理。常见功能包括:

  • 8B/10B或64B/66B编码:保证DC平衡,提供时钟恢复所需的跳变
  • 逗号检测(Comma Detection):实现字节对齐
  • 弹性缓冲(Elastic Buffer):处理两个时钟域之间的相位差
  • 通道绑定(Channel Bonding):多通道对齐
  • PRBS生成/校验:用于链路测试

我的经验:调试阶段一定要把PCS的PRBS功能用起来。先用内部自环(Near-End PCS Loopback)验证数字逻辑,再用远端环回(Far-End PMA Loopback)验证模拟链路。这样一步步排查,能省下大量时间。

收发器通道的时钟架构

时钟是收发器的命脉。我见过太多项目因为时钟没处理好,导致链路不稳定甚至完全不通。GTH/GTY的时钟架构,核心是参考时钟(RefClk)和QPLL/CPLL。

参考时钟的来源

每个收发器Quad(4个通道为一组)需要外部输入一个高质量差分时钟。常见频率有:

协议 推荐参考时钟频率
PCIe Gen3 (8.0 Gbps) 100 MHz
10G Ethernet (10.3125 Gbps) 156.25 MHz
SATA 6G (6.0 Gbps) 150 MHz
CPRI (9.8304 Gbps) 122.88 MHz

我个人习惯用低抖动晶振(比如SiTime的MEMS振荡器)来提供参考时钟。普通晶振的抖动在高速率下会直接反映在眼图上,千万别省这个钱。

PLL的选择:QPLL vs CPLL

每个Quad里有两类PLL:

  • CPLL(通道PLL):每个通道独立,锁定时间快,但抖动性能一般。适合速率较低(< 6.6 Gbps)或需要快速切换的场景。
  • QPLL(四通道PLL):整个Quad共享,抖动性能优秀,但锁定时间较长。适合高速率(> 6.6 Gbps)或对抖动敏感的场景。

注意:QPLL一旦锁定,就不能随意改变频率。如果你需要在同一个Quad里跑不同速率,要么用CPLL,要么把不同速率的通道分到不同的Quad里。我曾经为了省资源,把10G和6G的通道塞进同一个Quad,结果QPLL死活锁不住——后来老老实实分了两个Quad才搞定。

时钟分配与布线

收发器的时钟分配路径是这样的:

  1. 外部参考时钟进入Quad的专用时钟引脚
  2. 经过QPLL或CPLL倍频到线速率
  3. PLL输出送到各通道的PMA层
  4. PCS层使用恢复时钟或本地时钟

这里有个容易踩的坑:参考时钟的走线必须等长。如果多个Quad共用同一个参考时钟源,PCB上要保证从晶振到每个Quad的时钟引脚长度差不超过50 mil。我见过一个项目,就因为时钟走线差了200 mil,导致两个Quad之间的相位差太大,通道绑定死活过不了。

核心知识体系

为了让你更直观地理解,我画了一张收发器内部结构的SVG图。这张图把PMA、PCS、时钟路径串在了一起,你一看就明白。

GTH/GTY收发器通道内部结构 PMA层(模拟部分) TX Serializer TX Equalizer RX Deserializer RX Equalizer CDR PCS层(数字部分) 8B/10B编码 弹性缓冲 逗号检测 通道绑定 时钟管理 QPLL / CPLL / 时钟分频 → 高速串行输出 ← 高速串行输入 → 并行数据到FPGA逻辑 ← 并行数据来自FPGA逻辑 外部参考时钟输入 (RefClk)

从这张图你能看到,数据从FPGA逻辑进入PCS层,经过编码和缓冲后送到PMA层串化输出。接收路径则反过来,先由PMA层解串和均衡,再交给PCS层做对齐和解码。时钟贯穿始终——PMA的CDR负责从数据里恢复时钟,PCS的弹性缓冲则处理跨时钟域的相位差异。

调试小技巧:如果你遇到链路不稳定,先看PMA层的眼图是否张开。如果眼图闭合,调TX预加重和RX均衡器。如果眼图没问题但数据还是错,那多半是PCS层的对齐或时钟补偿出了问题。用IBERT(集成误码率测试)工具可以快速定位问题出在PMA还是PCS。

好了,关于GTH/GTY收发器的基础知识就聊到这儿。记住一句话:收发器设计,七分靠时钟,三分靠逻辑。把时钟架构搞明白了,后面的事情就顺了。

可可精品资料库