时钟方案:RGMII双沿时钟 vs RMII单沿时钟
时钟是整个MAC‑PHY通信的心脏。RGMII和RMII在时钟频率、采样边沿和时序预算上根本不同。我最早接触RGMII时,被那个125MHz双沿采样吓了一跳——以前做百兆设计,50MHz单沿采样已经觉得够快了。你想想看,DDR模式下时钟走线长度哪怕差个几十密耳,都可能让眼图闭合。
RGMII 的双沿时钟(DDR)
RGMII 的 REF_CLK 固定为 125MHz(千兆模式)。数据在时钟的上升沿和下降沿同时采样——这就是双沿时钟(DDR)。等效数据率是 250Mbps 每根数据线,4根数据线加起来就是 1Gbps。嗯,这里要留意:收发共用一个时钟,但 TXC 和 RXC 可以独立调整相位,我在项目里吃过这个亏,后文会讲。
我个人习惯在 PCB 布局时把 RGMII 时钟线包地,并且在芯片附近加一个 22Ω 串联电阻来控制过冲。曾经有一块板子,时钟线上的振铃超过 1V,直接导致 PHY 无法 link up,加电阻后才稳定。
| 参数 | 值 | 说明 |
|---|---|---|
| REF_CLK 频率 | 125 MHz | 千兆模式下固定 |
| 采样方式 | 双沿(DDR) | 上升沿和下降沿都采样 |
| 单线数据率 | 250 Mbps | 每对 TX/RX 线 |
| 时钟抖动要求 | < ±40 ps | 实测参数,见数据手册 |
RMII 的单沿时钟(SDR)
RMII 就直白多了:时钟 50MHz,只在 上升沿 采样数据。数据线是4位,每个时钟周期传4bit,总吞吐 200Mbps,经 4B/5B 编码后实际承载 100Mbps。说白了,RMII 的时钟速度只有 RGMII 的 40%,而且单沿采样让时序约束松了一大截。
我曾经在一个百兆产品中用过 RMII,最初觉得 50MHz 随便走走就行。结果发现 REF_CLK 的抖动如果超过 300ps,某些 PHY 会随机丢包。嗯,时钟质量不能只看频率高低,抖动才是暗坑。
| 对比项 | RGMII(千兆) | RMII(百兆) |
|---|---|---|
| 时钟频率 | 125 MHz | 50 MHz |
| 采样边沿 | 上升沿 + 下降沿 | 仅上升沿 |
| 等效数据率/线 | 250 Mbps | 50 Mbps |
| 时钟走线等长要求 | 严格(±50 mil) | 宽松(±150 mil) |
| PCB 层数倾向 | 4 层以上 | 2 层可用 |
曾经踩过的坑: 我在一个 RGMII 设计中把 TXC 和 TXD 走线长度差了 120 mil,结果眼图完全闭合。后来按芯片手册建议,在 PHY 端加了一个 1.5ns 的时钟相位偏置才勉强工作。所以,RGMII 的等长控制不是锦上添花——是必须。
时序约束与 PCB 设计要点
双沿时钟对 setup/hold 窗口的要求比单沿苛刻一倍。以下是核心设计规则:
- 时钟到数据等长: RGMII 要求同一组的时钟与数据线长度差不超过 ±50 mil;RMII 可以到 ±150 mil 以上。
- 参考层完整: 时钟线下方不要有分割,回流路径要连续。我曾经断过一次地平面,125MHz 回波直接让 PHY 寄存器读出乱码。
- 端接电阻: 靠近源端串联 22Ω~33Ω,靠近负载端可加 50Ω 到 GND(视驱动强度)。
- 分组回流: TX 组和 RX 组各自包地,不要混在一起。
FPGA 设计者还要在 SDC 里准确约束时钟和数据的关系。下面是一个典型的 RGMII 输出 delay 约束:
# RGMII output delay (source synchronous)
create_clock -name ref_clk -period 8.000 [get_ports {eth_ref_clk}]
set_output_delay -clock ref_clk -min -0.500 [get_ports {eth_txd[*]}]
set_output_delay -clock ref_clk -max 1.000 [get_ports {eth_txd[*]}]
RMII 的约束简单很多,只需要考虑一个沿:
# RMII output delay
create_clock -name rmii_clk -period 20.000 [get_ports {rmii_ref_clk}]
set_output_delay -clock rmii_clk -min -0.100 [get_ports {rmii_txd[*]}]
set_output_delay -clock rmii_clk -max 2.000 [get_ports {rmii_txd[*]}]
你看到差别了:RGMII 的 max delay 只有 1ns,而 RMII 可以到 2ns——这正是双沿时钟带来的高压。
选型建议
看完上面的对比,你应该能判断怎么选了:
- 优先选 RMII:如果你做的是百兆产品,PCB 只有 2 层,或者对 BOM 成本极度敏感。50MHz 单沿时钟让你少掉很多头发。
- 必须用 RGMII:千兆是硬需求,或者你需要与千兆 PHY 兼容。此时要准备好 4 层板、精确的等长约束、以及至少一次时序仿真。
- 中间态考虑:有些 MAC 支持 RGMII 降速到 10/100M,但时钟频率还是 125MHz——采样方式依然是 DDR。我用过这种模式,低速率下时序容限会变大,但 EMI 仍然比 RMII 高。
一个小技巧: 如果你的主控芯片支持 RGMII 内部 IDELAY 调整,可以不必过分追求极致的等长——用寄存器把时钟相位调一下,往往能救回 50~80 mil 的偏差。我有一版 8 层板的 RGMII 就是这么干的,省去了推挤走线的功夫。
时钟方案总结: RGMII = 125MHz DDR(高压时序 + 高 EMI)
RMII = 50MHz SDR(低压时序 + 低 EMI)
选哪个,取决于你的速率需求和 PCB 设计能力。没有的优劣,只有适不适合你的项目。