ARTICLE DETAIL

资讯详情

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

RGMII时序调试实战:示波器抓取与眼图分析

RGMII时序调试实战:示波器抓取与眼图分析 1. 为什么RGMII时序值得你花时间用示波器去抓RGMII这个接口做嵌入式以太网的人基本都绕不开。它全称Reduced Gigabit Media Independent Interface是GMAC和PHY之间最常用的千兆以太网连接方式之一。相比GMII的24根线RGMII把数据位宽从8位压缩到4位通过双沿采样DDR把时钟频率降到125MHz引脚数直接砍半。听起来很美好但代价就是——时序裕量变得非常紧张。我在实际项目里遇到过太多次这样的情况板子打回来ping通没问题跑iperf也能出流量但一跑长时间压力测试就偶发丢包或者换一批PHY芯片就出现协商不上千兆。软件层面查了一圈寄存器什么异常都没有。最后拿示波器一抓RGMII的时钟和数据信号问题一目了然——建立时间或者保持时间不够眼图都快闭上了。这就是为什么我坚持认为搞以太网硬件和底层驱动的工程师必须掌握用示波器抓RGMII时序这项技能。它不是一个可选项而是你定位问题的最后一道防线。这篇文章我会把RGMII的时序原理、示波器抓取的具体操作、常见问题排查以及我在实际项目中踩过的坑全部拆开讲清楚。不管你是刚接触RGMII的新手还是已经调过几块板子的老手应该都能从中找到有用的东西。RGMII的核心矛盾在于它用DDR方式在125MHz时钟的上下沿各传4位数据等效于125MHz×2×4bit1000Mbps。但时钟和数据之间的偏斜skew必须控制在一个非常窄的窗口内。标准里定义了两种模式延时模式Delay Mode和非延时模式Non-Delay Mode区别就在于时钟是否相对于数据做1.5~2ns的延时。选哪种模式、怎么配置PHY和GMAC、PCB走线怎么等长这些都会直接影响你抓到的波形质量。2. RGMII时序的核心机制与两种模式的选择逻辑2.1 DDR双沿采样到底是怎么回事先把这个最基础的概念说透。普通SDR单沿采样是在时钟的上升沿采一个数据一个时钟周期传1位。RGMII用的是DDR也就是Double Data Rate上升沿和下降沿都采数据。所以125MHz的时钟实际上每秒传了250M次数据。每次传4位TXD[3:0]或RXD[3:0]加起来就是250M×41000Mbps。你可以把它想象成一条双车道公路上升沿走一辆车下降沿走一辆车每条车道并排跑4个轮子。时钟就是交通信号灯数据就是车。如果信号灯和车到达路口的时间对不上车就会闯红灯或者错过绿灯——对应到电路里就是采样错误。在RGMII中发送方向GMAC到PHY有TXC、TXD[3:0]、TX_CTL接收方向PHY到GMAC有RXC、RXD[3:0]、RX_CTL。TX_CTL和RX_CTL是控制信号在时钟的上升沿表示TXEN/RXEN数据有效下降沿表示TXERR/RXERR错误指示。这个细节很多人容易忽略抓波形的时候如果只看数据不看CTL可能会误判。2.2 延时模式与非延时模式的本质区别RGMII标准v2.0里明确定义了两种时序模式这是整个调试的核心分叉点。非延时模式Non-Delay Mode时钟和数据同时从发送端出发到达接收端时接收端需要自己把时钟延时1.5~2ns再去采样数据。这个延时通常由PHY内部或者GMAC内部的延迟电路完成。它的好处是PCB走线不需要额外等长补偿但缺点是接收端的内部延时必须准确不同厂家的PHY实现差异很大。延时模式Delay Mode发送端在输出的时候就把时钟相对于数据延时了1.5~2ns。这样接收端拿到信号后时钟的边沿正好落在数据的中间位置采样裕量最大。PCB走线需要做等长控制但时序最稳定。我个人的经验是优先选延时模式。为什么因为非延时模式对PHY内部延时电路的精度依赖太高换一颗PHY芯片可能就要重新调。而延时模式把延时做在发送端你只要保证PCB走线等长时序就是可预测的。当然具体选哪种还要看你的GMAC和PHY支持情况。有些SoC的GMAC只支持非延时模式有些PHY默认就是延时模式这时候就要在设备树或者寄存器里做对应配置。这里有个关键点发送端和接收端的模式必须匹配。如果GMAC配了延时模式PHY也配了延时模式那等于延时了两次时序反而会错。我见过一个项目硬件工程师和驱动工程师各配各的结果两边都开了延时波形抓出来时钟边沿离数据边沿只有0.3ns批量生产时良率惨不忍睹。2.3 时序参数的计算过程RGMII的时序要求可以用几个关键参数来描述。以延时模式为例标准要求数据有效窗口Data Valid Window通常要求至少1.0ns时钟到数据的偏斜SkewTXC相对于TXD的延时为1.5~2.0ns建立时间Setup Time数据在时钟边沿前稳定的时间保持时间Hold Time数据在时钟边沿后保持稳定的时间假设你的RGMII时钟周期是8ns125MHzDDR意味着每个数据位只持续4ns。在这4ns里时钟边沿要落在数据窗口的正中间。如果时钟偏斜是2ns那建立时间和保持时间各剩1ns左右。听起来够用但实际PCB走线偏差、PHY输出抖动、示波器探头负载都会吃掉裕量。我一般会留至少30%的裕量。也就是说如果理论计算建立时间是1ns实际抓波形至少要看到1.3ns以上才放心。批量生产时不同批次的PHY芯片、不同批次的PCB板材参数都会有漂移。3. 示波器抓取RGMII信号前的准备工作3.1 示波器和探头的选型要点不是随便一台示波器都能抓RGMII。RGMII的时钟是125MHz但它的谐波成分很高要看清边沿和抖动示波器的带宽至少要是信号最高频率成分的3~5倍。125MHz的方波其有效谐波到1GHz以上所以我建议示波器带宽不低于500MHz最好1GHz以上。我手头常用的是一台1GHz带宽、4通道的示波器。4个通道刚好可以同时抓TXC、TXD0、TXD1和TX_CTL或者抓RXC、RXD0、RXD1和RX_CTL。如果你只有2通道那就得分两次抓但这样就没法看通道间的相对时序了不太推荐。探头方面必须用高带宽无源探头或者有源差分探头。普通10:1无源探头在500MHz以上衰减很严重而且探头本身的电容通常10~15pF会加载到信号线上导致波形失真。如果条件允许用差分探头抓RGMII的差分时钟如果有的话单端信号就用低电容探头。注意探头的地线要尽量短。我见过有人用标准的长地线夹子结果抓出来的波形振铃严重还以为是信号完整性问题其实是地线电感造成的。用弹簧地针或者短地线焊接效果会好很多。3.2 测试点的选择与焊接RGMII信号通常在SoC和PHY之间的走线上。理想情况下你应该在PHY的接收引脚处测量因为那是采样实际发生的地方。但PHY通常是BGA封装引脚很难直接探。退而求其次可以在走线上的过孔或者测试点测量。如果板子上没有预留测试点就需要自己飞线。我的做法是找一段细的漆包线直径0.1mm左右一端焊在RGMII走线的过孔上另一端焊在一个小焊盘上作为测试点。焊接时间要短烙铁温度不要太高避免损坏走线。焊完后用万用表确认没有短路。对于时钟信号最好在靠近PHY的一端测。对于数据信号最好在靠近GMAC的一端测。这样能分别看到发送端和接收端的实际波形。如果只能在一个点测那就选PHY端因为PHY的采样容限通常比GMAC更紧。3.3 示波器设置的初始参数抓RGMII信号示波器的设置很关键。以下是我常用的初始配置参数设置值说明时基2ns/div一个屏幕显示约20ns能看到2~3个时钟周期垂直档位500mV/divRGMII通常是1.8V或2.5V电平根据实际情况调整触发源TXC或RXC用时钟做触发触发类型边沿触发上升沿或下降沿触发模式Normal避免自动触发抓到无关信号输入阻抗1MΩ如果探头是10:1带宽限制全带宽不要开20MHz限制采样率最高至少5GS/s以上触发电平设在时钟信号幅度的50%左右。如果时钟是1.8V触发电平设0.9V。触发模式用Normal这样示波器只在满足触发条件时才更新波形方便观察稳定信号。我还会打开示波器的余辉显示Persistence功能把多次采集的波形叠加在一起。这样能直观地看到抖动和时序裕量的分布。如果余辉显示下波形边缘很模糊说明抖动大如果边缘清晰说明信号质量好。4. 实操一步步抓取并分析RGMII时序波形4.1 抓取发送方向GMAC到PHY的时序发送方向的信号从SoC的GMAC出来经过PCB走线到PHY。我们要看的是TXC和TXD[3:0]之间的相对关系。第一步把探头分别接到TXC、TXD0、TXD1和TX_CTL上。如果通道不够至少接TXC和TXD0。地线要接好最好每个探头都单独接地。第二步设置触发。用TXC的上升沿触发触发模式Normal。调整时基让屏幕上显示2~3个完整的时钟周期。第三步观察波形。在延时模式下你应该看到TXC的边沿落在TXD数据窗口的中间。具体来说TXC的上升沿应该对应TXD0的某个数据位的中间位置。如果TXC的边沿太靠近数据跳变沿说明延时不够或者走线偏斜太大。第四步用示波器的测量功能。大多数示波器都有“延迟测量”功能可以测量两个通道之间的时间差。测TXC上升沿到TXD0跳变沿的时间这就是实际的偏斜值。标准要求1.5~2.0ns实测如果在这个范围内基本没问题。我一般会连续抓1000次以上看偏斜的最大值和最小值。如果最大值和最小值相差超过0.5ns说明抖动偏大需要查电源噪声或者走线阻抗。4.2 抓取接收方向PHY到GMAC的时序接收方向的信号从PHY出来到SoC的GMAC。这个方向的时序通常更关键因为GMAC的采样窗口往往比PHY更紧。操作方法和发送方向类似只是探头接到RXC、RXD0、RXD1和RX_CTL上。触发源换成RXC。这里有个容易踩的坑PHY的接收时钟RXC可能是PHY内部恢复出来的它的抖动可能比发送时钟TXC大。如果你发现RXC的抖动明显大于TXC那可能是PHY的CDR时钟数据恢复电路工作不稳定或者PHY的电源纹波太大。另外接收方向的延时模式配置取决于PHY。有些PHY默认在接收方向加延时有些需要寄存器配置。你要先确认PHY的数据手册知道它当前工作在哪种模式再去分析波形。4.3 用眼图功能评估时序裕量现代示波器基本都有眼图功能。对于RGMII这种DDR信号眼图是最直观的评估工具。设置方法用时钟做触发把数据信号接到另一个通道打开眼图测量功能。示波器会自动把多次采集的数据叠加起来形成一个“眼睛”形状的图。眼睛张开的宽度就是时序裕量高度就是电压裕量。我一般会要求眼图张开度至少达到理论值的60%以上。比如RGMII的数据位宽是4ns眼图张开度至少要2.4ns。如果低于这个值批量生产时出问题的概率就很高。眼图还能看出抖动类型。如果眼睛的左右边缘模糊说明是随机抖动RJ如果眼睛有多个离散的边沿说明是确定性抖动DJ可能是周期性噪声或者码间干扰。4.4 实测数据记录与分析以下是我在一个实际项目中抓到的RGMII发送方向时序数据延时模式1.8V电平125MHz测量项最小值典型值最大值标准要求结论TXC周期7.96ns8.00ns8.04ns8.00ns±100ppm合格TXC到TXD0偏斜1.62ns1.78ns1.95ns1.5~2.0ns合格TXD0建立时间1.35ns1.52ns1.68ns≥1.0ns合格TXD0保持时间1.28ns1.45ns1.60ns≥1.0ns合格眼图张开度2.65ns2.82ns2.95ns≥2.4ns合格这批数据看起来不错但注意最小值已经接近标准下限。如果PCB走线再长一点或者PHY换一个批次可能就超标了。所以我在设计阶段会尽量留裕量比如把走线等长控制在±5mil以内电源纹波控制在30mV以内。5. 常见问题与排查技巧实录5.1 波形抓不到或者全是噪声这是新手最常遇到的问题。原因通常有几个探头地线没接好。这是最常见的原因。地线太长或者没接会引入大量噪声。解决方法是缩短地线或者用弹簧地针。触发设置不对。触发源选错了或者触发电平设得太高/太低。先用Auto触发模式找到信号再切到Normal模式。测试点选错了。焊到了错误的走线上或者焊点虚焊。用万用表通断档确认。信号幅度太小。RGMII可能是1.8V、2.5V或3.3V电平示波器垂直档位要匹配。如果档位太大波形会很小。我遇到过一次抓了半天全是50Hz工频干扰后来发现是探头地线夹子碰到了旁边的电源线。换了个位置就好了。5.2 时钟和数据偏斜超标偏斜超标通常意味着采样窗口不够会导致偶发误码。排查思路检查PCB走线等长。RGMII的TXC和TXD[3:0]之间的走线长度差应该控制在±5mil以内。如果差太多需要重新布线或者加延时补偿。检查延时模式配置。确认GMAC和PHY的延时模式是否匹配。如果一边开一边关偏斜肯定不对。检查PHY寄存器。有些PHY可以通过寄存器调整内部延时步进通常是0.1ns。可以微调试试。检查电源噪声。电源纹波大会导致输出抖动增加偏斜也会变大。用示波器AC耦合测一下PHY的电源引脚。5.3 眼图闭合或者抖动大眼图闭合说明时序裕量不足批量生产风险很高。可能的原因参考时钟抖动大。RGMII的时钟通常来自晶振或者SoC的PLL。如果参考时钟本身抖动大输出时钟也会抖。用相位噪声分析仪测一下参考时钟。电源纹波大。PHY和GMAC的电源纹波会直接调制输出信号的相位。用示波器AC耦合测电源纹波应该控制在50mV以内。走线阻抗不匹配。RGMII走线通常是50Ω单端或者100Ω差分。如果阻抗不匹配会有反射导致波形振铃和抖动。用TDR测一下走线阻抗。串扰。RGMII走线如果离其他高速信号太近会有串扰。增加走线间距或者加地线隔离。5.4 常见问题速查表现象可能原因排查方法解决措施抓不到波形探头地线未接、触发错误检查地线、用Auto触发缩短地线、重设触发波形全是噪声地线太长、测试点错误换短地线、万用表确认焊接短地线、重选测试点偏斜超标走线不等长、模式不匹配测走线长度、查寄存器重新布线、统一延时模式眼图闭合电源纹波大、参考时钟抖动测电源、测参考时钟加滤波电容、换晶振偶发丢包时序裕量不足长时间抓眼图调整延时、优化走线协商不上千兆RXC/TXC无输出查PHY寄存器、测时钟检查PHY配置、复位PHY5.5 几个容易被忽略的细节第一个细节TX_CTL和RX_CTL的时序。很多人只抓数据线忽略了控制线。但TX_CTL在上升沿表示TXEN下降沿表示TXERR如果它的时序不对PHY可能收不到有效数据。我遇到过一个问题数据线时序完美但TX_CTL的下降沿偏了0.5ns导致PHY误判为错误帧。第二个细节PHY的复位和初始化时间。PHY上电后需要一段时间才能稳定输出RXC。如果你在PHY还没初始化完就去抓波形可能什么都抓不到。等PHY的Link LED亮了再抓。第三个细节示波器探头的负载效应。探头本身有电容会加载到信号线上。如果探头电容太大比如15pF在125MHz下容抗只有85Ω会明显拉低信号幅度。用低电容探头3pF或者有源探头。第四个细节温度影响。PHY芯片的延时会随温度变化。我在一个项目里发现常温下时序合格但高温85度时偏斜增加了0.3ns导致偶发丢包。所以最好在高低温环境下都抓一下波形。6. 从波形到寄存器软硬件联合调试的思路抓到波形只是第一步更重要的是根据波形去调整软硬件配置。RGMII的时序问题往往需要驱动工程师和硬件工程师一起解决。6.1 通过设备树配置PHY延时在Linux系统里PHY的延时模式通常通过设备树配置。以常见的PHY为例设备树里会有类似这样的节点fec { phy-mode rgmii-id; phy-handle ethphy0; }; ethphy0 { reg 0; qca,clk-out-frequency 125000000; qca,keep-pll-enabled; };这里的phy-mode是关键。常见的值有rgmii非延时模式时钟和数据同时输出rgmii-id延时模式PHY内部对TX和RX都加延时rgmii-txid只在TX方向加延时rgmii-rxid只在RX方向加延时如果你抓波形发现偏斜不对首先检查这个配置。我见过有人设了rgmii-id但PHY实际不支持内部延时结果时序完全错乱。6.2 通过寄存器微调延时有些PHY支持通过寄存器调整延时步进通常是0.1ns或0.2ns。比如某款PHY的寄存器0x1E可以调整RXC延时寄存器0x1F可以调整TXC延时。调整方法是先用示波器抓当前波形记录偏斜值。然后写寄存器增加或减少延时再抓波形对比。反复几次直到偏斜落在标准范围内。写寄存器可以通过mdio-tools或者phytool# 读取PHY寄存器 phytool read eth0/0:0 0x1E # 写入PHY寄存器 phytool write eth0/0:0 0x1E 0x1234注意不同PHY的寄存器定义完全不同一定要查对应型号的数据手册。不要照搬其他PHY的配置。6.3 硬件层面的调整手段如果软件调整不够就需要动硬件串联电阻在TXC或RXC上串联一个小电阻比如22Ω可以微调延时。电阻越大延时越大但信号幅度会降低。并联电容在信号线上并联一个小电容比如2pF可以增加上升时间等效于增加延时。但电容太大会导致信号边沿变缓影响高速性能。调整走线长度如果PCB还没打样直接调整走线长度。每1000mil走线大约对应150ps延时取决于板材介电常数。更换PHY如果PHY本身的延时特性不好换一款支持更精细延时调整的PHY。我个人的优先级是先调软件寄存器再调硬件串联电阻最后才考虑改板。因为改板成本最高周期最长。7. 一些实战中的经验体会RGMII时序调试这件事说到底是一个“看波形、调参数、再验证”的循环。我做了这么多年最大的体会是不要迷信理论计算一定要以实测波形为准。理论计算能给你一个初始值但PCB板材的介电常数、走线的实际阻抗、PHY芯片的批次差异这些都会让实际值偏离理论值。另一个体会是留裕量比调到位更重要。我见过太多项目实验室里时序刚刚好批量生产就出问题。因为批量生产时PHY芯片的批次不同、PCB板材不同、焊接温度不同这些都会导致时序漂移。所以我在设计阶段就会要求眼图张开度至少达到理论值的70%以上偏斜控制在标准范围的中间值附近。还有一点RGMII的时序问题往往不是孤立的。它可能和电源完整性、信号完整性、EMC都有关联。如果你抓波形发现时序怎么调都不对不妨查查电源纹波、地平面完整性、走线串扰这些方面。有时候问题不在RGMII本身而在它周围的环境。最后分享一个小技巧如果你手头的示波器没有眼图功能可以用余辉显示加长时间采集来近似。把余辉时间设到无限让示波器连续采集几分钟波形叠加起来也能看出时序裕量的分布。虽然不如真正的眼图精确但足够判断有没有明显问题。这个内容后续还可以这样扩展如果你用的是FPGA的GMAC IP核可以结合时序约束文件SDC来分析。FPGA的时序分析工具能给出建立时间和保持时间的报告和示波器实测数据互相印证定位问题会更准。
返回列表