ARTICLE DETAIL

资讯详情

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

Cadence Allegro差分等长布线全流程:规则设置与蛇形走线实战

Cadence Allegro差分等长布线全流程:规则设置与蛇形走线实战 做高速板子这几年Cadence Allegro里的差分等长布线几乎是我每个项目都会碰到的活。不管是USB、HDMI还是DDR内存总线芯片手册里一句“组内走线长度差控制在xx mil以内”就能让人折腾半天。很多刚接触Allegro的朋友一听到“差分等长”四个字就觉得门槛高其实拆开来看就两件事一是规则设对二是蛇形线绕好。这篇我就把完整套路捋一遍从约束管理器怎么建规则到手把手教你在板子上把蛇形走线绕得又快又漂亮顺便把Delay Tune和常见坑位一次说清楚。这篇文章适合正在用Allegro做高速板、或者刚入门想系统学等长思路的硬件工程师。我会尽量用项目里真实的操作细节来写不扯虚的都是你在图纸上能直接用的东西。1. 差分等长布线的前期思路先弄明白规则再动手1.1 为什么要做差分等长从时序和EMI讲起差分信号传输的核心是接收端比较两根线之间的电压差来还原信号这就要求差分对里的正负两条线到达接收端的时间尽可能一致。如果正线和负线长度差太多信号沿到达的时间就会出现skew电压差波形会被拉宽或变形接收端的眼图就会塌误码率自然降不下来。这个道理在USB 3.0、PCIe、千兆网口这类高速串行接口上尤其明显哪怕是DDR3/4这类并行总线里的差分时钟对内长度差过大也会直接影响时序裕量。另外还有个容易被忽略的点就是差分对内的长度失配会产生共模分量共模电流会在参考平面上形成回流噪声最终体现在EMI辐射变差。所以等长不只是为了让信号“对齐”它同时关系到整个板子的电磁兼容表现。我做过的几块板子里对内skew的典型要求大概是5到15 mil有些芯片资料甚至会写“5 mil within pair”。这个量级什么概念普通FR4微带线上信号传播速度大约是6到7 mil/ps5 mil误差对应不到1 ps的时间差看起来很小但到了10 Gbps甚至更高速率时1 ps已经能明显影响裕量了。1.2 等长目标从哪里来手算一遍你就明白了说到等长很多人第一反应是“把所有线拉成一个长度”这个理解太粗糙了。等长的核心是时间对齐而时间对齐和PCB叠层、走线层的传播速度直接相关。不同层的走线单位长度对应的延迟并不一样所以真正严谨的做法是先确认目标延迟再换算成走线长度。工程上常用一个经验值表层微带线大约140到160 ps/inch内层带状线大约160到180 ps/inch换算过来就是1 inch走线对应大约6到8 ps。如果你嫌这些数字麻烦记住一个粗略换算1 mil走线约等于0.15 ps到0.17 ps。反过来如果芯片文档要求组内延迟差不超过10 ps那长度容差就是10 / 0.15约等于66 mil也就是1.7 mm左右。实际项目中我会先把所有需要等长的网络单独列一个Excel表把芯片手册的关键时序参数抄进去算好目标长度再动手布线。不要上了板子再拍脑袋定一个“整数长度”那种做法后面多半要返工。还有个小细节等长基准通常选同组的时钟线或数据选通线因为并行总线的时序是以它们的边沿作为对齐参考的这一点在约束管理器里对应的是“Reference Net”的选择。1.3 差分对自身走线规则线宽、线距与阻抗的关系在谈等长之前先把差分对的“自身属性”说清楚。差分阻抗主要由三件事决定线宽、线距、以及走线到参考平面的距离。线宽越宽阻抗越低线距越大耦合越弱阻抗也越大参考平面越近阻抗越低。板厂给的叠层参数和阻抗要求会直接转换成Allegro约束管理里的Physical规则。举个例子常见100欧姆表面微带差分设计参数可能是线宽5 mil、间距8 mil内层可能是4 mil线宽、8 mil间距。注意这些数字只是“常见起点”不同板厂、不同铜厚、不同板材都会变最终以板厂的阻抗计算或仿真结果为准。但在Allegro里线宽和线距是由Physical规则强制约束的所以布线时不会出现“走线越绕越细”的情况这是规则驱动的意义。还有一个容易踩的坑蛇形绕线时有些人为了省空间把绕线区域的两条线靠得很近间距直接小于规则值结果阻抗突变。Allegro会在DRC上报Line to Line Spacing违例但很多人布线时会把DRC颜色开得很淡根本没注意。这里记住一点等长补偿的是“时间差”但前提是阻抗尽量不变。你要在规则里给蛇形区域单独定义一个Allowable间距范围比如差分对最小间距可以略缩但不能无限缩。2. 实操第一步在约束管理器中把等长规则立起来2.1 创建差分对两种主流做法差分等长的第一步是让Allegro知道哪些网络应该作为一对差分信号来管理。最常见的方式是在原理图阶段就做好差分属性标记。以OrCAD Capture为例把一对网络的命名规范成“xxx_P”和“xxx_N”然后给这两个网络加上DIFF_PAIR属性再设置好差分阻抗、线宽线距等参数。这样导入到Allegro后约束管理器里会自动生成差分对省去在PCB里手动配对的麻烦。如果你的原理图是别人给的里面没有做差分标记也不用重新导一次网表。直接在Allegro的Constraint Manager里手动创建即可选中两个网络右键选择Create Differential Pair然后给这对差分命名。Allegro会要求你指定一个“Primary”网络和一个“Secondary”网络这决定了哪根线是正极哪根是负极。这里有点讲究Primary和Secondary的分配最好和原理图极性保持一致否则后面做DRC检查和生成装配图时会混乱。手动创建差分对我建议养成一个习惯给差分对命名时尽量包含接口或信号组信息比如“USB3_TX_0”这种可读性强的名字。等网络一多名字乱会严重影响排查效率。我见过一些板子差分对命名是DP1、DP2这种时间一长根本分不清哪个是哪个自己都看不懂。2.2 设置等长规则Physical与Electrical双管齐下等长规则在Allegro里分Physical和Electrical两类两者的分工要搞清。Physical规则管的是“允许怎么走线”差分对线宽是多少、最小线距和最大线距是多少、允许的过孔数量等。这些参数直接对接板厂的工艺能力和阻抗要求。通常在Allegro的“Physical Constraint Set”里给差分对单独建一个Constraint Set例如叫DIFF_100R然后设置Line Width Min 4 mil / Typ 5 mil / Max 6 milLine Spacing Min 7 mil / Typ 8 mil。这里Min和Max给了Allegro布线时一定的自适应空间实际走线时它会尽量按Typ值走。Electrical规则管的是“走线长度/延迟关系”也就是等长本身的要求。在Electrical Constraint Set里面找到Relative Propagation Delay这是Allegro做等长控制的核心表。你需要做两件事第一给这组需要等长的网络设定一个Target值。Target可以是绝对目标长度也可以是一个相对参考网络的值工程上更常用的是后者。比如一组DDR数据线DQ0到DQ7以DQS信号为参考基准那么每个DQ网络都设成“与DQS等长”容差给±5 mil。第二设定容差Tolerance。如果芯片手册只给了时间要求记得先换算成mil再加进表里。这里有个实操技巧容差不要一开始就卡得非常死比如直接给±2 mil这会大幅增加布线难度。除非高速接口有明确要求我一般先给±5 mil布线后期有需要再收紧到±3 mil。以下是我常用的一个DDR3项目里等长规则表示例方便你对照理解信号组参考基准目标值容差DQ0-DQ7DQS0与DQS0等长±5 milDQS0CLK0与CLK0等长±5 mil地址/控制信号CLK0与CLK0等长±20 mil地址线往往更宽差分时钟对CLK0内部无对内主要看对内差布线时自带对称±2 mil为什么要选这样的基准链因为DDR总线的时序关系是前端芯片用时钟沿采样地址用DQS来选通DQ数据。层级关系理顺之后约束管理器的等长汇报才真正反映时序需求而不是机械地“让所有线一样长”。2.3 规则设置后的自检我见过不少新人规则设完就闷头布线布完才发现DRC里全是红色再回头查规则设置。所以规则设完一定要先做一次自检。打开Constraint Manager后切到“Electrical”分类把刚才设置的Constraint Set展开确认每一组等长网络的参考基准和容差都正确。然后执行菜单里的Analysis Mode确保“Relative Propagation Delay”这个检查项是勾上的否则Allegro根本不会对等长做DRC汇报。另一个容易被忽略的点是约束优先级。如果你的板子上同时有全局线宽规则、区域规则和差分对规则Allegro在判断优先级时有个固定顺序Region规则会覆盖Class规则Class规则会覆盖Net规则。你的差分对最好单独建Net Class或Constraint Set不要让它落在某个很严的区域规则里否则会出现“明明Physical允许5 mil线宽但这里就是不让你走”的诡异现象。3. 实操第二步用5分钟流程快速完成差分等长布线3.1 布线前的准备习惯提高等长布线效率一半功夫在动手之前。我的习惯是按顺序三步走先布关键差分对、再布普通信号、最后铺铜。差分对如果拖到最后往往被周边走线挤压得没空间蛇形线根本没地方绕。走线前还需要确认过孔类型。差分对换层时两个过孔并排打过孔间距要和差分对的线距匹配否则换层区域阻抗一下就变了。Allegro里有Via Structures功能可以在换层时自动插入过孔但我更习惯直接手动控制两个过孔的位置因为关键差分对过孔间距真的一毫米都不能差。还有快捷键。Allegro默认布线命令藏在菜单深处用快捷键会舒服很多。我习惯在env文件里加这些alias RP route differential pair alias DT route delay tune alias RD route connect这样手指放在键盘上基本不用碰鼠标去点菜单。设置方法后面第5节会详细讲。3.2 用交互式差分布线命令走起来创建好差分对并且规则生效后真正布线就很快了。启动“Route Differential Pair”命令然后在板上点差分对的起点和终点Allegro会自动用Physical规则里的线宽和线距把这一对线布出来两条线始终保持平行关系。你只需要控制走向不用管单根线的间距这是差分布线比单端布线轻松很多的原因。布线时打方向一般用鼠标控制想拐弯就点一下想走弧线就按住Shift拖动。注意不要频繁切换布线方向让走线尽量顺滑这样给蛇形绕线留的空间也规整。遇到障碍物时Allegro的推挤模式有几种选择我常用HPOHug Preferred Only它会沿着已有走线边缘推挤比较自然。如果旁边线太乱导致推挤失败就临时切到OPFOff Push绕过去再切回来。这里分享一个我的实操体会交互式差分布线不要点一下停一下尽量一条线从起点一口气拉到终点。中途可以暂停看有没有阻断但不要走几步就停下检查一次。Allegro的布线引擎在你连贯操作时会自动优化细节拐角反而比你步步微调更干净。3.3 检查长度并建立等长报告布线完成后先别急着铺铜。马上查长度和等长状态。最直接的方法是单机点选某条走线然后打开Display菜单里的Element看Length和Delay信息。如果网络已经匹配等长规则约束管理器里那行会显示绿色对勾如果差太多会显示红色数值偏差单位是mil。我还有一个小窍门把所有需要等长的网络在约束管理器里做一个Snitch一列按DQS基准排好直接看这一列就能大概估算哪些线要绕多少。例如DQ0实际长度是500 mil目标基准是550 mil那么这条线需要绕50 mil出来。Allegro的等长审查会用“Dev”列显示当前偏差非常直观。检查完长度以后决定哪根线需要做蛇形补偿。如果偏差在10 mil以内一般不需要动如果在50 mil以上就要考虑蛇形线的绕线空间是否充足。空间不够时先调整器件摆放或重新规划这一组的扇出路径不要让蛇形线在狭小区域里顶来顶去那种情况很难绕得平整。4. 蛇形走线等长补偿的核心技巧4.1 蛇形线到底绕的是什么蛇形线是等长补偿最常用的手段原理很简单通过绕弯的方式增加某条短线的物理长度让它的传播时间和同组其他网络对齐。但它绝不是随便画几个弯就完事里面有几个参数直接影响信号质量。第一个是振幅A也就是蛇形线凸出去的高度振幅一般在10到20 mil之间比较常见。振幅太大会占用大量空间太小则补偿长度不足而且每一折的效率会降低。第二个是间距S相邻两段蛇形线之间的距离。这个必须受约束管理器里的Spacing规则管控我一般设成至少3倍线宽例如5 mil线宽的差分对蛇形间距最小15 mil否则耦合严重、阻抗不连续。第三个是拐角形式。Allegro默认支持45度拐角和圆弧拐角。45度拐角加工容易走线也常见圆弧拐角在高频时可以减少拐角反射但绝大多数厂家照样能加工。我个人的习惯是高速接口比如PCIe、10G以太网用圆弧其他普通差分线用45度已经足够。Allegro的Delay Tune可以在设置里选“Arc Offset”模式来生成圆弧。蛇形绕线还有一个很实际的规则绕线不要集中在器件引脚附近。因为引脚附近空间本来就紧张铜密集蛇形线挤在那里容易让周边信号线没地方走而且会有PAD到线的间距风险。我的做法是把蛇形线放在走线中段尽量均匀分布这样不仅方便过DRC信号参考平面也连续。4.2 Allegro里Delay Tune的现场操作Delay Tune就是Allegro里做蛇形绕线的命令启动方式可以是菜单Route Delay Tune也可以直接输入快捷键DT。实际操作流程是这样的第一步选中需要补偿的那根走线前提是它必须是已经受约束管理的网络。启动Delay Tune后鼠标指针会变成一个带刻度的图标这时沿着走线方向拖动鼠标你会看到Allegro自动生成蛇形形状。第二步调整蛇形参数。按住Tab键可以在垂直方向和水平方向之间切换蛇形绕线的方向按住Shift键上下滑动鼠标可以改变蛇形的振幅滚动鼠标滚轮可以调整蛇形内部的间距。注意这些操作不是靠键盘敲数字而是要配合鼠标动态调整熟练之后效率很高。第三步让Allegro自动给你停下。Delay Tune在前进的过程中右上角会长出一个动态长度窗口实时显示当前补偿了多少长度。当它接近目标值时接口会有一个停顿提示你再微调一下就行。用这种方式绕出来的蛇形线长度余量通常非常精准。如果绕过头了不需要删除重新绕。右键选择Compress/Expand模式的动态调整把蛇形线往回调一段就可以了。实际操作时可以按“S”键缩小蛇形线的总长度。还一个实用技巧蛇形区域绕完以后如果发现旁边有DRC冲突用“Slide”命令把蛇形线整体上下挪一挪比删了重绕要快得多。4.3 绕线数量和位置的经验很多新手会问短了200 mil蛇形线到底要绕几折这个其实可以根据振幅大致估算。蛇形线每一折的有效补偿长度大约是2倍振幅假设振幅是20 mil一折就是40 mil额外长度。短200 mil理论上绕5折就够了。当然这个只是估算最终以Delay Tune的动态读数为主。实际用时多绕两折再压缩回来比绕少了再补要轻松。位置选择上我一般优先把蛇形线放在离源端近一点的区域。原因很简单源端附近信号刚从驱动芯片出来波形最完整走线长度的微小变化对阻抗的影响也最小。靠近接收端绕线不是不行但如果接收端有密集BGA封装蛇形线容易把引脚附近的区域占满到时候修DRC修到怀疑人生。绕线的形态也尽量保持一致。同组8根DQ线如果都需要做蛇形补偿尽量统一绕成类似形状、类似位置。因为DQS基准本身是时钟你让每根线的绕线形态均匀时序裕量分布就会更均衡。相反如果有的线绕在源端、有的绕在中间、有的绕成圆弧、有的绕成45度检查报告里虽然都显示等长但实际信号质量会有微妙差异。5. 实测常见问题与周边效率技巧5.1 等长布线过程中的坑位速查下面是这几年做项目时我实实在在踩过、或者帮同事排查过的等长布线问题整理成速查表供你参考。现象直接原因排查与处理差分对规则一直不生效布线时线宽线距不变差分对没有成功匹配Net Class或规则被区域规则覆盖检查Constraint Manager分类确保差分对在正确的Class/CS里调整规则优先级等长检查全部红色偏差大Target或基准选错比如目标设成全局0而不是相对基准网络把Relative Propagation Delay的目标改成“与xxx网络等长”确认基准网络为同组时钟或DQSDelay Tune绕不动提示No legal location绕线区域空间被其他走线、过孔或者铜皮占满先清理绕线区域附近的走线和过孔或切换蛇形方向必要时把周边走线Slide让一点空间绕完蛇形线DRC报Spacing违例蛇形间距小于规则值滚动滚轮调大蛇形间距或修改约束管理器中对应差分对的间距规则绕完后约束管理器显示太长红色Delay Tune绕过头了用Slide命令往回推蛇形线或右键Compress减少蛇形长度除了这些还有一个比较隐蔽的坑铜皮优先级。等长绕线绕完以后通常会把周围的动态铜皮重新铺一遍。Allegro里动态铜皮的优先级是按“Shape”的重叠关系来管理的如果蛇形线旁边有多个铜皮重叠避让顺序不对会导致某块铜皮吃掉蛇形线的间距。这个场景下你需要到Display菜单里的Shape/Assign Net确定铜皮网络然后调Shape的优先级特别是发生在电源平面和地平面重叠的地方。5.2 Allegro常见周边问题从快捷键到文件转换快捷键设置这个事HotSearch里反复出现“allegro pcb快捷键设置”说明很多人卡在这。Allegro的快捷键主要是通过修改env文件实现的这个文件在安装目录的share\pcb\text\env里也可以在你的用户目录下建一个局部env覆盖全局设置。常用的方法是写下类似下面内容alias RP route differential pair alias DT route delay tune alias RD route connect alias SS shape add rect alias PT partition funckey 1 pop pop这里alias后面的字母就是快捷命令名后面的内容是完整命令路径。设完之后重启Allegro就能用。如果你想用单个字母键直接触发命令可以用funckey但注意不要覆盖掉Allegro自带的功能键。Allegro转PADS的方法也是很多人问的。最简单可靠的路线是在Allegro中File Export把板子导出为ASCII格式扩展名通常是.alg然后在PADS Layout中选择“Import/Translators”选Allegro ASCII导入。PADS的导入向导会读取网表、铜皮和走线但无法100%保证过孔类型和特殊形状全部完美转换。转换后要重点检查过孔、Net Class、铜皮网络这几样。常见的问题是转换后铜皮变成静态铜皮避让效果消失需要手动设置。这个转换本来就不适合作为日常协同流程一锤子买卖可以反复转换不推荐。Gerber光绘文件导出同样是排查高频问题。Allegro里File Artwork或Manufacture Artwork打开底片控制设置每个层的Film要记得把Board Outline、Drill Drawing这些机械层加进去。常见错误是底片层设置里漏了“Undefined Line Width”的默认值导致某些细线在Gerber里消失了。另外负片层的铜皮层次设置不对会让板厂拿到一片光板。我习惯出完Gerber以后用CAM350查看一遍确认每一层都有图形、没有空层再发给板厂。5.3 skill脚本与效率工具用Allegro的老手多少都会接触skill。skill是Cadence提供的一种脚本语言可以用来扩展Allegro的功能。等长布线这一块常用的skill是自动生成蛇形线或者批量检查长度。其实Allegro自带的工具已经能覆盖大部分需求但如果你有几十组等长网络要检查用点小脚本会省很多事。比如你可以加载一个简单的长度统计skill它会遍历所有网络并在约束管理器里输出长度Dev表。还有一些第三方skill可以一键对选定网络执行Delay Tune设置减少手工配置的时间。我自己常用的是一些小工具函数比如快速给整组DQ网络设“以DQS为基准”的应用这个用skill写起来很快比在约束管理器里手动一列一列点要舒服得多。不过要提醒一句网上下载的skill尤其是不知名来源的加载前先备份你的env和PCB文件。17.4版本加载skill时Allegro会提示安全警告这是正常的。一旦出现崩溃或者文件异常恢复起来不至于影响工作进度。我个人的经验是等长布线这件事规则设置决定了60%的成败蛇形绕线技巧占30%剩下10%才是各种小技巧和工具配合。只要把约束管理器里的基准和容差想清楚后续的工作都是顺势而为。最后再分享一个经验如果项目时间紧优先保证“差分对内部严格等长”其次是“同组数据线以选通基准等长”至于不同组之间的绝对等长可以适当留有较大余量。这样做既能满足绝大部分芯片的时序要求又能让布线压力下降一个档次。
返回列表