ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Cadence Allegro蛇形等长布线实战:从规则设置到Delay Tune绕线验证

Cadence Allegro蛇形等长布线实战:从规则设置到Delay Tune绕线验证 高速数字电路设计里等长布线是绕不开的一道坎。尤其是DDR、PCIe、HDMI这类并行或差分总线走线长度差几十mil就可能导致时序余量被吃掉眼图闭合甚至链路直接跑不起来。很多人第一次接触Cadence Allegro的蛇形绕线都是被Constraint Manager里那一堆规则和Delay Tune那几种模式搞懵的——明明规则设了绕出来的线却报错明明绕了长度还是对不上。这篇内容就把我在实际项目中反复用到的蛇形等长布线流程完整拆一遍从规则怎么建、绕线模式怎么选、到绕完怎么验证每一步都讲清楚背后的逻辑。不管你是刚上手Allegro的新人还是被等长折磨过的老手应该都能从里面找到能直接抄作业的东西。1. 先搞清楚等长到底在等什么1.1 等长的本质是等延时不是等物理长度很多新手一上来就盯着长度两个字觉得把两根线画成一样长就完事了。实际上真正影响信号到达时间的是传播延时propagation delay而延时取决于走线长度和信号在介质中的传播速度。在FR-4板材上表层微带线的传播速度大约是每英寸140~180ps内层带状线因为周围都是介质速度会慢一些大约每英寸170~200ps。也就是说同样长度的表层线和内层线延时是不一样的。这就引出一个关键点Allegro的等长规则里长度匹配和延时匹配是两套东西。Constraint Manager里既可以按物理长度Etch Length设规则也可以按延时Propagation Delay设规则。如果你的总线里既有表层走线又有内层走线只按长度匹配就会出问题因为表层和内层的单位延时不同。这种情况下应该用延时规则让工具自动把长度换算成延时来比较。我在一个DDR3项目里就踩过这个坑地址线一部分走顶层一部分走内层按长度绕得整整齐齐结果时序仿真一跑内层那几根总是慢一截。后来改成延时规则问题才解决。所以第一步先确认你的等长目标是长度还是延时。1.2 哪些网络需要等长容差怎么定不是所有线都要等长。需要等长的典型场景包括并行数据总线如DDR的数据线DQ、地址线ADDR同一组内需要等长差分对内部P和N之间需要严格等长容差通常在5mil以内差分对之间如多对LVDS对与对之间需要等长时钟与数据之间某些接口要求时钟和数据保持特定相位关系容差的确定要看接口协议和时序预算。DDR3的DQ组内通常要求±25mil以内DDR4更严可能到±10mil。差分对内一般±5mil。这些数字不是拍脑袋来的是从时序预算里反推出来的总时序窗口减去芯片建立保持时间、减去串扰和抖动余量剩下的才是走线长度差的预算。提示容差不要盲目往严了设。设得太严绕线难度急剧上升板子面积不够时根本绕不开。一般按协议推荐值来留一点余量即可。1.3 参考长度的选择逻辑等长是相对的得有一个基准。Allegro里通常选组内最长的那根线作为参考其他线往它上面靠。但这里有个细节参考长度是动态的。你绕完一根线它变长了可能就成了新的最长线其他线又要重新绕。所以实际操作中一般是先把所有线大致走完找出最长的那根把它固定为参考再绕其他的。还有一种做法是设一个目标长度让所有线都往这个值靠。这个值通常取组内最长线的长度或者取一个略大于最长线的整数。用目标长度的好处是绕线时有个明确的靶子不用反复比较。2. Constraint Manager里的规则怎么建才不出错2.1 进入Constraint Manager的正确姿势Constraint Manager后面简称CM是Allegro里管规则的地方。打开方式有两种菜单栏Setup Constraints Constraint Manager或者在工具栏点那个像表格的图标。打开之后你会看到一个分左右两栏的界面左边是对象树右边是规则表格。这里有个新手常犯的错误直接在CM里改规则改完发现PCB里没生效。原因是CM里的规则分两种一种是默认规则Default一种是特定对象规则Specific。如果你改的是Default但某个网络已经被单独指定过规则那Default对它不生效。所以改规则前先确认你改的是哪一层。另外CM的规则是跟着设计文件走的不是跟着Allegro软件走的。同一个设计换个电脑打开规则还在但新建一个设计规则就是空的。所以规则建好后建议导出备份下次新项目可以直接导入。2.2 创建Net Class和Match Group等长规则不是一根一根线设的是按组设的。所以第一步是把需要等长的网络归到一个组里。Allegro里有两个层级的组织方式Net Class网络类把功能相关的网络放一起比如所有DDR数据线Match Group匹配组在Net Class内部再细分比如DQ0组、DQ1组操作路径是在CM左边树里找到Net Net Class右键Create Net Class起个名字然后把相关网络拖进去。Match Group是在Net Class下面创建的选中Net Class右键Create Match Group。我一般会按字节通道来分组比如DDR的DQ0~DQ7加DQS0加DM0放一个Match GroupDQ8~DQ15加DQS1加DM1放另一个。这样每组内部等长组间不用等长绕线灵活很多。2.3 关键规则项逐个说明在Match Group上右键能看到一堆规则项。等长布线主要关注这几个规则项含义典型设置Pin Pair引脚对定义从哪个引脚到哪个引脚自动生成或手动指定Delta:Tolerance相对参考长度的容差±25milMin/Max Propagation Delay绝对延时范围按仿真结果设Total Etch Length总走线长度参考值Relative Propagation Delay相对延时等长核心规则Relative Propagation Delay是等长的核心。它定义的是每根线相对于组内参考线的延时差。设置时先选一个参考通常是最长的那根然后给其他线设Tolerance。Allegro会自动计算每根线的实际延时和参考延时的差值超出容差就报DRC。这里有个容易忽略的点Pin Pair的起点终点要设对。默认情况下Allegro会自动识别从驱动端到接收端的路径但如果中间有串联电阻或过孔换层路径可能识别错。我遇到过一根线中间串了个22欧姆电阻Allegro把电阻两端当成两个独立的Pin Pair导致等长计算只算了一半。解决办法是手动创建Pin Pair把电阻两端连起来算一个完整路径。2.4 规则生效的验证方法规则建完不是就完事了得验证它真的生效了。最直接的方法是打开Allegro的Constraint Manager实时显示在PCB里选中一根线看CM里对应的单元格有没有高亮。如果高亮说明规则关联上了如果没反应说明规则没生效。另一个方法是跑DRC。绕线过程中如果超出容差Allegro会在状态栏显示DRC错误。但要注意DRC默认可能不检查等长需要在Setup Constraints Modes里把Relative Propagation Delay的检查打开。我习惯在绕线前先跑一次DRC确认所有等长规则都被识别然后再开始绕。这样绕的过程中一旦超差马上就能看到不用等到最后才发现问题。3. Delay Tune的几种绕线模式怎么选3.1 蛇形绕线的基本形态Delay Tune是Allegro里专门用来绕等长的工具在工具栏上是一个像波浪线的图标或者走线状态下右键也能调出来。它的基本原理是在走线路径上插入一段蛇形accordion来增加长度。蛇形的基本形态有几种单侧蛇形只在走线的一侧绕占用空间小但阻抗不连续双侧蛇形在走线两侧交替绕阻抗更连续但占用空间大T型蛇形绕出来的形状像T字适合空间受限的情况螺旋蛇形绕成螺旋状长度密度高但串扰大选哪种形态取决于你的空间、信号速率和串扰要求。低速信号随便绕高速信号要优先考虑阻抗连续性和串扰。3.2 各模式的参数含义调出Delay Tune后在Options面板里能看到一堆参数。这些参数直接决定绕出来的形状Max Amplitude蛇形摆动的最大幅度也就是蛇形凸起的高度Min Amplitude最小幅度Gap相邻两段蛇形之间的间距Max Length单次绕线的最大长度增量Style绕线样式有Trombone、Sawtooth、Accordion等Gap这个参数特别关键。它决定蛇形段之间的间距间距太小会导致严重的串扰。经验值是Gap至少要是线宽的3倍高速信号建议4倍以上。比如线宽5milGap至少15mil最好20mil。Max Amplitude决定蛇形的高度。太高会占用宝贵的布线空间太低则绕不出足够的长度。一般设成布线通道宽度的一半左右比较合适。3.3 不同场景下的模式选择我一般按信号速率来选低速信号100MHz随便绕Sawtooth模式最快占用空间也小中速信号100MHz~1GHz用Accordion模式双侧绕Gap设大一点高速信号1GHz用Trombone模式单侧绕严格控制Gap和Amplitude必要时做3D仿真验证差分对的绕线还有额外要求P和N要对称绕不能只绕一根。Allegro的Delay Tune支持差分对同时绕绕出来的蛇形是对称的这样P和N的延时差最小。3.4 绕线时的实时反馈Delay Tune最实用的功能是实时显示当前长度和目标长度的差值。在绕线过程中Allegro会在光标附近显示一个动态的数字告诉你还差多少mil。这个数字是实时更新的绕过头了会变负没绕够是正的。我习惯把这个数字当成油门一边绕一边看快到了就放慢。但要注意这个数字是估算值它基于当前的走线路径计算如果后面还要调整路径数字会变。所以绕完后一定要用CM里的实际长度再核对一遍。4. 绕线过程中的实操细节与避坑4.1 绕线顺序的讲究绕线顺序不是随便定的。我的习惯是先把所有线按最短路径走通不绕找出组内最长的那根锁定为参考从最短的线开始绕依次往长的绕每绕完一根更新参考长度如果它变成了新的最长为什么从最短的开始绕因为短线的绕线空间大容易绕长线本身已经很长了再绕可能空间不够。而且从短到长绕参考长度是逐步增加的不会出现绕完一根发现参考变了、前面白绕的情况。4.2 绕线区域的预留绕线需要空间这个空间要在布局阶段就预留出来。我一般会在等长组附近留出一块绕线区宽度至少是蛇形Amplitude的两倍长度根据需要的长度增量估算。估算方法是假设需要增加100mil长度蛇形Amplitude是20mil那么每段蛇形大约能增加40mil长度来回两段需要2.5段加上Gap大概需要100~150mil的布线通道。这个估算不用很精确留够余量就行。注意绕线区不要放在晶振、电源模块、高速差分对附近避免串扰。也不要在绕线区下面走敏感信号。4.3 过孔和换层的影响如果等长组里有线需要换层过孔会引入额外的延时。一个普通过孔的延时大约是1~10ps看起来很小但在高速信号里累积起来也不可忽略。Allegro在计算延时时会自动把过孔延时算进去但前提是过孔模型要正确。我遇到过一个问题某根线换层用了两个过孔但Allegro只算了一个过孔的延时导致等长计算偏差。后来发现是过孔的定义有问题其中一个过孔被当成了焊盘而不是过孔。解决办法是在Padstack里确认过孔类型确保Allegro能正确识别。4.4 绕线后的DRC检查绕完线必须跑DRC而且要专门检查等长相关的规则。在Allegro里等长DRC的代号通常是Relative Propagation Delay相关的。跑完DRC后在CM里看每根线的实际延时和参考延时的差值确认都在容差内。如果DRC报错先别急着改线先确认规则设对了没有。我见过很多次DRC报错其实是规则设错了比如参考线选错了、Pin Pair没设对、容差设成了0。确认规则没问题再改线。4.5 常见问题排查表现象可能原因解决办法绕线时长度数字不动规则没生效或Pin Pair没设检查CM里规则关联绕完长度还是不够参考线选错或容差太严重新选参考放宽容差DRC报等长错误但实际长度对延时规则和长度规则混用统一用延时或长度蛇形段之间串扰大Gap太小增大Gap到线宽3倍以上差分对绕完P/N不等长只绕了一根用差分对模式同时绕5. 绕完之后的验证与收尾5.1 用CM做最终核对绕完所有线后在CM里打开Relative Propagation Delay的表格逐行核对每根线的实际延时和参考延时的差值。Allegro会用颜色标记绿色表示在容差内黄色表示接近容差边缘红色表示超差。重点看红色的黄色的也建议优化一下留点余量。核对时要注意单位。CM里可以显示mil、mm、ps等多种单位确认你看到的单位和规则设的单位一致。我见过有人规则设的是mil看的是mm以为超差了其实没有。5.2 导出等长报告项目归档时通常需要一份等长报告。Allegro可以导出CM的规则和实际值到Excel或CSV。操作路径是在CM里选中要导出的表格右键Export选格式。导出的报告里包含每根线的参考长度、实际长度、差值、容差等信息可以直接给审核用。我一般会在报告里额外加一列余量就是容差减去实际差值这样一眼就能看出哪些线余量小、需要关注。5.3 和仿真结果对照等长只是时序收敛的一个环节最终还要靠仿真验证。绕完线后把PCB导入Sigrity或HyperLynx做时序仿真看眼图和时序余量。如果仿真结果不理想可能是等长没绕好也可能是其他因素如串扰、阻抗不连续导致的。我一般会把仿真结果和等长报告对照着看如果某根线等长余量很小仿真里它的时序余量也小那就说明等长是瓶颈需要再优化如果等长余量很大但仿真还是差那问题可能在别处。5.4 绕线经验的积累等长布线是个经验活绕多了自然有感觉。我建议每次绕完线后记录几个数据绕线前的长度差、绕线用的模式、绕线后的实际差值、DRC是否通过。积累多了就能形成自己的绕线参数库下次遇到类似的总线直接套用参数效率高很多。另外Allegro的脚本功能可以自动化一些重复操作比如批量创建Match Group、批量设规则。如果项目里等长组很多写个脚本能省不少时间。这个后续可以单独展开讲。6. 几个容易被忽略的细节6.1 温度对延时的影响前面说的传播延时都是在常温下测的。实际工作中PCB温度会升高介质材料的介电常数会随温度变化导致延时变化。FR-4的介电常数温度系数大约是每摄氏度变化0.001~0.002看起来很小但在高温环境下累积起来也不可忽略。对于要求极高的应用可以在CM里设置温度补偿让Allegro按工作温度计算延时。不过大多数消费类产品不需要这么严格工业级和汽车级产品才需要考虑。6.2 铜箔粗糙度的影响高频信号在导体中传播时由于趋肤效应电流集中在导体表面。如果铜箔表面粗糙电流路径变长等效延时增加。这个效应在10GHz以上才明显一般信号不用考虑。但如果做高速SerDes选低粗糙度铜箔如HVLP能减小这个影响。6.3 绕线对阻抗的影响蛇形绕线会改变走线的局部阻抗。蛇形段之间如果靠得近会形成耦合导致阻抗下降。阻抗不连续会引起反射影响信号完整性。所以高速信号的蛇形绕线要控制Gap必要时做阻抗仿真验证。我一般会在绕线后抽几段蛇形做TDR测试看阻抗波动是否在可接受范围内。如果波动太大就调整Gap或换绕线模式。6.4 绕线区的参考平面蛇形绕线下面的参考平面要完整不能有裂缝或分割。参考平面不完整会导致回流路径断裂阻抗失控还会辐射。如果绕线区跨了平面分割宁可不在这里绕换个地方。这一点在多层板设计里特别重要。我见过一个项目绕线区正好跨在电源平面的分割线上结果EMC测试辐射超标后来把绕线区挪了个位置才过。6.5 和制造工艺的配合蛇形绕线的线宽和间距不能太小否则超出PCB厂的工艺能力。一般PCB厂的最小线宽/间距是3mil/3mil但蛇形绕线建议不要低于4mil/4mil留点余量。另外蛇形的拐角建议用圆弧而不是直角直角会导致阻抗突变和尖端放电。如果板子空间实在紧张可以和PCB厂沟通看能不能用更细的线。但要注意线越细阻抗越高损耗越大需要重新做阻抗计算。等长布线这件事说到底是个平衡活在时序要求、布线空间、信号完整性、制造成本之间找平衡点。Allegro的工具很强大但工具只是工具真正决定成败的是你对信号的理解和对细节的把控。我自己的习惯是每次绕完线都回头看一眼想想哪里可以做得更好下次就能少踩一个坑。
返回列表