1. 走线长度对信号质量的影响:先把“为什么”讲透
很多人第一次听到“走线长度会影响信号质量”这句话时,直觉反应是——线又不是电阻,长短跟信号好不好有什么关系?我当年画第一块四层板的时候也是这么想的,结果一块 SPI Flash 的板子,时钟线比数据线长了将近 8 厘米,跑 20 MHz 都偶尔读错,把线缩短重做一版就稳了。那次之后我才真正明白:在高速领域,走线长度不是一个几何尺寸,而是一个时间维度上的量。
这篇文章聊的是走线长度与信号质量之间的关系,核心是搞清楚三件事:多长的线才算“长”、长线到底伤害了什么、以及我们怎么在设计阶段就把这件事管住。适合刚入行画板子的硬件工程师、做嵌入式底层调试的软件同学,以及需要审厂、看板子、判断设计好坏的测试人员。全文不讲空话,参数怎么算、表怎么查、报告怎么看,我都尽量写清楚。
先给一个总纲,方便你带着框架往下读:
- 长度决定延迟,延迟决定时序裕量还剩多少;
- 长度决定是否为传输线,一旦进入传输线区间,反射、振铃、过冲全来了;
- 长度差决定偏移,差分对和并行总线最怕的就是这个;
- 长度还决定损耗和串扰的累积量,越长越吃亏。
提示:本文讨论的前提是常规 FR-4 板材、常见的 CMOS/LVDS 电平场景。如果你用的是 Rogers 之类的低损耗材料,或者极低温、航天级环境,数值会变,但物理逻辑是不变的。
2. 多长的走线才算“长”:三个判断维度
2.1 从集总参数到分布参数的临界点
电路课本里,导线是一根理想的零阻抗连接。这个假设只在信号波长远大于导线物理长度时成立。经验判据是:当导线长度超过信号有效波长的 1/10(保守一点用 1/20)时,就必须按传输线处理,不能再当一根线看了。
这里的“有效波长”不是真空波长,要除以介质等效介电常数的平方根。拿最常见的 FR-4 举例,表层微带线的等效介电常数大约 3.5 左右,那么电磁波在里面的传播速度约为:
- 真空中光速约 3×10⁸ m/s,换算成常用单位是约 11.8 英寸/纳秒,或300 mm/ns;
- 表层微带线:v = 300 / √3.5 ≈160 mm/ns;
- 内层带状线(等效介电常数接近 4.3):v = 300 / √4.3 ≈145 mm/ns。
反过来说,我们更常用的是传播延迟这个量:
| 走线类型 | 等效介电常数 | 单位长度延迟 | 每英寸延迟 |
|---|---|---|---|
| 表层微带线 | ≈3.5 | ≈6.25 ps/mm | ≈159 ps/inch |
| 内层带状线 | ≈4.3 | ≈6.9 ps/mm | ≈176 ps/inch |
记住一组好用的近似值:表层线约 6 ps/mm,内层线约 7 ps/mm。这个数字我几乎每次评估时序都会在脑子里过一遍。
那么什么频率下 10 cm 的线算长?1 GHz 时,有效波长 = 160 mm/ns ÷ 1 GHz = 160 mm,1/10 就是 16 mm。也就是说,1 GHz 的信号,走线只要超过 16 mm 就得按传输线设计。而在 100 MHz 下,这个门槛放宽到 160 mm,普通小板子根本碰不到。这就是为什么低频板子随便拉线也没事,高频板子寸土寸金。
2.2 上升时间判据:比频率更靠谱的标准
只看频率其实是不够严谨的,因为决定反射严重程度的是信号上升时间,不是周期。一个 100 MHz 但上升时间只有 300 ps 的时钟,它的高频成分远超 100 MHz 本身。
工程上更通用的判据是:当走线单向延迟超过信号上升时间的 1/6 时,就要考虑传输线效应。
算一个例子:某时钟上升时间 tr = 1 ns,那么阈值延迟 = 1 ns / 6 ≈ 167 ps。按表层线 6.25 ps/mm 算,对应的临界长度就是:
167 ps ÷ 6.25 ps/mm ≈27 mm
也就是说,这根线只要超过 27 mm,你就能在示波器上看到明显的振铃了。我在很多客户板子上验证过这个数,基本八九不离十。
反过来思考,如果你的上升时间是 5 ns(低速逻辑常见值),临界长度就变成 833 ps ÷ 6.25 ≈ 133 mm。这时候板子上随便拉一根十几厘米的线都无所谓,这也解释了为什么早年 51 单片机的板子画得那么随意还能跑。
2.3 时序维度:长度差才是真的杀手
前面两个维度是“单根线自己好不好”,第三个维度是“多根线之间齐不齐”。并行总线和差分对关心的是长度差,不是绝对长度。
举例:一组 8 位数据总线,参考时钟频率 200 MHz,周期 5 ns。如果数据线之间长度差达到 20 mm,按内层 7 ps/mm 算,偏移就是:
20 mm × 7 ps/mm = 140 ps
听着不多,但如果这根总线的建立时间裕量本身只有 200 ps,140 ps 的偏移就直接吃掉七成裕量,再加上驱动芯片的输出偏斜、接收端的采样窗,基本上就崩了。所以总线设计里,我们常把长度差控制在一个“时钟周期的一个小比例”之内,比如 DDR 的 DQ 相对 DQS 通常控制在 ±2~5 mm 这个量级(具体看速率等级)。
2.4 小结一下三个维度
| 判断维度 | 核心问题 | 典型判据 |
|---|---|---|
| 波长判据 | 要不要按传输线看 | 长度 > 有效波长/10 |
| 上升时间判据 | 会不会有反射振铃 | 单向延迟 > tr/6 |
| 时序判据 | 多根线齐不齐 | 长度差 × 单位延迟 < 时序裕量的某个比例 |
这三个维度里,新手最容易忽略的是第二个,因为它不看频率看边沿,而边沿速度往往是芯片手册里埋得最深的一个参数。
3. 长线到底伤害了什么:四类具体损伤
3.1 反射、过冲与振铃
这是最直观的一类。当驱动器输出的能量沿走线传播,到达接收端时,如果接收端阻抗和走线特征阻抗不匹配,一部分能量会被反射回来。反射波回到源端,如果源端也不匹配,再反射过去,如此往复,就形成了振铃。
走线越长,这段“来回跑”的时间越长,振铃的周期就越长、衰减越慢,落在采样点上的概率越高。150 mm 的线,来回一趟按 6.25 ps/mm 算就是 1875 ps ≈ 1.9 ns,正好可能落在接收端采样窗口里,导致误触发。
我在示波器上抓过一个经典案例:一根 120 mm 的未端接时钟线,上升沿处过冲到了 3.9 V(电源 3.3 V),振荡持续了将近 4 ns,接收芯片的输入保护二极管都被拉出电流了。加了 22 Ω 串联端接后,过冲降到 3.5 V 以内,振铃基本消失。
3.2 时序裕量被侵蚀
时序裕量这个东西,你可以理解成“在正确时刻采到正确数据还剩多少余量”。它被很多项啃食:芯片输出偏斜、走线长度差、建立/保持时间要求、时钟抖动、接收端建立保持窗口。走线长度带来的延迟和长度差,是其中可以被人为控制的一项。
一块 DDR3-1600 的板子,一个时钟周期只有 1.25 ns,留给 DQ 的窗口本身就只有几十到一百多皮秒。如果同一 byte lane 内 DQ 到 DQS 的长度差做到 10 mm,按内层 7 ps/mm 算,光是这一项就吃掉 70 ps,几乎是整个窗口的一半。这就是为什么 DDR 布线时,我们会花大量时间在“等长绕线”上。
3.3 损耗与边沿退化
走线是导体,导体有电阻,介质有损耗。线越长,高频成分被衰减得越厉害,结果是上升沿变缓、眼图闭合。
FR-4 在 1 GHz 附近的介质损耗大致在 0.02 量级(tanδ),损失随频率和长度累加。粗略地说,一根 300 mm 的 FR-4 传输线,在 2.5 Gbps 下,眼高可能只剩输入的一半左右。这不是危言耸听,是做过的实测。所以高速串行链路(PCIe、USB3、SATA 之类)在长距离走线时,要么用低损耗板材,要么上均衡(发送端去加重、接收端 CTLE/DFE)。
3.4 串扰与耦合的累积
两条平行的长走线,相当于一对耦合的传输线。长度越长,耦合区越长,近端串扰和远端串扰的累积越明显。串扰的危害在于它会让受害线的噪声底抬高,本来干净的“0”会被叠上一个正尖峰,本来干脆的“1”会被叠上一个负尖峰,眼图直接塌了。
我处理过的一个案子,一根 200 mm 的视频时钟线紧贴着数据线走,串扰让数据眼宽缩小了 15%,把两根线拉开到 3W 间距(W 是线宽)后恢复到 95% 以上。所以长线布线里,“拉开间距、减少平行长度”这一步,比事后加电容补救有效得多。
4. 参数计算与设计阶段控制
4.1 单位延迟怎么自己算
很多人只记结论,不知道原理。其实单位延迟的公式非常干净:
t_pd = 85 × √εeff (单位:ps/inch)或者用毫米:
t_pd = 3.33 × √εeff (单位:ps/mm)拿这个公式套一下,FR-4 表层微带线 εeff ≈ 3.5:
t_pd = 3.33 × √3.5 ≈ 3.33 × 1.871 ≈6.23 ps/mm
内层带状线 εeff ≈ 4.3:
t_pd = 3.33 × √4.3 ≈ 3.33 × 2.074 ≈6.9 ps/mm
跟我前面给的经验值完全吻合。所以你自己设计时,哪怕不知道板厂的精确叠层参数,用 6 ps/mm 和 7 ps/mm 这两个数估算,误差完全在可接受范围内。
4.2 特征阻抗与线宽的关系
长度影响反射,但反射的严重程度还取决于阻抗是否连续。同一条线上,如果中途线宽变了、参考平面挖空了、过孔换层了,都会带来阻抗突变,反射就在那个点上发生,跟长度无关——但线越长,反射波从突变点跑到端头再跑回来,越容易在采样时刻出现。
所以设计阶段的动作是:先定叠层,算出目标阻抗对应的线宽,再从头到尾一致地走。常见的目标阻抗:单端 50 Ω,差分 90 Ω(USB)、100 Ω(PCIe、以太网)。
一个粗略参考(具体必须以板厂叠层为准):普通四层板,介质厚 0.2 mm、铜厚 1 oz 时,单端 50 Ω 微带线宽大约在 0.35~0.4 mm 之间。这个数只能当起点,最终必须让板厂用阻抗计算器(比如 Polar SI9000)给你算。
4.3 定好“长度预算表”再布线
这是我强烈推荐的一个习惯:布线前先做一张长度预算表,把每一组的约束写清楚,再交给 Layout 的人。表格长这样自用就行:
| 网络组 | 参考信号 | 长度差上限 | 绝对长度上限 | 依据 |
|---|---|---|---|---|
| DDR3 DQ0-DQ7 | DQS0 | ±2 mm | 视拓扑 | 1.25 ns 周期,窗口小 |
| RGMII TXD | TX_CLK | ±5 mm | 120 mm | 125 MHz,裕量尚可 |
| USB2.0 D+/D- | 互为参考 | ±0.15 mm | 100 mm | 差分对内偏斜 |
| SPI SCK | 无 | 尽量短 | — | 20 MHz 低速 |
不写这张表,Layout 工程师就会按自己的理解去做,等板子回来出了问题再返工,成本是十几倍。
4.4 等长绕线的正确姿势
等长不是随手绕,绕不好反而更糟。几个实测总结出来的原则:
- 绕在靠近接收端的位置,不要在源端附近绕。因为绕线的目的是补偿传播延迟,让信号到接收端时相位对齐;
- 用“小波浪”而不是“大 U 形”。每个凸起的高度建议不超过 3 倍线宽,一组绕线里的凸起数量尽量均匀;
- 差分对内不要靠绕线补长度,差分对内的长度差应该通过调整两条线的相对弯曲来消化,绕线会破坏差分对的耦合结构;
- 绕线区域要留足参考平面,否则阻抗还是断的。
我见过一个失败的等长设计:为了补 8 mm 的长度差,在源端绕了七个大 U 形,结果绕线区段因为间距太密产生了严重自耦合,眼图比不绕还差。所以等长是手段,不是目的,目的永远是“让接收端看到干净的信号”。
5. 实测验证与常见问题排查
5.1 用示波器量什么、怎么看
眼睛看不到的东西,示波器能看到。判断一根走线的信号质量,我通常看这几个指标:
- 过冲幅度:峰值超过稳态值多少。超过 10% 就要警惕;
- 振铃持续时间:从峰值衰减到稳态 ±5% 需要多久,最好小于上升时间;
- 单调性:上升沿有没有回沟。有回沟说明反射波在采样点之前就到了,是典型的长线问题;
- 眼图:眼高、眼宽、抖动。
探头上,测高速信号一定要用低电容有源探头,普通无源探头 10 pF 的负载电容会把信号本身改得面目全非,这是我踩过的坑,用无源探头测出来的振铃有一大半是探头引入的。
5.2 常见问题速查表
| 现象 | 可能原因 | 排查方向 | 解决手段 |
|---|---|---|---|
| 上升沿有回沟 | 传输线未端接,反射波提前到达 | 量走线实际长度,算往返延迟 | 加串联/并联端接,缩短走线 |
| 过冲严重、振铃久 | 阻抗严重失配 | TDR 看阻抗曲线 | 调整线宽,检查参考平面完整性 |
| 数据误码但眼图看着还行 | 长度差导致的时序问题 | 算最坏长度差,比对时序窗口 | 等长绕线,重新规划拓扑 |
| 某些板子好某些差 | 批次间阻抗波动 | 让板厂提供阻抗测试报告 | 明确标注阻抗要求,做好来料管控 |
| 高频信号到远端几乎消失 | 损耗过大 | 量远端眼高 | 换低损耗材料,缩短走线,加均衡 |
5.3 我踩过的几个坑
坑一:只信仿真不信实测。早期我用仿真软件跑一个 8 层板的高速链路,结果一切完美,板子回来眼图一塌糊涂。后来发现问题出在仿真里没用板厂的实际叠层和铜箔粗糙度参数,仿真用的是理想参数,差得远。仿真指导方向,实测才是判据。
坑二:为了省层数让信号穿层太多。换一次层就是一个过孔,一个过孔就是一次阻抗不连续,来回换几次,延迟比单纯长度大得多。所以在做长度预算时,我一直建议把过孔也折算成等效长度——一个普通通孔在 FR-4 里大致相当于 1.5~2 mm 的走线延迟。
坑三:忽视了走线的“实际长度”不等于“设计长度”。Layout 软件里报的长度是中心线长度,实际走线宽度、铜厚、丝印覆盖都会让电长度略有偏差。这个偏差通常可以忽略,但对于 DDR4 这种皮秒级窗口,就必须用厂家提供的场解算器给出的精确值。
坑四:端接电阻位置放错。串联端接必须靠近源端,并联端接必须靠近接收端,位置错了等于没端接。我第一次做端接时,把串联电阻放在了离驱动芯片 3 cm 的地方,结果反射照旧。
5.4 排查流程建议
真的遇到问题,建议按这个顺序走:
- 先算:拿实际走线长度和单位延迟,算出往返延迟和理论振铃周期,心里有个数;
- 再测:示波器抓波形,看是不是符合理论;
- 定位:用 TDR 找出阻抗不连续点,通常就是过孔、焊盘、线宽变化的地方;
- 验证:改一版,实测比对,形成闭环。
6. 不同信号类型的长度约束实战
6.1 时钟信号:优先短、优先端接
时钟是所有信号里最“娇气”的,因为它的翻转频率最高、被采样最多。对时钟线我的原则是:能短则短,实在长就加端接。一根超过 50 mm 的时钟线,如果没有端接,振铃几乎是必然的。
另外,时钟线尽量走内层、避开分割地平面、避免跨分割。跨分割会导致回流路径被切断,形成大环路,既是信号质量问题也是 EMI 问题。
6.2 差分对:控偏斜比控长度更重要
差分对的两个指标:对内偏斜和对间偏斜,对外偏斜通常控制在 ±0.1~0.2 mm 量级,对间偏斜看具体协议。很多人以为差分配对“长度必须完全相等”,其实不是,允许微小差异,只要不影响共模抑制能力即可。
差分对的两条线要等长、等间距、同层走、同拓扑,任何一条变了,另一条也得跟着变。我见过有人为了避孔把 P 线绕了个弯、N 线没绕,结果共模噪声大增,辐射超标,整板 EMC 重做。
6.3 并行总线:拓扑决定长度策略
并行总线的长度控制不是单根线的游戏,而是拓扑问题。常见的拓扑有:
- 菊花链(Daisy Chain):适合单向、点对点为主的场合,长度控制相对宽松;
- 星形(Star):各支路等长,末端端接,适合多负载;
- T 型分支:分支点必须尽量短,分支过多会带来多反射点,一般不推荐用于高速。
DDR 里常用的是 Fly-by 拓扑,它的核心思想是时钟/地址/命令按顺序经过每个颗粒,用时间去“换长度”,端接在最后一个颗粒之后。这种拓扑下,DQ 到 DQS 的长度差控制和 CK 到各颗粒的相位关系是两个独立的设计任务,必须分开做预算。
6.4 低速控制信号:可以做“宽容处理”
不是所有信号都要严格等长。像 I2C、UART、复位、使能这些信号,边沿慢、频率低,长度容忍度非常高。一根 30 cm 的复位线,如果不考虑噪声耦合,几乎可以不端接。
我的做法是分级对待:把板子上的网络分成“高速组、中速组、低速组”,把精力集中在高速组上。用统一的标准去要求所有信号,最后的结果往往是关键信号没做好、普通信号过度设计,得不偿失。
7. 设计规范与团队协作的落地建议
7.1 把长度约束写进设计规则
好的团队会把长度约束做成可执行的设计规则,而不是写在文档里、靠人自觉。EDA 工具里可以设置:
- 最大长度(Max Length):超过就报警;
- 差分对内最大偏斜(Intra-pair Skew):对差分对特别有用;
- 相对长度规则(Relative Propagation Delay):指定某一根线为基准,其他线相对它的允许范围。
规则设好后,布线时一旦违规立刻报警,比事后检查有效得多。
7.2 用 DCR 报告量化检查
DCR(Design Constraint Report)是布线完成后导出的约束检查报告。它会列出每一组网络的约束、实际值、是否通过。我审板子时,第一件事就是看 DCR,重点盯这几项:
- 时钟线长度是否在预算内;
- 差分对偏斜是否合格;
- 并行总线长度差是否达标;
- 有没有网络因为“无法满足”被自动放宽。
任何一条被放宽的约束,都得问清楚原因。
7.3 和 Layout 工程师的沟通要点
硬件工程师和 Layout 工程师的关系,我很喜欢用一个比喻:硬件是设计师,Layout 是工匠。工匠能做出漂亮的活,但前提是设计师的图纸清楚。
给 Layout 的约束,我建议写清四件事:哪一组网络、以谁为基准、允许差多少、为什么。特别是最后一项,写清原因后,Layout 会在绕线策略上做出更合理的判断,而不是机械地执行。
8. 一些实操体会与经验小结
写到这里,我把这些年跟走线长度打交道的心得汇总一下,希望对你有用。
第一条,也是最重要的一条:走线长度是设计变量,不是布线时才想起来的事儿。一块板子能不能跑起来,在原理图和叠层阶段就基本定了,等到 Layout 阶段才考虑长度,很多约束已经满足不了了。
第二条,学会算,比学会用工具更重要。仿真工具、阻抗计算器都是工具,但你知道 6 ps/mm 这个数从哪来、什么时候用得上,比会点软件里的按钮值钱得多。
第三条,长度只是众多约束中的一个,它和阻抗、串扰、EMI、工艺是耦合的。优化一个指标时,一定要看看会不会把另一个搞坏。等长绕线可能引入自耦合,加粗线宽可能降低阻抗,缩短走线可能撞到禁布区,这些都是常见的连锁反应。
第四条,实测比什么都靠谱。仿真和计算能帮你缩小范围,但真正决定成败的是示波器和 TDR 上的波形。一块板子跑得好不好,最终要看数据,不看 PPT。
第五条,别迷信“越短越好”。有些场合(比如需要延迟匹配的时钟树、某些时序补偿结构),线长本身就有意义,删掉反而错。长度是为功能服务的,短只是其中一种手段。
最后分享一个小技巧,也是我常用的:做任何长度相关的设计前,先在纸上画一条数轴,把所有相关的时序项、延迟项、偏差项都换算成时间标上去,一眼就能看出那块“还能用的空间”还剩多少。比在脑子里来回切换英制公制、皮秒纳秒要清爽得多。
如果你手头正好有一块因为信号质量反复出问题的板子,不妨从“把每根关键线的时间延迟算一遍”这个动作开始。很多看起来玄学的问题,算完那一步,答案就出来了。