第2章 接口引脚对比:RGMII 与 RMII 的“针脚战争”

说白了,选哪种接口,第一关就是看你的板子上有没有那么多引脚。我当年第一次做板子时,就吃过这个亏——芯片选好了, layout做到一半,发现引脚不够用,那叫一个尴尬。今天咱们就把两者的引脚需求掰开揉碎,看看它们到底差在哪。

2.1 RMII:省引脚,但不省心

RMII 的全称是 Reduced Media Independent Interface。什么叫“Reduced”?就是比标准 MII 少了一半的引脚。它到底用了多少根?

我直接给结论:RMII 只需要 9 根信号线(不算时钟、地、电源)。

信号名称 方向 引脚数 说明
REF_CLK 由 MAC 或 PHY 提供(需配置) 1 50MHz 参考时钟。这是 RMII 的灵魂,所有数据都在时钟上升沿采样
CRS_DV PHY → MAC 1 载波检测+数据有效。说白了就是告诉 MAC:有数据来了,而且有效
RXD[1:0] PHY → MAC 2 接收数据总线。只有 2 位宽,每次传 2 比特
RX_ER PHY → MAC 1 接收错误指示。这个在调试时特别有用
TX_EN MAC → PHY 1 发送使能。通知 PHY 开始发数据
TXD[1:0] MAC → PHY 2 发送数据总线,同样 2 位宽
总计 - 8 + 1(时钟) 如果你把 REF_CLK 也算上,就是 9 根

关键点:RMII 没有独立的 RX_CLK 和 TX_CLK!它和 MAC 共享同一个 50MHz 时钟。这意味着你的时钟走线必须特别小心,不然整个系统都会跑偏。

2.2 RGMII:一根时钟,两倍数据

RGMII 全称是 Reduced Gigabit Media Independent Interface。名字里带个“Gigabit”,自然是为千兆准备的。它的引脚数量呢?

嗯,这里要注意:RGMII 用了 12 根信号线。听起来比 RMII 多不了太多?但它是怎么做到支持千兆的?

说白了,就是双沿采样(DDR)——在时钟的上升沿和下降沿都传数据。你想想看,同样的时钟频率,数据吞吐量直接翻倍。

信号名称 方向 引脚数 说明
TXC / GTX_CLK MAC → PHY 1 发送参考时钟。125MHz(千兆)或 25MHz(百兆),用 DDR 方式
TX_CTL MAC → PHY 1 发送控制信号。由 TX_EN 和 TX_ER 编码而来,简化了引脚
TXD[3:0] MAC → PHY 4 发送数据总线,4 位宽
RXC / RX_CLK PHY → MAC 1 接收参考时钟。频率和 TXC 一样
RX_CTL PHY → MAC 1 接收控制信号。同样由 CRS_DV 和 RX_ER 编码
RXD[3:0] PHY → MAC 4 接收数据总线,4 位宽
总计 - 12 比 RMII 多了 3 根,但支持千兆

一个小技巧:如果你看到 RGMII 接口只有 12 根线,别惊讶。因为它把 TX_EN 和 TX_ER 合并成了 TX_CTL,接收端同理。这种编码方式在高速下能减少 pin 数,但时序也变得更敏感了。

2.3 核心对比:9 vs 12,差距在哪?

我直接画了个对比表,方便你一眼看明白:

对比项 RMII RGMII
信号线总数 9 根(含参考时钟) 12 根(含发送/接收时钟各一)
数据位宽 2 位 4 位 + DDR
时钟频率 50 MHz 125 MHz(千兆模式)
采样方式 单沿(上升沿) 双沿(DDR)
支持速率 10/100 Mbps 10/100/1000 Mbps
时钟来源 MAC 或 PHY 提供(共用) MAC 提供发送时钟,PHY 提供接收时钟
控制信号编码 独立 TX_EN、CRS_DV 等 TX_CTL/RX_CTL 合并编码

警告:别看到 RMII 只有 9 根线就觉得它好布板。它的 50MHz 参考时钟是共享的,外部晶振或 MAC 出来的时钟到 PHY 要走得尽量短、尽量一致。我曾经在一个项目里因为时钟走线太长,导致 100M 速率下丢包率高达 30%,后来才发现是时钟抖动太大。所以,引脚少 ≠ 好设计。

2.4 结构图:一眼看穿引脚分布

下面这张图清晰地展示了 RMII 和 RGMII 的引脚数量和信号流向。红色代表发送,蓝色代表接收,绿色是时钟。你一看就懂了:

RMII vs RGMII 引脚对比结构图 RMII vs RGMII 引脚对比结构图 RMII MAC TXD[1:0] RXD[1:0] TX_EN CRS_DV RMII PHY REF_CLK(50MHz) 共 9 根信号线 单沿采样,2位数据总线 支持 10/100 Mbps RGMII MAC TXD[3:0] RXD[3:0] TX_CTL RX_CTL RGMII PHY TXC(125MHz) RXC(125MHz) 共 12 根信号线 双沿采样(DDR),4位数据总线 支持 10/100/1000 Mbps

2.5 避坑指南:从引脚到布线的那些坑

我个人习惯把引脚对比和布线注意事项放在一起讲,因为它们压根分不开。你光知道 RMII 有 9 根线,不知道布线要点,那等于白学。

RMII 布线要点:

  • 时钟要单独走:REF_CLK 是 50MHz,频率不高,但它要同时供给 MAC 和 PHY。我建议让 MAC 出时钟,走星形拓扑,每个负载在 1 英寸内,别超过 2 英寸。
  • 数据线等长:RXD[1:0] 和 TXD[1:0] 虽然只有 2 位,但也要尽量等长。我见过有人觉得就 2 根线没必要,结果百兆下没问题,换到 100M 重载时就开始丢包。
  • CRS_DV 走最短:这个信号是载波检测+数据有效,对时序要求其实不高,但建议别拉太长,免得被其他信号串扰。

RGMII 布线要点:

  • 时钟组是老大:TXC 和 RXC 都是 125MHz,但因为是 DDR 采样,时序余量非常小。两组时钟要走差分线(如果 PHY 支持),否则至少要走紧耦合、等长、包地。
  • 数据线组内等长:TXD[3:0] 和 RXD[3:0] 各自的 4 根线,长度差要控制在 ±50mil 以内。我试过差 100mil,125M 下根本跑不稳。
  • 控制线编组:TX_CTL 和 RX_CTL 各自跟着自己的时钟和数据组走,别绕开。
  • 尽量不要跨层:RGMII 的 12 根线最好全部走在同一层。跨层会让阻抗突变,对 DDR 信号是致命的。

真香定律:如果你用的是 FPGA+外部 PHY,我建议优先考虑 RGMII。虽然多了 3 根线,但它是唯一支持千兆的选项。而且现在主流 FPGA 的 IO 资源一般不缺那 3 个引脚。但如果你是做低成本 MCU 方案,RMII 是默认选择,省引脚等于省钱。

2.6 一句话总结

RMII 用 9 根引脚换来了低成本、低复杂度,适合百兆场景;RGMII 用 12 根引脚换来了千兆性能和 DDR 技术,是高速接口的标配。你选哪个,取决于你的板子空间、芯片资源和目标速率。我个人经验是:别光看引脚数量,还要看你的 Layout 团队能不能搞定 RGMII 的时序。搞不定?那就老老实实上 RMII,别为千兆梦赔上整个项目周期。