RGMII时序参数解读:Tsetup、Thold、Tskew
做RGMII板级验证,绕不开的就是那三个时序参数——建立时间、保持时间和时钟偏斜。说白了这个时序参数没看懂,你后面做时序收敛就是在瞎蒙。我刚开始接触RGMII的时候,也以为只要走线等长就万事大吉,结果板子调了整整两周都跑不起来。
1.1 建立时间:数据必须提前到
建立时间就是数据在时钟有效沿到来之前,需要提前准备好的最短时间。你想想看,芯片内部寄存器可不是立刻就能把数据吃进去的,它需要一点时间做内部准备。这个时间,我们就叫它Tsetup。
我个人的习惯是,先看芯片手册里列出的建立时间要求。不同的厂商、不同的速率等级,Tsetup差异很大。举个实际例子:
| 标准 | 速率 | Tsetup (典型值) | 说明 |
|---|---|---|---|
| RGMII v1.3 | 125MHz | 1.0ns | 普遍要求的建立时间 |
| 某些FPGA | 125MHz | 0.8ns | 可以宽松一点 |
| 高抖动环境 | 125MHz | 1.2ns | 需要留更多余量 |
我在项目中遇到过一件尴尬事。有个项目用了一个新款的交换机芯片,手册里写的是Tsetup 0.9ns,我照着之前FPGA的经验画了板子,结果死活出不来数据。后来仔细一查,人家手册里写的是0.9ns但附注里加了句"含20%的抖动预算"。也就是说,实际留给PCB走线的只有0.72ns!那可不就翻车了。
1.2 保持时间:数据不能跑太快
保持时间跟建立时间刚好相反。它指的是时钟有效沿过后,数据还需要维持一段时间不变。芯片内部需要在这个时间里把数据稳稳锁存住。这个参数叫Thold。
保持时间违例有个特别坑的地方——它跟频率没关系!你降频到10MHz,保持时间违例照样存在。因为保持时间是相对于时钟沿的相对关系,不是周期的比例。
我给大家列几个常见的保持时间要求:
- RGMII标准v1.3:Thold通常要求 > 0.5ns
- 某些FPGA的IOB:Thold可以做到 > 0.2ns
- 高速PHY芯片:Thold往往要求 > 0.8ns
保持时间违例最常见的表现是什么?就是你发现数据偶尔错一位,而且频率变了还是一样错。我有一个朋友(真的是朋友不是我),做一块板子RGMII接口老是随机丢包,查了整整一星期,最后发现是CK到DATA的保持时间只有0.3ns,芯片要求0.6ns。解决办法是什么?把时钟走线绕长一点,增加延迟。就这么简单一招,问题解决了。
1.3 时钟偏斜:看不见的时序杀手
时钟偏斜,就是时钟信号到达不同接收端的时间差异。在RGMII里,咱们至少涉及两个时钟路径:从PHY到MAC的接收时钟,或者从MAC到PHY的发送时钟。这两条路的延迟如果相差太大,就会吃掉你的建立时间和保持时间预算。
我习惯把Tskew分为两部分看:
- 走线长度差导致的偏斜:每100mil的走线差,大约产生15ps左右的延迟差。这个在PCB layout阶段就要控制好。
- 过孔和器件引脚导致的偏斜:不同信号层、不同过孔数量,都会贡献额外的偏斜。我记得有一次做16层板,过孔从顶层打到BGA正下方,一量发现过孔贡献了将近80ps的偏斜。
| 偏斜来源 | 典型值 | 如何控制 |
|---|---|---|
| 微带走线(表层) | ~150ps/inch | 严格控制等长 |
| 带状线(内层) | ~170ps/inch | 注意层间差异 |
| 过孔 | 30~80ps/个 | 尽量减少过孔,用背钻 |
| 器件焊盘 | 10~30ps | 统一器件封装 |
关键点:Tskew不是单独存在的,它必须和Tsetup、Thold一起计算时序余量。公式很简单:
Setup Slack = Tperiod - Tsetup - Tskew
Hold Slack = Thold - Tskew
注意看,建立时间余量里Tskew是减去的,保持时间余量里Tskew也是减去的。也就是说,Tskew越大,两种时序余量都变小。
1.4 实战中的时序调试
咱们讲完了这三个参数的原理,我说说在实际板级验证时,怎么利用它们来做调试。
- 光眼图远不够:眼图只能看出信号质量,看不出建立时间和保持时间是否满足。一定要结合示波器的时序测量功能,直接测时钟沿到数据跳变沿的时间。
- 看两个沿:RGMII用的是DDR(双沿)采样,所以上下沿都要测Tsetup和Thold。上沿满足不代表下沿也满足。
- 温度循环跑一跑:很多时序违例是温漂引起的。常温没事,一到高温就出事。这个我在一个5G项目里踩过坑。
还记得有一次,我在调一块8层板的RGMII接口。仿真下来时序余量有200ps,觉得稳了。结果样机回来一测,Tsetup余量只有80ps。查来查去,发现是仿真模型里少了PCB板材的介电常数公差。实际板材的介电常数比仿真值大了10%,导致走线延迟比预期多了20%。从那以后,我仿真都习惯把最差情况(WC)和最好情况(BC)都算一遍。
最后,再说个实操层面的经验。我在做时序分析时,会把所有的时序参数整理成一张表,挨个核对:
| 检查项 | 需要关注的参数 | 典型目标值 |
|---|---|---|
| 时钟到数据走线等长 | Tskew | < 50mil长度差 |
| 过孔数量统一 | Tskew | 每组信号过孔数相同 |
| 时钟沿与数据沿对齐 | Tsetup, Thold | 中心对齐偏差 < 0.5ns |
| 温度全范围测试 | Tsetup, Thold, Tskew | 余量 > 100ps |
这三个参数你吃透了,RGMII时序就算入门了。接下来就是靠测量和计算去判断你的板子到底行不行。嗯,这些内容我自己平时做板级验证,每天都在用。