ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PHY直连设计避坑指南:电压驱动与电流驱动端接匹配实战

2026/9/28 16:03:56 拓冰建站 浏览量
PHY直连设计避坑指南:电压驱动与电流驱动端接匹配实战 1. PHY直连设计的核心分歧点1.1 为什么直连两个字让硬件工程师吵了二十年PHY芯片的直连设计在硬件圈里算是个老生常谈却又经常翻车的话题。我见过太多项目原理图看着没问题PCB也规规矩矩结果板子回来一测眼图糊成一团误码率居高不下最后查来查去问题出在驱动方式没匹配上。说白了PHY芯片和MAC之间的接口本质上是一个电气特性匹配的问题而电压驱动和电流驱动这两条路线决定了你外围电路到底该怎么搭。先把概念理清楚。所谓直连指的是MAC层和PHY芯片之间不经过任何转换器件直接通过RGMII、SGMII、RMII这类接口对接。听起来简单但MAC侧的输出级结构千差万别有的芯片是电压型输出有的则是电流型输出PHY侧的接收端同样有差异。如果两边都是电压驱动那基本可以直连中间串个电阻了事但如果一边是电流驱动另一边是电压驱动你就必须做端接匹配否则信号完整性直接崩盘。这个问题之所以让人头疼是因为很多芯片手册写得含糊其辞只给一个推荐连接图却不告诉你背后的电气原理。你照着抄换个芯片就出问题。所以这篇内容我打算从根子上把电压驱动和电流驱动的区别讲透再结合SGMII IP核配置、端接电阻计算、PCB走线这些实操细节给出一套能直接抄作业的方案。1.2 电压驱动和电流驱动的本质区别要理解这两种驱动方式得先回到最基本的电路原理。电压驱动顾名思义输出端是一个低阻抗的电压源输出电压摆幅固定比如1.2V、1.5V、1.8V这些常见电平。输出阻抗通常很小几十欧姆甚至更低。这种结构的特点是负载阻抗变化时输出电压基本不变电流随负载调整。电流驱动则相反输出端是一个高阻抗的电流源输出电流恒定比如16mA、20mA这种。负载阻抗变化时电流不变电压随负载调整。这就带来一个关键差异电流驱动必须有一个确定的负载电阻来把电流转换成电压否则输出端电压会飘到电源轨或者地信号根本没法看。放到PHY直连的场景里MAC侧的SGMII或者RGMII输出很多FPGA的GT收发器或者硬核MAC都是电流驱动模式输出电流典型值在8mA到20mA之间。而PHY芯片的接收端有的是高阻抗输入期待电压信号有的则内置了端接电阻期待电流信号。如果你把电流驱动的MAC直接连到高阻抗的PHY输入端那PHY看到的电压就是MAC输出电流乘以PHY输入阻抗这个阻抗往往很大导致电压摆幅远超PHY的输入范围轻则信号削顶重则打坏输入级。反过来电压驱动的MAC连到电流驱动的PHYPHY期待一个恒定电流结果MAC给的是恒定电压PHY内部的电流源无法正常工作信号同样出不来。所以直连的核心就是判断两边的驱动类型然后决定是直接连、串阻连、还是加端接网络。1.3 一个真实的翻车案例去年帮朋友调一块板子FPGA通过SGMII直连一颗千兆PHY。原理图是参考FPGA厂商的推荐设计MAC侧GT收发器配置成电流驱动输出差分对直接连到PHY的差分输入。板子回来之后链路能起来但丢包率很高跑iperf测试只有百兆带宽。用示波器差分探头一测眼图几乎闭合幅度只有200mV不到而PHY手册要求差分幅度至少800mV。问题出在哪FPGA的GT收发器输出电流设定为16mA但PHY的差分输入端内部端接是100欧姆差分。理论上差分电压应该是16mA乘以100欧姆等于1.6V足够满足要求。但实际测量只有200mV说明电流根本没有全部流过PHY的端接电阻。查了半天发现PCB上差分对走线中间串了两颗0.1uF的隔直电容而PHY的端接电阻在电容后面。也就是说GT收发器的电流先流过电容再流过端接电阻。电容对交流信号呈现低阻抗但对直流偏置是开路的导致GT输出端的共模电压无法建立电流源工作点偏离输出电流远小于设定值。解决办法很简单把隔直电容移到端接电阻之后或者干脆去掉电容因为GT和PHY的共模电压本来就匹配。改板之后眼图张开幅度恢复到1.2V差分丢包问题消失。这个案例说明电流驱动直连时端接电阻的位置和隔直电容的取舍直接决定信号质量。2. 电压驱动直连的电路设计要点2.1 电压驱动直连的适用场景电压驱动直连是最简单的情况通常出现在MAC和PHY都是电压型输出的场景。比如很多MCU内置的以太网MAC输出就是电压型直接连到PHY的电压型输入中间串一颗33欧姆或者50欧姆的电阻做阻抗匹配就行。这种场景下两边输出阻抗都低信号摆幅由电源电压决定只要电平标准匹配基本不会出问题。但要注意电压驱动直连并不意味着可以随便连。有几个细节必须确认第一两边的电平标准是否一致比如MAC输出1.8V CMOSPHY输入是3.3V CMOS那就不能直连需要电平转换。第二输出阻抗和输入阻抗是否匹配如果MAC输出阻抗是50欧姆PHY输入阻抗是100欧姆那就要加并联端接否则会有反射。第三走线长度和拓扑结构电压驱动对走线阻抗敏感差分对必须做100欧姆差分阻抗控制单端信号要做50欧姆阻抗控制。我一般会在原理图设计阶段先查MAC和PHY的IBIS模型做一次预仿真。如果没有IBIS模型就按最坏情况估算输出阻抗取最大值输入阻抗取最小值看分压后的电压是否还在PHY的输入阈值范围内。这个估算虽然粗糙但能筛掉大部分明显不匹配的方案。2.2 串阻和端接电阻的计算方法电压驱动直连时串阻的作用是抑制反射和振铃。假设MAC输出阻抗为RoPCB走线特征阻抗为Z0PHY输入阻抗为Ri。理想情况下Ro加上串阻Rs应该等于Z0这样源端匹配反射最小。所以Rs等于Z0减去Ro。比如Z0是50欧姆Ro是10欧姆那Rs取40欧姆实际选39欧姆或者43欧姆都可以。如果PHY输入端需要端接比如差分输入内部没有端接电阻那就要在PHY输入端并联一颗100欧姆电阻。这时候要算一下驱动能力MAC输出电压摆幅Vswing经过串阻和端接电阻分压后PHY输入端的电压Vin等于Vswing乘以Ri除以Ri加Rs加Ro。如果Vswing是1.2VRi是100欧姆Rs加Ro是50欧姆那Vin等于0.8V刚好满足大部分PHY的输入要求。但这里有个坑很多PHY的差分输入内部已经集成了100欧姆端接你外面再并一颗等效阻抗变成50欧姆分压后电压减半可能导致输入幅度不足。所以一定要查手册确认内部端接情况。我习惯在原理图上把内部端接画成虚线提醒自己不要重复添加。2.3 PCB走线的阻抗控制与长度匹配电压驱动直连对PCB走线的要求比电流驱动更严格因为电压信号对反射更敏感。差分对必须做100欧姆差分阻抗单端信号做50欧姆。走线长度方面SGMII或者RGMII的时钟频率在125MHz到625MHz之间波长在PCB上大约是30cm到10cm。按照传输线理论走线长度超过波长的十分之一就要考虑传输线效应。所以差分对走线尽量控制在5cm以内超过的话就要做阻抗匹配和端接。长度匹配方面差分对内的两根线长度差要控制在5mil以内差分对之间的长度差控制在50mil以内。这个要求看起来苛刻但实际做下来并不难只要在Layout阶段用等长绕线功能就能搞定。我一般会在约束管理器里设置好差分对和等长组让工具自动检查。还有一个容易被忽略的点过孔。差分对换层时过孔会引入阻抗不连续导致反射。如果必须换层尽量在过孔旁边加回流地过孔减小回流路径。换层数量控制在2次以内超过的话信号质量会明显下降。3. 电流驱动直连的电路设计要点3.1 电流驱动直连的端接网络设计电流驱动直连的核心是端接网络。因为电流源需要一个确定的负载电阻来产生电压所以端接电阻的阻值和位置非常关键。常见的端接方式有三种差分端接、单端端接和Thevenin端接。差分端接最简单在PHY的差分输入端并一颗100欧姆电阻电流流过这颗电阻产生差分电压。比如MAC输出电流16mA差分端接100欧姆差分电压就是1.6V满足大部分PHY的要求。但要注意这颗电阻必须放在靠近PHY输入端的位置走线尽量短否则端接效果打折扣。单端端接是每根线对地并一颗50欧姆电阻差分阻抗等效100欧姆。这种方式的好处是可以独立调整共模电压但功耗比差分端接大。Thevenin端接是用两颗电阻分压既做端接又做偏置适合需要特定共模电压的场景。计算方法是假设电源电压Vcc目标共模电压Vcm端接电阻R1和R2满足R1并联R2等于50欧姆且Vcc乘以R2除以R1加R2等于Vcm。解这个方程组就能得到R1和R2的值。我一般优先选差分端接因为元件少、功耗低、布局简单。只有在共模电压不匹配时才考虑Thevenin端接。3.2 隔直电容的取舍与位置隔直电容在电流驱动直连中是个双刃剑。它的作用是隔离两边的直流共模电压防止电流倒灌或者共模冲突。但前面案例说过如果电容放在端接电阻之前电流源的直流回路被切断输出电流无法建立信号幅度会严重衰减。正确的做法是如果两边共模电压匹配比如都是1.2V那就不需要隔直电容直接连。如果共模电压不匹配比如MAC侧是1.2VPHY侧是0.9V那就需要隔直电容但电容必须放在端接电阻之后也就是靠近PHY的那一侧。这样电流源的直流回路通过端接电阻建立交流信号通过电容耦合到PHY输入端。电容值的选择也有讲究。SGMII的基频是625MHz数据速率1.25Gbps电容的阻抗要远小于端接电阻。按公式Zc等于1除以2πfC如果C取0.1uF在625MHz时Zc大约是2.5毫欧完全可以忽略。但电容的封装要选小尺寸的比如0402或者0201减小寄生电感。我一般用0.1uF的0402电容实测效果很好。3.3 电流驱动直连的仿真验证方法电流驱动直连的设计光靠计算不够最好做一次仿真。我通常用HyperLynx或者ADS做通道仿真把MAC的IBIS模型、PCB走线的S参数、PHY的输入模型串起来跑一次眼图。仿真的时候重点看三个指标眼高、眼宽和抖动。眼高要大于PHY手册要求的最小差分幅度比如800mV。眼宽要大于0.7个UI1.25Gbps的UI是800ps眼宽要大于560ps。抖动要小于0.3个UI也就是240ps。如果仿真结果不达标就调整端接电阻或者走线长度重新跑。没有仿真工具的话可以用示波器实测。板子回来之后用差分探头在PHY输入端测眼图看幅度和张开度。如果幅度不够先查端接电阻是否焊接正确再查隔直电容位置是否合理。如果眼图闭合查走线阻抗和长度匹配。实测是最直接的验证手段但前提是板子已经做出来了成本比较高。所以仿真和实测结合是最稳妥的方案。4. SGMII IP核与PHY协同配置的实操细节4.1 SGMII IP核的模式选择SGMII IP核在使用时有一个关键配置项MAC模式还是PHY模式。这个配置决定了IP核内部的时钟方向、数据方向和寄存器行为。如果FPGA通过SGMII直连一颗PHY芯片那FPGA侧的IP核应该配置成MAC模式PHY芯片配置成PHY模式。反过来如果FPGA模拟PHY功能那就配置成PHY模式。为什么容易搞混因为SGMII协议本身是对称的物理层看起来一样但MAC和PHY的角色不同。MAC模式负责发送数据、产生时钟、管理链路状态PHY模式负责接收数据、恢复时钟、上报链路状态。如果两边都配置成MAC模式时钟方向冲突链路起不来。如果都配置成PHY模式没有主时钟源同样起不来。我一般会在IP核配置界面里先确认Device Role选项选MAC还是PHY。然后检查时钟配置MAC模式下IP核输出TX时钟输入RX时钟PHY模式下IP核输入TX时钟输出RX时钟。这个方向不能错错了就要重新综合浪费半天时间。4.2 自协商与速率匹配的配置SGMII支持自协商但自协商的过程和铜口以太网不一样。SGMII的自协商是通过配置寄存器实现的MAC和PHY通过MDIO接口交换能力信息。如果两边都开启自协商链路会自动协商到最高共同速率比如1Gbps全双工。如果一边开启一边关闭链路可能协商失败或者降到10Mbps。我建议在直连场景下两边都开启自协商但把速率固定为1Gbps避免协商到低速率。具体配置方法是在PHY的寄存器里设置BMCR寄存器的bit12和bit8强制1Gbps全双工在MAC的IP核里设置速率控制寄存器同样强制1Gbps。这样链路起来就是1Gbps不会出现速率跳变。还有一个坑SGMII的参考时钟。MAC和PHY的参考时钟必须同源或者频率偏差在±100ppm以内。如果两边用不同的晶振频率偏差太大链路会频繁断连。我一般用一颗25MHz晶振通过时钟缓冲器分给MAC和PHY保证同源。4.3 MDIO接口的调试技巧MDIO接口是MAC管理PHY的通道调试的时候经常出问题。最常见的问题是MDIO地址配错导致读写寄存器失败。PHY的MDIO地址通常由硬件引脚决定比如PHYAD0到PHYAD4通过上下拉电阻设置。如果地址设错MAC就找不到PHY链路起不来。调试的时候我一般先用示波器看MDIO和MDC波形。MDC是时钟频率一般2.5MHzMDIO是数据在MDC上升沿采样。如果MDC没有波形查MAC的MDIO控制器是否使能如果MDIO没有波形查MDIO线上是否有上拉电阻通常需要1.5k到10k欧姆的上拉。如果波形都有但读写失败查PHY地址是否匹配。还有一个技巧用MDIO读PHY的ID寄存器地址是0x02和0x03。如果读出来的ID和手册一致说明MDIO通信正常。如果不一致查地址和时序。这个步骤能快速定位问题比盲目查链路状态高效得多。5. 常见问题与排查技巧实录5.1 链路起不来怎么办链路起不来是最常见的问题排查思路要按层次来。第一层查电源和时钟。PHY的电源电压是否正常晶振是否起振复位信号是否释放。第二层查MDIO通信。读PHY的ID寄存器确认MAC能访问PHY。第三层查SGMII配置。确认IP核模式、速率、自协商配置是否正确。第四层查硬件连接。差分对是否接反端接电阻是否焊接隔直电容是否短路。我遇到过最诡异的一次链路起不来查了半天发现是PHY的复位引脚被PCB上的过孔短路到地复位一直有效。所以硬件检查不能只看原理图要用万用表实测关键节点的电压和阻抗。5.2 丢包和误码率高的排查方法链路能起来但丢包率高通常是信号完整性问题。排查步骤第一步测眼图。用差分探头在PHY输入端测看眼高和眼宽是否达标。第二步查端接电阻。用万用表测端接电阻的阻值确认没有虚焊或者错焊。第三步查走线。用TDR测差分对的阻抗看是否连续有没有突变。第四步查电源噪声。用示波器测PHY的电源纹波如果超过50mV加滤波电容。我一般会先换一颗PHY芯片排除芯片本身的问题。如果换了还不行再查PCB。这个方法虽然笨但能快速排除芯片批次问题。5.3 常见问题速查表问题现象可能原因排查方法解决方案链路完全起不来电源/时钟/复位异常测电压、测晶振、测复位修复电源、更换晶振、释放复位MDIO读写失败地址错误、上拉缺失读ID寄存器、测MDIO波形改地址、加上拉电阻链路频繁断连参考时钟偏差大测时钟频率同源时钟、换晶振丢包率高信号完整性差测眼图、测阻抗调端接、改走线速率协商失败自协商配置不一致读BMCR寄存器强制速率、统一配置眼图闭合端接位置错误查隔直电容位置电容移到端接之后幅度不足端接电阻重复查内部端接去掉外部端接共模电压偏移共模不匹配测共模电压加隔直电容或Thevenin端接5.4 独家避坑经验第一个坑不要迷信参考设计。FPGA厂商的参考设计通常是针对自家开发板PHY型号和PCB叠层都不一样。直接抄过来端接电阻和走线长度可能完全不匹配。我一般会把参考设计当起点然后根据实际PHY手册和PCB参数重新计算。第二个坑端接电阻的精度。电流驱动直连时端接电阻的精度直接影响差分电压。1%精度的电阻差分电压偏差1%问题不大。但如果用5%精度的电阻差分电压偏差5%可能导致眼高不足。我一般用1%精度的薄膜电阻0402封装温度系数50ppm。第三个坑隔直电容的封装。0402的电容寄生电感大约0.5nH0201的大约0.3nH。在1.25Gbps速率下0.5nH的感抗大约是4欧姆对100欧姆的端接电阻来说影响2%。如果速率更高比如2.5Gbps感抗翻倍影响4%。所以高速场景下尽量用0201封装。第四个坑PCB叠层设计。差分对的阻抗控制依赖叠层如果叠层设计不合理比如介质厚度不均匀阻抗偏差可能超过10%。我一般会在叠层设计阶段用阻抗计算工具算好线宽和间距然后让PCB厂做阻抗测试片确认实际阻抗在±10%以内。6. 从原理图到量产的全流程检查清单6.1 原理图设计阶段的检查项原理图阶段要把所有电气连接确认清楚。第一确认MAC和PHY的驱动类型电压驱动还是电流驱动。第二确认电平标准是否匹配不匹配就加电平转换。第三确认端接方式差分端接、单端端接还是Thevenin端接。第四确认隔直电容的位置和容值。第五确认MDIO地址和上拉电阻。第六确认复位电路和时钟电路。我一般会做一个检查表每项打勾之后才发板。这个习惯帮我避免了很多低级错误比如忘记加上拉电阻、端接电阻阻值写错、复位引脚悬空。6.2 PCB Layout阶段的检查项Layout阶段重点查阻抗和长度。第一差分对阻抗是否100欧姆单端是否50欧姆。第二差分对内长度差是否小于5mil对间长度差是否小于50mil。第三端接电阻是否靠近PHY输入端走线是否短。第四隔直电容是否在端接电阻之后。第五过孔数量是否控制在2次以内回流地过孔是否添加。第六电源滤波电容是否靠近PHY电源引脚。我一般会用约束管理器设置好规则让工具自动检查。但工具检查不能替代人工复核特别是端接电阻的位置和隔直电容的顺序工具往往查不出来必须人工确认。6.3 调试阶段的检查项调试阶段按信号流向来查。第一测电源电压和纹波。第二测晶振频率和幅度。第三测复位信号。第四读PHY ID寄存器。第五测MDIO波形。第六测SGMII差分信号的眼图。第七跑iperf测试带宽和丢包率。我一般会先跑通MDIO再调SGMII。MDIO通了说明数字接口没问题剩下的就是模拟信号调试。如果MDIO不通先查数字部分别急着调模拟。6.4 量产阶段的检查项量产阶段重点是一致性和可靠性。第一每块板子都测眼图确保信号质量一致。第二做高低温测试-40度到85度看链路是否稳定。第三做长时间老化测试跑72小时iperf看丢包率是否累积。第四做电源波动测试±5%电压波动看链路是否断连。我一般会抽10块板子做全套测试如果都通过才批量生产。如果有1块不通过就查批次问题比如PCB阻抗偏差、元件批次差异。7. 高速电路设计中的经验总结7.1 信号完整性的三个核心原则高速电路设计说到底就是三个原则阻抗匹配、回流路径、串扰控制。阻抗匹配是基础源端匹配、终端匹配、差分匹配目的都是让信号能量全部传过去不反射。回流路径是关键信号电流从源到负载必须有一条低阻抗的回流路径通常是地平面。如果回流路径被切断信号质量直接崩。串扰控制是难点相邻走线之间的容性和感性耦合会导致信号串扰。控制方法是加大线间距、加地线隔离、减少平行走线长度。我一般会在Layout阶段把差分对和其他信号线间距控制在3W以上W是线宽。如果空间允许间距越大越好。地线隔离方面差分对之间加地线地线每隔一段打过孔到地平面。7.2 电源完整性的设计要点电源完整性经常被忽略但对PHY直连影响很大。PHY的电源噪声会调制到输出信号上导致眼图恶化。设计要点第一电源平面和地平面尽量完整不要被走线切割。第二电源滤波电容靠近PHY电源引脚容值组合用0.1uF和10uF。第三电源走线尽量短粗减小阻抗。第四如果电源噪声大加LDO或者π型滤波。我一般会在PHY的每个电源引脚旁边放一颗0.1uF电容再在电源入口放一颗10uF电容。如果电源纹波超过50mV加一颗LDO把纹波压到10mV以内。7.3 调试工具的选择与使用调试PHY直连必备工具高带宽示波器至少1GHz带宽差分探头。TDR测阻抗。万用表测电压和电阻。MDIO调试工具读写寄存器。我一般用示波器测眼图用TDR测阻抗用MDIO工具读寄存器。这三个工具配合能解决90%的问题。示波器的带宽要足够1.25Gbps的信号基频625MHz三次谐波1.875GHz所以示波器带宽至少2GHz才能看到完整的眼图。如果带宽不够眼图会失真误判信号质量。差分探头要选高阻抗的避免加载效应。7.4 个人经验体会PHY直连设计说难不难说简单也不简单。核心就是搞清楚驱动类型算好端接电阻控制好走线阻抗。但实际操作中细节决定成败。一个电阻放错位置一个电容选错封装都可能导致链路失败。我踩过的坑大部分是因为想当然。比如看到参考设计有隔直电容就照抄没想过电容位置对不对。比如看到PHY内部有端接就以为外面不用加没查手册确认。这些坑说到底是对电气原理理解不够深。所以我的建议是不要只抄原理图要理解每个元件的作用每个参数的计算依据。这样遇到问题才能快速定位而不是盲目试错。最后分享一个小技巧在原理图设计阶段用SPICE仿真一下端接网络看看差分电压和共模电压是否满足要求。这个仿真很快几分钟就能跑完但能避免很多低级错误。我一般用LTspice免费而且好用模型库也全。仿真通过之后再发板心里踏实很多。