ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AD18差分线设计与等长控制全攻略:从规则设置到DDR/PCIe实战

AD18差分线设计与等长控制全攻略:从规则设置到DDR/PCIe实战 做高速板子这些年差分线一直是新人最容易卡壳的地方。尤其是从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是90HDMI和千兆网是100PCIe是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或者直接用快捷键PI光标会变成米字叉这时候点击差分对中任意一个焊盘AD会自动匹配这一对网络并开始布线。布线的过程中两条线会同时拉出间距由规则中的Gap值约束走线流畅性比早期版本好很多。布线时几个实用操作要记住ShiftR可以在多种布线模式间切换比如忽略障碍、推挤障碍、绕开障碍这个在差分对密集区域布置时非常有用按ShiftW可以快速切换线宽走线遇到换层按*键自动打过孔换层两个过孔会成对出现。在差分对布线状态下按Tab键可以打开属性面板实时调整线宽线距不过我建议调整完之后赶紧恢复否则容易产生DRC报错。手动布线的核心思路是先走完一对关键信号再走其余。比如PCIe的收发差分对先把传输线尽量走直走短过孔数量控制在两个以内然后再去处理次要信号。差分线在空间紧张时可以适当绕但不要为了美观强行对称电气性能永远优先。2.4 AD15/AD16/AD18版本差异注意很多老工程师是从AD15、AD16转过来的到了AD18最大的不适是界面逻辑变了。AD15/AD16的Design Classes、Design Rules这些菜单入口在AD18里还保留但属性面板变成了右侧的Properties浮动面板很多设置从对话框改成了即时编辑找起来容易蒙圈。这里分享一个高效办法AD18右下角有个小搜索框直接输入命令名就能拉出对应功能。比如输入Differential Pairs、Length Tuning命令就出来了省得去翻各种菜单。快捷键大体延续老版本差分对布线PI、等长调节TR、全屏缩放ZA这些都没变。AD18对差分对布线的引擎也有优化推挤更智能自动等长的过渡弧线处理得更圆润画出来的蛇形线比旧版好看不少。如果还在用AD15手动布差分线的方法是类似的只是规则对话框是传统风格没有右侧面板那么直观。但_P/_N命名规则和差分对编辑器是从很早的版本就有的核心流程完全通用。所以这篇博文里讲的绝大多数内容在AD15、AD16上也成立只有菜单位置和面板形式有差异。3. 差分等长控制实操交互式等长调节与参数设置3.1 设置匹配长度规则的两种方式等长控制不是等画完线再手工比长短而是先定好规则让工具帮你盯着长度差。第一种方式是在规则里设置High Speed Matched Length把需要等长的一组网络放进一个网络类然后设置目标长度和容差。比如DDR地址线类目标长度设成该类里最长那一根的值或者更精确地说以最关键的信号为基准容差设正负25milAD就会把超长和超短的线都高亮提示出来。第二种方式是在交互式等长调节工具里直接输入目标长度。这个方式更灵活适合单对线或者小批量调整。执行Route Interactive Length Tuning快捷键TR点击线上任意位置再按Tab弹出的属性面板里可以填目标长度工具会在走线空间内自动伸展蛇形线直到达标。我的习惯是先用Matched Length规则把组内网罗列好然后再逐条用TR精调两手缺一不可。3.2 交互式等长调节工具使用详解等长调节的操作核心就一条命令TR。在AD18里选中一根需要调长度的线单端、差分对都行按TR然后在这根线上点一下移动鼠标蛇形线就会顺着你的鼠标方向展开。手机端的状态栏会实时显示当前长度和目标的差距非常直观一边拖一边看数字变化就行。关于目标的设置建议用Absolute Target直接把最长线或基准线的长度填进去这样工具自动匹配到目标值。AD18还支持按照规则的Matched Length约束来自动识别目标但实际用下来手动填数字可控性更强。调整过程中如果发现蛇形线的振幅太大或者间距太小用快捷键可以实时修改。这里标记一下ShiftA可以循环切换四种绕线样式分别是锯齿形、圆角锯齿形、圆弧形、自动形[和]调整振幅大小,和.调整蛇形间距具体键位在调整时看状态栏提示即可不同小版本的快捷键会有细微差别。绕线不是越多越好。如果一根线需要绕的长度非常大说明这条线本身布局就有问题因为绕线只会增加串扰和辐射。推荐的做法是给每一根差分线预留足够的调整空间让蛇形线之间的间距至少满足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中不满足等长约束的网络会被标成高亮。然后逐条用TR调调一条少一条。实际调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的画线和等长功能确实成熟但真正决定板子质量的还是你对信号原理的理解和提前规划。每次布线前花十分钟把叠层参数、差分对命名、规则优先级全部理清楚比画完再返工高效得多。希望大家都能顺手画出漂亮的差分线一次打板成功。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进