一、RGMII接口概述与板级验证挑战
做板级验证这些年,RGMII 这个接口我见得最多。说它简单吧,只有 12 根线;说它难吧,跑千兆时时序搞不定,板子愣是通不了。我刚开始接手这个接口时也吃过亏,后来才慢慢摸清它的脾气。
1.1 RGMII 到底是个什么东西
RGMII 的全称是 Reduced Gigabit Media Independent Interface。说白了,它就是芯片(MAC)和 PHY 之间传数据用的。你想想看,如果每个信号都单独拉一根线,那板子上得跑多少根线?所以它做了个减法。
| 对比项 | GMII | RGMII |
|---|---|---|
| 数据引脚数 | 8 位 × 2(收发) | 4 位 × 2(收发) |
| 时钟方式 | 独立时钟 | 源同步 DDR |
| 最大吞吐率 | 1 Gbps | 1 Gbps |
| 引脚总数 | 约 24 根 | 约 12 根 |
表格一对比你就明白了。RGMII 用 DDR(双沿采样)的方式,用一半的引脚干同样的活。但代价呢?就是时序变苛刻了。我在项目中遇到过一种情况:测试时功能都正常,量产时有一批板子死活不通——最后查出来就是时钟到数据的相位差了那么一两百皮秒。
1.2 接口的本质
其核心就是四个收发信号组:
- TXD[3:0] — 发送数据,4 位宽
- RXD[3:0] — 接收数据,4 位宽
- TX_CLK — 发送时钟,由 MAC 提供
- RX_CLK — 接收时钟,由 PHY 提供
- TX_CTL — 发送控制信号
- RX_CTL — 接收控制信号
这里有个坑——TX_CLK 和 RX_CLK 是各自独立产生的。发送时钟从 MAC 出来到 PHY,接收时钟从 PHY 出来到 MAC。两个时钟之间没有任何相位关系。嗯,这就是所有时序问题的根源。
关键点:RGMII 的时钟是源同步的。也就是说,数据跟着时钟一起走,谁发数据,谁就提供时钟。接收端只需要采数据,不需要自己产生时钟。
1.3 相位对齐的难题
RGMII 要求在千兆模式下,时钟的上升沿和下降沿都要采数据。这就是所谓的 DDR 传输。我回忆一下当时第一次做 RGMII 验证时的场景:示波器打上去,波形都有,就是 Ethernet 跑不起来。
为什么会这样?
因为 PCB 走线会有延迟。时钟走线和数据走线只要差几百 mil,相位就偏了。你想想看,数据在时钟沿采样的时刻,如果因为走线长度不一致导致数据正好在跳变沿上,那结果就是——不定态。
我个人习惯:做 layout 时,RGMII 的四根数据线一定要和时钟线等长。等长控制在 ±50 mil 以内,这是底线。如果不放心,可以放宽到 ±100 mil,但风险会大很多。
1.4 板级验证的三大挑战
我们在板级验证中,面对的挑战归归类,其实就三类:
- 电气特性挑战——信号完整性、振铃、过冲
- 时序挑战——建立时间、保持时间、延迟补偿
- 兼容性挑战——不同 PHY 对时序窗口的要求差异很大
电气特性这块我吃过亏。有一个项目,PHY 芯片离 MAC 将近 3 英寸远,信号到那边已经变形了。我用示波器一看,上升沿都变成缓坡了。后来串了 22 Ω 的电阻做端接才算搞定。
时序挑战就更头疼了。RGMII 的时序窗口只有 1 ns 左右(千兆模式下周期是 2 ns,因为 DDR 是双沿,所以每个沿的窗口只有 1 ns)。1 ns 是什么概念?就是一根走线多 6 英寸,你的时序就挂了。
| 挑战分类 | 典型表现 | 我的排查经验 |
|---|---|---|
| 电气特性 | 信号质量差,误码率高 | 看眼图,检查端接 |
| 时序窗口 | 丢包,CRC 错误 | 调相位,改 PCB 等长 |
| 兼容性 | A 厂 PHY 能通,B 厂不行 | 查 datasheet,调驱动强度 |
注意:我曾经在调试时忽略了一个细节——PHY 手册里写的 setup/hold 时间是在某个特定测试条件下测的。实际板子上因为电源噪声、温度变化,这个窗口会缩小。所以不要卡着边界设计,要留余量。
1.5 为什么需要特殊的时序收敛方法
有人可能会问:FPGA 里面不都集成 RGMII IP 了吗?直接例化不就行了吗?
对,IP 能处理大部分问题。但它处理不了“板上的延迟”。PCB 走线、过孔、连接器——这些物理因素 FPGA 管不着。你得在板级验证中把这些因素测出来、收进去,才能保证量产稳定。
这也就是我做这个课程的初衷:把板级验证中那些“书本上不讲,实际却天天遇到”的时序问题,掰开揉碎了讲清楚。说白了,就是让你少走我当初走过的弯路。
接下来的章节里,我们会一步步拆解 RGMII 的时序约束怎么设、怎么测、怎么调。