第2章 RGMII时序参数详解
做RGMII接口设计,说白了就是跟时间赛跑。你得把所有时序参数掰扯清楚,才能算出到底还剩多少余量。我刚开始接触这个的时候,也被那一堆Tskew、Tsetup绕得晕头转向。后来踩过几次坑,才慢慢摸出门道。
这一章,咱们把RGMII里最核心的时序参数一个一个拆开讲。你不用死记硬背公式,关键是理解每个参数在物理上到底是什么意思。
2.1 Tskew —— 时钟偏斜,最隐蔽的坑
先聊Tskew。这个词直译是“时钟偏斜”,其实就是时钟信号到达两个不同点的时间差。
在RGMII里,Tskew特指发送端发出的时钟与数据之间的相对延迟偏差。嗯,这里要注意:RGMII是源同步接口,时钟和数据是从同一个芯片发出去的。理想情况下,时钟沿应该正好对准数据的中心。但实际PCB走线、芯片内部路径长度不同,就会产生Tskew。
我曾经遇到过一块板子,原理图看着没问题,PCB走线也都等长了,结果就是跑百兆正常,千兆就偶尔丢包。最后查出来,是PHY芯片内部的时钟输出路径和数据输出路径有几十皮秒的差异。这个差异,就是Tskew。说白了,芯片手册上标的Tskew,你得当真看。
我的个人习惯:选型时先看Tskew的典型值和最大值。如果最大值超过100ps,我一般就会考虑加一级延迟链或者换方案。别指望PCB走线能补回来,那玩意儿误差更大。
2.2 Tsetup 和 Thold —— 建立时间与保持时间,一对冤家
Tsetup和Thold,这两个参数是成对出现的。你设计过数字电路就知道,每个触发器都有这个要求。但在RGMII里,Tsetup和Thold指的是接收端芯片对输入数据的要求。
Tsetup(建立时间):数据必须在时钟有效沿到来之前保持稳定的最短时间。
Thold(保持时间):数据必须在时钟有效沿到来之后保持稳定的最长时间。
你可以这么想:时钟沿就像一个快门,数据是你要拍的照片。Tsetup就是快门按下去之前,被拍对象不能动的时间。Thold就是快门按下去之后,被拍对象仍然不能动的时间。
为什么RGMII特别在意这两个参数?因为DDR(双数据率)的关系,时钟上下沿都要采样数据。留给数据的稳定窗口,只剩半个时钟周期。以125MHz的千兆以太网为例,时钟周期是8ns,半个周期才4ns。Tsetup和Thold各占一部分,留给你的余量就没多少了。
关键认知:Tsetup和Thold加起来,决定了接收端需要的最小数据稳定窗口。这个窗口越小,对发送端和PCB走线的压力就越小。我个人偏好选Tsetup+Thold小于时钟周期20%的芯片。
2.3 Tperiod —— 时钟周期,频率的骨架
Tperiod就是时钟周期,单位纳秒。RGMII的工作频率决定了Tperiod:
| 速率 | 时钟频率 | Tperiod | 数据率 |
|---|---|---|---|
| 10Mbps | 2.5MHz | 400 ns | DDR |
| 100Mbps | 25MHz | 40 ns | DDR |
| 1000Mbps | 125MHz | 8 ns | DDR |
你想想看,Tperiod直接决定了时序裕量的大盘。频率越高,周期越短,你一丁点儿的误差都能把裕量吃干净。我在做千兆设计的时候,从来不会把裕量估得刚刚好,至少要留20%的余量。为什么?因为芯片的Tskew会随温度漂移,PCB的走线延迟也会随温度变化。留点余量,心里踏实。
2.4 Tdly —— 数据延迟,PCB上的真实旅行时间
Tdly是数据信号从发送端到接收端的总延迟。它包含三部分:
- 芯片内部延迟:信号从芯片内部逻辑走到封装引脚的时间。
- PCB走线延迟:信号在PCB铜箔上传播的时间。FR4材质大约是6ps/mm,这个我在项目里实际测过,基本靠谱。
- 接收端内部延迟:信号从接收引脚到达内部采样触发器的路径延迟。
记得有一次,我做的板子RGMII时钟走线比数据线长了整整10mm。算下来Tdly差了约60ps。在千兆频率下,这60ps差不多吃掉了7%-8%的时序窗口。后来我学乖了,布局布线时先用EDA工具算一下走线延迟,再做等长约束。
我曾经犯过的错:以为PCB走线只要物理长度相等就行。其实过孔、拐角、换层都会引入额外的延迟。同等物理长度,走表层的线比走内层的线延迟少。别只看长度,要看实际传播延迟。
2.5 各参数之间的逻辑关系
这几个参数不是孤立存在的。它们共同决定了一个最终结果——时序裕量。说白了,就是你的设计到底能不能稳定工作。
我把它们的关系画成了一幅图,你看一遍就能明白:
从图里你能看出来,Tperiod是总预算,Tskew、Tdly、Tsetup、Thold都是从预算里扣钱的。扣完剩下的,就是你能用的裕量。
核心公式(记牢):
Setup裕量 = Tperiod(min) - Tskew(max) - Tdly(max) - Tsetup(max)
Hold裕量 = Tskew(min) + Tdly(min) - Thold(max)
注意:Setup裕量用各参数的最大值计算,Hold裕量用最小值计算。这就是所谓的“最差情况分析”。我当年第一次做时序分析时,就搞反了,算出来的裕量全是负的。
2.6 参数的温度与电压特性
最后一个不得不提的点:这些参数不是一成不变的。温度升高,芯片内部的mos管开关变慢,Tskew和Tdly都会增大。电压偏低,同样的道理,延迟也会增大。
你查芯片手册时要注意:手册上给的Tskew、Tsetup、Thold值,通常是在特定条件下(比如25°C、1.2V)测的。实际使用时,温度可能到85°C,电压可能波动±5%。
我曾经在一个项目中,没考虑高温下的Tskew漂移。实验室调试一切正常,结果产品在客户那边夏天高温工况下频繁丢包。后来实测发现,温度从25°C升到85°C,Tskew漂移了约40ps,直接把我的裕量吃光了。
我的建议:做裕量评估时,至少留出25%的温度和电压裕量。不要卡着芯片手册的极限值设计。你永远不知道出货后会遇到什么环境。