ARTICLE DETAIL

资讯详情

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

SGMII接口详解:FPGA、PHY、变压器到RJ45的完整链路

SGMII接口详解:FPGA、PHY、变压器到RJ45的完整链路 做硬件的人都有过这种经历新画好的板卡贴片回来第一次上电插上网线Link 灯死活不亮。第一反应肯定是翻原理图从 FPGA 引脚一路追到 PHY再一路追到 RJ45。但等你真的拿起万用表盯着那些密密麻麻的差分对往往很容易卡住SGMII 信号到底长什么样它在板子上是从哪个引脚出去、又是怎么进到 RJ45 网口里的这篇文章就把这条路径从头到尾拆开讲一遍内容覆盖 PHY 芯片、RJ45、SGMII 和 FPGA 四者的完整衔接适合正在画板子、调板子或者想从零开始理解以太网接口的 FPGA 工程师。我会先从协议层面说明 SGMII 是什么再顺着信号走一遍FPGA 串行收发器引脚、PCB 差分走线、PHY 芯片内部映射、网络变压器到 RJ45最后聊一点我实际调试时总结的排查经验。看完你至少能把板级原理图里那段高速链路看懂而不是只停留在“好像有个 PHY 芯片”的层面。1. 整条链路先画明白MAC、SGMII、PHY、磁性元件、RJ45 各司其职1.1 从 FPGA 到网口的五段职能划分这条链路本质上是一台以太网设备的物理层实现FPGA 负责跑 MAC媒体访问控制PHY 芯片负责把 MAC 发过来的数据变成能在双绞线上传输的模拟信号。中间连接 MAC 和 PHY 的接口在千兆以太网场景下最常见的就是 SGMII。把完整路径拆开大概是这样的FPGA 内部 MAC →→ FPGA 串行收发器 (GT/Transceiver) ↓ SGMII: 一对差分发送 TX± / 一对差分接收 RX± PCB 差分走线 ↓ 板载 PHY 芯片 (SGMII 接口) ↓ MDI: 4 对差分信号 网络变压器 (磁性元件 / Magnetic) ↓ RJ45 连接器 ↓ 双绞线网线注意 PHY 芯片和 RJ45 之间并不是直接连 8 根线就行中间还隔着网络变压器。变压器在千兆以太网里承担隔离、共模抑制和阻抗匹配的功能市面上的 RJ45 有的会集成变压器有的必须外接分离式磁性元件。设计时先搞清楚板卡上用的 RJ45 属于哪一种再决定 PHY 到连接器之间的电路怎么画这一步非常关键。1.2 SGMII 到底是什么信号SGMII 全称 Serial Gigabit Media Independent Interface串行吉比特媒体独立接口。它在 FPGA 与 PHY 之间跑的是串行差分信号发送方向和接收方向各用一对差分线。通常命名为 TXP/TXN 和 RXP/RXN也有些 PHY 叫 SD_P/SD_N、RD_P/RD_N本质都是一回事。SGMII 的链路速率是 1.25Gbps采用 8B/10B 编码。也就是说每 8 位有效数据编码成 10 位符号后串行发送有效数据率正好是 1Gbps剩余 20% 是 DC 平衡和时钟恢复开销。在 100M 和 10M 模式下SGMII 链路仍然维持 1.25Gbps 的物理速率但同一个码元会重复发送 10 次甚至 100 次PHY 芯片负责在接收端做重复码元的剥离。这也是 SGMII 比 RGMII 占用引脚少、时序好做的主要原因。1.3 PHY 芯片在链路里具体做了什么PHY 芯片的核心价值在于模数转换。FPGA 侧看到的是数字化的 SGMII 串行码流而 RJ45 侧网线上跑的却是经过 PAM5 调制千兆或 MLT-3 调制百兆的模拟电平信号。PHY 芯片内部包含 PCS物理编码子层和 PMA物理介质连接层负责完成编解码、扰码、回波消除、自动协商等工作。很多刚接触硬件的朋友容易把 PHY 想得很简单以为它就是个电平转换芯片。实际上千兆 PHY 内部的 DSP 非常复杂光回波消除和均衡算法就能占掉芯片一半规模。这也是为什么不同品牌 PHY 芯片的价格差异很大KSZ9031、RTL8211E、88E1512、88E1111 这些常见型号虽然在 FPGA 侧接口都是 SGMII但线侧性能和抗干扰能力有明显区别。2. FPGA 这侧别只盯着差分对收发器配置与参考时钟才是命门2.1 带串行收发器的 FPGA 怎么接 SGMII现在主流的中高端 FPGA比如 Xilinx Artix-7/Kintex-7、Intel Cyclone 10 GX 这些都内置高速串行收发器SGMII 信号可以直接接在收发器通道上。用 GT 通道接 SGMII 的好处很明显收发器内置 8B/10B 编解码、时钟恢复、串并转换和自适应均衡FPGA 逻辑侧只要面对并行数据接口速率压力小很多。连接方式上FPGA 的 TXP/TXN 差分对接到 PHY 的 RXP/RXNFPGA 的 RXP/RXN 接到 PHY 的 TXP/TXN。这里有一个非常容易犯的接线错误很多人习惯“同名相连”把 FPGA 的 TXP 直接接到 PHY 的 TXP结果上电后链路完全不通。记住发送端必须对应接收端交叉连接才对。如果是背靠背测试两个 PHY或者两个 FPGA 之间直连也要遵循同样的交叉原则。2.2 参考时钟的选择与分配SGMII 链路本身是嵌入式时钟接收端可以从数据流里恢复时钟但发送端和 PHY 芯片必须各自有稳定的参考时钟。绝大多数千兆 PHY 需要一个 25MHz 的晶振作为基准时钟也有部分 PHY 直接用 125MHz 差分时钟输入具体看数据手册。PHY 内部通过 PLL 把 25MHz 倍频到 125MHz再驱动 SGMII 的 1.25Gbps 串行链路。FPGA 侧如果用的是 GT 收发器可以从板上独立的 125MHz 差分晶振取参考时钟也可以让 PHY 输出一个 125MHz 的参考时钟给 FPGA。很多 PHY 芯片有 CLK125_CTRL 这样的配置引脚可以设置是否从某个引脚输出 125MHz。我实际画过几块板子倾向于给 FPGA 和 PHY 各配一颗独立时钟源而不是依赖 PHY 输出时钟给 FPGA。原因很简单调试初期如果 PHY 配置不对它可能根本不输出时钟FPGA 侧没有参考时钟往往表现为链路完全异常排查起来会多绕一个弯。2.3 没有高速收发器的 FPGA 能做 SGMII 吗如果是 Spartan-6 这类不带 GT 的入门级 FPGA也有方案可以跑 SGMII用普通 LVDS IO配合 ISERDES/OSERDES 做 1.25Gbps 的串并转换再加上 PLL 提供位时钟。这种方案在业内确实有人用尤其是 Pin 脚紧张的板卡上但代价是逻辑资源消耗很大时序收敛困难抗干扰能力也弱于硬核收发器。从我个人经验来看除非项目受限到必须用最便宜的 FPGA否则不建议新手自己用逻辑去拼 SGMII 的收发电路。1.25Gbps 的比特率已经超过普通 IO 的舒适区PCB 上任何一点阻抗不连续都可能让眼图质量明显劣化。硬核收发器内部有完善的 CDR 电路和接收均衡调起来省心得多。2.4 MDIO/MDC 管理通道千万别省SGMII 只是数据传输通道配置 PHY 芯片还需要 MDIO 管理接口。MDIO 是一根双向数据线 MDIO 和一根时钟线 MDCFPGA 通过这个接口读写 PHY 内部寄存器完成速率配置、自动协商开关、中断使能、LED 控制等操作。很多板卡设计时容易忽略 MDIO 的上拉电阻。MDIO 数据线在空闲时应该是高阻态由外部上拉电阻拉高如果省掉上拉FPGA 读取 PHY 寄存器时经常读到 0xFFFF 或者随机值。另外 MDC 时钟频率一般不超过 2.5MHzPCB 上不需要做差分处理但也不建议绕很远毕竟它属于慢速信号干扰问题不严重但布局上尽量靠近 PHY。3. PCB 上那段“并不长”的 SGMII 走线阻抗、耦合电容、过孔一个不能少3.1 为什么还要认真设计一条看起来只有几厘米的差分线从 FPGA 引脚到 PHY 的 SGMII 走线通常只有 13 英寸很多人觉得这么短的线随便走走就行。实际上 SGMII 工作在 1.25Gbps基频约 625MHz三次谐波已经接近 2GHz。在这个频率下走线已经不能看成简单的导通连接而是具有特定特征阻抗的传输线。PCB 设计时SGMII 差分对需要保证 100Ω 差分阻抗同时也要求单端对地阻抗在 50Ω 左右。这个阻抗由走线宽度、间距、参考平面距离共同决定。超过 5Gbps 的 SerDes 信号对阻抗要求更严格SGMII 相对宽松但也不能放飞。最好在 PCB 叠层设计阶段就把阻抗算好而不是指望后期调匹配电阻来补救。3.2 差分对布线的基本规矩信号完整性规则总结起来无非就是几件事阻抗连续、参考平面完整、长度匹配、减少过孔。阻抗连续走线宽度在整条路径上保持一致避免窄颈。换层的地方如果过孔阻抗和走线阻抗差异过大会产生反射。参考平面完整SGMII 走线下方必须有连续的地平面不要跨越分割槽。注意电源平面也可以作为参考平面但前提是这条电源在整个区域内是完整的一整块而且有足够多的去耦电容提供回流路径。长度匹配同一对差分线的 P、N 两条线长度差应控制在 5mil 以内。实际设计如果做不到10mil 以内问题也不大SGMII 速率下可以接受。过孔能不过孔就不过孔必须换层时一对差分线的过孔要对称放置最好在过孔旁边加接地过孔给回流信号提供低阻抗路径。还有一点容易被忽略SGMII 差分对旁边不要走其他高速信号尤其是时钟线和复位线。间距至少做到 3 倍线宽以上能在两边加地孔屏蔽就更好。3.3 AC 耦合电容放在哪、选多大SGMII 接口是否需要交流耦合取决于 PHY 芯片的具体要求。大部分 PHY 芯片的 SGMII 接口要求交流耦合目的是让收发两端的共模电平可以不同避免直流电流互相影响。FPGA 的高速收发器内部往往也支持交流耦合但实际电路里通常还是会在 PCB 上预留耦合电容的位置。电容的取值以 0.1uF 居多0402 或 0603 封装都有。位置选择上业界惯例是放在发送端附近也就是离 FPGA 的 TX 引脚尽量近或者按 PHY 数据手册中的参考设计放置。这里要注意0402 电容的焊盘本身就构成一个阻抗跳变点信号经过电容时会看到不连续。因此不要让电容焊盘两侧的走线宽度突变最好做一下渐缩处理或者用 grounded coplanar waveguide 结构包住。另外有些 PHY 芯片可以直接配置为直流耦合模式这时候 PCB 上的耦合电容位置要留空或焊 0Ω 电阻。具体怎么做一定以 PHY 芯片手册为准不同厂家、不同型号的 PHY 差异很大。3.4 电源完整性对 SGMII 的影响往往更隐蔽FPGA GT 收发器和 PHY 芯片对电源噪声都非常敏感。SGMII 信号的抖动预算里很大一部分就是被电源纹波消耗掉的。PHY 芯片通常有多路电源引脚数字电源和模拟电源要分开每个电源引脚附近放 0.1uF 去耦电容大容量的 10uF/22uF 钽电容或陶瓷电容分布在芯片四周。我遇到过一块板子SGMII 链路在温度升高后误码率明显上升查了很久最后发现是 PHY 的模拟电源 AVDD 和数字电源 DVDD 在 PCB 上连到了同一块铜皮芯片内部的模拟电路被数字开关噪声干扰。后来把两者用磁珠隔离问题就消失了。所以电源布局绝对不能在 PHY 附近省钱该分隔的电源域要分开去耦电容该加就加。4. PHY 到 RJ45 的往返变压器接法、中心抽头与 8 根线序4.1 从 PHY 出来后信号变成什么样子SGMII 信号进入 PHY 芯片之后经过 PCS/PMA 处理最终输出到介质相关接口 MDI。千兆以太网 MDI 一共有 4 对差分信号线对应双绞线的 4 对线芯。每对线的速率是 250Mbps 的四维五电平脉冲幅度调制也就是 1000BASE-T 的 PAM5。这 4 对线在 PHY 芯片侧的引脚名通常是 MDI0/-、MDI1/-、MDI2/-、MDI3/-或者 TRD0、TRD1、TRD2、TRD3。它们必须穿过网络变压器再从 RJ45 连接器出去。PHY 芯片和变压器之间同样需要按 100Ω 差分阻抗设计走线。4.2 网络变压器为什么不能省网络变压器的作用第一是隔离把板卡的地和网线对端设备的地隔开避免地环路电流损坏设备。第二是共模抑制双绞线在传输过程中会感应共模噪声变压器初级和次级之间的共模扼流圈可以把这部分噪声滤除。第三是阻抗匹配把 PHY 芯片的差分输出阻抗匹配到双绞线的 100Ω 特性阻抗。市面上常见的网络变压器有两种用法一种是外置分离式磁芯比如 H5007、HX1188 这类型号原理图上看起来是一个带网口的独立器件需要自己接另一种是集成在网络连接器里的 RJ45 带变压器版本原理图上只有一个连接器符号内部已经处理好了变压器和共模电感。选用集成变压器的 RJ45 时要注意引脚定义是否和 PHY 芯片匹配。下图是常见的接线示意PHY MDI0/- → 变压器初级(1,2) → 次级(1,2) → RJ45 引脚 1,2 PHY MDI1/- → 变压器初级(3,6) → 次级(3,6) → RJ45 引脚 3,6 PHY MDI2/- → 变压器初级(4,5) → 次级(4,5) → RJ45 引脚 4,5 PHY MDI3/- → 变压器初级(7,8) → 次级(7,8) → RJ45 引脚 7,8注意这里 3 和 6 是一对不是按顺序 1-2、3-4、5-6、7-8 那样简单分组。RJ45 的线对定义遵循 T568A/T568B 标准3 和 6 在物理上是一对双绞线不能拆开。新手布局时很容易把这根线绕到别处去导致那一对线没有双绞结构串扰会变差。4.3 变压器中心抽头的接法变压器初级侧中心抽头经常需要接一个偏置电压或者通过电容接地。如果是接电源一般通过 RC 滤波后接模拟电源典型值 2.5V 或 3.3V具体查 PHY 数据手册的参考电路。次级侧中心抽头一般通过 0.1uF 电容接地或者直接接连接器外壳地。这里有一个需要在原理图阶段就决定的点变压器中心抽头是接电源还是接地不同 PHY 设计完全不同。Marvell 88E1111 和 Broadcom 的一些 PHY变压器初级中心抽头通过 1kΩ 电阻接 AVDD而有的 PHY 则要求接地。如果不按参考设计来最典型的现象是 1000M 协商失败或链路能建起来但吞吐率很低。4.4 检查 RJ45 引脚定义时最容易踩的坑RJ45 连接器种类很多同一封装下引脚定义可能完全不同。有的连接器是带 LED 灯的双口版本LED 引脚和以太网数据线引脚混在一起稍不注意就把数据线接到了 LED 引脚上。画原理图时千万不能只盯着连接器的封装名一定要逐个核对其数据手册里的 pin map。另一个常见问题是用带网络变压器的 RJ45但引脚顺序搞反了。比如磁芯侧 1、2 脚是初级3、6 是次级结果原理图把 MDI0 接到了 3、6MDI1 接到了 1、2。这种错误在 PCB 上很难看出来因为板子外观完全正常只有插上网线后 Link 灯不亮或降速到 100M 才能发现问题。5. 上电联调时我怎么逐段确认 SGMII 链路5.1 第一步先看 PHY 有没有“活过来”拿到新板子不要急着插网线先把 PHY 的电源和时钟检查一遍。用万用表确认各路电源电压正常再用示波器看 PHY 的晶振引脚是否有波形。25MHz 晶振的输出通常是一个正弦波峰峰值大约 0.5V1.0V频率计测出来的频率误差应在 50ppm 以内。确认晶振起振后再通过 MDIO 读 PHY 的寄存器。比如读取寄存器 0x02 和 0x03可以拿到 PHY 芯片的型号 ID如果读出来是 0x0000 或 0xFFFF说明 MDIO 时序或者 PHY 的地址配置有问题。PHY 的 MDIO 地址通常由外部引脚上下拉决定常见地址是 0x000x1F一定要和代码里设置的地址一致。5.2 用回环模式快速验证 PHY 侧通路如果 PHY 的 ID 能正确读出来下一步就是让 PHY 进入内部回环模式。操作方法是往 PHY 的基本控制寄存器寄存器 0x00写入回环使能位同时在 SGMII 接口侧把 PHY 配置为 1000M 全双工。这时候从 FPGA 发出的数据会在 PHY 芯片内部被直接环回FPGA 如果收到一样的数据说明 FPGA 到 PHY 的 SGMII 物理链路没有问题问题可能出在 MDI 侧或变压器/RJ45 部分。如果内部回环都不通重点排查 SGMII 差分对。用示波器高阻探头点测 FPGA 侧 TXP/TXN 引脚能看到典型的交流耦合差分波形。若完全看不到信号检查 FPGA 收发器是否被正确初始化GT 参考时钟是否到了以及 MDIO 配置过程中 PHY 是否被意外复位。5.3 外部回环线与 Line Loopback 的区别把网线的一端插到板载 RJ45另一端插到一台电脑或交换机上这属于外部物理回环测试。如果电脑网卡能协商上千兆说明整条链路从 FPGA 到 RJ45 再到网线都通了。但要注意PHY 的自动协商是 PHY 自己完成的功能即使 FPGA 没有配置 MAC网线插上可能也会看到电脑网卡已经 Link Up。这时候并不代表 FPGA 侧的数据通路正常还需要在 FPGA 里实际发数据验证。另一种调试手段是 PHY 芯片的 Line Loopback线路回环此时 PHY 从网线收到的数据会被环回发送出去这个功能常用来测试变压器和 RJ45 到远端设备之间的物理层质量排查网线断线、线对错位这类问题。5.4 SGMII 链路常见故障速查表这里把我在调试中遇到过的问题整理成一张速查表供大家参考故障现象可能原因排查方向PHY 寄存器读不出 IDMDIO 上拉缺失、PHY 地址错误、PHY 复位引脚一直处于低电平查 MDIO 上拉、复位电路、地址引脚配置Link 灯不亮PHY 未完成自动协商、变压器接反、RJ45 线序错、MDI 极性接反检查 PHY 寄存器 0x01 bit2查变压器参考电路能协商 100M 但协商不了 1000M4 对线中某一对有问题、变压器中心抽头接错、PHY 电源噪声大对每对 MDI 差分信号逐个测量查中心抽头偏置FPGA 发数据但对端收不到FPGA GT 通道未复位、SGMII 链路训练失败、FPGA 差分方向接错查 GT 状态寄存器检查 TX/RX 是否交叉正确丢包或误码率高电源纹波过大、SGMII 走线阻抗不连续、REFCLK 抖动超标示波器测电源纹波检查 SGMII 差分走线长度匹配只有插上网线才死机或复位网线引入地环路电流、PHY 芯片 ESD 损坏、变压器隔离耐压不够检查变压器隔离带、机箱地连接方式5.5 你会在实际测试中看到什么样的 SGMII 波形有条件的朋友可以把示波器探头尽量贴近 PHY 的 SGMII 接收引脚观察 1.25Gbps 的差分信号。正常工作时你会看到一个清晰的“眼图”虽然没有高速误码仪那么漂亮但眼张开度应该足够明显。纯用示波器在 1.25Gbps 下捕捉波形是可行的但要选用带宽至少 2GHz 以上的示波器探头且探头要靠近测试点。PCB 上如果预留了测试焊盘测量会方便很多。没有测试点时直接量 PHY 引脚附近的贴片电容两端也可以但差分探头会更准确。还有一个小经验SGMII 接收端的差分信号幅度不同 PHY 之间差异较大。有的 PHY 输出幅度 400mV有的能到 800mV。别拿着一个 PHY 的波形标准去判断另一个 PHY 的好坏一切以数据手册中给出的接收灵敏度为参考。6. 最后分享几个我在多块板卡上总结的实操细节调过的板卡多了之后会发现SGMII 这块出问题绝大多数都不是某个大方向错了而是细节没做到位。这里挑几个我觉得最有代表性、也最容易被新手忽略的讲一下。关于 PHY 芯片的复位很多设计把 PHY 的复位脚直接接到 FPGA 的 GPIO 上FPGA 加载完程序之后才释放复位。这个思路没问题但要注意复位时间必须足够长。SGMII PHY 的复位脉冲宽度通常要求至少 10ms有些 PHY 甚至要求 50ms 以上。如果复位时间太短PHY 内部状态机没走完可能出现寄存器能读但 SGMII 链路不工作的诡异现象。关于 SGMII 链路的协商FPGA 侧的 IP 核也要做自动协商或者强制模式设置。很多时候 PHY 那边配置好了但 FPGA 侧 SGMII IP 还停留在强制 1000M 全双工模式对端是 100M 自适应口两边协商参数不一致连接就起不来。正确做法是让 FPGA 的 SGMII IP 也参与自动协商和 PHY 互相交换能力状态两边都确认 1000M 全双工之后再开始数据传输。关于背靠背测试业内经常用两个 PHY 芯片直接互连来模拟一条虚拟网线但背靠背时依然要按 SGMII 交叉规则接线而且两个 PHY 之间的 SGMII 对要加交流耦合电容不能让直流电平互相冲突。我们验证 FPGA GT 通道时也经常直接在 FPGA 内部把 TX 和 RX 短接做回环先排除 FPGA 侧问题再去怀疑 PHY 或 PCB。关于 RJ45 的外壳地网口连接器的金属外壳通常会接到机箱地上。这个外壳地最好通过一个高压电容或者磁珠和板卡的数字地做桥接而不是直接大面积相连。这样既能泄放静电又不会让网线对端的干扰地电流大量灌进板卡地平面。关于 PHY 芯片的散热千兆 PHY 在工作时功耗不小尤其是带变压器驱动和复杂 DSP 的型号。如果 PCB 上 PHY 正下方有完整的铜皮尽量多打过孔把热量导到背面散热。长时间高温运行下PHY 内部的时钟电路会漂移SGMII 误码率可能逐渐升高。SGMII 这条路径拆开看每一段本身都不算复杂难点在于它是一个跨协议、跨物理层的整体。FPGA 里跑的是并行数据GT 通道把它们变成 1.25Gbps 的串行差分流PHY 芯片再把它们变成双绞线上的模拟信号而 PCB 上铜箔的每一处阻抗变化、每一个过孔的位置都在影响着最终链路是否可靠。实际项目里遇到问题照着上面这些节点分段查基本能把故障范围锁定到一个很小的区域剩下的就是耐心和设备了。
返回列表