3. 信号延迟模型建立归纳总结
要算清楚 RMII 的建立保持时间,第一步就是把信号延迟的骨架搭出来。说白了,你得知道每个延迟从哪儿来、怎么加起来的。我刚开始做 RMII 时,光是 Tco 和 Tpcb 就搞混了好几次,结果窗口算出来负的……那叫一个崩溃。后来老老实实画了个延迟模型图,一眼就看明白了。
3.1 为什么要先建模型?
你想象一下:没有模型,拿到数据手册就是一串数字,Tco、Tprop、Tskew,谁跟谁相加?谁跟谁相减?很容易出错。模型给了你一个固定的“等式结构”——先画路径,再填参数,最后算窗口。我习惯用源同步接口的通用四参数模型:
- 发射延迟(时钟到数据输出 Tco)
- 传输延迟(PCB 走线 Tpcb)
- 接收端时序需求(Tsu / Th)
- 时钟偏斜(Tskew)
这四个东西组合起来,就是建立/保持时间计算的地基。你下次不管换哪种接口,只要把模型搬过来,往里面填值就行。
核心口诀:数据路径长度 = Tco + Tpcb;时钟路径差异 = Tskew;建立时间关系是“数据到达时间 ≤ 时钟到达时间 - Tsu”。
3.2 基础模型长什么样?
来看这张图。我把 RMII 的一对发送端和接收端拆开,标出了每条路径上的延迟分量。画完这张图后,很多迷糊的地方就清楚了。
这张图里,数据从发送寄存器出来经过 PCB 走线,再进入接收寄存器;时钟源分两路,一路送发送端,一路送接收端。两路时钟之间的差值就是 Tskew。模型公式就出来了:
建立时间检查:Tco + Tpcb ≤ Tcycle - Tsu + Tskew
保持时间检查:Tco + Tpcb ≥ Th + Tskew
嗯,这俩不等式就是后面所有计算的基础。你把它写在板子上方,每次画板子前默念一遍,基本不会翻车。
3.3 每个延迟分量到底是什么?
光有模型还不够,你得明白每个参数实际对应什么。我在一个 8 层板项目里就踩过 Tco 的坑——手册给了典型值,结果高温下慢了 30%。从此我只看 MAX 和 MIN 条件。
3.3.1 Tco —— 时钟到输出延迟
这是发送器内部,从时钟上升沿到数据出现在 Q 引脚的时间。它包含触发器的 CK→Q 延迟和输出缓冲的延迟。注意:同一个芯片的不同通道,Tco 可能不一样。你最好看手册里的 Skew 参数,比如“Channel-to-Channel Skew”。
| 参数 | 典型值 (RMII 50MHz) | 影响 |
|---|---|---|
| Tco (min) | 1.5 ns | 决定最快数据到达 |
| Tco (max) | 5.0 ns | 决定最慢数据到达 |
我的习惯: 算建立时间用 Tco(max),算保持时间用 Tco(min)。两个方向的 guard band 都得留够。
3.3.2 Tpcb —— PCB 走线传输延迟
这取决于走线长度和介质。FR4 上信号传播速度大约 6.5 in/ns(约 165 mm/ns)。简单算:
Tpcb = 走线长度 (mm) / 165 (mm/ns)
举个例子,数据线长 30 mm,Tpcb ≈ 0.18 ns。要是线长 200 mm,就 1.2 ns 了。差分线或蛇形线还会增加额外延迟。我曾经在 HDI 板上因为等长绕线没算微带线的有效介电常数,结果 Tpcb 偏了 0.1 ns,还好测试前发现了。
3.3.3 Tskew —— 时钟偏斜
时钟源到发送寄存器和到接收寄存器的路径差异。如果采用了同源时钟并做了等长,Tskew 可以控制到 ±0.1 ns 以内。但要是用了 PLL 分频后再分配,可能达到 0.5 ns。算的时候取最恶劣情况:
Tskew = Tclk_tx - Tclk_rx (带正负号)
你想想看,如果 Tskew 是正的,表示接收时钟比发送时钟晚到,这有利于保持但不利于建立。所以模型中要用代数减法。
⚠️ 注意: 时钟偏斜在温度、电压下会变化。我曾经见过一个设计,常温下 Tskew 才 0.05 ns,85°C 时变成了 0.3 ns —— 因为时钟树上的 buffer 温度系数不一样。一定要看工艺角分布。
3.4 模型在 RMII 环境中的应用
RMII 的时钟是 50 MHz,周期 20 ns。数据位宽只有 2 位,但每根数据线都要独立算。我一般先把模型画在白板上,然后代入典型值:
- Tco(max) = 4.0 ns(取数据手册最大值)
- Tpcb(max) = 0.3 ns(对应 50 mm 走线)
- Tskew(max) = 0.2 ns(同源时钟等长)
- Tsu = 2.0 ns(接收端要求)
代入建立公式:4.0 + 0.3 ≤ 20 - 2.0 + 0.2 → 4.3 ≤ 18.2 → 满足。保持公式:4.0 + 0.3 ≥ 2.0 + 0.2 → 4.3 ≥ 2.2 → 也满足。看起来宽松,但你再算一下 Tco(min) 情况:1.5 + 0.3 ≥ 2.0 + 0.2 → 1.8 ≥ 2.2 —— 保持时间竟然违规了!这就是为什么模型一定要把 min/max 都算一遍。
你的 checklist: 每次算完,检查两组不等式——建立用 MAX 条件,保持用 MIN 条件。缺一个都不行。
3.5 我踩过的坑与建议
坑一:忽略 Tco 在不同 bank 电压下的差异。 我曾经在一个 FPGA 上用 3.3V bank 驱动 RMII 数据,1.8V bank 驱动时钟 —— 结果 Tco 相差 1 ns 以上。后来强制用同一个 bank 供电才解决。
坑二:PCB 走线只算了长度,没算过孔延迟。 每个过孔大约增加 10~20 ps 延迟。如果走线换层多,累积起来不可忽视。我后来在模型里加了 Tvia = N × 15 ps 这一项。
坑三:时钟偏斜测试时用了同一个探头。 要同时抓两个时钟点的边沿,用差分探头或 cal 过的夹具。我那次偷懒用了单探头来回测,测出来 Tskew 是负的……后来发现是示波器通道延迟不一样。
嗯,模型的意义就是让你在出板子前把所有“坑”都填上。多花半小时画图、列参数,少让样板改一版。