RGMII信号分组与关键信号定义

做RGMII设计这么多年,我最大的感触是——信号分组是后面一切时序分析的根基。你在PCB上看到的那些花花绿绿的走线,如果一开始分组就没理清楚,后面再怎么调等长、调阻抗,都是治标不治本。

今天我们就聊一聊:RGMII里到底有哪些信号?它们该怎么分组?哪些是关键中的关键?

RGMII信号到底有哪些?

RGMII接口一共就12根信号线(有些厂商会额外加个复位或中断,但核心就这么多)。我习惯把它们分成三大类:数据组、时钟组和控制组。

分组信号名方向说明
数据组RXD[3:0]MAC→PHY接收数据总线
TXD[3:0]PHY→MAC发送数据总线
时钟组RX_CLKMAC→PHY接收时钟,DDR双边沿采样
TX_CLKPHY→MAC发送时钟,DDR双边沿采样
控制组RX_CTLMAC→PHY接收控制,包含DV和ER
TX_CTLPHY→MAC发送控制,包含EN和ER

你可能会问:才12根线,为什么还总出问题?问题不在数量,在时序。RGMII用的是DDR(双数据率)采样,时钟上升沿和下降沿都要锁数据。这意味着每一根信号线都要跟时钟对齐到皮秒级。嗯,这根弦必须从一开始就绷紧。

数据组:RXD和TXD的信号特性

先说数据组。RXD[3:0]和TXD[3:0]都是4位并行总线,DDR模式下每周期传8位数据(高低各4位)。

我曾经接手一个项目,板子回来发现RXD[2]这根线走线绕了好大一个弯,原本以为等长就没事,结果量出来跟RX_CLK差了快400ps。你想想,RGMII在1Gbps下,一个UI(单位间隔)才1ns,400ps几乎占了一半的时序裕量。那板子跑百兆勉强能用,千兆直接丢包。

经验告诉我,数据组有两条铁律:

  • 组内等长:同组的4根数据线彼此偏差不要超过±50ps(约10mil以FR4材料估算)。
  • 组间不关心:接收数据组和发送数据组之间不需要做等长,它们有自己的时钟。

时钟组:RX_CLK和TX_CLK——时序的锚点

时钟是RGMII的灵魂。RX_CLK和TX_CLK各自跟着自己的数据组走。你要记住:时钟不是独立的,它跟数据是一对一的伴侣。

RGMII的时钟频率:

  • 10Mbps:2.5MHz
  • 100Mbps:25MHz
  • 1000Mbps:125MHz

频率变了,但时序要求没变。时钟边沿必须落在数据眼图的中央。怎么做到?每个时钟对各自的数据组做等长——我通常要求时钟比数据长0~50ps,让数据提前一点点稳定下来。这是为了补偿PCB走线中时钟的传播延迟略小于数据的损耗。

经验之谈:布线时让时钟走在内层,数据走表层。表层走线速度比内层略快(约快6%~8%),利用这个差异可以自然获得微小的时钟滞后。注意,不同厂家的叠层介电常数不同,建议先算准再布线。

控制组:RX_CTL和TX_CTL的信号定义

RGMII的控制信号比较复杂,容易搞混。我列个对照表:

时钟边沿RX_CTLTX_CTL
上升沿接收数据有效(RXDV)发送数据有效(TXEN)
下降沿接收错误(RXERR)发送错误(TXERR)

也就是说,一根控制线在时钟的两个边沿携带不同信息。这个设计很巧妙,但也给时序带来了挑战:控制信号也必须是DDR信号,它跟数据一样需要和时钟严格对齐。

我在调试一个交换机项目时遇到过一个诡异现象:PHY链路状态上报正常,但就是收不到数据包。用示波器抓RX_CTL,发现上升沿的RXDV正常,下降沿的RXERR却在不应该拉高时偶尔被拉高。最后查到是PCB上RX_CTL走线太长,跟RX_CLK的相位差超过了200ps,导致下降沿采到了错误的电平。

重要提醒:控制信号RX_CTL/TX_CTL必须被当作数据信号来对待,而不是普通控制信号。它必须与所属时钟组做等长,偏差要求同数据组一样严格(±50ps以内)。

信号分组与PCB布局的核心逻辑

把信号分组搞清楚,后面布局布线才能有章可循。我一般用一张图来给团队讲清楚这个关系:

RGMII信号分组与参考时钟关系 RGMII 信号分组与时钟捆绑关系 MAC PHY 发送组:TXD[3:0] + TX_CLK + TX_CTL 接收组:RXD[3:0] + RX_CLK + RX_CTL 布局原则 1. 发送组(绿色)和接收组(紫色)是独立的时钟域 2. 每组内部:数据、时钟、控制必须做等长 3. 两组之间不需要等长,但建议物理隔离(>2倍线宽间距)

这张图讲清楚了两件事:分组和时钟域。绿色和紫色是两个完全独立的时钟域,每个时钟域里捆绑了数据、时钟和控制三样东西。我强调过很多次,不要把TX_CLK和RX_CLK混在一起做等长——它们只是频率相同(都是125MHz),但相位关系在芯片内部已经处理了,PCB上不需要匹配。

关键信号再强调:别忘了RGMII ID

有些芯片支持RGMII-ID(Internal Delay),也就是在芯片内部加入可编程延迟来补偿PCB走线偏差。这个功能很有用,但很多工程师把它当万能药。我记得有一次,一个团队在每个信号上都加了1ns内部延迟,想省掉等长布线。结果时钟和数据的相对抖动反而变大了,因为芯片内部的延迟单元根本做不到那么精确。

我的建议:先做PCB走线等长,把偏差控制在±100ps以内,再用RGMII-ID微调。别上来就全靠内部延迟——那是锦上添花,不是雪中送炭。

小结:信号分组是时序分析的第一步

写到这里,你应该明白了:RGMII不是一根一根信号线孤立去看的。分组是时序分析的骨架。你把发送组和接收组泾渭分明地分开,再在每组内部把时钟、数据、控制在PCB上绑在一起走,后面做等长、做阻抗、做仿真,每一步都会有清晰的边界。

下一块内容是等长约束的具体量化指标——我会把自己踩过的坑一个个讲给你听。嗯,等你把信号分组搞清楚了,等长约束才有意义,不然就是瞎等长。