ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

UltraScale+ GTY收发器时钟架构选型与功耗优化实战指南

UltraScale+ GTY收发器时钟架构选型与功耗优化实战指南 1. 为什么GTY的时钟方案值得单独拿出来聊做过高速接口的FPGA工程师大概都有这个体会逻辑代码写得再漂亮时序约束做得再细致一旦GTY Transceiver的时钟没配对链路就是起不来。Xilinx UltraScale系列里的GTY收发器单通道线速率覆盖500Mb/s到32.75Gb/s一个器件里动辄几十个通道每个通道的参考时钟、PLL选择、时钟路由都牵一发动全身。更麻烦的是GTY的时钟架构和功耗是强耦合的——你选了什么样的参考时钟方案直接决定了能开几个QPLL、能不能进低功耗模式、DFE自适应要不要一直跑。我在几个100G以太网和JESD204B的项目里反复调过GTY的时钟和功耗踩过的坑包括但不限于参考时钟走线太长导致CDR锁不住、QPLL共享方案没算清楚通道数导致PLL不够用、为了省功耗关掉DFE结果误码率飙升。这些问题在手册里都有写但手册不会告诉你实际调试时先看哪个寄存器、哪些参数是牵一发动全身的。这篇内容适合正在用UltraScale做高速接口的工程师不管你是刚接触GTY还是已经调过几轮但总觉得功耗下不来都可以对照着看看。我会从时钟架构的选型逻辑讲起把QPLL和CPLL的取舍、参考时钟的分配策略、功耗优化的具体手段以及实际调试中怎么快速定位问题都拆开来说清楚。2. GTY时钟架构的核心逻辑与选型思路2.1 QPLL和CPLL到底怎么选GTY Transceiver内部有两个PLL资源CPLL和QPLL。CPLL是每个通道私有的QPLL是每个Quad4个通道共享的。这个结构决定了选型的第一原则先看线速率范围再看通道数量。CPLL的VCO频率范围是2.0GHz到6.25GHz经过分频后能覆盖的线速率大致在500Mb/s到6.25Gb/s之间具体取决于分频比。QPLL的VCO频率范围更高QPLL0覆盖8.0GHz到13.0GHzQPLL1覆盖9.8GHz到16.375GHz对应线速率从9.8Gb/s到32.75Gb/s。所以如果你的线速率超过6.25Gb/s基本只能用QPLL。但线速率低于6.25Gb/s的时候选择就没那么绝对了。这时候要考虑的是通道数量和时钟灵活性。CPLL每个通道独立意味着你可以让同一个Quad里的四个通道跑不同的线速率互不干扰。QPLL共享的话同一个QPLL下的所有通道必须跑相同的线速率或者有整数倍关系。我遇到过这样一个场景一个Quad里两个通道跑10.3125Gb/s的10G以太网另外两个通道跑6.25Gb/s的JESD204B这时候如果用QPLL两个协议没法共享同一个QPLL只能一个用QPLL一个用CPLL或者把低速的通道切到CPLL上。注意QPLL的共享不是无条件的。同一个QPLL下的通道线速率必须相同或者满足整数分频关系。如果两个通道的线速率比值不是整数就不能共享同一个QPLL。从功耗角度看CPLL的功耗比QPLL低不少。一个CPLL大约消耗80mW到120mW而一个QPLL大约消耗200mW到300mW。所以如果通道数少、线速率低用CPLL更省功耗。但反过来如果四个通道都要跑高速用一个QPLL带四个通道比每个通道开一个CPLL要省——因为CPLL根本跑不到那么高的线速率。2.2 参考时钟的分配策略GTY的参考时钟输入有两种来源专用时钟引脚IBUFDS_GTE4和从相邻Quad路由过来的时钟。每个Quad有两个参考时钟输入引脚可以分别接到QPLL0和QPLL1也可以接到CPLL。参考时钟的分配有几个原则第一同一个QPLL下的所有通道必须使用同一个参考时钟源。这个很好理解QPLL只有一个它的输入参考时钟只能是一个。第二参考时钟的频率选择要兼顾CDR的锁定范围和PLL的VCO范围。GTY的CDR对参考时钟的频率偏差有容忍度一般在±100ppm到±300ppm之间取决于具体配置。如果参考时钟的频偏太大CDR可能锁不住。另外参考时钟频率和线速率之间要满足PLL的分频关系不是随便什么频率都能用。第三参考时钟的走线要尽量短且要控制阻抗。GTY的参考时钟输入是差分信号通常要求100欧姆差分阻抗。走线太长会引入损耗和抖动影响CDR的性能。我在一个项目里遇到过参考时钟走线超过10英寸的情况结果CDR的锁定时间明显变长误码率也偏高。后来把时钟源挪近问题就解决了。2.3 时钟路由的灵活性UltraScale的GTY支持参考时钟的跨Quad路由。也就是说一个Quad的参考时钟可以路由到相邻的Quad供那边的QPLL或CPLL使用。这个功能在通道数多、参考时钟源少的时候特别有用。但跨Quad路由有几个限制只能路由到相邻的Quad不能跨多个Quad路由路径会引入额外的抖动和延迟路由的时钟信号质量会下降。所以如果非必要还是优先用本Quad的参考时钟。我在一个16通道的项目里因为PCB上只放了两个参考时钟源不得不把时钟从Quad0路由到Quad1、Quad2、Quad3。实测下来路由到Quad3的时候时钟的抖动已经比原始时钟大了不少CDR的裕量明显变小。后来在PCB上多加了两个时钟源每个Quad用自己的参考时钟链路稳定性好了很多。3. 功耗优化的具体手段与参数计算3.1 功耗构成分析GTY Transceiver的功耗主要来自几个部分PLL、CDR、发送驱动器、接收均衡器、DFE自适应逻辑、以及数字部分的时钟树。其中PLL和CDR是常开的发送驱动器和接收均衡器的功耗跟配置有关DFE自适应逻辑在链路稳定后可以关掉。以UltraScale的GTY为例一个通道在10.3125Gb/s下的典型功耗大约是250mW到350mW。其中PLL占80mW到120mWCDR占50mW到80mW发送驱动器占60mW到100mW接收均衡器占40mW到80mWDFE自适应逻辑占20mW到40mW。这些数字是典型值实际功耗跟工艺角、电压、温度都有关系。3.2 低功耗模式的选择GTY支持几种低功耗模式P0全速、P1低速、P2更低速、P3关断。P0是全速模式所有电路都正常工作。P1和P2会降低部分电路的偏置电流从而降低功耗但线速率也会相应降低。P3是关断模式通道完全不工作功耗降到最低。选择哪种模式取决于你的应用场景。如果链路需要一直保持全速运行那就只能用P0。如果链路有间歇性工作的需求可以在空闲时切到P1或P2。但要注意从P1/P2切回P0需要一定的恢复时间通常是微秒级别。如果切换太频繁反而会影响链路的稳定性。提示P1和P2模式下CDR的锁定状态可能会丢失。切回P0后需要重新锁定这个时间取决于参考时钟的频率和CDR的配置。3.3 DFE自适应的功耗优化DFEDecision Feedback Equalizer是GTY接收端用来补偿信道损耗的关键模块。DFE的自适应逻辑会持续运行根据接收到的信号调整均衡器的系数。这个自适应过程会消耗额外的功耗。如果信道特性比较稳定可以在链路初始化完成后把DFE的系数固定下来然后关掉自适应逻辑。这样能省下20mW到40mW的功耗。但前提是信道特性不会随时间变化比如温度漂移、电压波动等。如果信道特性会变关掉自适应可能导致误码率上升。我在一个背板项目里试过固定DFE系数初期误码率确实没问题但运行几个小时后因为温度升高信道损耗变了误码率就开始上升。后来还是把自适应打开了虽然多耗一点功耗但链路稳定性有保障。3.4 发送驱动器的功耗优化发送驱动器的功耗跟输出摆幅和预加重设置有关。输出摆幅越大功耗越高。预加重是为了补偿信道损耗但也会增加功耗。如果信道损耗不大可以适当降低预加重从而降低功耗。发送驱动器的输出摆幅通常用差分电压来表示典型值是800mV到1200mV。如果接收端的灵敏度足够可以降到800mV甚至更低。预加重的设置要看信道的S参数如果信道在奈奎斯特频率处的损耗小于10dB预加重可以设得很小甚至关掉。4. 实操过程与关键环节实现4.1 参考时钟的配置与验证参考时钟的配置从IBUFDS_GTE4开始。在Vivado里你需要先例化IBUFDS_GTE4把差分时钟输入接进来然后输出接到GTY的QPLL或CPLL的参考时钟输入。IBUFDS_GTE4 #( .REFCLK_HROW_CK_SEL(2b00), .REFCLK_EN_TX_PATH(1b0), .REFCLK_ICNTL_TX(5b00000) ) ibufds_gte4_inst ( .O(gt_refclk_out), .ODIV2(gt_refclk_div2), .CEB(1b0), .I(gt_refclk_p), .IB(gt_refclk_n) );配置完成后需要验证参考时钟的频率和抖动。频率可以用频率计测抖动需要用示波器或相位噪声分析仪测。如果抖动太大CDR可能锁不住。GTY对参考时钟的抖动要求是RMS抖动小于1ps积分范围12kHz到20MHz。4.2 QPLL的配置与锁定QPLL的配置在GTY的IP核里完成。你需要设置QPLL的VCO频率、分频比、参考时钟频率等参数。Vivado会自动计算这些参数但你需要确认计算结果是否合理。QPLL的锁定状态可以通过读取GTY的状态寄存器来查看。在Vivado的ILA里可以抓取QPLL的lock信号。如果lock信号一直不拉高说明QPLL没有锁定。常见原因包括参考时钟频率不对、参考时钟抖动太大、QPLL的配置参数不对。注意QPLL的锁定时间通常是几十微秒到几百微秒。如果上电后lock信号一直不拉高先检查参考时钟有没有进来再检查配置参数。4.3 功耗的测量与优化功耗的测量可以用万用表测GTY的供电电流然后乘以电压得到功耗。更精确的方法是用功耗分析仪比如Xilinx的Power Estimator工具可以根据你的配置估算功耗。优化功耗的步骤通常是先确认链路能正常工作再逐步降低功耗。比如先把DFE自适应关掉看误码率有没有变化再把发送驱动器的输出摆幅降低看接收端能不能正常接收最后考虑切到P1/P2模式。我在一个项目里做过这样的优化初始配置下一个通道的功耗是320mW。关掉DFE自适应后降到290mW降低输出摆幅后降到270mW切到P1模式后降到200mW。但P1模式下线速率只能跑到5Gb/s所以最终没有采用。4.4 时钟方案的验证流程时钟方案的验证分几步先验证参考时钟的频率和抖动再验证QPLL/CPLL的锁定然后验证CDR的锁定最后验证链路的误码率。误码率的测试通常用PRBS序列。GTY内部有PRBS生成器和检查器可以自发自收。测试时先让GTY发送PRBS序列然后接收端检查误码。如果误码率低于1E-12说明链路正常。我在调试一个25Gb/s的链路时发现误码率一直在1E-8左右怎么调均衡器都不行。后来用示波器看眼图发现眼图几乎闭合。检查参考时钟发现抖动达到了2ps RMS远超规格。换了一个抖动更小的时钟源后眼图打开误码率降到1E-15以下。5. 常见问题与排查技巧实录5.1 QPLL不锁定QPLL不锁定是最常见的问题之一。排查步骤检查参考时钟有没有进来。用示波器测IBUFDS_GTE4的输入引脚看有没有差分时钟。检查参考时钟的频率对不对。用频率计测看是否和配置一致。检查参考时钟的抖动。如果抖动太大QPLL可能锁不住。检查QPLL的配置参数。VCO频率、分频比、参考时钟频率是否匹配。5.2 CDR不锁定CDR不锁定通常是因为参考时钟频偏太大或者信道损耗太大。排查步骤检查参考时钟的频偏。GTY对参考时钟的频偏容忍度是±100ppm到±300ppm。检查信道的S参数。如果信道在奈奎斯特频率处的损耗超过20dBCDR可能锁不住。调整均衡器的设置。增加CTLE的增益或者打开DFE。5.3 误码率偏高误码率偏高可能的原因很多排查步骤检查眼图。如果眼图闭合说明信号质量差。检查参考时钟的抖动。抖动太大会导致误码率上升。检查均衡器的设置。均衡器没调好信号质量会差。检查发送驱动器的输出摆幅和预加重。摆幅太小或预加重不够接收端可能收不到。5.4 功耗降不下来功耗降不下来通常是因为有些模块没关掉。排查步骤检查DFE自适应有没有关掉。检查发送驱动器的输出摆幅和预加重有没有优化。检查有没有切到低功耗模式。检查PLL的配置。QPLL的功耗比CPLL高如果通道数少可以考虑用CPLL。5.5 常见问题速查表问题可能原因排查方法解决方法QPLL不锁定参考时钟频率不对用频率计测参考时钟更换时钟源或调整配置QPLL不锁定参考时钟抖动太大用示波器测抖动更换抖动更小的时钟源CDR不锁定参考时钟频偏太大用频率计测频偏调整时钟源或更换CDR不锁定信道损耗太大测S参数增加均衡器增益误码率偏高眼图闭合用示波器看眼图调整均衡器和预加重误码率偏高参考时钟抖动大测抖动更换时钟源功耗降不下来DFE自适应没关检查配置关掉DFE自适应功耗降不下来输出摆幅太大检查配置降低输出摆幅6. 几个容易踩的坑和实操心得第一个坑是参考时钟的走线长度。我见过一个项目参考时钟从时钟源到GTY的走线超过了15英寸结果CDR的锁定时间从几十微秒变成了几毫秒误码率也偏高。后来把时钟源挪到离GTY更近的位置问题就解决了。所以如果PCB布局允许参考时钟源尽量靠近GTY的时钟输入引脚。第二个坑是QPLL的共享条件。QPLL共享不是无条件的同一个QPLL下的通道线速率必须相同或有整数倍关系。我在一个项目里想把10.3125Gb/s和6.25Gb/s的通道放在同一个QPLL下结果发现不行只能一个用QPLL一个用CPLL。这个在规划阶段就要算清楚不然后面改起来很麻烦。第三个坑是DFE自适应的关闭时机。DFE自适应关掉确实能省功耗但前提是信道特性稳定。如果信道特性会随温度或电压变化关掉自适应可能导致误码率上升。我的经验是如果信道损耗小于15dB且工作环境温度变化不大可以尝试关掉自适应否则还是开着比较稳妥。第四个坑是低功耗模式的恢复时间。P1和P2模式虽然省功耗但切回P0需要时间。如果链路有间歇性工作的需求要算清楚恢复时间是否满足系统要求。我见过一个项目因为切换太频繁链路一直不稳定后来干脆一直跑P0虽然功耗高一点但稳定性有保障。第五个坑是参考时钟的频偏。GTY对参考时钟的频偏容忍度是有限的如果时钟源的频偏太大CDR可能锁不住。我在一个项目里用了一个便宜的晶振频偏达到了200ppm结果CDR一直锁不住。换了一个频偏小于50ppm的晶振后问题就解决了。所以参考时钟的选型不能只看频率还要看频偏和抖动。最后一个心得是功耗优化要循序渐进。不要一上来就把所有低功耗选项都打开那样很容易出问题。正确的做法是先确认链路能正常工作然后逐步降低功耗每改一个参数就测一次误码率确认没问题再改下一个。这样即使出了问题也能快速定位是哪个参数导致的。
返回列表