第2章 RGMII接口基础:信号定义与时序规范
RGMII的全称是Reduced Gigabit Media Independent Interface。说白了,就是把原来GMII的24根信号线压缩到12~14根。我第一次看这个接口时,心里直犯嘀咕:“线少了这么多,时序还能稳吗?”后来调了几年,发现这玩意儿的成败全藏在时钟和数据的关系里。
2.1 信号定义
RGMII的信号分两组:发送(T开头)和接收(R开头)。最关键的几个我列在下面:
| 信号名 | 方向 | 描述 |
|---|---|---|
TXD[3:0] |
MAC → PHY | 发送数据总线,DDR模式下双沿各送4 bit |
TX_CLK |
MAC → PHY(或共享) | 发送参考时钟,125 MHz(千兆) |
TX_CTL |
MAC → PHY | 发送控制信号,编码TX_EN和TX_ER |
RXD[3:0] |
PHY → MAC | 接收数据总线,同样DDR |
RX_CLK |
PHY → MAC | 接收时钟,来自PHY |
RX_CTL |
PHY → MAC | 接收控制信号,编码RX_DV和RX_ER |
我的个人习惯:设计PCB时,TX_CLK和RX_CLK的走线必须严格等长。曾经一次项目因为忽略了这点,导致TX_CLK到PHY的延迟比数据线多出200 ps,整批板子千兆不通。后来把所有时钟走线都绕成蛇形,问题才解决。
注意,TX_CTL和RX_CTL信号是编码过的。上升沿代表TX_EN(或RX_DV),下降沿代表TX_ER(或RX_ER)。这种二合一的设计,省了两根线,但也让时序分析更烧脑。
2.2 时序规范核心
RGMII用的是双数据率(DDR),在每个时钟沿都采样。这意味着时钟频率虽然是125 MHz,但数据速率跑到250 Mbps/bit。你要面对的时序窗口只有时钟周期的一半——4 ns。
嗯,实际标准里还有更严格的约束。我翻出RGMII规范v2.0,把最重要的几个参数提炼出来:
| 参数 | 最小值 | 最大值 | 说明 |
|---|---|---|---|
tSKEW(时钟到数据偏移) |
-500 ps | +500 ps | 时钟沿与数据有效中心之间的时间差 |
tHOLD(保持时间) |
1.0 ns | — | 数据沿之后数据必须保持稳定 |
tSETUP(建立时间) |
1.0 ns | — | 时钟沿之前数据必须有效 |
tJITTER(时钟抖动) |
— | ±40 ps | 时钟边沿的短期不确定性 |
我曾经踩过的大坑:方案上看到的tSKEW要求±500 ps,以为很宽松。实际测试发现,当温度升高20°C,板上走线延迟漂移了70 ps,再加上PHY内部PLL抖动,整个时序余量只剩不到100 ps。所以要留够裕量,至少多给30%的余量。
2.3 时序关系图解
为了让你更直观地理解时钟和数据怎么对齐,我画了一张RGMII的时序结构图。这张图里你能看到发送端和接收端的信号关系,以及那关键的tSKEW窗口。
这张图画的是典型的“中心对齐”模式——时钟沿落在数据窗口正中间。你想想看,如果时钟沿往左偏移300 ps,建立时间就只剩700 ps,那就危险了。我建议在FPGA内部用IODELAY做精细调节,保证tSKEW在±200 ps以内。
2.4 避坑清单
做RGMII时序调校,下面几点是我用真金白银换来的教训:
- 走线等长误差必须≤10 mil。别看PCB工艺标称50 mil等长没问题,实际介电常数波动就能让你多出几十皮秒。
- 参考时钟源不要共用。发送端用MAC的时钟、接收端用PHY恢复的时钟,两者之间的抖动会直接吃掉时序余量。
- 上电初始化后先校准IDELAY。很多MAC/IP核都支持动态tap调整,我习惯在link up后跑一次眼图扫描,把tap值写到最佳位置。
- 留够仿真裕量。实际PCB上过孔、拐角、阻焊都会引入额外电容,仿真时把寄生参数加上去再跑一次,你会发现余量比理想情况少20%以上。
归纳一下:RGMII的6根数据线、2根时钟、2根控制信号,所有奥秘都藏在时钟与数据之间的相对偏移里。只要你守住了tSKEW窗口,剩下的就是PCB工艺和IC内部延迟的一致性了。我自己每次画RGMII Layout前,都会把这几条硬性要求打印出来贴在电脑上——没错,吃过亏才长记性。