3. 等长绕线的约束类型:单端等长、差分对内等长、差分对间等长、组间等长
约束类型搞不清楚,绕线绕到一半才发现规则设错了。这种事我见过太多次。
其实等长约束就四种,弄明白了,后面调线才能有的放矢。咱们一个个过。
3.1 单端等长 (Single-Ended Match)
最基础的等长要求。说白了就是让一组信号线,长度基本一样。
为什么要这样?因为单端信号靠电压高低判断0和1,如果走线一个长一个短,信号到达时间就不一样。接收端一乱,时序就崩了。
个人经验: 我在项目里调过一组8位的并口线,要求全部等长。当时有一条线比别的短了150mil,我觉得应该没问题吧?结果一仿真,建立时间窗口真就卡住了。从那以后,我每条都拉到目标长度,不留隐患。
- 通常设一个 目标长度 (Target Length),比如5000mil
- 再设一个 误差范围 (Tolerance),比如±25mil
- 长度在范围内的,就算合格
3.2 差分对内等长 (Intra-Pair Match)
一对差分线内部的两根线,长度要尽量相等。
差分信号靠两根线上的电压差来传信息。如果一根长一根短,两根线上的信号会有一个时间差,这叫“错位”。错位多了,差分的共模抑制能力就没了,电磁干扰也跟着冒出来。
我记得有个案例: 有一次客户反馈USB 2.0信号眼图很差,我一看设计文件,对内长度差了80mil。这么长的错位,眼图能好才怪。调成5mil以内之后,问题解决。
对内等长的要求一般比较严,通常控制在 5~10mil 以内。
对内等长和差分阻抗是两回事。差分对内等长只保证长度一致,保证信号同相到达;差分阻抗要靠线宽、线距和叠层来控制,不是为了等长。别搞混。
3.3 差分对间等长 (Inter-Pair Match)
多对差分线之间,也要等长。比如一组差分对中,每一对都对齐到同一个长度。
什么时候需要?像PCIe、SATA这种串行总线,每个通道都是一对差分线。通道之间如果长度差太多,数据会在接收端错位。接收端虽然有时钟恢复电路,但等长做得越好,接收器压力越小,系统越稳。
| 类型 | 比较对象 | 误差要求 | 常见场景 |
|---|---|---|---|
| 单端等长 | 线 vs 线 | ±25~100mil | 数据/地址总线 |
| 差分对内等长 | P vs N | 5~10mil | 差分信号对 |
| 差分对间等长 | 对 vs 对 | ±25~100mil | 串行总线通道 |
3.4 组间等长 (Group-to-Group Match)
这是最复杂的。不同的信号组之间,也要满足长度约束。
比如,一组数据总线和一组地址总线之间。它们可能来自同一个芯片,在芯片内部有其固定时序关系。要是两组线外部分别拉到不同长度,信号到达的先后顺序就变了,芯片时序就对了。
你想想看,内存接口就是最典型的例子。数据组、地址组、控制组都要对齐。而且不止是组内等长,组间也得到指定长度。
组间等长怎么做?
- 先确认所有组的 公共参考长度,一般取最长的那组
- 每组内部先绕好,统一到参考长度附近
- 最后检查组间偏差,再微调
第一次做DDR3设计时,我把数据组和地址组分别都做好了等长,但没检查组间关系。结果两个组差了300mil。板子回来后实测,读写时序怎么都调不通过,测了三天才发现是组间长度没对齐。后来加了绕线才补救回来,但那块板子已经白费了一版。
所以我现在做任何多组等长项目,第一步就是把所有组的长度约束列在一张表里,组间配对检查。这个习惯帮我省了至少两次改板的钱。
3.5 四种约束的关系与优先级
四种约束不是孤立的,它们有比较明确的优先级:
- 第一优先级:差分对内等长 —— 误差最小,直接关系到信号质量
- 第二优先级:单端等长 / 差分对间等长 —— 误差要求一般,影响时序一致性
- 第三优先级:组间等长 —— 最次要,但在关键接口上还是得做好
实际项目中,一般先调对内,再调组内,最后调组间。这个顺序能少走很多弯路。
3.6 选哪种约束,怎么判断?
实际项目中,我一般按这个流程判断:
- 先看信号类型:单端还是差分?—— 决定要不要考虑对内等长、对间等长
- 再看信号组数:一组还是多组?—— 决定要不要考虑组间等长
- 最后看接口速率:高速接口通常三个约束都要设,低速信号只做单端等长就够了
举个例子:
- 普通GPIO: 只要单端等长,甚至不需要等长也行
- USB 2.0: 差分对内等长(5mil以内)
- DDR3 数据组: 单端等长 + 差分对内等长(时钟、数据选通)
- PCIe Gen3 x4: 差分对内等长 + 差分对间等长 + 必要时组间等长
你把这些类型和场景对应上,后面设约束的时候就不会晕头转向了。