ARTICLE DETAIL

资讯详情

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

Allegro等长约束核心:Delta与Tolerance设置全解析

Allegro等长约束核心:Delta与Tolerance设置全解析 做高速PCB设计的人恐怕没有谁没被Allegro的等长设置折腾过。尤其是DDR这类总线几十根线要绑在一起做等长打开Constraint Manager一看密密麻麻的Pin PairDelta、Tolerance、Actual一堆参数堆在眼前搞不清它们到底怎么配合往往绕线绕到半夜DRC还是红通通一片。今天别的先不聊就把Delta和Tolerance这两个等长设置里最核心的参数从原理到操作一次讲透。这篇文章适合刚接触Allegro等长约束的工程师也适合虽然能照猫画虎设置、但遇到复杂等长场景仍然会卡住的人读完你能自己判断一组信号该设多少Delta、给多少Tolerance并且能在PCB上高效调出让DRC满意的走线。1. 等长设置为什么绕不开Delta与Tolerance1.1 高速信号等长的物理本质先聊一句“为什么要等长”。很多人刚入行时觉得等长是形式主义其实它的根子在时序。数字信号从驱动端发出经过PCB走线到达接收端这个传输过程是有延迟的而延迟量和走线物理长度直接相关。打个比方十几个人同时从起点出发去终点如果各自走的路径长短差距很大到达终点的时间就参差不齐——对信号而言就是同一组总线里的各个信号到达接收端的时刻对不齐采样窗口一旦错位数据就全乱了。在FR4板材上信号传播速度大约是光速的60%左右折算下来大概是5.5到6 mil/ps。这个换算关系很重要很多师兄教你“DDR3数据线等长要控制在±20mil以内”听起来是个长度值但本质上是一个时序预算的约束——±20mil大约对应±3.5ps左右的延迟偏差芯片的时序裕量有多少物理上允许的长度差就有多大。理解了这一层你就明白Delta和Tolerance绝不是拍脑袋填的数字它们是对芯片时序需求的一种物理映射。1.2 Delta与Tolerance在Allegro中的正确定义在Allegro的Constraint Manager里等长约束最常见的形式是Relative Propagation Delay也就是“相对传播延迟”这个模式下核心参数就是Delta和Tolerance。先说Delta它表示目标网络相对于参考目标的长度偏移量。Delta可以等于0表示所有网络的目标长度都和基准长度一致Delta也可以为正或者为负正Delta表示该网络需要比基准长负Delta表示需要比基准短。Tolerance则是容差范围表示实际走线长度允许偏离目标值多少。这里要注意Tolerance本质上是一个“±”的概念。举个例子基准网络长度为5000mil某个网络设置Delta为0、Tolerance为50mil那么这个网络的实际走线长度必须落在4950到5050mil之间才算合格。如果同样场景下Delta设为-100mil目标长度就变成了4900mil允许范围是4850到4950mil。和这种模式对应的是Total Etch Length和Min/Max Propagation Delay前者直接限定总长度的最大最小值后者限制延迟时间的最大最小值。这两种方式也不错但它们解决的是“一根线不能太长也不能太短”的绝对长度问题而真正要解决“一组线互相之间长度差不能太大”的配对问题还得靠Relative Propagation Delay加上Delta和Tolerance。这也是为什么DDR总线、LVDS差分对、SerDes收发通道这些典型等长场景几乎清一色都在用这个模式的原因。2. 亲手搭建一个等长约束从Match Group到参数设置2.1 创建Match Group的完整路径在Allegro中做等长约束首先要做的不是填Delta和Tolerance而是建立一个Match Group也就是“匹配组”。匹配组是用来容纳一组需要互相约束等长关系的网络的容器。你可以在Constraint Manager里直接创建也可以在PCB编辑器里选中一组网络后右键创建。最常用的路径是这样的打开PCB编辑器点击菜单栏 Analyze → Constraint Manager或者直接按快捷键打开约束管理器。在Constraint Manager窗口左侧的树状结构中依次展开Electrical → Net Routing → Wiring → Relative Propagation Delay。在这里你能看到两类内容一类是已经被分组好的Match Group另一类是还没有分组的网络。选中你需要做等长的多个网络可以按住Ctrl多选然后右键选择Create → Match Group在弹出的对话框中输入一个容易识别的名字比如DDR3_ADDR_GRP确认之后匹配组就建好了。这个环节很多新人容易犯一个错误只把信号线加进了Match Group却没有检查参考网络。其实匹配组里的每一行网络都有相应的参考目标Allegro默认会以第一个加入的网络作为参考目标但这个参考未必是你想要的。更合理的做法是在匹配组中选定一根信号质量最好、走线长度最有代表性的网络右键选择Set as Target把它定义为基准网络。所谓基准网络就是Delta和Tolerance所“相对”的那个目标。2.2 设置Delta与Tolerance的三种典型场景场景分组建好之后真正的重头戏是填Delta和Tolerance。根据项目需求的不同实际中会遇到三种典型情况。第一种是最简单的所有网络等长目标长就是基准网络本身。这种情况下Delta填0Tolerance根据时序预算填写单位是当前设计单位。比如8根DDR数据线绑在一个Match Group里以其中一根作为Target其他7根的Delta都填0Tolerance填25mil代表这组线的长度必须全部落在基准±25mil的窗口里。第二种情况是“偏移等长”也是很多人不理解的场景。比如地址线相对于时钟线时序上要求地址线比时钟线长200mil才能满足建立时间。这时候地址线所在Match Group的Delta可以设为200mil正负号取决于你是把时钟线作为参考还是把地址线作为参考。如果基准是时钟线地址线Delta就填正200如果反过来基准是地址线那时钟线Delta就填负200。这个过程其实就是在用Delta表达两条信号线之间的“相位差”只有把它转成物理长度差值绕线才有明确目标。第三种情况是用最长线做基准通过Tolerance来检验整组线的离散程度。这种做法在PCB Layout后期非常常见不等长约束还没完全摆平但你已经在PCB上把大部分线绕得七七八八了此时你可以在匹配组里找到当前实际走线最长的那根网络将它设为Target其他网络的Delta都设为0然后观察Tolerance是否都小于实际最长线与其他线的最大差距。如果某根线的Actual长度和基准相差200mil而你的Tolerance只有50mil那么这根线就是后期需要重点绕线加长的对象。2.3 看懂参数状态和颜色反馈设置完Delta和Tolerance之后Constraint Manager里的每一行网络都会显示一组状态信息Actual实际长度、Target Length目标长度、Delta偏移、Tolerance容差以及最终的计算结果。Allegro内部会做一个简单的数学判断如果Actual落在目标值±Tolerance的范围内状态就是绿色如果超出范围状态就是红色有些版本还会用黄色表示接近容差边界但尚未超限。很多人看到红色就慌了其实红色不等于“必须马上改”。它只是告诉你当前这个网络不满足你设定的等长条件。你需要先思考一个问题是实际走线确实不符合要求还是我Delta或者Tolerance填得太苛刻了实际设计中我见过不少工程师把Tolerance填成5mil然后整组网络一片红最后发现根本没那个必要——芯片手册给的要求只有±50mil你硬是填5mil等于给自己找麻烦。等长参数要服务于芯片的真实时序需求不是越严越好。3. 实战DDR3地址线等长设置全流程拆解3.1 明确需求从芯片手册到Delta/Tolerance数值纸上谈兵说了一堆现在用一个典型实战案例把完整流程串起来。假设我们正在设计一块板子上面有DDR3颗粒我们需要对DDR3的地址线做等长约束。DDR3地址线包括行地址、列地址、bank地址等它们通常组成一个Match Group并以CK时钟线或者某根地址线作为参考基准。先看芯片手册里的时序参数和Layout Guidelines。大部分DDR3手册会给出地址线与CK之间的setuphold时间要求折算到物理长度上常见的要求是地址线相对于CK的延迟差控制在±50mil到±100mil以内。这里不是死标准不同厂商的DDR3颗粒有一些差异但经验上取±50mil是一个比较稳妥的起点。如果你经验不足、拿不准宁可先把Tolerance放宽到100mil让板子先布通下一步再根据时序仿真结果收紧也不要一开始就用极端严苛的参数把自己逼死。确定了Tolerance之后确定基准和目标。在DDR3地址线组里最自然的做法是选择内部走线最短的那根地址线作为基准不对——你应该选最长的做基准其实两种思路都有。稳妥的做法是选一根理想走线路径最有代表性的地址线作为Target把其他地址线和CK的Delta都设为0Tolerance设为±50mil然后看DRC结果。如果某些线差了太多后面再逐一绕线调长。3.2 Constraint Manager中的六步操作法整个操作流程可以拆成六个步骤。第一步打开Constraint Manager进入Electrical → Net Routing → Wiring → Relative Propagation Delay页面。第二步在Available工作表中选择DDR3地址线相关的所有网络。这些网络通常带有ADDR、BA这样的名字前缀DDR3的地址线包括A0到A15BA0、BA1这样的bank地址线以及RAS、CAS、WE等片选信号把这些都选中但先把CLK相关的网络单独放一边后面要用更细的时序策略处理。第三步右键创建Match Group命名时建议带上信号类型和期望容差信息比如GRP_DDR3_ADD_50方便后期维护。第四步在选定的Match Group中设置Target。把其中一根你希望作为长度参照基准的网络右键设为Target。第五步在同一行网络列表的Delta列中填入0Tolerance列填入50单位取决于设计设置通常为mil。如果你知道某些地址线需要比别的线短或长一定量可以单独在那一行Delta列填正值或负值。第六步将DRC打开。在Setup → Drawing Options或者Constraint Manager的DRC设置里确保Relative Propagation Delay相关的DRC检查处于开启状态。如果之前没开你设置完参数也会发现PCB上没有任何动态反馈。3.3 在PCB上绕出合格的蛇形线约束设置完成只是第一步值真正落地到PCB上是绕线。在Allegro中手动延长走线的命令是 Route → Delay Tune也就是俗称的绕线命令。点开后先在右侧Option面板里设置绕线方式单端地址线通常用Accordion蛇形方式也就是走锯齿形。这里有几个参数很重要Trace Spacing相邻蛇形绕线之间的间距、Amplitude蛇形幅度、Gap蛇形线整体宽度这些值必须根据当前走线的线宽和叠层合理设置。经验上蛇形线的间距Trace Spacing不能小于2倍线宽否则相邻走线之间的串扰会明显恶化。如果地址线走的是4mil的线宽绕线间距至少在8mil以上。Amplitude不要一开始就设太大从8到12mil起步边绕边观察Actual值的变化慢慢调整到目标长度。在实际操作中我习惯先把需要的额外长度算出来——比如某根地址线当前差了150mil才能进入容差范围那我设置绕线参数时边绕边看右下角状态栏里的剩余长度remaining尽量每次绕出的长度在50mil左右分三次完成比一次想绕够150mil更可控因为蛇形线绕得太密了后面调整很难。绕完一根线之后不要急着去绕下一根。先在Constraint Manager里刷新一下看看这跟线的Actual值和状态颜色有没有变成绿色。很多工程师一口气把整组线全绕完再看结果结果发现第一根就绕多了100mil后面的线跟着全跑偏浪费时间也浪费精力。正确的做法是绕一根、确认一根、刷新一根。3.4 用Timing Vision直观检查等长状态Allegro的Constraint Manager里看状态始终有种“隔靴搔痒”的感觉尤其在图形化界面上不能一目了然地看到每根线的状态。17.4版本之后有一个非常实用的功能叫Timing Vision可以把它理解为在PCB画布上叠加一层“长度热力图”。View → Timing Vision勾选启动之后匹配组里的每根走线会根据其相对于Target的长度偏差显示不同颜色绿色为满足约束红色为超差黄色为临界。这样你在PCB上扫一眼就知道哪些线需要重点处理比如DDR3地址线一共十几根哪里红了一片说明那里有走线长度明显不足直接放大过去开始绕线就行了。如果Timing Vision显示某根线超差需要手动判断是绕线绕少了还是绕多了。少了的继续Delay Tune加长绕多了的则麻烦一些——Delay Tune命令默认是加长但如果你选中线路后重新走一段路径实际长度会被压缩。更直接的方法是选中那段多余的蛇形线按Delete删掉然后用走线命令重新走一根更规整的线再右键选择Delay Tune微调。这样虽然步骤多一些但比在蛇形线上硬调要可靠得多。4. 老工程师总结Delta/Tolerance设置中的常见坑4.1 基准选错Delta全乱先讲一个我自己踩过的大坑。有一块板子要做DDR2数据线等长当时匹配组里数据线有十几根我从老版本工程里复制了约束规则Delta和Tolerance都照着填了一遍结果DRC一片红而PCB上的绕线看起来完全正常。排查了很久最后发现问题是匹配组的Target选错了——老工程里Target是一根中途换过层的线在新板子上这根线的实际长度因为换层过孔位置变化而大大缩短了导致所有其他线相对它都“超长”了。这个坑的教训是Target的选择会直接影响所有Delta的计算结果。理想情况下Target应该选择一根没有换层或换层次数最少、走线路径最有代表性的网络。如果发现整个匹配组全线状态异常第一时间检查的应该是Target是不是被误改了。4.2 Tolerance过严导致DRC报警不断很多新人在设置Tolerance时喜欢追求数值上的好看觉得±10mil肯定比±50mil更“严谨”。但真实工程里Tolerance的选取必须跟着芯片手册和量产性走。过严的Tolerance会带来两个问题一是布线难度陡增你为了把一根线控制在±10mil内可能需要在PCB上绕出密密麻麻的蛇形线而这些蛇形线本身就引入新的串扰和长度冗余二是生产公差问题PCB生产过程中阻抗和蚀刻本身有误差个别过孔的位置加工偏差也可能影响实际走线长度你设计时卡得太死生产阶段就很容易出现布线与DRC差不合格的情况。我个人的习惯是先在芯片手册的推荐范围内取一个中等偏宽松的初始值比如DDR3地址线取±75mil把整块板子的Route先拉通再回归分析有几根线实际落在窗口之外如果数量不多再决定是否收紧Tolerance。你真把±10mil塞给布线只会把自己逼疯而且大多时候真的没有必要。4.3 为什么我设了规则却不生效这个问题出现的频率非常高。规则设了、Delta填了、Tolerance也写了但PCB上的DRC完全没有反应或者绕线绕得很长也不见状态变化。排查的顺序一般是先确认Constraint Manager的DRC选项里Relative Propagation Delay确实处于Enable状态再检查这些网络确实在同一个Match Group里最后确认你在PCB里编辑的这根线属于这个Match Group对应的Pin Pair。比这个问题更隐蔽的是“同网络多匹配组”的情况。当一个网络同时被加入两个Match Group时Allegro的状态计算很可能以其中一个为主导致你在另一个分组里看到的Delta和Tolerance没有生效。解决办法是在Constraint Manager的网络归属界面仔细检查每个网络被分配了哪几个匹配组把不需要的重叠分组清理掉。4.4 等长绕线和信号质量的平衡最后讨论一个很多人忽略的维度等长绕线不是在PCB上硬画蛇形线那么简单。蛇形线的结构对信号完整性有明显影响绕线间距过小会让两根相邻的平行走线之间产生明显的耦合电容和互感导致信号边沿变缓甚至串扰增大。在SerDes这类高速信号上蛇形线间距不足带来的信号质量损失可能远超等长本身带来的时序收益。所以每次绕完等长线一定要做一次串扰分析。Allegro自带的Sigrity工具可以进行简单的串扰扫描工程上更实用的做法是保持蛇形线区域尽可能远离其他敏感信号并在绕线密度较高的区域增加回流地过孔。如果实在空间受限、蛇形线必须很密集那就要重新审视Tolerance是否定得过严适度放宽约束有时候反而是更好的工程决策。5. 最后的经验之谈在这个行业摸爬滚打久了会发现高速PCB设计的很多基础概念都是“看似简单、细想复杂”。Delta和Tolerance看起来只是两个数字但在不同设计阶段、不同信号类型、不同芯片要求下最优取值和设置策略能差出十万八千里。我自己的习惯是把每次做过的等长约束都记一个表格——信号类型、芯片型号、所用Delta/Tolerance值、最终量产情况日积月累就能形成一套属于自己的设计数据库。对于刚接触Allegro等长设置的工程师我建议先从简单的单端地址线组入手用本文的流程完整跑一遍理解了Delta、Tolerance和Target三者的关系后再去挑战更复杂的DDR差分时钟和数据线分组。等长这块玩转了你对整块板子的时序把控能力会提升一个明显的台阶。
返回列表