ARTICLE DETAIL

资讯详情

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

Cadence Allegro高速PCB等长设计:蛇形走线与差分等长实战技巧

Cadence Allegro高速PCB等长设计:蛇形走线与差分等长实战技巧 1. 高速信号时代的等长设计为什么绕不开做硬件这行十几年从最早画两层板跑几十兆的总线到现在动辄十几Gbps的SerDes链路有一个话题始终绕不过去——等长。尤其是最近几年DDR3/DDR4/DDR5、PCIe、USB3.x、HDMI这些接口在消费电子和工控板卡上全面铺开之后只要你的信号上升沿进入亚纳秒级别走线长度差带来的时序偏移就会直接吃掉眼图余量。很多刚入行的朋友画完板子发出去打样回来一测发现高速接口跑不起来或者跑起来但误码率居高不下八成问题就出在等长没做好。Cadence Allegro在PCB设计工具链里算是老牌劲旅了尤其在通信、服务器、汽车电子这些对高速信号要求苛刻的领域用Allegro的团队非常多。它和Cadence自家的原理图工具OrCAD Capture、仿真工具Sigrity配合起来从原理图到Layout再到SI仿真可以形成一条比较完整的闭环。很多人问cadence和allegro的区别其实简单说Cadence是公司名Allegro是它旗下的PCB设计工具产品线就像Adobe和Photoshop的关系。搞清楚这一点后面看资料就不会混淆了。这篇内容我打算把蛇形走线和差分等长这两块实战技巧掰开揉碎讲清楚。蛇形走线解决的是同一组信号之间因为物理布局限制导致的长度不匹配问题差分等长则是在差分对内部和差分对之间同时保证长度和相位的一致性。两者背后都依赖Allegro的Constraint Manager约束管理系统来落地。适合有一定PCB基础、正在从低速板转向高速板设计的朋友也适合已经在用Allegro但等长做得不够精细、想系统梳理一遍的老手。我会尽量把每个参数背后的计算逻辑和实操中踩过的坑都写出来让你看完能直接上手改自己的板子。2. 蛇形走线到底在解决什么问题2.1 从时序裕量反推长度容差蛇形走线不是为了让板子好看它的本质是在有限的布线空间里凑长度。假设你有一组8根DDR4的数据线从主控到颗粒的直线距离可能只有15mm但其中一根因为要绕过一个过孔阵列或者避开一个电源岛实际走线只有12mm而另一根走了18mm。这时候12mm那根就需要用蛇形绕出3mm的额外长度18mm那根反而可能要压缩或者调整路径。但到底允许多少偏差这不是拍脑袋决定的。计算逻辑是这样的信号在PCB上的传播速度大约是6英寸/纳秒外层微带线到7英寸/纳秒内层带状线换算成公制大约是150ps/inch到170ps/inch。假设你的DDR4-3200接口一个UI单位间隔是312.5ps通常要求数据组内偏差控制在0.1UI以内也就是31.25ps。按150ps/inch算31.25ps对应大约0.208英寸约5.3mm。也就是说这组数据线里最长和最短的差值不能超过5.3mm。这个数字就是你设置Constraint Manager里Delta Tolerance的依据。注意这个计算是简化版实际还要考虑芯片内部的时序窗口、PCB叠层介电常数Dk的批次差异、过孔带来的额外延迟。严谨的做法是拿到芯片IBIS模型后跑一次Sigrity仿真用仿真结果反推容差而不是纯靠公式。2.2 蛇形走线的三种形态与选择依据Allegro里做蛇形走线主要有三种方式各有适用场景。第一种是手动蛇形用走线命令配合推挤功能一点点绕。这种方式灵活度最高适合局部微调比如某根线只差0.5mm手动绕两个小弯就搞定。缺点是效率低线多了容易出错。第二种是Delay Tune命令这是Allegro里最常用的自动蛇形工具。你选中一根已经布好的线执行Route→Delay Tune然后在Options面板里设置目标长度或者目标延迟工具会自动生成蛇形段。它支持三种模式Accordion手风琴式适合大空间、Trombone长号式适合窄通道、Sawtooth锯齿式适合极窄空间。我一般优先用Accordion因为它的拐角更平滑对阻抗连续性的影响相对小。第三种是Auto-interactive Delay Tune这个在Allegro 17.2之后版本里增强了很多可以框选一组线批量做等长工具会自动分配每根线的蛇形位置和幅度。批量处理时效率极高但前提是你的Constraint Manager里已经设好了Match Group和Tolerance否则工具不知道往哪个目标凑。2.3 蛇形走线的间距与幅度禁忌蛇形走线最容易犯的错误就是绕得太密。很多人为了省空间把蛇形的平行段间距做到2W甚至1WW是线宽结果适得其反。平行段之间会产生容性耦合和感性耦合导致串扰急剧增加同时阻抗也会因为耦合而下降反射变严重。行业里比较稳妥的经验值是蛇形平行段中心间距不小于4W条件允许的话做到5W以上。如果线宽是5mil那间距至少20mil。这个数字不是随便定的4W间距下串扰大约能控制在3%以内再密就会明显恶化。另外蛇形的单段长度也有讲究一般建议单段不超过200mil太长的话寄生参数累积效应明显而且拐角处的阻抗不连续会叠加。还有一个细节是蛇形的拐角。直角拐角在高速线上是禁忌因为直角处线宽等效变宽阻抗骤降会产生反射。Allegro默认的Delay Tune生成的是45度斜角或者圆弧角这个不用改。但手动绕线时一定要用45度或者圆弧别图省事拉直角。3. 差分等长的两层含义与实操拆解3.1 差分对内部等长相位一致是底线差分信号靠的是两条线之间的电压差来传递信息如果P端和N端的长度不一致到达接收端时两条线的信号就会有一个时间差这个时间差直接转化为共模噪声吃掉差分信号的幅度。所以差分对内部等长是底线要求通常要求P和N的长度差控制在5mil以内严格的甚至要求2mil。在Allegro里做差分对内部等长第一步是在Constraint Manager里定义差分对。打开Constraint Manager→Electrical→Differential Pair把原理图里定义好的差分对比如USB_DP/USB_DN关联到Physical和Spacing规则。然后在Relative Propagation Delay里设置Delta:Tolerance一般填5mil:0mil或者2mil:0mil。设置好之后走线时Allegro会实时显示当前的长度差超差会变红报警。实操中有一个技巧差分对内部的蛇形补偿要尽量靠近信号源端或者接收端不要放在中间。因为放在中间的话蛇形段本身的不连续性会影响差分阻抗而靠近端接区域时信号已经衰减了一部分影响相对小。另外补偿的蛇形段要对称P端绕了蛇形N端最好也在对应位置做镜像补偿保持两条线的寄生参数尽量一致。3.2 差分对之间等长组内匹配的复杂度比内部等长更麻烦的是差分对之间的等长。比如HDMI有四对TMDS差分线PCIe x4有四对收发差分线这些差分对之间也需要做长度匹配否则通道间的偏斜会导致数据采样错位。这个匹配的容差通常比内部等长宽松一些一般在5mil到25mil之间具体看协议要求。做组间等长时Constraint Manager里要建Match Group。操作路径是Electrical→Net→Relative Propagation Delay选中所有需要匹配的差分对右键创建Match Group然后设置Tolerance。这里有个容易忽略的点Match Group的参考对象选择。Allegro默认以组内最长的线为基准其他线往它凑。但如果最长的那根线已经绕了很多蛇形再让其他线去凑它会导致所有线都绕得很长增加损耗。更好的做法是手动指定一个目标长度这个长度略大于理论最短路径让所有线都往这个目标凑避免个别线过度绕行。3.3 差分蛇形与单端蛇形的差异差分对做蛇形补偿和单端线做蛇形有本质区别。单端线蛇形只需要考虑自身长度和与相邻线的间距差分对蛇形还要考虑P和N之间的耦合。如果P端绕蛇形而N端走直线那蛇形段的差分阻抗会严重偏离100欧姆因为耦合关系被破坏了。正确的做法是差分对整体绕蛇形也就是P和N同时绕保持两条线之间的间距恒定。Allegro的Delay Tune命令支持差分对模式选中差分对后执行Delay Tune工具会同时对P和N做蛇形并且自动保持耦合间距。如果因为空间限制只能单端补偿那补偿段要尽量短并且补偿后要重新检查差分阻抗。提示差分对蛇形段的耦合方式建议用Edge-Coupled边缘耦合不要用Broadside-Coupled宽边耦合。边缘耦合的阻抗一致性更好加工公差的影响也小。4. Constraint Manager里的关键参数怎么设4.1 从叠层参数推导传播延迟Constraint Manager里设等长规则核心是搞清楚传播延迟。Allegro支持两种输入方式直接填长度mil或者填延迟ps。我建议填延迟因为延迟才是电气本质长度只是表象。填延迟的好处是当你换叠层或者换板材时只要更新Dk值工具会自动换算长度不用手动改。传播延迟的计算公式是Delay Length / Velocity其中Velocity c / sqrt(Dk)c是光速约11.8 inch/ns。假设你的内层带状线Dk是4.2那Velocity 11.8 / sqrt(4.2) ≈ 5.76 inch/ns换算成ps/mil就是1 / 5.76 ≈ 0.1736 ps/mil。也就是说每mil走线对应0.1736ps延迟。如果你要求等长容差是10ps那对应长度容差就是10 / 0.1736 ≈ 57.6mil。在Constraint Manager里设置时打开Analysis→Analysis Modes确保Relative Propagation Delay的检查是打开的。然后在Electrical→Relative Propagation Delay里对每个Match Group设置Delta:Tolerance。Delta填0Tolerance填你算出来的值。如果是差分对内部Delta也填0Tolerance填5mil对应的延迟值。4.2 Match Group的创建与优先级管理Match Group的创建有个顺序问题。我一般先在原理图里把需要等长的网络用Bus或者Net Class归类导入Allegro后这些分类会自动带过来。然后在Constraint Manager里基于Net Class创建Match Group这样后续如果原理图有改动重新导入时Match Group的关联关系不会丢。优先级管理也很重要。一块板子上可能同时有DDR组、PCIe组、USB组每组都有自己的等长要求。如果规则冲突Allegro会按优先级最高的规则检查。我通常把速率最高、容差最严的组设为最高优先级比如PCIe Gen4的85mil差分对内部等长优先级高于DDR的组间等长。设置路径是Constraint Manager→Worksheet→Priority拖动调整顺序。4.3 实时DRC与批量检查Allegro的实时DRCOnline DRC在等长检查上非常有用。走线过程中屏幕右下角会实时显示当前网络的长度和与目标的差值超差时网络会高亮。但实时DRC会拖慢大板子的操作流畅度所以我的习惯是布线阶段打开实时DRC等长调整阶段关掉改用批量检查。批量检查用Tools→Quick Reports→Relative Propagation Delay会生成一个表格列出所有Match Group里每根线的实际长度、目标长度、差值和是否通过。这个报告可以导出成CSV方便存档和对比。如果板子改版拿新旧报告一对比就知道哪些线动了、动了多少。5. 实操流程从零开始做一组DDR4数据线等长5.1 前期准备与叠层确认假设我们要做一组DDR4的数据线DQ0-DQ7加DQS差分对共9根线8根单端加1对差分。第一步是确认叠层。打开Cross Section编辑器确认信号层的位置和介质厚度。假设DQ走内层Dk4.2那传播延迟就是0.1736ps/mil。DQS差分对也走内层同样参数。第二步是在Constraint Manager里建Net Class。把DQ0-DQ7和DQS_P、DQS_N归到一个Class里命名为DDR4_DQ_BYTE0。然后建Match Group把这9根线加进去。Tolerance先按0.1UI算DDR4-3200的UI是312.5ps0.1UI就是31.25ps对应长度约180mil。但实际我会收紧到100mil留足裕量。5.2 布线阶段的长度预分配布线时不要等所有线布完再考虑等长那样后期调整量太大。我的做法是布线阶段就打开Allegro的Length Monitor边布边看长度。先布DQS差分对因为它是参考时钟通常要求它和DQ之间的偏差最小。DQS布完后记下长度然后布DQ线时尽量让每根线的长度接近DQS的长度。如果某根DQ线因为绕障碍物导致长度超出先不要急着绕蛇形看看能不能通过调整路径来缩短。比如换一个过孔位置、调整出线顺序、或者把障碍物移开。蛇形是最后的手段能不用就不用因为每绕一个蛇形就多一份寄生参数和阻抗不连续。5.3 Delay Tune批量调整与验证所有线布完后框选整个Match Group执行Route→Delay Tune。在Options面板里选择Accordion模式设置Max Amplitude蛇形最大幅度和Min Gap最小间距。Max Amplitude一般设为线宽的10到20倍Min Gap设为4W。然后点Auto Tune工具会自动为每根线生成蛇形段。生成后不要直接接受要逐根检查。重点看三个地方蛇形段是否避开了其他信号线尤其是时钟和电源、蛇形段的间距是否均匀、拐角是否平滑。检查完用Quick Reports生成等长报告确认所有线都在容差内。最后跑一次DRC确保没有引入新的间距违规。5.4 后仿真验证与迭代等长做完不代表万事大吉还要做后仿真验证。把Allegro的PCB文件导入Sigrity提取DQ和DQS的S参数跑一次眼图仿真。重点看眼高和眼宽是否满足DDR4的模板要求。如果眼图余量不足可能是蛇形段的阻抗不连续导致的需要回去调整蛇形的幅度和间距或者换一种蛇形模式。这个迭代过程可能要做两三轮但比板子打回来发现跑不起来要划算得多。我见过太多团队为了赶进度跳过仿真结果打样回来调试两周反而更慢。6. 常见问题与排查技巧实录6.1 等长报告显示通过但实测仍然出错这种情况我遇到过好几次最常见的原因是过孔延迟没算进去。Allegro的长度计算默认只算走线长度过孔的垂直延迟和焊盘的延迟是不算的。但一个过孔在高速信号上可能贡献10到20ps的延迟如果一组线里有的过孔多有的过孔少实际延迟差就会超出预期。解决办法是在Constraint Manager里启用Via Delay的计算。路径是Analysis→Analysis Modes→Electrical→Relative Propagation Delay勾选Include Via Delay。然后需要在Padstack里为每个过孔定义延迟参数这个参数可以从仿真或者厂商数据里获取。如果嫌麻烦至少要在等长目标里预留过孔延迟的裕量比如每个过孔按15ps估算。6.2 蛇形段导致阻抗跌落蛇形段的平行耦合会让差分阻抗下降如果跌得太多反射就会吃掉眼图。排查方法是把蛇形段单独提取出来跑TDR仿真看阻抗曲线。如果阻抗从100欧姆跌到85欧姆以下就要调整蛇形参数。调整方向有三个加大平行段间距从4W加到5W或6W、减小蛇形幅度让蛇形更平缓、换用Trombone模式平行段更短。我一般先试加大间距效果最直接。如果空间不够就换Trombone模式牺牲一点长度效率换阻抗一致性。6.3 Match Group里某根线怎么都凑不到目标长度这种情况通常是因为那根线的物理路径太短绕蛇形也凑不够。比如其他线都走了2000mil它只有1500mil差500mil在有限空间里绕不出这么多。解决办法有两个一是调整布线路径让这根线故意绕远一点比如多打两个过孔换层走二是重新设定目标长度以这根最短的线为基准让其他线往它凑。但第二种方法会导致其他线也要缩短可能又绕不开障碍物。我的经验是优先用第一种方法在布线阶段就注意让所有线的路径长度尽量接近。如果实在不行就在Constraint Manager里放宽这组的Tolerance同时评估放宽后的时序裕量是否还能接受。如果接受不了那就只能改布局把颗粒或者主控的位置挪一挪从根上解决。6.4 差分对内部等长做了但共模噪声仍然超标差分对内部等长只是基础共模噪声还和很多因素有关。常见的原因包括P和N的过孔数量不一致、P和N的参考平面切换不一致、P和N的端接电阻布局不对称。排查时先用TDR分别测P和N的阻抗曲线看是否重合。如果不重合找到差异点通常是过孔或者端接区域。另一个容易被忽略的点是蛇形补偿的位置。如果P端在靠近源端绕了蛇形N端在靠近接收端绕了蛇形虽然总长度一样但两端的寄生参数分布不同高频下的相位一致性会变差。正确的做法是P和N的蛇形补偿尽量放在同一区域最好是紧挨着保持对称。6.5 常见问题速查表问题现象可能原因排查方法解决措施等长报告通过但实测误码过孔延迟未计入检查Analysis Modes设置启用Via Delay或预留裕量蛇形段阻抗跌落平行段间距过小TDR仿真蛇形段加大间距至5W以上某根线凑不到目标长度物理路径过短查看实际走线路径调整路径或重设目标共模噪声超标P/N过孔或端接不对称TDR分别测P/N阻抗对称布局补偿位置对齐蛇形段串扰大蛇形幅度过大或间距小近场扫描或仿真减小幅度加大间距DRC报等长违规但目测通过规则优先级冲突查看Constraint Manager优先级调整优先级顺序7. 几个让我少走弯路的实操习惯第一个习惯是布线前先跑一次预布局仿真。在Allegro里把关键器件摆好、叠层定好之后先不布线直接用Sigrity跑一次拓扑仿真看看理论上的时序裕量有多少。这样你在设等长容差时心里有底不会设得太松导致风险也不会设得太紧导致布线绕不出来。第二个习惯是蛇形走线统一用脚本批量处理。Allegro支持Skill脚本我写了一个简单的脚本可以批量选中Match Group里的所有线统一设置蛇形参数然后执行Delay Tune。这样比手动一根根调快很多而且参数一致性好。脚本的核心逻辑就是遍历选中的网络读取Constraint Manager里的目标长度然后调用Delay Tune命令。网上有不少开源的Skill脚本可以参考改一改就能用。第三个习惯是等长做完后导出报告存档。Quick Reports生成的CSV报告我会按板子版本号命名存档下次改版时直接对比。有一次客户反馈某块板子的DDR偶尔出错我翻出旧报告一对比发现改版时有一根DQ线的长度变了30mil虽然还在容差内但叠加其他因素后就超了。如果没有存档这种问题很难定位。第四个习惯是蛇形段远离晶振和模拟信号。蛇形段本身是高速信号它的谐波会辐射如果靠近晶振或者模拟小信号很容易耦合过去。我在布局阶段就会把晶振和模拟区域用禁布区隔开蛇形走线时也优先选择远离这些区域的方向绕。8. 从等长到整个高速通道的协同设计等长只是高速PCB设计的一个环节它和阻抗控制、串扰抑制、电源完整性是相互影响的。你把蛇形绕得很完美但如果参考平面不完整回流路径断裂信号质量照样一塌糊涂。所以在做等长的同时要同步检查参考平面的完整性。Allegro里可以用Plane Check工具检查平面分割和跨分割情况确保高速信号的参考平面连续。另外等长规则要和阻抗规则联动。Constraint Manager里可以设置Impedance规则和Propagation Delay规则同时生效走线时两个规则都会实时检查。如果阻抗和等长冲突比如为了凑长度必须绕蛇形但蛇形又导致阻抗跌落那就需要在两者之间找平衡。我的原则是阻抗优先因为阻抗不连续是反射的直接原因而等长差一点可以通过时序裕量来吸收。最后说一个趋势。现在很多高速接口开始用Fly-by拓扑代替T型拓扑比如DDR4的地址控制线。Fly-by拓扑下每根线到每个颗粒的长度都不一样等长的策略也要相应调整。Allegro的Constraint Manager支持Fly-by的Pin Pair设置可以针对每个颗粒单独设等长目标。这个功能在DDR4以上的设计里几乎是必用的值得花时间研究透。我在实际项目里最大的体会是等长这件事没有一劳永逸的模板。每块板子的叠层、器件布局、接口速率都不一样容差要重新算蛇形要重新调。但只要你把传播延迟的计算逻辑搞清楚把Constraint Manager的规则设对剩下的就是耐心和细心。工具再强也替代不了对信号本质的理解Allegro只是帮你把理解落地的那支笔。
返回列表