ARTICLE DETAIL

资讯详情

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

高速等长绕线中Pin Delay与过孔长度的隐形影响及Allegro设置

高速等长绕线中Pin Delay与过孔长度的隐形影响及Allegro设置 1. 高速等长绕线里最容易被忽略的两个隐形长度做高速数字设计的同行大概都有过这种经历时序报告里某组总线的建立时间余量怎么调都差那么几十个ps绕线绕得跟蛇一样密结果仿真一跑还是不过。排查半天最后发现不是绕线本身的问题而是Pin Delay和过孔长度这两个隐形长度没算进去。在Cadence Allegro里做等长绕线很多人习惯性地只盯着走线的物理长度把Constraint Manager里的Relative Propagation Delay设好然后就开始拉线。但真正决定信号到达时间的是信号从芯片内部引脚出发、经过封装引脚、穿过PCB走线、再经过过孔换层、最后到达接收端芯片内部这一整条路径的总传播延迟。走线只是其中一段Pin Delay和过孔带来的延迟同样真实存在而且在高速场景下它们的量级完全不能忽略。这篇文章想聊的就是这两块内容Pin Delay到底该怎么理解、怎么在Allegro里正确设置过孔长度对等长的影响有多大、怎么把它纳入约束体系。我会从原理讲到实操把参数计算、约束配置、常见误区和排查思路都过一遍。适合已经有一定Allegro基础、正在做DDR或者高速串行总线等长设计的朋友也适合刚接触高速约束、想搞清楚为什么我绕了等长还是不过的工程师。先说一个结论性的判断在信号速率超过1Gbps或者时序余量小于100ps的场景下Pin Delay和过孔长度如果不纳入等长计算你的等长绕线基本等于白绕。这不是危言耸听后面我会用具体的数字来说明为什么。2. Pin Delay的本质芯片封装内部的传播延迟2.1 Pin Delay到底是什么为什么它会影响等长Pin Delay直译过来就是引脚延迟指的是信号从芯片Die裸片上的焊盘出发经过封装内部的键合线Bond Wire或者倒装焊球Flip-Chip Bump、封装基板走线最终到达封装引脚Ball或者Pin所需要的时间。这段时间对应的物理距离就是封装内部的信号路径长度。为什么它重要因为我们在PCB上做等长目的是让一组信号同时到达接收端。但信号真正的起点不是封装引脚而是芯片Die。如果两个信号的封装内部路径长度不一样那么即使PCB走线完全等长信号从Die出发到接收端Die的总时间还是不一样的。举个具体的例子。假设一颗DDR控制器芯片封装内部有两根信号线一根的封装走线长度是8mm另一根是12mm。这两根线在PCB上你都绕成了50mm等长。看起来PCB上是等长了但信号实际走过的总路径一个是58mm一个是62mm差了4mm。在FR4板材上信号传播速度大约是6.5ps/mm这个数值后面会详细算4mm就是26ps的偏差。对于DDR4-3200来说一个UI只有312.5ps26ps已经占了8%以上足以吃掉相当一部分时序余量。所以Pin Delay的本质是它把芯片封装内部的长度差异传递到了PCB设计里你必须把这部分差异补偿掉才能实现真正的等长。2.2 Pin Delay数据的来源与获取方式Pin Delay的数据不是你自己算出来的而是芯片厂商提供的。通常有三个来源Datasheet或者封装设计指南很多芯片的手册里会直接给出每个引脚的Pin Delay值单位一般是ps或者mm。比如Xilinx的FPGA、TI的DDR控制器都会在Pinout文件或者Package Delay文件中列出。IBIS模型IBIS模型里有时候会包含封装参数可以从中提取Pin Delay信息但不如专门的Pin Delay文件直观。厂商提供的专用文件一些大厂会提供Excel格式或者CSV格式的Pin Delay表格直接对应每个Ball编号。拿到数据之后你需要在Allegro里把它和对应的网络关联起来。Allegro的Constraint Manager支持导入Pin Delay数据具体路径是在约束管理器里找到对应的Pin Pair然后设置Pin Delay属性。注意Pin Delay的单位要和你的约束单位统一。有些厂商给的是ps有些给的是mm导入前一定要确认清楚否则会出现数量级错误。2.3 在Allegro中设置Pin Delay的完整操作在Allegro里设置Pin Delay核心是在Constraint Manager的Relative Propagation Delay约束中为每个Pin Pair指定Pin Delay值。具体步骤如下第一步打开Constraint Manager快捷键CtrlShiftC找到Electrical Constraints下的Relative Propagation Delay。第二步选择你需要设置的目标网络组展开Pin Pair列表。每个Pin Pair代表一个驱动端到接收端的连接关系。第三步在Pin Delay列中填入对应的值。Allegro支持分别设置驱动端和接收端的Pin Delay因为两端的封装延迟可能不同。第四步确认Delta:Tolerance列的设置。这里设置的是允许的偏差范围Pin Delay会被自动计入总延迟的计算中。实际操作中有一个容易踩的坑Allegro默认的Pin Delay单位是mil还是ps取决于你的设计单位设置。如果你的设计用的是milPin Delay填的是长度值如果用的是时间单位填的就是ps。两者之间的换算关系是在FR4上1mm约等于6.5ps1mil约等于0.165ps。这个换算系数不是固定的取决于板材的介电常数后面会详细说。另外一个实操建议如果你的芯片Pin Delay数据很多手动一个个填效率太低可以用Allegro的脚本功能批量导入。把厂商给的CSV文件整理成Allegro能识别的格式写一个简单的Skill脚本或者用Excel生成约束导入文件几分钟就能搞定几百个引脚。3. 过孔长度换层带来的额外延迟怎么算3.1 过孔为什么会产生延迟过孔是PCB上用来连接不同层走线的金属化孔。信号从一层走到另一层必须经过过孔。过孔本身有一段垂直的金属柱Barrel信号在这段垂直路径上传播也是需要时间的。虽然过孔的物理长度通常只有几十mil到一百多mil看起来很短但在高速场景下这段长度带来的延迟和阻抗不连续问题都不能忽视。过孔延迟的计算逻辑和走线是一样的延迟等于长度除以传播速度。区别在于过孔是垂直方向的而且过孔的阻抗特性和走线不同信号在过孔里的传播速度也会有细微差异。不过在做等长计算时通常可以近似用走线的传播速度来估算过孔延迟误差在可接受范围内。关键问题在于同一组等长信号如果有的信号换层次数多有的换层次数少那么过孔带来的总延迟差异就会累积。比如一组8根DDR数据线其中4根从顶层换到底层经过1个过孔另外4根从顶层换到内层再换到底层经过2个过孔那么后4根就多了1个过孔的延迟。如果每个过孔长度是60mil对应的延迟大约是10ps4根线就多了10ps的偏差。3.2 过孔长度的精确计算方法要精确计算过孔延迟需要知道三个参数过孔的实际长度、信号在过孔中的传播速度、以及过孔残桩Stub的影响。过孔的实际长度取决于它连接的层。比如一个从顶层Layer 1到内层Layer 5的过孔如果层叠结构中每层之间的介质厚度是已知的那么过孔长度就是这几层介质厚度加上铜箔厚度的总和。在Allegro的Cross Section Editor里可以看到每一层的厚度把过孔穿越的层间厚度累加即可。传播速度的计算公式是V c / sqrt(εr)其中c是光速约3×10^8 m/sεr是介质的相对介电常数。对于常见的FR4板材εr大约在4.2到4.6之间。取εr4.3则V 3×10^8 / sqrt(4.3) ≈ 1.45×10^8 m/s。换算成更直观的单位传播延迟 1/V ≈ 6.9ps/mm或者说约0.175ps/mil。所以一个长度为60mil的过孔延迟大约是60 × 0.175 ≈ 10.5ps。但这里有个细节过孔在PCB上穿越不同层时可能经过不同的介质材料而且过孔的阻抗通常比走线低典型过孔阻抗在40-50欧姆而走线是50欧姆这会导致信号在过孔中的传播速度略有不同。不过对于大多数等长计算来说用上述近似公式已经足够误差通常在5%以内。3.3 过孔残桩对延迟的额外影响高速设计中还有一个容易被忽略的因素过孔残桩。当信号从顶层换到内层时过孔在信号离开的那一层以下还会有一段多余的金属柱这就是残桩。残桩本身不传输信号但它会形成一个谐振腔在特定频率上产生反射和损耗间接影响信号的到达时间。残桩的长度等于过孔总长度减去信号实际经过的长度。比如一个过孔从顶层贯穿到底层但信号只从顶层走到第5层那么第5层到底层的那段就是残桩。残桩越长对信号完整性的影响越大。在10Gbps以上的信号中残桩通常需要控制在15mil以内否则需要采用背钻Back Drilling工艺把残桩去掉。对于等长计算来说残桩本身不直接增加传播延迟但它会改变信号的群延迟特性在仿真中表现为额外的延迟偏差。所以在做高精度等长时如果过孔残桩较长建议通过仿真提取实际的过孔延迟而不是简单用长度乘以传播速度来估算。4. 把Pin Delay和过孔长度纳入等长约束的完整流程4.1 约束设置的整体思路在Allegro里做等长约束核心逻辑是总延迟 走线延迟 Pin Delay 过孔延迟。Constraint Manager里的Relative Propagation Delay约束默认只计算走线的物理长度。要让Pin Delay和过孔延迟参与计算需要做两件事一是启用Pin Delay功能把芯片厂商提供的数据填入对应的Pin Pair。二是确保过孔延迟被正确计算这通常需要Allegro的Sigrity或者第三方仿真工具配合或者在约束里手动补偿。具体操作上Allegro的Constraint Manager提供了一个Pin Delay选项勾选后Pin Delay值会被加到总延迟中。而过孔延迟Allegro本身不会自动计算每个过孔的长度需要你在约束里通过Extra Length或者手动调整目标长度来补偿。一个实用的做法是先统计每组等长信号中每个网络的过孔数量然后以过孔数量最多的网络为基准其他网络每少一个过孔就在目标长度里减去对应的过孔延迟。这样就把过孔差异转化成了走线长度的调整量。4.2 具体配置步骤与参数填写假设你有一组DDR4数据线DQ0-DQ7需要做等长目标偏差控制在5mil以内。芯片厂商提供的Pin Delay数据显示DQ0-DQ3的Pin Delay是50psDQ4-DQ7的Pin Delay是70ps。PCB走线中DQ0-DQ3各经过1个过孔长度60milDQ4-DQ7各经过2个过孔。第一步在Constraint Manager中打开Relative Propagation Delay选择DQ0-DQ7这组网络。第二步为每个Pin Pair设置Pin Delay。DQ0-DQ3填50psDQ4-DQ7填70ps。注意单位要和约束单位一致。第三步计算过孔延迟差异。1个过孔60mil延迟约10.5ps。DQ4-DQ7比DQ0-DQ3多1个过孔多10.5ps。第四步设定目标长度。假设以DQ0为基准DQ0的总延迟 走线延迟 50ps 10.5ps。DQ4的总延迟 走线延迟 70ps 21ps。为了让总延迟相等DQ4的走线延迟需要比DQ0少(70-50) (21-10.5) 30.5ps换算成FR4上的长度大约是30.5 / 6.9 ≈ 4.4mm约173mil。也就是说DQ4的走线要比DQ0短173mil才能补偿Pin Delay和过孔带来的额外延迟。如果你不知道这个差异直接把所有线绕成一样长DQ4就会比DQ0晚到30.5ps在DDR4-3200下就是接近10%的UI偏差。4.3 验证等长结果是否真正达标设置完约束、绕完线之后怎么验证等长是否真正达标Allegro提供了几种检查方式Constraint Manager的实时检查绕线过程中Constraint Manager会实时显示每个网络的实际延迟和偏差绿色表示达标红色表示超标。Report功能可以生成详细的等长报告列出每个网络的实际长度、Pin Delay、总延迟和偏差值。Sigrity仿真对于高精度要求可以用Sigrity做后仿真提取实际的传播延迟包括过孔和封装的完整影响。我个人的习惯是在Allegro里先做一轮基于约束的等长检查确保走线长度和Pin Delay都设置正确然后用Sigrity做一次快速仿真验证实际延迟是否在预期范围内。两步都过了基本就没问题。5. 几个真实项目中的踩坑记录与排查思路5.1 Pin Delay单位搞错导致等长全部失效这是我早期做的一个项目一颗FPGA的DDR3接口Pin Delay数据从厂商的Excel表里导出单位是ps。但我的Allegro设计单位设置的是mil导入的时候没有注意单位转换直接把ps的数值填进了mil的字段。结果就是Pin Delay被放大了大约6倍因为1ps对应的长度远小于1mil等长约束完全失效绕线绕得乱七八糟时序怎么都过不了。排查过程是这样的先检查了走线长度发现Constraint Manager显示的总延迟和手动计算的走线延迟对不上差了很大一截。然后逐项检查约束设置发现Pin Delay列的数值明显偏大。最后追溯到单位设置确认是单位不匹配导致的。修复方法很简单把Pin Delay的数值从ps转换成mil再填入或者把设计单位改成ps。但教训是深刻的任何从外部导入的数据第一件事就是确认单位。后来我养成了一个习惯在Constraint Manager里设置Pin Delay之前先在一个测试网络上填一个已知值验证一下总延迟的计算结果是否符合预期确认无误后再批量导入。5.2 过孔数量统计遗漏导致部分信号偏差另一个项目是PCIe Gen3的差分对等长。差分对内部的P和N需要严格等长同时不同差分对之间也有一定的等长要求。当时我在Allegro里设置了差分对内部的等长约束绕线也绕得很仔细但仿真结果发现有几对差分对的延迟偏差超过了预期。排查后发现问题出在过孔上。有几对差分对在换层时P和N经过的过孔长度不一样。因为PCB层叠结构中P和N的换层位置不同一个从顶层换到第3层另一个从顶层换到第5层过孔长度差了将近40mil对应约7ps的延迟偏差。这个偏差在Allegro的走线等长检查里是看不出来的因为走线长度确实等长但过孔长度不等。解决办法有两个一是调整换层策略让P和N经过相同长度的过孔二是在约束里手动补偿过孔差异把过孔延迟加到目标长度里。我们最终选择了第一种方案因为差分对的对称性对信号完整性更重要能通过布局调整解决的尽量不要用约束补偿。5.3 残桩引起的延迟偏差怎么发现和解决还有一个比较隐蔽的坑过孔残桩。在一个10Gbps的背板项目中信号从顶层换到内层过孔贯穿了整个板子残桩长度超过了80mil。仿真结果显示信号在特定频率上出现了明显的延迟波动导致眼图闭合。排查过程比较曲折一开始怀疑是走线阻抗问题检查了线宽和层叠没问题然后怀疑是连接器换了连接器模型还是有最后用TDR时域反射仿真看了过孔的阻抗曲线发现残桩引起的谐振非常明显。解决办法是采用背钻工艺把残桩长度控制在10mil以内。背钻之后重新仿真延迟波动明显减小眼图也打开了。这个案例说明过孔残桩虽然不直接增加传播延迟但它对信号群延迟的影响在高速场景下不可忽略。如果你的设计速率超过10Gbps过孔残桩一定要纳入考虑。6. 不同速率场景下的精度要求与实用建议6.1 什么速率下必须考虑Pin Delay和过孔长度不是所有设计都需要把Pin Delay和过孔长度算得那么精细。根据我的经验可以大致按速率划分信号速率Pin Delay是否需要过孔长度是否需要等长精度要求 500Mbps通常不需要通常不需要±50mil500Mbps - 1Gbps建议考虑过孔数量差异大时需要考虑±25mil1Gbps - 5Gbps必须考虑必须考虑±10mil 5Gbps必须精确设置必须精确计算含残桩±5mil或更严这个表格是经验值具体还要看时序余量和芯片要求。比如DDR4-3200的UI是312.5ps对应到FR4上的长度大约是45mm如果等长偏差控制在5% UI以内就是约2.2mm约87mil。这个精度要求下Pin Delay和过孔长度的影响就非常显著了。6.2 板材参数对延迟计算的影响前面一直用FR4的εr4.3来估算传播速度但实际上不同板材、不同层间的εr是有差异的。比如普通FR4εr约4.2-4.6传播延迟约6.5-6.9ps/mm中低损耗板材如M6εr约3.8-4.0传播延迟约6.2-6.5ps/mm高速板材如M7、M8εr约3.2-3.6传播延迟约5.7-6.1ps/mm这意味着如果你用的是高速板材同样的物理长度对应的延迟会更小。在做等长计算时一定要用实际板材的εr值而不是默认的FR4参数。Allegro的Cross Section Editor里可以设置每层的εrConstraint Manager会根据这个值来计算延迟。另外同一块板上不同层的εr也可能不同。比如顶层和底层的信号层通常覆盖绿油εr会略有不同内层则完全被介质包围。这些差异在极高精度要求下也需要考虑。6.3 给不同阶段工程师的实操建议对于刚接触高速等长的工程师我的建议是先从理解原理入手搞清楚为什么Pin Delay和过孔长度会影响等长不要急着上手操作。找一个简单的DDR设计练手把Pin Delay设置和过孔补偿的流程走一遍熟悉Allegro的约束管理器。养成记录的习惯每次设置完约束后手动验算一两个网络的总延迟确认和Constraint Manager显示的一致。对于有一定经验的工程师建立自己的检查清单每次做等长设计前逐项确认Pin Delay数据是否拿到、单位是否正确、过孔数量是否统计、残桩是否处理。善用脚本和自动化工具批量处理Pin Delay导入和过孔统计减少人为错误。在项目早期就和芯片厂商确认Pin Delay数据的可用性不要等到layout阶段才发现拿不到数据。对于资深工程师推动团队建立标准化的等长设计流程把Pin Delay和过孔补偿纳入设计规范。在关键项目中引入仿真验证环节用Sigrity或者类似工具做后仿真确保等长结果真正达标。关注板材参数和工艺能力的变化及时更新延迟计算的参数库。7. 从约束设置到仿真验证的闭环等长设计不是设完约束就完事了真正的闭环是约束设置 → 绕线 → 检查 → 仿真验证 → 修正。Allegro的Constraint Manager提供了很好的实时检查功能但它只能检查走线长度和Pin Delay过孔延迟和残桩影响需要仿真工具来验证。我通常的做法是在Allegro里完成绕线后导出ODB或者直接链接到Sigrity做一次快速的时域仿真提取每个网络的实际传播延迟。然后把仿真结果和Constraint Manager的计算结果对比如果偏差在可接受范围内就认为等长达标如果偏差较大就回到约束里检查是不是有遗漏的过孔或者Pin Delay设置错误。这个闭环流程看起来多了一步仿真但实际上能帮你避免很多后期调试的问题。我见过太多项目layout阶段等长检查全绿到了测试阶段发现时序余量不够回头查才发现是过孔或者Pin Delay没算对。与其后期返工不如前期多花几个小时做仿真验证。最后分享一个我在实际项目中总结的小技巧在Constraint Manager里为每组等长信号建立一个虚拟基准网络把所有Pin Delay和过孔延迟都折算成走线长度加到基准上然后其他网络的目标长度都以这个基准为准。这样做的好处是约束设置一目了然检查的时候也容易发现异常值。具体操作是在约束组里选一个网络作为基准把它的目标长度设为走线长度 Pin Delay折算长度 过孔折算长度其他网络的目标长度根据各自的Pin Delay和过孔数量做相应调整。这个方法在多个DDR和PCIe项目中都用过效果很稳。
返回列表