4. FPGA SerDes IP核配置:Xilinx GTH/GTY与Intel/Altera Transceiver IP

SerDes IP核的配置,说白了就是给高速收发器“定规矩”。你告诉它跑多快、用什么协议、怎么对齐数据。这一步要是没做好,后面调试起来会非常痛苦。我这些年调过的板子,至少有一半的问题都出在IP核配置阶段。

4.1 Xilinx GTH/GTY IP核例化

Xilinx的GTH和GTY,本质上是同一套架构。GTY能跑更高的速率,比如28Gbps以上。但配置思路完全一样。

我个人习惯用Vivado的IP Catalog来例化。你搜“GTH”或者“GTY”,会看到“GTH Transceiver”这个IP。双击打开,配置界面分好几页。

4.1.1 基本模式选择

第一页会让你选协议。这里有三个选项:

  • Start from Scratch:完全手动配置。适合自定义协议。
  • CPRI / JESD204B / PCIe:预设模板。我建议新手先用这个,再微调。
  • Custom:半自动。你定线速率,IP帮你算参数。

我在项目中遇到过一个问题:选了PCIe模板,结果发现它默认开启了某些均衡功能,导致低速调试时信号质量反而变差。嗯,这里要注意,模板只是起点,不是终点。

4.1.2 线速率与参考时钟

线速率决定了你的SerDes能跑多快。公式很简单:

线速率 = 参考时钟频率 × PLL倍频系数

举个例子,你想跑10.3125Gbps,参考时钟用156.25MHz。那PLL倍频系数就是66。GTH内部有CPLL和QPLL两种PLL:

PLL类型 适用速率 特点
CPLL 1Gbps ~ 6.6Gbps 功耗低,但抖动大一点
QPLL 6.6Gbps ~ 16.3Gbps (GTH) 抖动小,适合高速
我的经验: 能选QPLL就别用CPLL。虽然CPLL功耗低,但高速下抖动问题会让你怀疑人生。我曾经为了省那几十毫瓦,硬是调了三天眼图,最后还是换回了QPLL。

4.1.3 TX与RX路径配置

这一页配置发送和接收路径。关键参数有:

  • TX Buffer / RX Buffer:建议都选Bypass。除非你有特殊的相位补偿需求。
  • RX Equalizer:接收均衡器。分LPM和DFE两种模式。LPM功耗低,DFE抗干扰强。
  • Polarity:极性翻转。如果PCB走线把P/N接反了,这里可以软件修正。
避坑指南: 我曾经在调试12.5Gbps链路时,发现眼图一直闭合。折腾了两天,最后发现是RX Equalizer的LPM模式没选对。LPM有0~3四个档位,档位越高,高频补偿越强。但补偿过头反而会引入噪声。建议从中间档位开始试。

4.2 Intel/Altera Transceiver IP配置

Intel的Transceiver IP,在Quartus里叫“Transceiver Native PHY”。配置思路和Xilinx类似,但术语不同。

4.2.1 协议预设与自定义

Intel的IP也提供了协议预设。比如PCIe Gen3、10G Ethernet、JESD204B。我个人习惯先选一个最接近的预设,然后手动改参数。

举个例子,你要做10G Ethernet,但线速率是10.3125Gbps。Intel的预设里可能只有10Gbps。那你就选“10G Ethernet”预设,然后把线速率改成10.3125。IP会自动重新计算PLL参数。

4.2.2 PLL配置

Intel的PLL分ATX PLL和fPLL两种:

PLL类型 适用速率 特点
ATX PLL 1Gbps ~ 28Gbps 低抖动,适合高速
fPLL 1Gbps ~ 12.5Gbps 灵活性高,支持分数倍频

你想想看,如果你的参考时钟是100MHz,但线速率需要10.3125Gbps。100MHz × 103.125 = 10.3125Gbps。这个103.125不是整数,ATX PLL搞不定。这时候就得用fPLL,它支持分数倍频。

关键点: Intel的PLL配置里有个“PLL Feedback Compensation”选项。选“Direct”模式,抖动性能最好。但要注意,Direct模式对参考时钟的抖动要求更高。如果你的板子上时钟源质量一般,建议选“Normal”模式。

4.2.3 数据通路与字节序

Intel的IP里,数据通路分“PMA”和“PCS”两层。PMA是物理层,PCS是编码层。配置时要注意:

  • PMA Width:一般选20bit或40bit。20bit对应10Gbps以下,40bit对应10Gbps以上。
  • PCS Mode:选“Basic”或者“Enhanced”。Basic模式功能少,但延迟低。
  • Byte Order:字节序。如果你的数据是64bit宽,但SerDes内部是20bit处理,那就需要做字节对齐。
我的习惯: 调试初期,先把PCS Mode设成Basic。等链路通了,再切到Enhanced模式开启更多功能。这样可以减少变量,快速定位问题。

4.3 参数设置与优化技巧

参数设置,说白了就是调眼图。眼图睁得越大,链路越稳定。我总结了几个核心技巧:

4.3.1 TX预加重与去加重

TX端的预加重,本质上是提升高频分量。因为PCB走线对高频信号的衰减更大。预加重有三个参数:

  • Pre-cursor:前一个bit的幅度调整
  • Cursor:当前bit的幅度
  • Post-cursor:后一个bit的幅度调整

举个例子,你设Pre-cursor = -2dB,Post-cursor = -3dB。意思是前一个bit和后一个bit的幅度都比当前bit低。这样当前bit看起来就被“加重”了。

避坑指南: 我曾经在调试25Gbps链路时,把预加重调得太大。结果眼图出现了“过冲”,反而导致误码率上升。预加重的原则是“够用就好”,不要追求极致。一般从0dB开始,每次增加0.5dB,直到眼图张开为止。

4.3.2 RX自适应均衡

RX端的均衡器,有自适应模式和手动模式。自适应模式会自动调整均衡参数,但有时候会“锁死”在错误的状态。

我建议的做法是:先用自适应模式跑一段时间,等链路稳定后,读取当前的均衡参数。然后切到手动模式,把参数固定下来。这样既利用了自适应的便利,又避免了它后续乱跳。

4.3.3 眼图扫描与误码率测试

眼图扫描是验证链路质量最直观的方法。Xilinx和Intel的IP都内置了眼图扫描功能。操作步骤:

  1. 让TX发送PRBS31伪随机码
  2. RX端开启眼图扫描模式
  3. 读取眼图数据,绘制眼图

眼图的关键指标:

  • 眼高:至少大于200mV
  • 眼宽:至少大于0.5UI
  • 抖动:RMS抖动小于0.1UI
我的经验: 眼图扫描时,别忘了把温度跑起来。我遇到过在常温下眼图完美,但温度升到85°C后眼图直接闭合的情况。所以,一定要做高低温测试。

4.4 知识体系结构图

下面这张图,概括了SerDes IP核配置的核心流程。你可以把它当作一个检查清单:

SerDes IP核配置核心流程 选择平台 Xilinx GTH/GTY Intel/Altera Transceiver 协议选择 PLL配置 TX/RX路径 均衡器 参数优化:预加重 / 自适应均衡 / 眼图扫描 验证:误码率测试 / 高低温测试

这张图从平台选择开始,到最终的验证结束。每一步都环环相扣。你想想看,如果PLL配置错了,后面调均衡器再努力也没用。所以,我的建议是:按图索骥,一步一个脚印。

最后说一句: SerDes配置没有银弹。每个项目都有自己的特殊性。多读芯片手册,多动手调参数,慢慢你就会有感觉了。

专注资料整理