第四章 FPGA与光芯片接口设计:高速SerDes接口、JESD204B协议与信号完整性

各位同学,今天我们来聊聊FPGA和光芯片之间怎么“对话”。说白了,这就是高速接口设计。我做了这么多年光通信系统,发现很多工程师在算法上没问题,一到接口就翻车。嗯,今天咱们就把这块硬骨头啃下来。

4.1 高速SerDes接口:GTY与GTH的选型博弈

FPGA里的SerDes,就是串行器/解串器。Xilinx的GTY和GTH,是咱们最常用的两种。我个人习惯把GTY叫“大力士”,GTH叫“快枪手”。为什么?

  • GTY:最高支持58Gbps,适合400G/800G光模块。功耗大,但性能猛。
  • GTH:最高16.3Gbps,适合10G/25G应用。功耗低,性价比高。

我在项目中遇到过一件事:一个客户非要用GTH跑28G,结果眼图惨不忍睹。你想想看,GTH的模拟前端带宽就摆在那,硬超频只会让信号质量崩盘。所以选型时,我建议留20%的余量。比如你要跑25G,至少用GTH的16G版本?不对,应该直接上GTY。

核心原则:SerDes速率 = 光模块速率 × 编码开销。比如100G SR4,用4路25G NRZ,实际SerDes要跑25.78125Gbps(含FEC开销)。

4.2 JESD204B协议:ADC/DAC与FPGA的“握手”艺术

JESD204B,说白了就是高速数据转换器跟FPGA之间的通信协议。我刚开始接触时觉得它很复杂,其实核心就三点:

  1. 链路建立:CGS(码组同步)→ ILAS(初始通道对齐序列)→ 数据流。这一步出问题,后面全白搭。
  2. 多通道对齐:用SYSREF信号做确定性延迟。我曾经因为SYSREF布线不等长,导致8个通道数据错位,查了三天才找到原因。
  3. 时钟关系:Device Clock和SYSREF必须同源。别问我为什么,问就是相位噪声。

避坑指南:我曾经在JESD204B的K码检测上栽过跟头。K28.5是逗号码,用于对齐。但如果你用了扰码,记得在接收端先解扰再检测K码。顺序搞反,数据全乱。

4.3 XFI/SFI接口映射:从芯片到光模块的最后一公里

XFI是10G串行接口,SFI是SerDes帧接口。很多同学搞不清它们的区别。我打个比方:

  • XFI:直接连光模块,信号是NRZ编码,速率10.3125Gbps。
  • SFI:连SerDes芯片,信号带帧头,速率更高。

实际项目中,FPGA的GTY/GTH通常配置成XFI模式接光模块。但要注意:XFI的AC耦合电容不能省,而且位置要靠近光模块侧。我见过有人把电容放在FPGA侧,结果信号反射严重。

接口类型 速率 编码 典型应用
XFI 10.3125Gbps NRZ 10G SFP+光模块
SFI 12.5Gbps+ 带帧头 芯片间互联
CAUI 25.78125Gbps NRZ 100G光模块

4.4 PCB信号完整性基础:别让物理层毁了你的设计

信号完整性,SI,这是硬件工程师的噩梦。我见过太多FPGA代码写得漂亮,一上板子就死机。为什么?信号质量太差。

几个关键点:

  • 阻抗控制:差分线100Ω ±10%,单端50Ω ±10%。别信PCB厂说的“差不多”,必须要求阻抗测试报告。
  • 等长布线:SerDes差分对内等长误差 < 5mil。我习惯用蛇形线补偿,但注意蛇形线间距要大于3倍线宽,否则串扰严重。
  • 过孔:高速信号尽量少打过孔。实在要打,用背钻工艺。我曾经因为一个过孔残桩,导致10G信号眼图闭合。

警告:AC耦合电容的焊盘尺寸会影响阻抗。我建议用0402封装,并且焊盘下方挖空参考层。否则电容焊盘处的阻抗会掉到70Ω,反射直接让误码率飙升。

4.5 实战经验:一个400G光模块的接口设计

最后分享一个实际案例。去年我做了一个400G DR4模块,FPGA用Xilinx VU9P,GTY跑26.5625Gbps。遇到三个坑:

  1. 时钟抖动:GTY的参考时钟必须用低抖动晶振,RMS抖动 < 100fs。我一开始用了普通晶振,结果误码率10^-6。
  2. 电源噪声:SerDes的模拟电源对噪声极其敏感。我加了LC滤波,并且把电源层分割,才把噪声压到5mV以内。
  3. 散热:GTY全速运行时功耗惊人。我用了散热片加风冷,结温控制在85°C以下。

嗯,接口设计就是这样,细节决定成败。你想想看,代码写得再好,信号都传不过去,有什么用?所以,下次画板子时,多想想我说的这些。

总结:FPGA与光芯片接口,核心是SerDes选型、JESD204B协议理解、XFI/SFI映射、PCB SI设计。每一步都有坑,但只要你按规范来,就能避开90%的问题。