ARTICLE DETAIL

资讯详情

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

AD等长线设计:时序原理与蛇形线操作实战

AD等长线设计:时序原理与蛇形线操作实战 做高速PCB设计的人几乎都躲不开等长线。尤其是DDR、USB、HDMI、PCIe这类接口时序要求卡在那里不走等长板子画得再漂亮也白搭。Altium Designer以下简称AD的等长和蛇形线功能我用了快十年从最开始的AD09一路用到AD20踩过的坑不少但摸清门道之后这事儿其实挺机械的。这篇东西我不打算给你抄手册就按我实际画板子时的操作流程来写。从为什么非要等长这个底层逻辑讲起再到怎么设置规则、怎么手动绕线、怎么用工具批量调最后把我这些年翻车记录整理成问题列表。你只要跟着走一遍基本能应付绝大多数常规板卡的等长需求。1. 为什么非要走等长线先搞懂时序余量很多刚入行的工程师觉得等长线就是拿着蛇形工具在板子上画波浪把长度凑齐就完事了。这么想就危险了因为不理解等长背后的时序逻辑你根本不知道哪些线需要等长、误差该控制到多少、绕线的位置该怎么选。信号在PCB走线里传输是需要时间的。常规FR4板材上信号传播速度大约是光速的60%算下来大概是每英寸166皮秒。这个数值看着不起眼但在几百兆赫兹甚至吉赫兹级别的总线上一组数据线如果在长度上差了500mil那到达接收端的时刻就差80多皮秒。对于DDR3-1600这种颗粒时序裕量本身也就一两百皮秒这80皮秒的偏差直接可能让采样点落在数据不稳定区导致系统运行不稳定时好时坏。等长线的本质不是把长度画得一模一样好看而是为了对齐信号的到达时间。一组总线里每一根线的物理长度决定了信号从驱动端到接收端的传播延迟。只有让这组线的延迟差控制在一个很小的窗口内接收端才能在同一个时钟沿稳定地采到所有数据位。延迟、长度、介质这三者的关系可以直接套用一个简化公式Td L / (Vc / sqrt(Er_eff))Td是传播延迟L是走线长度Vc是光速Er_eff是等效介电常数。注意这里用的是等效介电常数而不是板材的Dk值。因为走线表面的微带线和内层的带状线电磁场的分布不一样等效介电常数是两个不同的值。微带线一部分场在空气中一部分在板材里Er_eff会比板材的Dk小;而带状线完全被介质包裹Er_eff就约等于板材的Dk。同样一块FR4板子表层走线和内层走线的信号速度不一样同样长度的线延迟能差不少。这就是为什么组内等长不能只看物理长度最好能兼顾走线层的一致性。Delay L / (6 * 1mil/ps) 这种粗算方式工程上够用了——大致估一下每英寸166ps1mil约0.166ps。真要精确还是得靠SI工具去算但做等长设计本身我们优先保证物理长度接近层叠一致性靠布线策略去约束这已经是行业的通行做法。2. 绕线方式不只有蛇形三种形态各自适用场景说到等长线大家脑子里的第一反应就是蛇形线实际上AD里面做长度补偿的方式可不止这一种。选哪种取决于你的布线空间、信号速率和叠层结构。2.1 蛇形走线Trombone/Tuning这是最常规的形态走线像手风琴一样来回折叠。适用于数据线、地址线这些单端信号的等长补偿。AD的Interactive Length Tuning工具默认弹出的就是这种蛇形线振幅Amplitude和间距Gap可以手动调。高频信号走蛇形线时折叠部分会产生额外的寄生电容和互感所以间距不能太小我习惯至少保证3倍线宽的间距减少相邻线段之间的耦合。2.2 accordion 式折叠Accordion比普通蛇形的折叠更紧凑像手风琴的褶皱一样并排紧贴。这种方式的优势是占用面积小适合在空间非常紧张的BGA下方走线区域使用。但缺点是相邻线段间距很小串扰风险比普通蛇形高一些。所以Accordion一般只用在低速信号上比如I2C、SPI这种几十兆赫兹级别的控制线或者长度差只差一点点、需要微调的场景。2.3 之字形走线Zigzag之字形也叫锯齿形走线以45度或更小的锐角来回折返。这种形状的走线分布参数相对均匀但补偿的效率较低——同样面积下能补偿的长度有限。一般在差分对内做等长补偿时比如USB线对内部P和N的误差要控制在10mil以内用锯齿形微调特别合适改动量小不容易把阻抗做坏。我自己的习惯是单端总线用蛇形差分对内微调用之字形只有到万不得已空间不够才用Accordion。从阻抗连续性的角度排序之字形最好蛇形次之Accordion最差。你如果做的是PCIe这种高速差分线能不用Accordion就别用越简单越好。3. 布等长线之前必须做的三件准备工作很多人在布线布到一半才发现等长不好走长度差太多、空间不够绕最后只能推翻重来。其实等长线想做顺有相当一部分工作是在布线之前就要铺垫好的。3.1 先定义好网络类别等画完再分打开PCB第一步我建议先把需要等长的网络全部归入Net Class。比如DDR3的数据线DQ0到DQ31再加上DQS和DM总共三十多根网络统一放到一个叫DDR3_DATA的类里面。地址线和控制线单独放一个DDR3_ADDR类。这样后面设置规则时直接针对类来写不用一根一根网络去挑。在AD的PCB面板里展开Net Categories右键选择Class新建类之后把对应的网络拽进去就行。这个动作本身不耗时但能省掉后续大量的重复操作。规则管理器里按类设置长度约束和匹配组清晰得很。3.2 设置差分对和长度规则差分对要在布线之前定义好因为差分对打线需要特定的走线方式和规则。选中一对网络右键Create Differential Pair很快就能建好。需要注意的是差分对的命名规则要在原理图阶段就统一好命名里带_P和_N后缀AD能直接识别自动生成。长度约束在Design规则里设置Design → Rules → High Speed → Matched Lengths。在这里选择你要约束的类或者具体网络然后填入目标长度和容差。比如DDR3数据线组目标长度可以设成2000mil容差设成±50mil这是Tolerance的控制项。但这里我提醒一句AD的Matched Lengths规则只是给DRC检查用的并不会自动把线全部拉齐——真正批量拉齐靠的是后面要讲的Match Lengths工具。3.3 把层叠和过孔消耗算进长度预算这是新手很容易忽略的地方。等长比较的是连线总长度但一个过孔的等效长度通常按15到20mil去估算。如果你的数据线分布在不同的层有的走表层有的走到内层那过孔的数量就不一样。A线走一个过孔到内层B线全程走表层哪怕物理走线长度一样B线的延迟也是偏小的——因为A线的过孔等效长度更长。所以做等长之前先规划好这组信号走哪几层尽量保证每一根线的跨层次数一致。这是我交过学费才悟出来的教训早期画板没注意这个所有线都在表层等长做得很欢快后来内层走线越来越多才发现过孔消耗的影响不可忽视。4. 实操演示在AD里手动绕蛇形线等长线的实操绕线我先从最常用的手动蛇形开始讲因为这是你面对一段走线长度不够时最直接的操作。选中一根已经布好的走线然后在菜单栏选择Route → Interactive Length Tuning或者直接用快捷键TR注意版本不同快捷键可能有差异。这时候光标会变成十字点选你要调整的那根走线拖动鼠标AD就会实时把蛇形线绘制出来并且屏幕上有长度状态的实时显示。当你拖到目标长度范围之内显示会变成绿色并出现Ready的提示。这个交互过程里有几个参数直接决定了蛇形线的质量Amplitude振幅蛇形凸出的高度也就是走线左右摆动的幅度。振幅越大单位长度内能补偿的长度越多但占用的空间也越大。Gap间距蛇形线相邻走线之间的空隙。这个值一定要大于等于3倍的线宽。比如线宽5milGap至少15mil。项目特别拥挤时我可以压缩到12mil但通常不建议。Target Length目标长度。Tolerance容差。在实际拖动中用鼠标移动可以调整蛇形的走势按下Tab键可以打开参数设置面板你可以直接输入精确的振幅和间距。还有一个小技巧是在拖动的过程中按逗号和句号键英文输入法状态下可以快速调整振幅的粗细变化按M键可以循环切换蛇形线的转向方式这在遇到障碍物时非常管用。这里有个执行细节值得单独说明蛇形线段落之间不要转折得太急。如果你把蛇形线集中在某一段很小的区域内绕来绕去这段区域就成了整条走线上一个明显的不连续点阻抗跳变反射就会增加。更好的做法是让蛇形线分散在走线的多个位置均匀地展开每段绕个两到三折就够了。我之前做一块八层DDR板卡的时候数据线需要补偿300mil的长度我没有在一处绕满而是分了三段放置蛇形每段补偿100mil左右对比之前集中绕线的版本信号质量改善是能用眼图看出来的。5. 批量等长用Match Lengths一次拉齐整组总线手动一根根绕蛇形线效率太低。当数据线有32根甚至更多时光靠手搓还不如喝杯茶歇着。AD真正提升效率的是Tools → Length Tuning → Interactive Match Lengths这个批量等长工具。它的工作原理是选定一组网络设定好目标容差范围AD会自动计算这组网络中当前最长的那根线作为基准然后把其他线逐根调整到和基准线接近的长度。操作非常简单在PCB面板里选中你要匹配的多个网络可以用网络类也可以按住Ctrl手动多选然后执行Match Lengths命令在弹出来的窗口里设置好容差比如±25mil点确定软件就开始自动调整。自动匹配依赖的是已有的走线拓扑。它只能调整已经布好的线不能凭空绕出空间来。所以在前面的布线阶段你要保证每一根线都有足够的剩余空间放置蛇形。如果有一根线被其他元件卡得死死的没有绕线空间Match Lengths就会报错或者绕不起来。Match Lengths跑完之后DRC检查一下Matched Lengths规则通常就能看到剩余的误差。如果还有个别网络误差超标手动用蛇形工具精修一下就行。自动批量加手动微调这是我的标准组合。另外AD对这些匹配信息会保存成一个类或一个优化任务你后面改动过某一根线重新执行一次Match Lengths时它会基于当前状态重新比对。我通常的操作节奏是先把所有线尽力布通然后跑一次Match Lengths再去修报错的地方修完再跑一次两轮之后基本能收敛。6. 差分对等长对内与对间两条线都要管差分信号的等长比单端多了一层逻辑。一组差分对里有P和N两根线它们之间的误差叫对内误差Intra-pair skew一般要求控制在5到10mil以内。而一组差分对之间的误差叫对间误差Inter-pair skew这个要求和单端总线类似按协议时序要求定。AD对差分对等长提供两种工具6.1 对内等长手动微调把差分对的两根信号线之间的长度差做小我选择的是Interactive Length Tuning选择一根线调整它的蛇形。这里更推荐用之字形微调因为对内误差通常很小不需要大幅补偿。理想情况是P和N走线完全对称路径完全一致这样差分阻抗稳定共模转差模的干扰也小。如果实在做不到路径对称优先保证长度差不超过容差上限。6.2 对间等长Diff Pair Editor多组差分对之间的长度匹配用Tools → Length Tuning → Differential Pair Editor更合适。它会列出所有已经定义的差分对按照总线分好组你指定目标长度和容差它就会自动操作。这里要注意的是DDSS或对间等长一般以最长的差分对为基准对齐方式和单端网络略有不同差分对更在意的是P和N作为一个整体两对之间的总长度一致。做差分对等长时还有一个容易忽略的细节如果差分对内绕蛇形尽量绕成对称的两条波浪——P线往左凸时N线也往左凸这样两根线之间的耦合保持连续如果你把P往左绕、N往右绕那两根线的相对间距忽大忽小差分阻抗就跟着波动。AD里可以通过选择P和N两根线一起做Tuning保持平行蛇形出来。7. 常见问题与排查技巧实录等长线做了这么多年用户在论坛上问得最多的几个问题我也基本都遇到过这里挑典型案例分享。7.1 Match Lengths工具置灰无法使用这个问题大概率是你没有正确选中网络。Match Lengths不是对单个网络操作的你至少得选中两个或以上的网络并且这些网络本身已存在走线。只选一个网络的话工具没有可比对象自然就灰色了。另一个可能是你的AD版本不带这个功能。早期的一些基础版确实阉割了部分交互式布线增强功能。你可以从Tools菜单栏里看Length Tuning组下面有哪些子项来确认。7.2 蛇形线间距调整无效自动弹到最小值蛇形线的Gap参数受到同层Preset Rule约束。AD会根据最小线距规则强制限制你设置的Gap。比如你在规则里设定了所有走线间距最小5mil那么你蛇形线Gap设置为3mil时软件会自动纠正到5mil并且以红色警告显示。想设置更小的Gap先到Clearance规则里去调整对应的线间距。7.3 绕完蛇形线之后DRC疯狂报错这个最常见的原因是蛇形线的线段间距在校验时被判定为同一网络不同走线段的间距而Clearance规则里默认勾选了同网络检查Same Net Only。如果你的同网络间距设置为0那蛇形线Gap再大也会被判定违规。解决办法是在Clearance规则里把Different Nets Only改为Any Net包括Same Net或者单独为这个规则加一个针对性的查询比如匹配该网络类时Same Net间距等于10mil。7.4 等长线绕完了信号质量反而变差绕蛇形线是把双刃剑等长做了但阻抗不连续也来了。出现这种情况先检查蛇形线的Gap是不是过小导致两根靠得很近的线段之间产生了明显的电容耦合。其次检查蛇形线的振幅是不是突变太大——如果走线从直段直接切到振幅很大的蛇形没有过渡段反射就严重。解决方式是把蛇形线的转折角从45度改成圆弧形AD里可以通过在Tuning参数面板中设置Rounding来过渡。8. 工具选型之外的思路用Si9000做前验算有经验的工程师不会只依赖AD自带的等长计算。AD给的延迟计算是基于均匀传输线假设的默认使用固定的介电常数。但实际层叠不同层的介质厚度和玻纤布结构都有差异不同层的单位长度延迟可能差5%到10%。如果我们做的是DDR4这类高速总线这种差异可能吃掉大量时序裕量。我的做法是用Polar Si9000或者HyperLynx这类场求解器先把我这个板卡的各个走线层的单位延迟算出来填入自制的Excle计算表里算出各层需要的物理长度目标值。然后回到AD里用Net Class和XSignal功能去约束不同层的走线长度目标。具体做法是给每个网络配置伪差分规则或者利用Active Layer和层叠路径约束把不同层的目标长度设置为不同的数值。这个操作在AD里不像专业SI工具那么直观你要通过Class and Layer的交叉组合来实现比较复杂但对于超过4层的高密度板卡非常值得这么做。9. 最后再分享一个小技巧——过孔与等长的配合前面讲过过孔有等效长度但更实际的工程经验是不要让等长蛇形线出现在过孔附近。原因是过孔本身是一个阻抗不连续点蛇形线是另一个不连续点。连续的信号路径上出现两个不连续点反射叠加很容易造成振铃。我画板的时候习惯让蛇形线距离过孔至少50mil以上给信号一点喘息的空间。另外如果你发现有一组总线长度差得很离谱不要急着狂绕蛇形线先去检查是不是有几根线走了冤枉路——比如绕开了某个定位孔或者结构件。如果路径本身能优化优先优化路径让每根线的物理路径尽量接近剩下的微小差值再用蛇形去补。这是从源头减少等长工作量的思路。布线的艺术在于绕最少的路、死最少的心。
返回列表