ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Altium Designer差分对等长等距设计:从原理到实战

Altium Designer差分对等长等距设计:从原理到实战 做高速板这几年我最大的感触是差分对Differential Pair等长等距这件事原理图上看着就两根线真到了Altium Designer里布板却能让不少人卡上好几天。尤其是DDR地址线那类几十对网络同时做等长的时候规则设置、绕线手法、检查逻辑一环扣一环任何一步理解了偏差后面全乱。这篇文章我不想再给你堆一遍菜单截图而是从差分信号的物理原理讲起把等长、等距背后的为什么掰开揉碎再对照AD的中文界面和常用版本以AD18为基准20/21/24同理给你一条可以直接落地的实操链路。1. 差分对决不能在等长等距上差不多就行很多刚接触Differential Pair的同学会有个直觉既然是两根线走一样的路径那只要画得差不多齐、绕得差不多长不就行了这个差不多在低频电路里也许真能跑但到了USB 3.0、DDR3/DDR4、PCIe、千兆网这些高速接口上差不多三个字就是尸体——板子回来眼图直接打不开。要理解为什么这么严格得先搞清楚差分信号在里面到底做了什么。1.1 差分信号靠什么抵消共模噪声差分信号的本质是让接收端去读两根线之间的电压差而不是任意一根线对地的绝对电压。发送端同时往P端和N端输出幅度相同、相位互补的信号接收端用放大器做减法。外界电磁干扰EMI同时耦合到这两根线上时产生的是大小、方向几乎相同的共模噪声接收端一减共模噪声被抵消同时两根线上反向变化的电流在回路中产生的电磁场也相互抵消所以差分信号本身对外辐射也很小。这也就是为什么USB、HDMI、DDR这些对信号质量敏感的接口都喜欢用差分信号。但注意抵消的前提是两根线受到的干扰必须高度一致。如果P线和N线在板子上走线宽度不同、离参考平面高度不同、耦合间距不同两根线上感应到的噪声形状就会有差异减法就减不干净。这个差异落到眼图上表现为抖动加大、噪声裕量变小。所以等距从来不是因为好看而是为了保证耦合对称。1.2 等距与差分阻抗一个不能赌的数字差分信号在PCB上传输时有一个关键参数叫差分阻抗Differential Impedance它由线宽W、线间距S、介质厚度H、介电常数Er和铜厚共同决定。USB 2.0/3.0通常是90Ω±10%HDMI和千兆以太网是100Ω±10%PCIe Gen4/5可能是85Ω。这个阻抗必须和连接器、线缆、终端电阻匹配否则信号在链路中会发生反射。这里有个最常见的误区以为差分阻抗只是线宽决定的。实际上两根线之间的间距S越大两根线之间耦合越弱差分阻抗越接近单端阻抗的两倍间距S越小耦合越强差分阻抗被拉低的幅度越大。所以你在设等距规则的时候不是在挑一个看着舒服的间距而是在参与决定整条链路的阻抗值。更麻烦的是这个阻抗对间距非常敏感某些叠层下S每变化1mil差分阻抗可能变化3~5Ω。如果一段走线间距是6mil另一段绕线时变成了4mil阻抗就会在中间那个点跳变反射噪声直接打在信号上。这也是为什么我在AD里永远把差分对的Width和Gap放在同一条规则里管理而不是分别设两条线宽规则和间距规则。分开设的后果是改线宽的时候只有Width变了Gap没跟上阻抗全变。1.3 等长与时序预算先搞懂Skew再谈绕线等长要做的是控制两根线之间的传播延迟差。差分信号在接收端是靠边沿交叉点来采样数据的如果P和N两条线的长度差太大信号到达接收端的时间不一致交叉点就会偏移导致接收端采到错误电平。这个长度差在AD里表现为Skew在工程上叫对内偏斜Intra-pair Skew。很多人一上来就问等长应该设多少mil这个真没有统一答案。USB 2.0一般要求对内Skew控制在50ps以内对应FR4板材上大约300milDDR3/DDR4的数据组通常要求更严格有的设计直接卡在±5mil而高速串行PCIe等标准一般有明确的规范。所以等长的目标不是绝对长度凑齐而是延迟差满足时序预算。AD里做等长绕线的本质就是你手动把短的那根线拉长绕成蛇形或手风琴形把Skew归零到允许范围内。2. 建差分对原理图定义与PCB规则一次到位许多新手在AD里搞不定差分对问题不是出在布线而是从原理图阶段就没把差分对定义对。AD识别差分对的逻辑其实很死板但它容错率低只要命名不守规矩后面全白搭。2.1 原理图端命名与差分对指示符少踩一个改名大坑在原理图里构建一对差分网络有两条路纯命名法把两个网络命名为相同的基名加后缀例如USB_D_P和USB_D_N然后在PCB中通过Net Class或者直接让AD按名称识别差分对。命名规则默认是_P和_N后缀可以自定义但你得保证同一对网络基名完全一致后缀严格符合规则。我见过有人把DDR_DQS0_P和DDR_DQS0_N写成DDR_DQS0_P和DDR-DQS0_N一个下划线一个横杠AD在自动匹配时直接当两个普通网络处理等长规则自然一个都套不上。差分对指示符法这是我最推荐的方式。在AD的原理图编辑器里通过Place Differential Pair Directive不同汉化版本可能叫差分对指示符放置指令符号到某根网络的导线上AD就会自动把另一个匹配命名的网络一起识别为一对差分对并且在原理图里显示一个带士号的符号直观、不容易错。无论哪种方式完成后最好在原理图里跑一次Project Compile再从Messages面板确认有没有差分对识别错误。别嫌啰嗦这一步漏掉后面在PCB里手动补建差分对会让你的工作量成倍增加。2.2 PCB规则Width/Gap与差分阻抗的换算逻辑进入PCB后差分对需要单独建立Differential Pairs Routing规则。路径是Design Rules Routing Differential Pairs Routing。在这个规则里你需要填两个关键参数Width差分线单根线宽Gap同一对差分线之间的间距。AD还提供Min、Max和Preferred三档设置。但我要提醒一句差分阻抗对Gap太敏感你最好不要把Min和Max的范围拉得太大。有些工程师图省事Min填4mil、Max填10mil等你用长度调谐工具绕蛇形的时候线间距值在那个范围里自动飘阻抗也跟着飘。我一般会把Min和Max控制在Preferred两侧各1mil以内给布线器一点余量但不至于失控。那么Preferred的Width和Gap到底怎么定不是拍脑袋也不是照抄别人板子。正确做法是先拿到叠层参数介质厚度、介电常数、铜厚然后用阻抗计算工具跑一遍。AD自带一个简单阻抗计算器也可以用它验证但更常用的是Saturn PCB Toolkit这类软件。以四层板为例表层到参考平面介质厚度约4mil、介电常数4.2左右要做100Ω差分阻抗常见的组合是Width5mil、Gap8mil如果做90Ω可能是Width6mil、Gap6mil。但不同叠层下差异很大我强烈建议每个板子重新算别背着上一块板的参数横跨项目。2.3 用Differential Pair Editor批量管理几十对差分信号当一块板上有几十对差分信号时DDR地址线、数据线、USB、HDMI、差分时钟在规则管理器里一对对去设就太累了。AD提供了一个杀手锏面板View Panels Differential Pair Editor差分对编辑器。这个面板能做三件非常有价值的事批量检查差分对定义所有已识别的差分对、每个网络名、长度状态一目了然设置等长容差选中一对或多对差分对直接在面板里填入你期望的Skew容差也就是等长目标排序与报表按长度、按Slack余量排序快速看出哪些对严重不匹配。我习惯在布线前花五分钟把差分对面板过一遍把所有差分对默认容差统一设置好比布完线再回头逐对设规则高效得多。DDR这种有大量地址线分组的场景还可以配合Net Class把同一组的布线规则统一管理。3. 等距实战从阻抗计算到差分走线落实进入布线阶段后等距不再是规则表格里的数字而是你要用鼠标一根根画出来的物理结果。这一段我讲实际操作里最容易出的问题。3.1 用层叠参数反推线宽间距先算后设我之前带过的一个项目四层板DDR3走线工程师直接抄了另一个六层板的差分参数结果阻抗仿真差了快15%还好投板前发现。差分阻抗从来不是选一个模板就行它和你的层叠强相关。具体操作建议和板厂确认叠层要拿到每层介质厚度、Er值、铜厚并要求板厂提供他们推荐的差分阻抗线宽间距表用Saturn PCB Toolkit或者AD自带的Impedance Calculator跑一遍输入目标阻抗比如100Ω让它反算Width/S组合把算出来的Width和Gap填进Differential Pairs Routing规则如果板厂给的推荐值和工具算出来差别较大以板厂为准但要在文件里注明规则依据。还有一个容易忽略的点差分线的Gap规则不仅仅是同一个规则里那一个数字它还会被普通间距规则影响。如果General间距规则中Same Net间距设置比Gap还大布线器有可能为了满足同网络间距规则而把差分对的两根线故意拉开导致Gap被破坏。所以设置差分规则时要一并检查Electrical Clearance规则确认差分对所在的Net Class没有同网络间距卡住。3.2 交互式差分对拉线与拐角处理AD里画差分对走线用Route Interactive Differential Pair Routing。这一步有几个实操技巧布线时按Tab键打开属性面板可以实时调整当前走线的Width和Gap但正常情况下不需要手动改让走线跟随规则走最安全拐角默认是45°建议保持45°或圆弧拐角不要用90°因为90°拐角会导致拐角处线宽突变产生阻抗不连续。虽然45°也有轻微反射但在工程上是接受度最高的折中差分对的两根线在拐弯处要尽量保持中心间距一致。AD的差分布线器会自动维持Gap但在你手动拖动某根线修线时会破坏它。这里我分享一个经验修差分线时如果你只想动一个网络比如躲开一个过孔鼠标右键选择Separate Differential Pair再单独拖拖完记得用Rebuild Differential Pair或者检查工具确认Gap变没变。我见过有人修完线Gap从6mil变成了12mil然后整段差分阻抗报废就是没检查这一步。3.3 间距被破坏的常见时刻换层过孔与BGA扇出等距真正难的地方往往不在直线段而在这些位置换层过孔。差分对换层时一对过孔之间的距离如果和差分Gap不一致过孔区域就成了一小段阻抗突变点。建议把差分对的两个过孔之间的距离设置得尽量接近走线Gap并在过孔旁边放地孔提供回流路径减少换层带来的回路跳变。BGA扇出。BGA内部的引脚间距非常小0.5mm或0.8mm pitch很难在芯片底下保持目标Gap。这是正常的芯片厂商一般会提供Breakout Region的走线建议即从BGA焊盘走出来的头几十mil可以保持较紧的间距比如4~5mil等到达正常布线层后再平滑过渡到目标Gap。需要注意的是一定要做一个渐变过渡不要一下子从4mil跳到8mil。在AD里可以用圆弧或45°斜线段过渡让间距逐步展开。绕线区域。蛇形绕线时蛇形线相邻段之间的间距如果太小两根差分线会和自己本身产生额外的耦合导致该段阻抗偏移。所以我设置蛇形绕线参数时通常会让蛇形线的振幅至少是Gap的3倍以上同时蛇形相邻走线的中心间距不小于3倍线宽。这个细节上一节细说。4. 等长实战一块板子上几十对差分怎么调长度等长绕线是差分对设计里最耗时间、也最能看出一个人有没有经验的部分。这里不只是拖一拖蛇形线那么简单背后是一套流程。4.1 长度约束与Slack看板别盯着绝对长度看等长的第一步是设置长度容差。在AD里有两种方式差分对编辑器Differential Pair Editor选中差分对设置Skew容差这是针对对内等长的Matched Length规则路径是Design Rules High Speed Matched Lengths用于把多对差分信号统一约束到一个目标长度范围比如DDR地址线组需要对齐到CLK的长度。很多新手只在差分对编辑器里设了Skew而忽略了组间匹配。以DDR为例地址线组不仅要求组内每对差分自身P/N等长还要求整组地址线的飞行时间对齐到时钟线。这些靠Matched Length规则实现Scope里选择DDR地址线所在的网络类Tolerance填上允许范围即可。实际操作中我建议先把所有差分对走完不急着绕线然后在PCB面板或者差分对编辑器里按Length列排序找出最短和最长的那一对先心里有个数。绕线的目标永远是把所有相关差分对拉到同一个目标长度区间内而不是单纯把某一对绕满某个长度值。4.2 Interactive Length Tuning绕蛇形线的参数手感具体执行绕线用的是Route Interactive Differential Pair Length Tuning。走线时会有一个HUD动态显示当前长度和Skew值配合起来调。这里有几个参数你必须理解Amplitude振幅蛇形线凸出去的高度。振幅太小时比如只有2~3mil蛇形线段的耦合非常强会改变局部阻抗振幅太大时占面积大还容易引入额外的寄生电容。我一般习惯振幅设为差分Gap的3到5倍左右。Gap/Spacing蛇形间距蛇形线相邻段之间的间距。这个间距不能小于3倍线宽否则会因邻近效应产生额外串扰。AD的调谐工具有自动间距选项可以跟随规则避让。Style形态提供Sawtooth锯齿、Accordion手风琴等几种。我默认用45°锯齿状因为它在制造上最稳定而且单位长度调整效率高。绕线操作上有个大坑不要在一开始就精确绕到目标值先绕到接近目标、留下2~3mil余量然后微调。因为在绕的过程中布线器会因为避让、格点吸附等产生微小误差一鼓作气压到0结果旁边一根线一挪又超了来回折腾。再一个经验等长绕线尽量靠近接收端绕。原因有两点一是源端的反射还没稳定绕线过早介入会影响信号质量二是接收端附近往往是容错空间较大的区域布线资源也没有源端那么紧张。当然这属于信号完整性层面的选择不是绝对的但大多数实际项目验证下来是合理的。4.3 DDR地址线等长的真实目标不是±5mil这么简单我看网上很多人问ad18 ddr地址线等长设置说明DDR等长是刚需。这里把DDR地址线的目标说清楚一点DDR2/DDR3时代地址线组通常要求组内所有走线长度对齐到CLK对的总长度容差一般在±10~20mil量级但你需要看具体主控芯片手册有的芯片是给时间预算比如地址线与时钟线Skew不超±50ps按FR4大约换算成±300mil。这种情况下你直接套±10mil反而过度设计绕线绕到死DDR3的数据线组DQ/DQS通常更严格数据信号和选通信号的时序预算小有些设计将DQ组要求到±5mil甚至更小。所以我的做法是先看手册找时序要求再换算成线长约束而不是抄模板。如果手册没写再去参考芯片厂商的Reference Design很多硬件参考设计里能把等长容差和目标长度都标注得很清楚。组间等长在AD里的操作我习惯做一个虚拟目标长度先把CLK那对差分线的实际长度记录下来然后在Matched Length规则里让整组地址线去匹配这个值Tolerance按手册留好。布线完成后在差分对编辑器里核对最长和最短那对的差值。4.4 等长报表与DRC怎么查最稳等长做完不是看两眼颜色就行要用工具做正式检查。AD里最直接的方式是打开差分对编辑器把所有差分对按Skew排序检查有没有超出容差的对。另外就是跑DRCDesign Run Design Rule Check前提是你在Matched Length规则里设置了正确的作用范围和ToleranceDRC才会把超差项报出来。投板前我还会生成一份长度报表。AD可以用Reports Board Information或差分对编辑器的Export功能把这些数据导出成文本或Excel作为评审和归档材料。这里顺便说一句我习惯在OutJob输出制造文件时把这套长度报表一起加进去板上丝印有没有漏、文档齐不齐全部一键输出省得每次手工找文件。5. 复盘三个让我返工的差分对案例这部分我挑三个亲身经历过的案例都是当时觉得没问题结果被打脸的典型希望你能绕开。5.1 案例一BGA扇出把等长全丢了有一块FPGA的板子BGA底下有一组差分信号我在芯片底下扇出时为了省空间把P和N两个网络从不同层的焊盘扇出长度差异一开始就有30多mil。当时想的是反正后面还要绕线等长先扇出来再说。结果板子布线资源紧真正到了绕线阶段才发现芯片周围根本没有空间做蛇形唯一的办法是改扇出结构重新走那几条线绕了一大圈。这个教训我记到现在BGA扇出阶段就要注意差分对两个网络的路径尽量对称。芯片底下引脚间距小难以做到完全等长可以理解但你要把差异控制在后面绕线空间能补回来的范围内并且提前留出绕线区域。否则把芯片周围塞满了其他走线最后只能拆东墙补西墙。5.2 案例二绕完等长间距规则却冒红还有一次是USB差分线。我为了躲一个安装孔手动调整了几段蛇形走线把等长调好了DRC却报出一个Clearance违规。查了半天发现是蛇形线中间相邻两段走线的距离太近了触发的是普通净间距规则而不是差分Gap规则。差分对内部的Gap虽然由Differential Pairs Routing规则控制但蛇形绕线形成的自己和自己相邻的走线段在某些位置会被AD当成两条不同网络的走线来检查实际上同属两个网络间距不够就报错。解决办法很简单绕线时不要只盯等长HUD还要看一眼蛇形段之间的间距或者在Clearance规则里针对差分对所在Net Class设置一个合理的同网络间距避免蛇形绕线时自触。记住差分蛇形不是绕得越密越好间距不足的蛇形轻则报DRC重则让阻抗偏移。这就是绕完等长把等距丢了的典型场景。5.3 案例三文件交接后差分对规则全部失效最后一个是管理上的坑。我给一个合作方交付设计文件对方打开后说差分对规则全丢了我这边明明看着好好的。排查后确认是版本兼容问题对方用的是低版本AD读高版本工程文件时部分差分对规则没有被正确映射Differential Pairs Routing规则里的对象引用变成了空集于是差分对退化成普通网络。从那以后我养成了一个习惯项目交付前除了发工程文件还要生成一份独立的版本化PDF把差分对规则、等长约束表格、长度报表都附进去。接收方如果打不开规则至少能看到设计目标。如果确实要跨版本协作我建议把差分对规则用Design Rules Export Rules导出来低版本导入时再检查一遍Scope是否完整。现在AD的版本兼容已经比之前好了不少但历史教训还是让我多留一手。写在最后的一点点个人体会从原理到实战差分对的等长和等距从来不是两个独立任务。等距是你要保证耦合的一致性等长是你要保证时序的一致性它们最终共同作用在信号完整性上。我在实际项目中体会到真正让一块板子稳定工作、一次投板成功的不是某个炫技的绕线手法而是从原理图命名、规则设置、叠层参数、布线节奏到检查流程的整套习惯。如果你正在做DDR、USB、PCIe这类高速接口的板子我给你的最后一句话是投板前一定要跑一遍DRC并逐条看差分对相关的报错同时把差分对编辑器里的长度报表导出来人为地再核对一遍。这些动作看起来繁琐但比起板子回来发现信号打不开、再花两周改板重投这点时间成本真的可以忽略。希望这篇从原理到实战的记录能让你在AD里的差分对操作少走几步弯路。
返回列表