第四章 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之间的通信协议。我刚开始接触时觉得它很复杂,其实核心就三点:
- 链路建立:CGS(码组同步)→ ILAS(初始通道对齐序列)→ 数据流。这一步出问题,后面全白搭。
- 多通道对齐:用SYSREF信号做确定性延迟。我曾经因为SYSREF布线不等长,导致8个通道数据错位,查了三天才找到原因。
- 时钟关系: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。遇到三个坑:
- 时钟抖动:GTY的参考时钟必须用低抖动晶振,RMS抖动 < 100fs。我一开始用了普通晶振,结果误码率10^-6。
- 电源噪声:SerDes的模拟电源对噪声极其敏感。我加了LC滤波,并且把电源层分割,才把噪声压到5mV以内。
- 散热:GTY全速运行时功耗惊人。我用了散热片加风冷,结温控制在85°C以下。
嗯,接口设计就是这样,细节决定成败。你想想看,代码写得再好,信号都传不过去,有什么用?所以,下次画板子时,多想想我说的这些。
总结:FPGA与光芯片接口,核心是SerDes选型、JESD204B协议理解、XFI/SFI映射、PCB SI设计。每一步都有坑,但只要你按规范来,就能避开90%的问题。