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
核心理解: RGMII本质是源同步DDR接口。时钟由发送端提供,并随数据一起发送。

4.2 建立时间(Tsu)与保持时间(Th)——到底多少才够

咱们先看看IEEE 802.3标准中对RGMII时序的定义。我记得第一次仔细翻这个标准时,看到那一堆表格和参数,说实话有点头大。但后来理清楚了,其实核心就是两个数字:建立时间和保持时间。

RGMII标准里对接收端的建立时间Tsu要求是1ns,保持时间Th要求也是1ns。这个“1ns”指的是,在时钟沿到来之前,数据必须稳定至少1ns;在时钟沿之后,数据还必须保持稳定至少1ns。加起来,整个窗口也就2ns。

放到千兆模式(125MHz时钟,周期8ns)里,2ns的窗口只占整个周期的25%。你想想看,剩下的75%都是不确定区,万一走线长了、PCB板子变了、温度上来了,这2ns的窗口很容易就被挤没了。

我的建议: 设计时不要只盯着“1ns”这个下限,尽量留出至少0.5ns的裕量。我把这个叫“红线后撤”——给自己留点喘气空间。

为什么我会这么强调裕量?因为芯片内部的触发器本身也有自己的时序参数。数据从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项目里就吃过边沿对齐模式的亏——延时链在不同温度下漂移太厉害,最后只能靠眼图手动校准。

注意: 必须在设计初期就确认你的芯片使用的是哪种模式。如果芯片手册没写明,建议直接联系原厂FAE确认。我曾经见过一个项目,两边芯片一个用边沿对齐一个用中心对齐,结果花了三天才查出来。

4.5 项目实战:如何验证你的RGMII时序是否满足要求

理论知识聊完了,来点实际的。你拿到了一个板子,怎么知道RGMII时序到底稳不稳?我给你列几条实战建议:

  1. 先看眼图: 用示波器在接收端引脚上测,时钟和数据的眼图一定要张开。RGMII在千兆模式下,眼图开口宽度至少要有2ns以上。
  2. 调延时链: 如果你的芯片支持可调延时(比如Xilinx的IDELAYE2、Altera的DDIO),就遍历所有延时tap,找到能让眼图最宽的那个位置。我习惯把tap值设为range中间偏大一点——宁可让数据稍微“驼背”,也别让setup违规。
  3. 跑压力测试: 在低温、高温、额定电压上下浮动10%三种条件下,跑连续72小时的数据收发测试。RGMII的问题很多时候在常温下根本暴露不出来,一进高低温箱就现原形。
  4. 看同步头: 有些PHY芯片会发固定的同步码(比如5个0x55),这个码型在眼图上特别容易看出问题——因为0x55是0101交替,频率最高,对时序最敏感。

我曾经在一个项目中,眼图怎么测怎么好,结果一到批量生产就有5%的板子出现网络丢包。查到最后,是PCB制造时介质层厚度波动导致走线阻抗偏差,时钟和数据之间的skew超出了预期。从那以后,我每个项目都要做80片以上的小批量时序验证。

避坑经验: 如果你用FPGA做RGMII接口,一定、一定、一定要用MMCM或PLL把内部的系统时钟和RGMII的接收时钟做相位对齐。不要偷懒直接走全局时钟网络,内部的走线延时差异会吃掉你的裕量。

4.6 本章知识框架

下面这张图把本章的核心逻辑串起来了——从双沿采样的基本概念,到建立保持时间的要求,再到实际项目中的验证流程,一步都不少。

RGMII时序规范与延时要求——知识框架 双沿采样(DDR) 上升沿+下降沿各传1bit Tsu / Th 要求 标准1ns / 1ns 时钟对齐模式 边沿对齐 / 中心对齐 Projected Skew 芯片自身输出偏差 PCB走线偏差 100~200ps Derated Timing 最终有效窗口 实战验证流程 眼图测量 → 延时链调节 → 压力测试 → 批量验证 所有参数最终汇入验证环节,眼图分析是检验时序是否合格的最直接手段 双沿采样 ➔ 建立/保持时间 ➔ Skew分析 ➔ 实战验证

你看这个流程,从双沿采样出发,到建立保持时间,再到Skew分析,最后落在实战验证上。每一步都不是孤立的,最终都要用眼图来检验。我个人的习惯是,在画原理图阶段就把这些时序参数列成一个表,贴在白板上,随时对照。PCB layout阶段也让layout工程师优先保证RGMII信号组的等长和阻抗连续。

好,这一章的重点就是这些。记住,RGMII的时序不是“差不多就行”的事情。1ns的窗口,换算到PCB上就是大约5~6英寸的走线长度差(在FR4上),但实际因为过孔、连接器、阻抗不连续,能留出1ns裕量已经算是烧高香了。别给自己留遗憾,该做眼图分析就做,该调延时链就调,别等板子回来了才后悔。