4. RGMII时序规范与延时要求
好,咱们这一章来聊聊RGMII的时序规范。说白了,就是搞清楚数据和时钟之间到底要维持什么样的关系,才能让收发双方不出错。我个人习惯把RGMII口理解成一种相当“激进”的接口——它不像传统并行总线那样给充足的建立保持时间窗口,而是把延时压榨到了极限。
为什么这么说?你想想看,RGMII在时钟的双沿都采样数据,一个周期内就要传出2比特的信息。这意味着什么?意味着对时序的要求加倍严格了。我在项目中遇到过不少次,眼图看着还行,但跑到千兆模式就随机出CRC错误,查到最后,都是延时没校准到位。
4.1 RGMII的“双沿采样”到底是怎么回事
传统接口只在时钟上升沿采样,一个周期只传1比特。RGMII在上升沿和下降沿都采样,一个时钟周期就能传2比特。这样一来,数据线的带宽利用率直接翻倍,但代价就是时序裕量被压缩了一半。
嗯,这里要注意一个关键点:RGMII的数据是相对于发送时钟(TX_CLK)对齐的,而接收端(比如FPGA或MAC)用同一个时钟来捕捉数据。为什么会产生延时问题?因为数据从发送端出来,经过PCB走线、连接器、再进到接收端,这个过程中时钟和数据的路径不一样,自然就产生了相位偏移。
我曾经调试过一块板子,时钟走线比数据长了将近500mil,结果眼图完全闭合。那时候我才真正意识到,PCB走线等长不是说着玩的。
| 采样模式 | 时钟沿 | 数据线使用 | 周期内传输比特 |
|---|---|---|---|
| 传统SDR | 仅上升沿 | 1根 | 1 |
| RGMII DDR | 上升沿+下降沿 | 1根 | 2 |
4.2 建立时间(Tsu)与保持时间(Th)——到底多少才够
咱们先看看IEEE 802.3标准中对RGMII时序的定义。我记得第一次仔细翻这个标准时,看到那一堆表格和参数,说实话有点头大。但后来理清楚了,其实核心就是两个数字:建立时间和保持时间。
RGMII标准里对接收端的建立时间Tsu要求是1ns,保持时间Th要求也是1ns。这个“1ns”指的是,在时钟沿到来之前,数据必须稳定至少1ns;在时钟沿之后,数据还必须保持稳定至少1ns。加起来,整个窗口也就2ns。
放到千兆模式(125MHz时钟,周期8ns)里,2ns的窗口只占整个周期的25%。你想想看,剩下的75%都是不确定区,万一走线长了、PCB板子变了、温度上来了,这2ns的窗口很容易就被挤没了。
为什么我会这么强调裕量?因为芯片内部的触发器本身也有自己的时序参数。数据从PCB走线进到芯片引脚,再到内部的触发器,中间还要经过PAD、ESD保护、buffer,这些都会引入额外延时。芯片手册里写的“1ns”是pin-to-pin的要求,但你实际在FPGA内部看到的窗口可能已经没有1ns那么大了。
4.3 Projected Skew vs. Derated Timing——两套要求的对比
我见过不少工程师搞混这两个概念。咱们把它理清楚。
Projected Skew(投射偏差): 指的是在考虑温度、电压、工艺角最恶劣条件下,发送端给出的时钟与数据之间的最大偏差。这个值通常由芯片厂商给出,一般在±500ps以内。说白了,就是芯片在最差情况下,自己发出的时钟和数据能差多少。
Derated Timing(降额时序): 是把Projected Skew和PCB走线偏差、连接器偏差、接收端自身的setup/hold损耗全算进去之后,最终得到的实际可用窗口。这个值通常比1ns小得多,搞不好就只剩几百皮秒了。
我建议你务必仔细看芯片手册里关于RGMII的“Output Timing”这一节。有些厂商会给一个叫做“Tskew(clock-data)”的参数,这个就是Projected Skew。取这个值,再加上PCB走线偏差(比如±100ps),再加上接收端内部buffer的抖动,就是你真正需要面对的挑战。
| 参数 | 含义 | 典型值 | 设计时怎么用 |
|---|---|---|---|
| Projected Skew | 芯片自身输出的时钟与数据偏差 | ±500ps | 作为输入条件,计算总偏差 |
| PCB走线偏差 | 时钟与数据走线不等长引入的延时差 | ±100ps~±200ps | 尽量等长,目标偏差小于±50ps |
| 接收端Setup/Hold | 接收芯片对数据稳定时间的要求 | 1ns / 1ns | 留出裕量,实际最好做到1.5ns |
| 有效窗口 | 最终可用的数据采样窗口 | 由前几项相减得到 | 务必保证为正数 |
4.4 时钟对齐模式:中心对齐 vs. 边沿对齐
这里有个很容易混淆的点:RGMII标准允许两种时钟对齐模式。我记得最早做RGMII调试时,总以为数据永远锁在时钟沿上,直到有一次芯片手册上写了“Data is center-aligned to clock”,我才恍然大悟——原来还有这回事。
边沿对齐模式: 数据的跳变发生在时钟沿附近。这种模式下,接收端需要用延时调整电路把时钟移相90°(相当于移1/4周期),让时钟沿落在数据的中心位置,这样才能可靠采样。大多数SoC和FPGA内部的延时链就是干这个活的。
中心对齐模式: 发送端自己就把数据调整到时钟的中间位置了。接收端不需要再做移相,直接把时钟连到触发器就行。这种模式对接收端友善,但对发送端的要求更高——必须在芯片内部精确控制出这90°的相移。
为什么现在越来越多芯片趋向于中心对齐?说白了,就是把麻烦留给发送端,让接收端轻松点。尤其是高速PCB上,少一个可调延时链,就少一个噪声源。我在一个上百M的FPGA项目里就吃过边沿对齐模式的亏——延时链在不同温度下漂移太厉害,最后只能靠眼图手动校准。
4.5 项目实战:如何验证你的RGMII时序是否满足要求
理论知识聊完了,来点实际的。你拿到了一个板子,怎么知道RGMII时序到底稳不稳?我给你列几条实战建议:
- 先看眼图: 用示波器在接收端引脚上测,时钟和数据的眼图一定要张开。RGMII在千兆模式下,眼图开口宽度至少要有2ns以上。
- 调延时链: 如果你的芯片支持可调延时(比如Xilinx的IDELAYE2、Altera的DDIO),就遍历所有延时tap,找到能让眼图最宽的那个位置。我习惯把tap值设为range中间偏大一点——宁可让数据稍微“驼背”,也别让setup违规。
- 跑压力测试: 在低温、高温、额定电压上下浮动10%三种条件下,跑连续72小时的数据收发测试。RGMII的问题很多时候在常温下根本暴露不出来,一进高低温箱就现原形。
- 看同步头: 有些PHY芯片会发固定的同步码(比如5个0x55),这个码型在眼图上特别容易看出问题——因为0x55是0101交替,频率最高,对时序最敏感。
我曾经在一个项目中,眼图怎么测怎么好,结果一到批量生产就有5%的板子出现网络丢包。查到最后,是PCB制造时介质层厚度波动导致走线阻抗偏差,时钟和数据之间的skew超出了预期。从那以后,我每个项目都要做80片以上的小批量时序验证。
4.6 本章知识框架
下面这张图把本章的核心逻辑串起来了——从双沿采样的基本概念,到建立保持时间的要求,再到实际项目中的验证流程,一步都不少。
你看这个流程,从双沿采样出发,到建立保持时间,再到Skew分析,最后落在实战验证上。每一步都不是孤立的,最终都要用眼图来检验。我个人的习惯是,在画原理图阶段就把这些时序参数列成一个表,贴在白板上,随时对照。PCB layout阶段也让layout工程师优先保证RGMII信号组的等长和阻抗连续。
好,这一章的重点就是这些。记住,RGMII的时序不是“差不多就行”的事情。1ns的窗口,换算到PCB上就是大约5~6英寸的走线长度差(在FR4上),但实际因为过孔、连接器、阻抗不连续,能留出1ns裕量已经算是烧高香了。别给自己留遗憾,该做眼图分析就做,该调延时链就调,别等板子回来了才后悔。