
简介面向采用LS2K1000 CPU、XC7VX690T FPGA并需要完成RGMII转SGMII设计的硬件工程师这份PDF参考图聚焦YT8521S PHY芯片的外围电路与配置要点可用于以太网接口方案评估、原理图对照和调试排错。资源包仅含1个PDF文件约193KB篇幅集中主要内容为硬件设计框图与关键原理图页面便于快速查阅芯片供电、电压域、复位控制及接口连接关系。已有1578人学习下载说明其在国产PHY应用与FPGA/CPU互联场景中具有一定参考价值。图中可参考LS2K1000与YT8521S、XC7VX690T的协同连接复位信号可由板卡CPLD管理或采用RC电路上拉建议3.3VRGMII转SGMII需重点关注功能与软件配置如smi_sds_phy置为SDS模式、mode_sel配置为3b101的SGMAC_TO_RGPHY模式并附有经实际生产测试的电路思路适合用于设计自查与故障定位。1. 一块板子上RGMII 和 SGMII 之间的那道坎某板卡项目在方案评审时停在了一个很具体的问题上CPULS2K1000的 GMAC 只出 RGMII而板间互连和光模块侧统一按 SGMII 走两边对不上。摆在面前的选择有两个一是在 FPGAXC7VX690T内部做 RGMII MAC 再用收发器转 SGMII代价是吃掉逻辑资源和一对高速通道二是外挂一颗支持 RGMII 转 SGMII 的 PHY 芯片把协议转换这件事从 FPGA 里挪出去。这份 YT8521S 硬件电路设计参考图就是后一条路的成品包含 CPU 侧原理图、PHY 的功能配置与电压配置、FPGA 侧原理图共两页 A3。它适合正在画以太网接口原理图、要做 CPU 与 FPGA 或光模块互连板卡的人也适合拿它当毕设或课程设计的硬件底稿。2. 系统连接与接口规划三颗芯片的职责边界与信号流向2.1 拓扑拆解LS2K1000 出 RGMIIYT8521S 转 SGMIIFPGA 收差分参考图里三颗芯片不是并列关系是一条有方向的链路。LS2K1000 的 GMAC 控制器工作在 RGMII 模式TXD[3:0]、TX_CTL、TX_CLK 与 RXD[3:0]、RX_CTL、RX_CLK 共十二根单端信号进 YT8521S 的 RGMII 侧YT8521S 内部把 RGMII 的 4 位 DDR 数据流整理成 SGMII 的 1.25Gbps 串行码流从 SGMII_TXP/TXN、SGMII_RXP/RXN 两对差分送出XC7VX690T 的收发器通道接这两对差分完成 CPU 到 FPGA 的网络通路。这里有个容易被忽略的判断点SGMII 侧到底接 FPGA 还是接光模块。两种落法在原理图上只差一个连接器但在配置上完全不同。接 FPGA 时PHY 的 SGMII 侧是 MAC 对 MAC 的背靠背形态自协商要关掉或者固定接光模块时PHY 要和模块做 1000BASE-X 自协商。我一般会在原理图第一页右上角画一个虚线框把这一路 SGMII 的去向写清楚评审时省掉一堆来回确认。从信号方向看RGMII 侧是双向的发送组由 CPU 驱动、PHY 接收接收组反过来。SGMII 侧同样是双向差分。这意味着 PHY 在中间是个完整的双向桥不是单向转换器。做时序分析时发送方向和接收方向要分别算不能只算一边。FPGA 侧的原理图在参考图第二页主要给出的是收发器通道的 AC 耦合、终端电阻和参考时钟接入。这部分和 PHY 侧的 SGMII 差分对是同一组网络画图时建议把两页之间的网络名统一前缀比如都用G1_SGMII_开头避免跨页信号对不上。2.2 RGMII 侧与 SGMII 侧的引脚分组与电平约定把引脚按功能分组列出来比在原理图上逐根找要快得多。参考图里的分组大致是这样信号组方向数量电平域说明RGMII_TXD[3:0]、TX_CTL、TX_CLKCPU→PHY6DVDD_RGMII_G1发送数据与控制时钟由 MAC 提供RGMII_RXD[3:0]、RX_CTL、RX_CLKPHY→CPU6DVDD_RGMII_G1接收数据与控制时钟由 PHY 提供SGMII_TXP/TXNPHY→FPGA2差分串行发送需 AC 耦合SGMII_RXP/RXNFPGA→PHY2差分串行接收需 AC 耦合MDC、MDIO双向2DVDD33_G1管理接口需上拉REFCLK_PHY_G1_25M输入13.3V CMOS25MHz 参考时钟G1_RESET_N输入13.3V低有效复位这张表的价值在于电平域那一列。RGMII 的十二根线全部挂在DVDD_RGMII_G1上而这组电压是可配的不是固定 3.3V。很多人画图时默认按 3.3V 处理等到板子回来发现 CPU 侧 GMAC 是 1.8V 电平就得飞线。参考图里的做法是用CFG_LDO[1:0]配置成 2b00让DVDD_RGMII输出 3.3V和 CPU 的 GMAC 电压对齐。这一点在第 3 章展开。SGMII 差分对没有电平域的概念但有共模和耦合的要求。参考图里在两对差分的发送端各串了 100nF 电容位置靠近 PHY 一侧。这个位置不是随便放的AC 耦合电容应该放在信号源端让直流共模点由接收端定义。2.3 参考时钟与复位域的划分YT8521S 的参考时钟是REFCLK_PHY_G1_25M规格 25MHz、3.3V CMOS、25ppm。参考图里这一路时钟由板上单独的时钟源提供不走 CPU 或 FPGA 的时钟输出。原因很实际PHY 的参考时钟精度直接影响 SGMII 的链路稳定性25ppm 是个不宽裕的指标如果从 SoC 分频出来中间多一级 PLL 就多一份抖动。时钟走线上我一般会做三件事包地、远离 RGMII 的数据组、在 PHY 端预留一个串联电阻位置0R 或 22R按实测决定。参考图上这一路确实留了串联器件位属于可调不改板的设计。复位域分成两路。一路是G1_RESET_N低有效上拉建议选 3.3V。这一路在参考图里给了两种驱动方式由板卡上的 CPLD 控制或者用 RC 电路自己做上电复位。两者不要同时用这是后面避坑章要讲的第一个坑。另一路是 PHY 内部的软复位通过 MDIO 写寄存器触发和硬件复位是两回事。CPLD 控制的版本是这样的CPLD 上电后延时一段时间再释放G1_RESET_N保证 PHY 的电源和时钟都稳定了才退出复位。RC 版本则是用电阻上拉加电容到地靠 RC 时间常数产生延时。参考图里留了 100nF 的电容位标注为预留说明设计者倾向 CPLD 方案RC 只作为备选。2.4 管理通道MDC/MDIO 挂在哪条总线上RGMII1_MDC和RGMII1_MDIO是 PHY 的寄存器访问通道速率不高但决定了整颗芯片能不能被正确配置。参考图里这两根线上各有一个 4.7K、1%、1/16W 的上拉到DVDD33_G1。上拉阻值不能再大MDC 最高可以跑到 12.5MHz阻值大了上升沿会被拉圆。PHY 的 MDIO 地址由LED0/PHYAD0_G1这个复用引脚在上电时的电平决定。参考图里这颗 PHY 的地址配置成 0也就是该引脚上电时为低。这一点在软件侧要对应上驱动里填的 PHY 地址必须和硬件一致否则 MDIO 读回来全是 0xFFFF。MDC/MDIO 走线上不需要做阻抗控制但要避开复位信号和 25MHz 时钟。我曾经见过一块板子把 MDIO 和复位线并排走了 8cm结果上电时十次有两次读不到 PHY查了两天才发现是复位沿串到了 MDIO 上。这种问题在原理图阶段把线拉开就能避免。3. YT8521S 电源与配置电路设计四组电压域和 LDO 模式选择3.1 四组电压域的拆法YT8521S 的电源引脚看着多归拢起来是四组。参考图里的分法是电压域典型值供给对象参考图处理DVDD33_G13.3V数字 IO、MDC/MDIO、配置引脚板上 3.3V 经磁珠引入DVDD_RGMII_G13.3V可配RGMII 接口 IO与 DVDD33 同源由 CFG_LDO 决定VCC_1V81.8V内部数字内核板上 1.8V 经磁珠引入AVDD33_G13.3V模拟前端、SerDes3.3V 经独立磁珠引入四组里最容易出问题的是DVDD_RGMII。它不是一颗独立的 LDO 输出而是由芯片内部的 LDO 从某一路输入派生出来的输出电压由CFG_LDO[1:0]两个引脚在上电时的电平组合决定。参考图取的是 2b00对应DVDD_RGMII 3.3V目的是和 LS2K1000 的 GMAC 电平匹配。这里的设计逻辑是不额外加一颗外部 LDO 去生成 RGMII 电平改用芯片自带的内部 LDO省掉一路电源、省掉两个电容、省掉一次上电时序的协调。代价是DVDD_RGMII的输出能力有限只能带 PHY 自己的 IO不能外挂别的负载。原理图上如果看到有人把这路电源引出去给别的芯片用基本可以判定是画错了。3.2 CFG_LDO[1:0] 与 RGMII 电平的联动CFG_LDO[1:0]这两个配置位和其他配置位共用 LED 引脚这是这颗芯片的一个设计特点。参考图里对应的网络是LED1/CFG_LDO0_G1和LED2/CFG_LDO1_G1两个引脚在上电复位期间被采样作为配置字复位释放后切换成 LED 驱动输出。采样发生在复位释放的瞬间所以决定配置字的是引脚上的上拉或下拉电阻不是后来的 LED 负载。参考图里这两个引脚各挂了一个 4.7K、1%、1/16W 的电阻其中一个到DVDD33_G1另一个的状态按 2b00 的目标配置。电阻精度选 1% 不是玄学配置引脚在采样窗口内如果电平处在中间态芯片读到的值是不确定的1% 加 4.7K 能把电平拉得足够硬。配置字一旦定下来DVDD_RGMII的输出电压就固定了软件侧无法再改。所以这个配置必须在画原理图时就和 CPU 侧的 GMAC 电平对齐不能等到调试阶段。我一般会在原理图这一页加一条文字标注写明CFG_LDO[1:0]2b00 → DVDD_RGMII3.3V防止后来改图的人把上拉电阻挪走。3.3 去耦网络与磁珠隔离参考图里每条电源轨的入口都串了一颗磁珠BLM18SD220SN1D后面跟一组电容100nF/10%/25V 若干、4.7uF/10%/25V 一颗。这个组合的意图是分频段滤波100nF 管几十 MHz 到几百 MHz4.7uF 管低频段和负载瞬变。磁珠的位置有讲究。它应该放在电源进入 PHY 电源域的那个点上磁珠之后才分出去耦电容和芯片引脚。如果把磁珠放在电容后面滤波效果会打折扣。参考图里AVDD33_G1用的是独立的一颗磁珠和数字 3.3V 分开这是模拟电源的常规做法目的是不让数字开关噪声通过共用的磁珠耦合进 SerDes 的模拟前端。去耦电容的容值不是越多越好。参考图里每条轨用的都是 100nF 加 4.7uF 的组合没有堆 10uF 或 22uF。原因是 PHY 的电源引脚电流不大大容量电容反而会拉长上电时的电压上升时间影响上电复位。25V 的耐压选得比 3.3V 高不少属于留余量的做法。3.4 复用引脚的处理LED、PHYAD、CFG 三合一这颗 PHY 有四个复用引脚功能叠了三层上电采样时是配置字正常运行后是 LED 输出其中LED0/PHYAD0_G1还兼做 MDIO 地址。参考图里的处理是引脚上电采样功能运行功能参考图接法LED0/PHYAD0_G1PHY 地址位 0LED 输出下拉地址0LED 低有效LED1/CFG_LDO0_G1CFG_LDO 位 0LED 输出按 2b00 配置LED2/CFG_LDO1_G1CFG_LDO 位 1LED 输出按 2b00 配置上电为高LED2 兼 INT_N/PME_N中断输出中断需上拉LED 的接法是串联限流电阻到 3.3V 或到地参考图里用了 1K、1%、1/16W 的电阻配绿色和红色 LED。这里的关键是限流电阻和配置电阻是两套不能合并。有的设计为了省器件把 LED 和限流电阻直接当配置电阻用结果 LED 的导通压降把采样电平拉偏配置字读错。参考图里把 4.7K 配置电阻和 1K 限流电阻分开画就是为了避免这件事。中断引脚INT_N/PME_N上拉了一个 4.7K 到 3.3V接到 CPLD 或 CPU 的 GPIO。这一路是可选的但建议留出来链路状态变化时能主动通知上层比轮询 MDIO 效率高得多。4. RGMII 与 SGMII 的接口电路落地走线、时钟与延时调整4.1 RGMII 十二根线的连法与串阻RGMII 的十二根线在原理图上看着简单直连就行但有几处必须处理。参考图里发送组和接收组各自成组走线组内没有串阻组间保持了明显的间距。串联电阻的位置留在了靠近 PHY 的一侧标注为 0R/5%/1/16W属于可选件。// RGMII 接口信号声明顶层端口仅示意方向与位宽 // TX 方向MAC - PHY时钟由 MAC 提供 output wire [3:0] rgmii1_txd; // 发送数据DDR4bit output wire rgmii1_tx_ctl; // 发送控制TXEN 与 TXERR 的异或 output wire rgmii1_tx_clk; // 125MHz 发送时钟由 MAC 输出 // RX 方向PHY - MAC时钟由 PHY 提供 input wire [3:0] rgmii1_rxd; // 接收数据DDR4bit input wire rgmii1_rx_ctl; // 接收控制RXDV 与 RXERR 的异或 input wire rgmii1_rx_clk; // 125MHz 接收时钟由 PHY 输出 // 关键点tx_clk 与 rx_clk 是两根方向相反的独立时钟 // 不要把 tx_clk 环回给 rx_clk也不要用同一根网络名这段声明值钱的地方在最后两行注释。RGMII 的发送时钟和接收时钟是两根独立的时钟方向相反各自有各自的延时要求。初学者常犯的错是把tx_clk和rx_clk当成一根双向时钟处理或者在 PCB 上让它们走等长结果接收方向的建立保持时间全乱。串阻的作用是抑制反射不是必须件。0R 位置的意义是给调试留后路如果眼图不好换成 22R 或 33R 试试如果没问题就贴 0R 或者不贴。4.2 SGMII 差分对与 AC 耦合SGMII 侧是两对差分SGMII_TXP/TXN和SGMII_RXP/RXN。参考图里的处理是每对差分在发送端串 100nF 电容做 AC 耦合差分阻抗按 100Ω 控制走线尽量短且成对。100nF 的选型不是随便定的。SGMII 的码流是 1.25Gbps 的 8b/10b 编码低频成分很少100nF 对 1.25Gbps 的阻抗足够低不会引入明显的基线漂移。如果换成 10nF低频频段的高通拐点会上移长连串的 0 或 1 会导致共模点漂移接收端判决出错。所以这个容值不要改小。AC 耦合电容的位置在发送端也就是 PHY 的 SGMII_TXP/TXN 和 FPGA 的 TX 侧各放一组。两边都放是标准做法防止两端的直流共模不一致导致偏置电流灌进对方。参考图里在 PHY 侧和 FPGA 侧各画了一组符合这个约定。差分对的走线我一般会要求三件事对内等长控制在 5mil 以内对间间距大于 3 倍线宽参考平面完整不跨分割。这三条不是玄学是 1.25Gbps 这个速率下的基本要求做不到就会在误码率上体现出来。4.3 时钟延时调整与 RGMII 的时序余量RGMII 的时序余量是这个接口最麻烦的地方。125MHz 的 DDR 时钟数据窗口只有 4ns扣掉 PCB 走线偏差、PHY 内部延时、MAC 采样窗口余量非常有限。解决方式有两种PHY 内部延时调整或者 PCB 走线补偿。参考图里在 PHY 的时钟引脚附近预留了 RC 和串联器件的位置属于 PCB 补偿路线。更常用的做法是走 PHY 的内部延时寄存器通过 MDIO 配置TXDLY和RXDLY两个字段把时钟相对数据的相位挪到合适的位置。这两种方式不要同时用否则调起来没有方向。调试时的判断依据是误码率和眼图。RGMII 跑 iperf 打流看有没有 CRC 错和丢包如果有示波器直接抓 RX_CLK 和 RXD 的眼图看数据跳变沿是否落在时钟的采样窗口中间。我一般在样机阶段先用内部延时寄存器扫一遍找到误码率最低的那组值再决定要不要在 PCB 上做补偿。4.4 软件侧的两处关键配置硬件电路画对只是第一步这颗 PHY 能不能从 RGMII 转到 SGMII取决于两个配置mode_sel和smi_sds_phy。/* YT8521S 模式配置具体寄存器地址以器件手册为准 */ #define MODE_SEL_SGMAC_TO_RGPHY 0x5 /* 3b101RGMII 侧接 MACSGMII 侧接 SerDes */ /* 步骤一把 SGMII 侧的 PHY 配置成 SDS 模式 * 不走 1000BASE-X 自协商直接进串行/解串模式 */ phy_write(phy_addr, REG_SMI_SDS_PHY, SMI_SDS_PHY_SDS_MODE); /* 步骤二设置模式选择字为 3b101 * 该模式下 RGMII 侧作为 MAC 接口SGMII 侧作为 SerDes 输出 */ reg_val phy_read(phy_addr, REG_MODE_SEL); reg_val ~MODE_SEL_MASK; reg_val | MODE_SEL_SGMAC_TO_RGPHY; phy_write(phy_addr, REG_MODE_SEL, reg_val); /* 步骤三回读校验配置没写进去后面全是白忙 */ if (phy_read(phy_addr, REG_MODE_SEL) ! MODE_SEL_SGMAC_TO_RGPHY) { /* 检查 MDIO 时序、PHY 地址、复位状态 */ }这三步里第三步最容易被跳过。mode_sel是一个多位字段写入时如果掩码写错可能只改了低位没改高位读回来看着像对实际模式不对。回读校验是唯一能确认配置生效的手段。smi_sds_phy配成 SDS 模式的含义是SGMII 侧不再做 1000BASE-X 的自协商而是固定工作在串行/解串模式。这是因为对面接的是 FPGA 的收发器不是标准的光模块自协商的握手机制对不上。如果对面接的是光模块这个配置就要反过来走自协商。mode_sel配成 3b101SGMAC_TO_RGPHY的含义是RGMII 侧作为 MAC 接口对接 CPUSGMII 侧作为 SerDes 输出对接 FPGA。这个模式字决定了芯片内部的数据通路方向配错了链路直接不通而且现象是「MDIO 能读写、寄存器都正常、就是收不到包」很容易误判成硬件问题。5. 常见问题排查从链路不通到时钟锁不住的现场定位5.1 现象MDIO 读写正常链路就是起不来原因基本锁定在模式配置上。mode_sel没配成 3b101或者smi_sds_phy没进 SDS 模式芯片内部的数据通路就没打开。MDIO 通道走的是管理接口和业务通路是两条路所以能读写寄存器不代表业务通路是通的。解决方法是先回读这两个字段确认值对得上再抓 SGMII 侧有没有码流输出。如果 MDIO 读回来的值一写就变回原样检查 PHY 是否还在复位状态或者 MDIO 的时序参数MDC 频率、读写间隔是否超出器件手册的范围。5.2 现象LED 上电后常亮不闪但网络能通原因是 LED 复用引脚的配置电阻和限流电阻被合并了。上电采样期间LED 的导通特性把采样电平拉偏芯片读到的配置字和设计意图不一致运行阶段 LED 又因为限流电阻取值不当亮度或状态显示不正常。解决办法是把两套电阻分开配置电阻用 4.7K 到对应的电源或地限流电阻用 1K 串在 LED 支路上。参考图里的画法就是这个思路LED1/CFG_LDO0_G1和LED2/CFG_LDO1_G1各有自己的 4.7K 配置电阻LED 支路上另串 1K。5.3 现象RGMII 侧打流丢包速率上不去原因通常是 RX_CLK 的采样相位不对。RGMII 的接收时钟由 PHY 输出数据也在 PHY 侧发出两者之间的相位关系由 PHY 内部延时决定。如果延时配置和 PCB 走线长度不匹配MAC 侧采样时数据还没稳定或者已经跳变表现出来就是 CRC 错和丢包。解决办法是先确认 PCB 上 TX 组和 RX 组的走线长度是否接近再通过 MDIO 调整RXDLY从小往大扫每改一次打一次流看误码率。如果在某个值附近误码率突然掉到零那就是合适的位置如果扫完全程都不行回头查电源和参考时钟。5.4 现象复位释放后偶发不启动重新上电又好了原因是复位信号的驱动源冲突。参考图给了 CPLD 控制和 RC 电路两种方式如果两种都画上去了CPLD 输出低电平时 RC 的电容还在充电复位信号的下降沿和上升沿都被拉变形PHY 可能采样到中间态。解决办法是二选一。用 CPLD 就把 RC 的电容位去掉用 RC 就把 CPLD 的输出脚配置成高阻。参考图上那个 100nF 的电容标注了「仅预留」意思就是不贴这一点在出板前要确认 BOM。5.5 现象换了一块板子就好同一份固件原因是配置引脚的上拉电阻虚焊或者阻值贴错。CFG_LDO这类配置引脚对阻值敏感4.7K 贴成 47K 也能拉出电平但在温度变化或者电源波动时就会漂。表现出来就是同一份固件在不同板子上表现不一致很容易被误判成软件问题。解决办法是拿万用表逐块板量配置引脚在复位期间的电平确认在电源电压的 10% 到 90% 之外。这一步在产测工装上应该作为一个必测项比事后排查省事得多。6. 验收与交付怎么用这份参考图做板级验证和答辩拿到参考图之后不要急着照抄先按下面的顺序走一遍验收流程。这套流程我在几个板卡项目里都用过能覆盖住大部分会在联调阶段暴露的问题。验收项判据工具电源域电压DVDD333.3V±5%DVDD_RGMII3.3V±5%VCC_1V81.8V±5%万用表配置字回读CFG_LDO[1:0]2b00PHYAD0MDIO 读寄存器参考时钟25MHz±25ppm峰峰值符合 CMOS 电平示波器复位时序电源稳定后 ≥10ms 释放无回勾示波器双通道MDIO 连通全部寄存器可读无 0xFFFF驱动打印链路建立SGMII 侧码流锁定RGMII 侧 1000M 全双工PHY 状态寄存器吞吐与误码iperf 打流 30 分钟丢包率 0无 CRC 错iperf / 计数器长时间稳定性常温连续运行 24 小时链路不闪断老化测试表格里最容易被跳过的是「复位时序」和「配置字回读」这两项。前者在实验室常温下往往看不出问题到了低温或者电源爬升慢的场景才暴露后者一旦配错后面所有测试都是白做但因为 MDIO 能通很多人会默认配置是对的。答辩或者交付评审时建议按「需求—拓扑—电源与配置—接口—验证」这条线讲不要一上来就翻原理图讲引脚。评委或者甲方关心的是你为什么选这颗 PHY、RGMII 和 SGMII 两边怎么对齐、出了问题怎么定位这三件事。把第 2 章的拓扑图、第 3 章的电压域表、第 5 章的五条排查现象讲清楚比讲一百个引脚定义有用。还有一个细节交付时把mode_sel 3b101和smi_sds_phy SDS这两条配置写进《软硬件接口说明》里单独成节。这颗 PHY 的调试工作量有一大半花在这两个字段上硬件工程师和软件工程师如果不同步联调时就会互相怀疑对方。从那以后我每次画这类带复用配置引脚的 PHY都会在原理图第一页画一个小表把每个复用引脚的上电电平、对应配置字、运行功能三列写清楚出图前让软件同事签个字。这个习惯来自于一次联调当时两块板子表现不一致查了三天才发现是配置电阻的贴片方向反了。希望这套流程和这份参考图能帮到你少走那三天。本文还有配套的精品资源点击获取