
上周调一块FPGA核心板DDR3的差分时钟对在BGA扇出区差了整整23mil。按理说这种长度偏差几板斧就能补回来可偏偏那一带是全板最挤的地方左右全是地址线过孔下方压着一排去耦电容传统45°手风琴式蛇形绕线根本展不开绕了三次DRC都红成一片。最后是Altium Designer 20里的圆弧蛇形走线Arc Tuning Mode救了我。这篇就把具体的操作思路、参数设置和几个关键心得整理出来给同样在狭小空间里跟差分对等长死磕的板友做个参考。圆弧蛇形走线在AD20里不是什么新功能但很多人平时只用默认的Accordion手风琴式和Sawtooth锯齿式一到高密度板卡上就绕不出来。原因很简单锯齿式和手风琴式在拐角处都是锐角或钝角折线阻抗突变大而且几何上占用的横向空间非常死板。圆弧式的优势在于过渡段是真正的圆弧信号经过时阻抗连续性更好同时在狭小区域里可以通过调节圆弧半径和振幅挤出更多可用的绕线空间。这篇文章不会讲太基础的差分对概念重点放在三件事一是狭小空间下圆弧蛇形线到底怎么设置参数才能绕出长度且不报错二是绕完之后怎么快速做等长验证和DRC收尾三是整理几个我在实际项目中踩过的、常规教程里不会写的坑。1. 为什么差分对要等长圆弧蛇形线凭什么更合适1.1 等长的本质是时序不只是长度一样差分信号是靠两根线上的电压差来传输信息的接收端比较的是正负两端信号的差值。如果两根线长度不一致正负信号到达接收端的时间就有先后这个时间差就叫intra-pair skew。skew一旦超过接收端允许的范围眼图就会闭合误码率直线上升。长度和时间怎么换算信号在FR4板材上的传播速度大约是6mil/ps也就是说每差1ps长度差大约6mil。很多DDR3接口要求差分对内部等长误差在±5mil以内换算过来就是不到1ps的偏差容忍度非常苛刻。所以等长不是差不多就行而是硬性时序指标。1.2 蛇形线是挤出来的延时补偿既然长度不够就要人为绕路把短的线补长。蛇形线的本质是在有限空间里通过折叠走线增加物理长度。折叠得越多补的长度越大但折叠本身会带来两个副作用一是相邻线段之间形成平行耦合间距太近会串扰二是拐角处的阻抗变化会反射信号。圆弧蛇形线相比45°折线的好处在哪里我拿USB 3.0的一对差分线做过对比测试同样补40mil长度45°折线蛇形在5Gbps速率下眼图的高频分量明显抖动更大而圆弧式的高频衰减更平滑。原因不复杂45°折线的拐角处电流路径突然转向等效电感变化剧烈圆弧拐角是渐变的电流路径连续反射系数低得多。1.3 圆弧式在狭小空间里的真正优势很多教程说圆弧式性能更好但在我实际体验中它最大的优势其实是几何可调性。手风琴式Accordion的绕线形状是固定的矩形齿状振幅和间距虽然能调但齿形的最小拐角受45°限制很难压进特别窄的区域锯齿式Sawtooth更不用说几乎是贴边直角走线高速差分对里基本不敢用。圆弧式则不同它的几何参数有三个自由度振幅Amplitude、间距Spacing/Gap、圆弧半径Radius。三个参数组合起来可以控制蛇形线在扁而宽和窄而高之间连续变化。在BGA扇出区、连接器后面这类一维空间特别紧张、另一维稍微有余量的区域圆弧式往往能刚好塞进去。注意圆弧式的参数组合不是随便填的。Radius如果大于Gap的一半软件会直接拒绝生成蛇形线或者生成后DRC一堆错误。这个细节很容易被忽略。2. 动手前先准备差分对规则和布线参数这样设2.1 不要绕完线才想起规则检查很多新手一上来就布线绕完线再设置规则最后DRC爆出一堆间距错误又要返工。正确顺序是先建差分对规则再布线最后调等长这样绕线过程中AD就会实时提示有没有违反规则。在AD20里打开规则面板的快捷键是DR然后找到Routing下的Differential Pair Routing。这里要设置的是差分对的目标线宽和间隙。举个例子100Ω差分阻抗、4层板、走线层为L2参考L3我常用的起点是线宽5mil、线距5mil然后根据阻抗计算结果微调。注意一个细节Differential Pair Routing规则里设置了Min和Max的Limit值布线时按住Shift切换忽略规则模式才能超出这个范围布线。狭小空间里BGA焊盘之间的空隙往往比规则里设置的线距还窄这时候要么在规则里设置高优先级的小线距规则要么布线时手动微调。我的习惯是给小区域单独做一条规则用Where The First Object Matches限定到某个Room或某个Net Class不要全板放宽。2.2 把差分对加进类里后面验证才方便在AD20里差分对默认会形成一个Differential Pair类。打开菜单Design - Classes在Differential Pair Class里可以看到所有差分对。强烈建议在这里把差分对命名规范好比如CLK_P/N、USB_TX_P/N这样后面在PCB面板里按类查看长度时一目了然。同时建议在建好差分对后顺手设置Network Class把相关的DDR数据线、地址线分到一个类里。等长调节工具支持对整个类的网络做批量匹配没有Class管理的话后期做组内等长会非常痛苦。2.3 布线时的推挤模式选择AD20的交互式差分对布线快捷键PID默认是推挤模式。在狭小空间里布线推挤模式经常把旁边的线挤歪这时候可以按ShiftR切换模式循环直到变成忽略障碍物或绕过障碍物。我的经验是绕线前用忽略障碍物模式把差分对大致走通长度调谐时再打开推挤模式让软件自动避让这个顺序最顺畅。还有一个实用技巧布线时按快捷键3可以切换差分对的走线宽度和间距到实际规则值布线前先按一下让两条线的间距在视觉上贴近真实规则后面调等长时更直观。3. 狭小空间下的圆弧蛇形走线实操AD20完整操作路径3.1 找到正确的长度调节工具AD20里有好几个跟Length相关的工具别找错了。我们要用的是Interactive Length Tuning菜单路径是Place - Interactive Length Tuning快捷键是TR。选中这个工具后点击需要调等长的走线如果是差分对点击其中任意一根即可软件就会识别整条网络并进入等长调节模式。在点击走线之前按Tab可以打开等长调节属性面板。这个面板里最关键的是几个参数Target Length目标长度、Tolerance容差、Style绕线样式以及在Style选为Arcs时出现的Amplitude振幅、Spacing间距、Radius圆弧半径。3.2 Target Length怎么定不是拍脑袋很多人直接把Target Length填成较长那根线的长度其实不对。正确的做法是先测量长的那根线的实际长度再留出10%~15%的余量让短的那根也略长于理论值。为什么因为走线路径不可能完全笔直稍微留余量后续万一要挪动走线、增加过孔长度还有缓冲。测长度的方式有两种一是用报告菜单里的Measure Selected Objects快捷键CtrlM二是打开PCB面板在Differential Pairs类的列表里直接看每对差分对的Length列。后者更直观还能看到Delta差值调等长时把Delta列调成接近0就行。如果同时选中多对差分对比如DDR3的数据组目标长度取所有线里最长的那一根作为基准其他线全部向它靠拢这是组内等长的标准做法。3.3 参数面板详解Arcs模式到底怎么填进入Arcs模式后面板上会出现三个几何参数。我直接给一组实测可用的起始值再解释调整逻辑参数推荐起始值调整逻辑Amplitude振幅25~40mil振幅越大每段绕线补的长度越多但占用的横向空间越大Spacing间距≥3倍线宽间距过小会导致平行段耦合增强信号完整性劣化Radius圆弧半径8~12mil半径越大过渡越平滑但蛇形线整体高度会变高这三个参数的几何约束Radius ≤ Spacing / 2。如果Radius填得太接近Spacing的一半甚至更大AD会生成不了圆弧或者生成的圆弧间出现重叠DRC报间距错误。调整技巧进入等长调节模式后鼠标拖动可以展开蛇形线但参数需要在Tab面板里改。不想反复开面板的话可以用快捷键微调逗号(,)和句号(.)减小/增大振幅M和N减小/增大间距ShiftA切换蛇形线的绕线方向沿走线方向展开还是垂直走线方向展开实际绕线时鼠标移动的方向决定了蛇形线的展开方向。在狭小空间里我建议让蛇形线沿走线方向展开这样横向占用最小。按ShiftA在两种方向间切换多试几次就能找到最适合当前区域的方向。3.4 狭小空间的操作策略就近绕线还是延后补偿绕线时第一个要考虑的问题是在哪个位置绕两个极端方案方案一是就近绕在长度差出来不远的地方立刻绕。优点是局部解决不影响其他地方但缺点是一般芯片引脚附近都是高密度区根本没有绕线空间。方案二是延后绕把线先很自然地从芯片区走出来走到开阔区域再集中补偿。这个方案在空间上最宽裕但需要长度差不太大而且后面如果还有别的线要绕容易互相打架。我的经验是两者结合如果长度差小于30mil尽量在空间相对宽松的走线中途绕如果差得比较多50mil以上就考虑把线走到过孔附近、连接器后侧这些死角位置绕。在AD20里这个操作并不复杂用TR点击走线后把鼠标移到目标绕线区按住左键拖动蛇形线会在鼠标位置展开调节到预期长度后松开即可。3.5 多层板里利用换层争取绕线空间如果表层空间确实不够还有一个思路换层绕线。在走线中途打一对过孔注意是差分对同时换层不是单线换层到内层开阔区域绕完长度再打孔换回来。但这里有个很大的坑过孔本身是阻抗不连续点高速差分信号每过一个过孔反射和损耗都会增加。所以这个方案只适合低速差分信号比如I2C、RS485这类或者长度差实在太大、表层挤不出任何空间的情况。10Gbps以上的SerDes差分对我强烈不建议为了等长去额外打过孔。换层的另一个风险是参考平面切换。如果要从L2换到L4走线必须确保L3是完整的地平面否则返回电流路径被切断等长反而是次要矛盾了。4. 绕完不算完等长验证与DRC收尾4.1 用PCB面板快速看长度和偏差绕完蛇形线之后第一件事是打开PCB面板在类列表里选择Differential Pairs。这里每一对差分对会显示Positive Length和Negative Length还有两者的差值。正常情况下Delta列会在你设置的容差范围内显示为绿色超出范围则是红色。除了面板更直观的方式是直接看走线颜色。AD20有一个走线长度可视化功能在PCB面板的Differential Pairs类中右键任意差分对选择Select Nets然后在View Configuration面板快捷键L里找到Net Coloring可以按长度显示渐变色过短标红、适中标绿、过长标蓝。这个功能在调等长时非常好用能一眼看出哪一对还没校到位。4.2 怎么给DRC加一个等长规则长度调谐只是把几何长度补齐了但DRC里不会自动有等长规则。要让软件检查差分对等长需要手动添加规则打开Design - Rules找到Routing下的Net Length规则。新增一条规则在Where The First Object Matches里选择All Differential Pairs或者指定具体的差分对网络。设置Min和Max Length。Min设为目标长度减容差Max设为目标长度加容差。比如目标长度1000mil容差±5mil就填995mil和1005mil。设置完成后运行DRC快捷键TDR如果哪对差分对长度超标DRC会直接报告是哪根线偏长或偏短比肉眼核对高效得多。4.3 圆弧蛇形走线最容易误报的几个DRC错误绕线都绕完了DRC一跑可能蹦出十几条错误很多是蛇形线特有的。最常见的几种间距冲突圆弧蛇形线的圆弧段和相邻平行段间距不够尤其是Radius设置过大时圆弧顶端容易贴近旁边的线段。解决办法是回Tab面板把Radius调小或者把Spacing调大。同网络间距错误蛇形线自身相邻的折叠段属于同一个网络但AD的默认间距规则会把它当成两个导体来检查。如果出现这类错误检查Spacing规则里是否是Same Net Only设置为禁用或者给这个差分对单独设置Same Net间距规则。走线角度规则报错圆弧蛇形线里的圆弧段在电气几何上其实是短线段拟合的如果最小角度规则设置得太严比如不允许小于90°可能会误报。AD的圆弧拟合默认精度下一般不会触发但如果你自己手调过圆弧精度Tool - Preferences - PCB Editor - Interactive Routing就可能出现。4.4 绕完后重新检查差分阻抗了吗这是我最想强调的一点很多人等长调完就急着出Gerber忘了检查差分对经过蛇形区域后阻抗是否还满足要求。虽然圆弧蛇形线本身阻抗连续性比45°折线好但如果蛇形线的Spacing设置得太小平行段之间的耦合会改变差分阻抗的实测值。在狭小空间里Spacing往往被压得很小这时仿真时看到的阻抗可能从100Ω掉到85Ω左右。所以规则里如果设置了Min/Max Impedance绕完线一定要重新跑一遍阻抗检查或者至少用阻抗计算器比如Saturn PCB Toolkit或AD自带的Impedance Calculator按实际蛇形线间距重算一次。如果阻抗超了优先把Spacing调到3倍线宽以上空间实在不允许就减少蛇形线的折叠段数改在别处再绕一点长度不要在一个地方死磕。5. 我在实际项目中踩过的坑和总结的经验5.1 圆弧蛇形线绕太密反而是负优化我见过有人为了在极狭小空间里补长度把蛇形线的Spacing压到和线宽一样绕了七八个折叠段长度是补够了结果信号完整性测试时眼图质量还不如不等长的版本。原因就是平行段之间耦合太严重差分对内的高频分量被互相干扰。我的经验值差分对线宽5mil、间距5mil时蛇形线的Spacing不要小于15mil正好3倍线宽振幅控制在25~40milRadius取8~12mil。这个组合在大多数4层板、6层板上都够用而且DRC不容易报错。如果你的板子空间连这个组合都塞不下那就不要硬绕考虑调整布局或者换层。5.2 Radius和Spacing的卡死现象AD20在Arcs模式下有个比较隐蔽的问题当Radius设置为某个值后如果后续修改Spacing导致半径条件不成立软件不会主动帮你改Radius而是生不出蛇形线鼠标怎么拖都没反应。很多人以为软件卡死了其实是几何参数自相矛盾。解决办法很简单在Tab面板里先把Radius调成0再把Spacing调到目标值最后重新设置Radius。或者先切换一下Style比如从Arcs切到Accordion再切回来让软件重新解析一下几何参数。这个假死现象在AD20.0/20.1几个版本里比较常见后续版本我没怎么遇到了。5.3 走线绕完后蛇形线挡住了旁边的过孔这是狭小空间调等长时最高频的翻车现场蛇形线刚绕好旁边原来能走的一排过孔被压住了DRC报错又要手动一点一点挪。省事的做法是绕线前先用ShiftR切到推挤模式Push这样生成蛇形线时AD会自动把挡路的过孔和走线推开。但推挤模式在空间极小的地方可能会把其他走线推出板边所以实际操作时我一般先用忽略障碍物模式绕好蛇形线再手动微调周围对象这样可控性更高。5.4 别忘了给蛇形线区域加禁布区外的保护如果你的板子上有结构件区域、螺丝孔、板边倒角区蛇形线绕线时很容易延伸进去。建议在绕线前先在空间特别紧张的区域放置Keepout或Room把可布线的范围框出来。这样Interactive Length Tuning生成的蛇形线会被限制在可布区域里不会等绕完了才发现压到结构件上。5.5 版本差异提醒AD20和后续的AD21/AD22/AD24在等长调节面板的界面上略有差异AD20里Style下拉菜单叫Style后续版本改成Tuning Style而且有些版本把Radius改成了Minimum Radius。另外一键切换蛇形线方向的快捷键在不同版本里也可能从ShiftA变成了别的组合键。如果你用的版本和我不一样找不到对应选项时直接在Tab面板里看有没有Arc字样就行。5.6 最后一个小技巧绕线前先规划长度绕蛇形线不是边拖边看的纯体力活先估算一下要补多少长度、需要绕几段心里有个数能省很多时间。估算方法很简单蛇形线每一段一个完整的Ω形大约能补2×振幅 - 圆弧直径的长度。振幅30mil、Radius8mil单段大约补44mil。如果差120mil大概绕三四个Ω形就够了。按这个估算去拖鼠标一次拖到位比边拖边看数字高效得多。以上是我在AD20里做差分对等长线绘制尤其是狭小空间圆弧蛇形走线的一点实操积累。里面提到的参数是我常用的起始值不一定适合所有板卡但排查思路和验证方法是可以通用的。你在自己板子上绕的时候如果也遇到类似的问题欢迎照着这个流程试一遍大概率能少走不少弯路。