做高速板子这些年,差分线一直是新人最容易卡壳的地方。尤其是从AD15、AD16一路用过来,到AD18界面大变样,很多老朋友也会在差分线的规则设置和等长控制上栽跟头。我见过不少人画完了差分线,阻抗不对、等长没做,板子打回来直接被硬件工程师一顿灵魂拷问。这篇东西就不绕弯子了,直接把AD18里差分线该怎么画、等长又该怎么调这件事拆开了讲,顺手把DDR地址线等长、PCIe这类场景里那些容易踩的坑也一起说清楚。
1. 动手之前先理清:差分线为什么要做等长
1.1 差分信号的工作原理与核心优势
差分信号说白了就是一对等幅、反相的信号,在接收端比对的是两条线之间的电压差,而不是各自对地的绝对电压。这个设计天生就有两个好处:一是抗共模干扰能力强,外部噪声同时叠加在两条线上,做差之后噪声被抵消掉了;二是对外辐射更小,两条线上电流方向相反,产生的电磁场在空间上相互抵消,EMI表现比单端线好得多。
所以高速接口基本清一色用差分对,USB、HDMI、PCIe、千兆网、LVDS、DDR的时钟和选通信号,全是这个套路。你去看板卡上的走线,凡是成对出现、贴着走、过孔还对称的,八成就是差分线。这里要记住一个关键词:一致性。从驱动端到接收端,P和N两条路径必须尽可能保持一致,传播延迟差得多,信号质量就会崩。
1.2 等长控制的两种维度:对内等长与对间等长
等长这件事很多人一上来就懵,其实要分两个层面来看。第一层叫对内等长,指的是同一条差分对里面,P线和N线的长度差要控制在很小的范围内。因为差分信号靠两条线的差值工作,如果P比N长了太多,接收端采样时两条线对应的波形在时间上错位,就会产生共模分量,EMI上升,眼图闭合。一般对内长度差控制在5mil以内比较稳妥,更高要求的接口可能要1到2mil。
第二层叫对间等长,指的是多个同组信号之间,比如DDR地址线的十几根线,或者PCIe的一个lane组,彼此之间要走得差不多长。对间等长没有对内等长那么苛刻,具体多严格要看协议和时钟架构。很多新人在这里容易走极端:要么完全不管,要么所有线都死磕到一模一样,其实都不可取。
1.3 差分阻抗与线宽线距的关系
画差分线之前,还有一个躲不开的概念叫做差分阻抗。常见的接口目标阻抗有90欧姆、100欧姆、85欧姆,USB是90,HDMI和千兆网是100,PCIe是85。这个阻抗不是凭空来的,它主要取决于叠层结构、线宽、线距、介质厚度和介电常数。你可以把这两条线看作一个耦合传输系统,线宽决定单端阻抗的基础,线距决定耦合强度,线距越小耦合越强,差分阻抗也会跟着降。
实际设计时,不建议自己拿公式硬算叠层。常规做法是把目标阻抗告诉板厂,板厂会根据你的叠层帮你算出推荐的线宽和线距。你这边要做的是在AD18的规则里把这些参数填进去,让布线工具按这个约束去跑。所以第一步不是急着画线,而是把叠层确认好,把板厂给的线宽线距参数拿到手。
2. AD18差分线规则设置与手动布线实操
2.1 在原理图与PCB中定义差分对
要让AD18认出一对网络是差分关系,前提是网络命名规范。Altium默认的规则是正端以_P结尾、负端以_N结尾,比如USB_D_P和USB_D_N。命名不规范,后面所有操作都白搭,这是最基础的先决条件。
在原理图里,你可以用Place > Differential Pair放置一个差分对标记,把这对网络标出来。这样导入PCB时,AD会自动把两者归到一个差分对里。如果原理图里没做这一步,也别急,可以在PCB编辑器中手动补齐:执行Design > Differential Pairs Editor,打开差分对编辑器,点击Add,把正端网络和负端网络分别选上,同样能生成差分对。这是我在AD18里最常用的补救手段,因为很多老项目原理图根本没有放置差分对标记,直接PCB端定义反而更快。
定义好之后,可以打开PCB面板,在Differential Pairs类别下看到所有差分对和各自的长度信息。这里就能直观地看到每对线的长度差,后续做等长的时候,这个面板就是我盯得最多的地方。
2.2 差分走线规则设置:线宽、线距与阻抗
差分对建好之后,下一步是设置布线规则。执行Design > Rules,在High Speed > Differential Pairs Routing里配置。这一栏里需要填三个关键参数:线宽(Width)、线距(Gap)、耦合距离。线宽和线距的Min、Preferred、Max三个值,按照板厂推荐来填就行。如果真的不知道填多少,可以先按常规经验值设一个基础值,比如100欧姆差分阻抗、1.6mm板厚、JLC7628叠层,1mm线宽/0.127mm线距附近比较常见,但不同叠层差异很大,务必以板厂数据为准。
规则设置里有个优先级问题值得注意。如果板子上同时存在需要90欧姆和100欧姆的差分线,比如一个设计里既有USB又有HDMI,必须建两个不同的差分规则,用Where The Object Matches条件分别指定各自的网络类或差分对,再把优先级调对,否则AD只会按最高优先级那一条规则跑。我用AD18时习惯把阻抗敏感的差分线单独放一个网络类,规则条件直接指向这个类,清晰又不容易误伤其他走线。
2.3 手动布差分线的完整流程
规则配好后,手动布线的操作就简单了。在AD18的PCB里,执行Route > Differential Pair,或者直接用快捷键P+I,光标会变成米字叉,这时候点击差分对中任意一个焊盘,AD会自动匹配这一对网络并开始布线。布线的过程中,两条线会同时拉出,间距由规则中的Gap值约束,走线流畅性比早期版本好很多。
布线时几个实用操作要记住:Shift+R可以在多种布线模式间切换,比如忽略障碍、推挤障碍、绕开障碍,这个在差分对密集区域布置时非常有用;按Shift+W可以快速切换线宽;走线遇到换层,按*键自动打过孔换层,两个过孔会成对出现。在差分对布线状态下,按Tab键可以打开属性面板,实时调整线宽线距,不过我建议调整完之后赶紧恢复,否则容易产生DRC报错。
手动布线的核心思路是:先走完一对关键信号,再走其余。比如PCIe的收发差分对,先把传输线尽量走直走短,过孔数量控制在两个以内,然后再去处理次要信号。差分线在空间紧张时可以适当绕,但不要为了美观强行对称,电气性能永远优先。
2.4 AD15/AD16/AD18版本差异注意
很多老工程师是从AD15、AD16转过来的,到了AD18最大的不适是界面逻辑变了。AD15/AD16的Design > Classes、Design > Rules这些菜单入口在AD18里还保留,但属性面板变成了右侧的Properties浮动面板,很多设置从对话框改成了即时编辑,找起来容易蒙圈。
这里分享一个高效办法:AD18右下角有个小搜索框,直接输入命令名就能拉出对应功能。比如输入Differential Pairs、Length Tuning,命令就出来了,省得去翻各种菜单。快捷键大体延续老版本,差分对布线P+I、等长调节T+R、全屏缩放Z+A这些都没变。AD18对差分对布线的引擎也有优化,推挤更智能,自动等长的过渡弧线处理得更圆润,画出来的蛇形线比旧版好看不少。
如果还在用AD15,手动布差分线的方法是类似的,只是规则对话框是传统风格,没有右侧面板那么直观。但_P/_N命名规则和差分对编辑器是从很早的版本就有的,核心流程完全通用。所以这篇博文里讲的绝大多数内容,在AD15、AD16上也成立,只有菜单位置和面板形式有差异。
3. 差分等长控制实操:交互式等长调节与参数设置
3.1 设置匹配长度规则的两种方式
等长控制不是等画完线再手工比长短,而是先定好规则,让工具帮你盯着长度差。第一种方式是在规则里设置High Speed > Matched Length,把需要等长的一组网络放进一个网络类,然后设置目标长度和容差。比如DDR地址线类,目标长度设成该类里最长那一根的值(或者更精确地说,以最关键的信号为基准),容差设正负25mil,AD就会把超长和超短的线都高亮提示出来。
第二种方式是在交互式等长调节工具里直接输入目标长度。这个方式更灵活,适合单对线或者小批量调整。执行Route > Interactive Length Tuning(快捷键T+R),点击线上任意位置,再按Tab,弹出的属性面板里可以填目标长度,工具会在走线空间内自动伸展蛇形线直到达标。我的习惯是先用Matched Length规则把组内网罗列好,然后再逐条用T+R精调,两手缺一不可。
3.2 交互式等长调节工具使用详解
等长调节的操作核心就一条命令:T+R。在AD18里,选中一根需要调长度的线(单端、差分对都行),按T+R,然后在这根线上点一下,移动鼠标,蛇形线就会顺着你的鼠标方向展开。手机端的状态栏会实时显示当前长度和目标的差距,非常直观,一边拖一边看数字变化就行。
关于目标的设置,建议用Absolute Target,直接把最长线(或基准线)的长度填进去,这样工具自动匹配到目标值。AD18还支持按照规则的Matched Length约束来自动识别目标,但实际用下来,手动填数字可控性更强。调整过程中如果发现蛇形线的振幅太大或者间距太小,用快捷键可以实时修改。这里标记一下:Shift+A可以循环切换四种绕线样式,分别是锯齿形、圆角锯齿形、圆弧形、自动形;[和]调整振幅大小,,和.调整蛇形间距,具体键位在调整时看状态栏提示即可,不同小版本的快捷键会有细微差别。
绕线不是越多越好。如果一根线需要绕的长度非常大,说明这条线本身布局就有问题,因为绕线只会增加串扰和辐射。推荐的做法是:给每一根差分线预留足够的调整空间,让蛇形线之间的间距至少满足3倍线宽,这样即使绕了长距离,串扰也在可控范围内。我一般会把差分线的绕线幅度控制在20到30mil之间,间距保持在15mil以上,效果比较稳定。
3.3 等长绕线样式选择与避坑
等长调节有四种样式可选,各有各的使用场景。锯齿形(Mitered)绕线是直角折线,占用空间小,但在高速场景下直角带来的阻抗变化不容忽视,建议只用于低速信号。圆角锯齿形(Mitered with Arcs)是锯齿形的优化版,转角处用圆弧过渡,信号质量更好,是我在DDR走线时的首选。圆弧形(Rounded)走线像波浪一样,平滑度最高,但占用空间最大,适合空间充裕的信号。自动形(Auto)让AD自己判断,大多数时候结果可接受,但特殊情况下需要手动干预。
等长绕线最容易踩的坑有两个,一个是绕线间距太近。很多新手为了追求长度一致,把蛇形线的间距缩得很小,结果相邻线段之间产生了强耦合串扰,等长做到了,信号却变差了。经验值是蛇形线的间距至少要有3倍线宽,不同差分对之间最好拉开更大的距离。另一个坑是绕线区域横跨了参考平面分割,比如蛇形线刚好绕在一条电源分割缝隙上,这在高速信号里是致命的,走线跨分割会导致阻抗突变和严重的回流问题。绕线前先看一眼平面层,尽量把绕线区放在完整的参考平面上。
3.4 DDR地址线组等长设置案例
DDR是组等长的典型场景,地址线、控制线、时钟线都要求组内等长。以AD18为例,操作流程是这样的。先把地址线(比如DDR_A0到DDR_A15)、Bank选择线(BA0、BA1)、命令线(CAS、RAS、WE、CKE、CS)全部加入同一个网络类。执行Design > Classes,在Net Class里右键新建一个类,命名为DDR_ADD_CTRL,把网络都拖进去。
接着打开Design > Rules,在High Speed > Matched Length里新建规则,Where The Object Matches选择InNetClass('DDR_ADD_CTRL'),目标长度设为组内最长信号的值,容差先按正负25mil设。规则生效后,PCB中不满足等长约束的网络会被标成高亮。然后逐条用T+R调,调一条少一条。
实际调DDR地址线时,我的经验是先确定基准线。通常选时钟信号或最长的地址线作为基准,因为地址线长度以时钟线为参照才能保证建立保持时间,这个细节很多人不知道。另外,DDR数据线组是单独的一个等长组,不要和地址线混在一起,数据线组内等长要求通常更高,容差常在正负5mil到10mil。做DDR的时候,ADS里仿真验证也值得做,等长只解决了时序问题,信号完整性还需要叠层和阻抗配合。
4. 常见问题与排查技巧实录
4.1 差分对无法布线的典型原因
新人问得最多的就是:为什么我执行差分布线命令,点击网络却没有任何反应?我排查过几十个这样的案子,九成是以下几种原因。第一,网络命名不符合_P/_N规范,AD识别不出差分对,这个在看差分对编辑器里有没有这对网络,没有就是定义环节出了问题。第二,规则里的差分对布线使能没有打开,或者规则被更高优先级的其他规则覆盖了,导致差分布线命令没有可执行的约束。第三,差分对编辑器里虽然建了对,但网络长度或层设置有问题,比如正端和负端不在同一层,工具也不知道从哪下笔。
解决套路很简单:先开PCB面板,找到Differential Pairs编辑器,确认这对网络存在且正负端正确;再去规则里检查差分规则,确认优先级排在最前面;最后看两个焊盘是不是同一层的顶层/底层器件。把这三关过一遍,99%的情况都能解决。
4.2 等长始终调不到目标长度怎么办
有时候线已经绕得很长了,但AD状态栏显示的长度还是差了一截。这种情况我遇到的比较多,原因一般是目标长度设置得太离谱,比如你设定的目标长度比这条线实际物理可走的最短路径还短,那当然怎么绕都到不了。解决办法是重新选基准网络,把目标值改成一个合理值,或者先跑一遍规则检查,看最长线到底是什么状态。
另一个常见原因是绕线空间不足。板子布局太紧凑,绕线区域不够,蛇形线还没展开就碰到障碍物,长度自然上不去。这种问题靠调工具参数是没用的,得回到布局层面想办法。我的做法是先把板子的空间压缩一下,把关键差分线的布线通道留宽,让绕线有回旋余地。如果实在无法布开,那就只能优化拓扑,减少过孔数量、拉直路径来缩短基准长度,再去匹配其余信号。
4.3 PCIe差分对间要不要等长?对间等长的误区
关于PCIe发送差分对间需不需要等长,行业内讨论很多,这里我给出自己的结论。PCIe的差分对对内等长(P/N之间)必须做到位,5mil以内比较安全,因为这是保证差分信号质量的基础。而对间等长(lane到lane之间)并不是协议强制要求,PCIe接收端有CDR时钟恢复电路,能容忍一定的skew。所以理论上对间做不等长也能跑起来,很多参考设计甚至不做严格的对间等长。
但工程实践里我还是建议同方向lane之间的长度尽量接近。原因是PCB制造和安装的偏差、连接器的偏差等非理想因素会叠加,给CDR留出足够裕量总归是好的。对间等长的目标值不用卡太死,几十mil甚至100mil都可以接受,不像DDR那样动辄要求正负25mil。这个度怎么把握?如果空间允许,就尽量做;如果空间紧张,先保证对内等长,再考虑对间,优先级别搞反。
4.4 阻抗异常快速排查与仿真验证思路
等长做完了不代表万事大吉,差分布线最终还要过阻抗和信号完整性这关。阻抗异常最直观的排查方法是看叠层和规则参数是否匹配。如果板厂建议1mm线宽/0.127mm线距,你偏偏在规则里写成了0.5mm线宽/0.2mm线距,那布出来的线阻抗必然不对,仿真也是浪费表情。因此每块板子在布线前,我会把板厂反馈的阻抗参数汇总成一张表,贴在办公位上,规则设置时照着抄,基本不会错。
仿真验证方面,ADS是比较常用的信号完整性仿真工具,可以做差分线的S参数、眼图和时域反射分析。做ADS仿真前,需要从AD里导出差分线的IPC-2581或ODB++文件,导入到专门的SI工具中进行网格划分和后处理。实际操作中,很多设计师不自己做仿真,而是把版图发给SI工程师或板厂,让他们出报告。即便如此,你也要看得懂报告的结论,TDR曲线哪里有突变、眼图够不够开、裕量还剩多少,心里要有数。
4.5 常见问题速查表
| 现象 | 主要原因 | 快速解法 |
|---|---|---|
| 差分布线命令无效 | 未定义差分对或规则未使能 | 检查差分对编辑器与规则优先级 |
| 等长调不到目标值 | 目标设置不合理或绕线空间不足 | 重新选定基准线,释放布线空间 |
| 绕完后DRC报间距错误 | 蛇形线间距太小或碰到障碍物 | 调大蛇形线间距,绕线区留足空间 |
| 对间长度差异大 | 未做lane之间长度匹配 | 以最长的lane为基准,统一调整 |
| 差分线阻抗偏低/偏高 | 线宽线距参数与叠层不匹配 | 按板厂推荐参数重新设置规则 |
| 换层后信号恶化 | 回流路径不连续,缺地孔 | 在过孔旁加地孔,保证连续回流 |
这些问题大部分来源于我自己的设计过程,每次解决之后,我都会把现象和原因记录在项目笔记里。有了这张表,遇到类似问题基本几分钟就能定位,不用每次重新踩一遍坑。
最后再分享一个小技巧。从AD15一路用过来,我最大的体会是差分线设计从来不是单靠一款工具的,AD18的画线和等长功能确实成熟,但真正决定板子质量的还是你对信号原理的理解和提前规划。每次布线前,花十分钟把叠层参数、差分对命名、规则优先级全部理清楚,比画完再返工高效得多。希望大家都能顺手画出漂亮的差分线,一次打板成功。