ARTICLE DETAIL

资讯详情

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

高速PCB时序预算中的Pin Delay与过孔长度:Allegro等长设计的关键变量

高速PCB时序预算中的Pin Delay与过孔长度:Allegro等长设计的关键变量 做高速 PCB 设计的人几乎早晚都会遇到同一个场景板卡上所有等长都拉好了约束管理器也一片绿色可一上仿真时序预算就是不对。最初你会怀疑模型没给对、怀疑叠层参数有问题直到把链路一段一段拆开才发现问题往往出在两个特别容易被忽略的环节——Cadence 生态里的 Pin Delay封装引脚延迟和过孔长度。这两个东西在单板上看起来都不大但在高速信号完整性分析里它们是能改写结论的变量。我写这篇文章就是想把 Allegro 环境中 Pin Delay 的设置机制、过孔长度对高速信号的实际影响以及这两者在实际工程里怎么算、怎么落地完整地梳理一遍。内容不限于理论推导更偏重可操作的经验哪些坑我踩过、哪些参数必须在约束管理器里填、哪些问题看似等长实则是残桩在作祟。如果你正在做 DDR、高速 SerDes 或者任何对时序敏感的设计这篇内容值得你耐心看完。1. 高速信号的时序预算Pin Delay 和过孔到底是干嘛的1.1 从“走线做等长”这个习惯说起很多工程师对高速设计的理解是从“等长”两个字开始的。DDR3 数据线要对齐 DQS地址线要对齐时钟SerDes 差分对内要走线长度一致。于是大家就在 Allegro 里拼命拉蛇形线把 Delay Tune 用到极致看着约束管理器里的数值变成绿色就觉得万事大吉。但这个习惯里藏着一个先天缺陷等长比较的对象通常只是 PCB 上铜箔走线的长度或者说是 X-Y 平面上的投影路径。而一个信号从驱动器的硅片出发到接收器的硅片结束中间经过的物理路径远不止 PCB 表面这一段。它要先经过芯片封装内部的 bond wire、RDL 层、bump 或者 lead frame再通过焊球和 PCB 焊盘进入走线走线中途还可能穿过几个过孔换到别的层最后再经过接收端的封装内部路径到达硅片。这就是 Pin Delay 和过孔长度登场的背景。它们一个是“封装内部”的延迟一个是“PCB 厚度方向”的延迟都属于等长匹配里容易被漏掉的非水平路径。漏掉它们哪怕你在 Allegro 里把走线长度调到一根头发丝那么准真实信号的到达时间依然是偏的。1.2 一条信号链路的时间组成如果把一条高速信号的完整传播路径拆开大致可以写成这样源端硅片到源端封装引脚的时间这个就是源端 Pin Delay通常由封装设计与键合工艺决定源端焊球、焊盘到 PCB 走线的过渡时间这一小段往往已经包含在封装模型里但在 PCB 端容易被重复计算或者漏算PCB 走线的传播时间这是大多数人最熟悉的铜箔路径走线换层时过孔贡献的时间包括过孔圆柱体沿板厚方向的传播延迟以及残桩带来的反射延迟接收端焊盘、封装引脚到接收端硅片的时间也就是接收端 Pin Delay。写成公式就是[ T_{total} T_{pinDelay_source} T_{trace} T_{via} T_{pinDelay_sink} ]在 Allegro 的约束管理器里我们常说的 Relative Propagation Delay相对传播延迟等长本质上就是在对齐这个链路的整体时间。只不过它默认把 Pin Delay 当成一个可以配置的起偏量而把走线长度当成主变量来调。如果你完全不管 Pin Delay那么等长匹配的实际含义就变成了“只对齐了 PCB 走线的耗时”封装延迟差异则原封不动地残留下来成为时序预算里的误差项。1.3 一个等长误差的真实案例我接过一块八层 DDR3 板子地址线组等长做得非常漂亮所有走线长度误差控制在 5 mil 以内可实际跑起来读写不稳定。后来把封装资料调出来一对比发现地址组里有两根信号的控制器封装 Pin Delay 差了将近 120 ps。按 FR4 中大约 160 ps/mm 的信号速度折算这 120 ps 相当于约 0.75 mm 的走线长度差。也就是说PCB 走线虽然等长但真实链路的时间差已经远远超出 DDR3 地址信号的时序容限。类似的问题在过孔上也出现过。一块板子上的数据线大部分走在表层只有两根因为 BGA 逃逸孔限制走了内层它们各自多穿了两个过孔额外增加了大约 0.4 mm 的 Z 向路径。如果没有把这些过孔长度折算回走线约束里这两根线就会悄悄带上约 65 ps 的额外延迟。等到仿真阶段才发现返工成本就高了。2. Allegro 中 Pin Delay 机制完全拆解2.1 Pin Delay 的来源与定义Pin Delay 这个术语容易让人产生两种误解。一种是认为它指的是 PCB 上引脚到引脚之间的延迟另一种是把它和过孔延迟混为一谈。在 Cadence Allegro 的高速约束体系里Pin Delay 专门指器件封装内部的固有延迟也就是信号从 die 上的 pad 出发经过封装基板、键合线或凸点最终到达器件引脚比如 BGA 焊球所需的时间。这个值通常由芯片厂商在封装设计阶段确定并随 IBIS 模型、封装资料或 BSDL 文件一起释放给下游设计者。它不是一个可以随意填写的数字而是代表一个客观存在的物理延迟。在真实的高速设计中有的芯片 Pin Delay 可以做到几十皮秒有的封装复杂的大芯片可以达到几百皮秒甚至更多。不同类型信号之间的 Pin Delay 差异恰恰是等长匹配中必须补偿的部分。在 Allegro 里Pin Delay 的数值单位通常用两种方式表达一种是时间单位比如 ps另一种是等效长度单位比如 mil 或者 mm。这两种表达方式本质上是一回事只要知道信号在封装内部的有效传播速度就可以互相换算。问题在于不同来源的资料可能给你不同单位而 Allegro 在约束管理器里希望你填的是它内部约定的那一种这个细节最容易引发错误。2.2 怎么把 Pin Delay 带进 AllegroPin Delay 进入 Allegro 的途径主要有三条。第一种在原理图阶段给引脚添加属性。在 OrCAD Capture 或者 Allegro 的 Design Entry HDL 里你可以为器件的某个引脚添加名为 PIN_DELAY 的自定义属性值填上该引脚的封装延迟时间或等效长度。当原理图通过网络表传到 Allegro PCB Editor 后这些属性会跟着器件和引脚一起保留下来约束管理器读取时就能直接看到。第二种在封装库里定义。如果你是自己建封装可以在 Allegro Package Editor 中打开 .dra 文件选中某个 pin在属性编辑器中添加 PIN_DELAY 属性。这种方法适合封装资料非常明确的器件因为属性直接绑定在引脚上原理图端不需要额外操作。第三种也是最常用的兜底手段直接在 PCB 阶段的约束管理器里手动填写。Allegro Constraint Manager 的 Electrical 约束中有专门显示和编辑 Pin Delay 的入口。你不需要回到原理图或者封装库只要网络已经存在就可以针对网络上的每一个引脚填入对应的 Pin Delay 值。提示不管用哪种方式导入最终判断依据都以约束管理器里的显示为准。有时候原理图里属性写对了但因为单位不匹配约束管理器里读出来的数值会差一个数量级必须仔细核对。2.3 Constraint Manager 里怎么配置和查看我用 Allegro 17.2 的界面举个例子。打开 Constraint Manager 后切到 Electrical 视图在左边的目录树里依次展开 Net - Routing - Wiring。右侧工作表会列出设计中的所有网络以及对应的 Min Propagation Delay、Max Propagation Delay、Relative Propagation Delay 等列。要用 Pin Delay需要先选中有等长需求的网络然后在 Relative Propagation Delay 列上右键调出 Pin Delay 编辑窗口。这个窗口会列出所选网络包含的所有引脚每一行对应一个器件引脚你可以直接双击数值栏输入该引脚的封装延迟。如果网络数量比较多也可以在窗口里复制 Excel 表格数据批量粘贴效率会高很多。填好 Pin Delay 之后Allegro 会在计算 Relative Propagation Delay 的等长匹配时自动把封装延迟差异折算进目标长度里。具体表现就是同一个等长组里不同网络的目标走线长度会不再相同有的网络要求你多走一点有的网络要求你少走一点目的就是补偿封装延迟的差异。很多人第一次看到“等长组目标长度不一样”会发懵其实这正是 Pin Delay 生效的正常表现。2.4 Pin Delay 设置的常见误区误区一只填了源端或者只填了接收端。正确的做法是把源端和接收端的 Pin Delay 都考虑进去因为等长匹配算的是相对差值只填一端等于人为制造了偏差。误区二符号正负搞反。Allegro 里 Pin Delay 的符号会参与加减运算有些版本里方向约定是“接收端减源端”有些资料里则相反。如果你拿到的芯片资料给出了正负延迟定义必须先和 Allegro 的规则核对一遍否则原本要补偿的延迟反而变成了额外误差。误区三用 Pin Delay 字段去填过孔延迟。这是完全错误的。过孔延迟属于 PCB 上的 Z 向路径而 Pin Delay 属于封装内部路径两者物理位置不同约束管理器里的处理逻辑也不同。把过孔延迟塞进 Pin Delay 表不仅无法正确补偿过孔的影响还会让等长计算结果偏离真实链路。3. 过孔长度从寄生效应到时序贡献3.1 过孔是立体的传输结构很多工程师习惯把过孔理解为“一根短导线”在计算长度时甚至直接忽略它。但在高速信号完整性分析里过孔是一个典型的三维结构它有圆柱形的孔壁、有连接各层的焊盘、有隔离用的反焊盘还有从信号层到各参考层之间的电容耦合。这些寄生参数会在高频下形成阻抗不连续点信号经过时会发生反射产生振铃影响波形质量。更关键的是过孔还有长度。这个长度不是指钻孔深度那么简单而是指信号在过孔孔壁上实际传播的路径。一个通孔从顶层贯穿到底层如果目标信号层在 L3那么信号在过孔里从顶层走到 L3只使用了过孔的一部分剩下的从 L3 到底层的部分称为残桩stub。残桩看起来只是“多余”的铜但在高速信号眼里它是一段一端开路、另一端连着主信号路径的短传输线。信号经过这里会在残桩末端发生反射反射波回到主路径后会叠加在原始信号上形成振铃和抖动。残桩越长反射延迟越大对信号的影响就越明显。3.2 残桩效应与背钻的取舍残桩的电气长度决定它在什么频率下影响最大。工程上一般用四分之一波长来估算残桩的谐振频率公式可以粗略写成[ f_{stub} \approx \frac{v}{4 \times L_{stub}} ]其中 v 是信号在介质中的有效传播速度FR4 中大约按 150 mm/ns 到 160 mm/ns 估算但更严谨的做法是用叠层导出有效介电常数来算。举一个例子如果残桩长度为 1 mm在有效速度 150 mm/ns 的介质中谐振频率大约是 37.5 GHz这看起来很高。但如果残桩长度做到 3 mm谐振频率就会降到 12.5 GHz 附近而这个频段对于 25 Gbps 以上的高速串行信号来说已经处于信号频率成分的高能量区域内影响就非常显著。因此在高速设计里背钻back-drill成了常见的处理手段。背钻的道理很简单就是用一把口径比原钻孔更大的钻头从板子背面把不需要的残桩铜壁钻掉。背钻后残桩长度可以从原来的 3 mm 甚至更长压缩到 0.2 mm 以下谐振频率被推到很高远离信号频段反射问题自然大幅缓解。背钻不是免费的。它增加了一道工序成本和时间都有上升而且在背钻时如果控制不好深度还可能钻到信号层造成开路或者阻抗突变。所以工程上的取舍是低速信号不走背钻高速信号若使用通孔换层优先评估残桩长度必要时才做背钻。3.3 过孔长度对延时的定量影响残桩是信号完整性里的危害因素而过孔里真正“有用”的那一段也就是信号实际走过的厚度方向路径会贡献额外的传输延迟。理解这一点很容易信号从顶层换到内层它走的不只是水平的 X-Y 路径还有一个 Z 向的垂直路径。这个垂直路径的长度等于信号起始层到目标信号层之间的介质厚度差。计算过孔延时并不玄乎本质上和走线延时一样都是物理长度除以有效传播速度。假设顶层到 L3 的厚度差是 0.25 mm那么一个过孔就带来大约[ T_{via} \frac{0.25\ mm}{150\ mm/ns} \approx 1.67\ ps ]这个数字看起来很小但等长匹配的精度要求往往很高。一个 DDR4 数据组可能要求所有线对齐到±5 mil 以内而一个过孔 0.25 mm 等于约 10 mil。也就是说穿过一个过孔就等于占用掉整组等长的可用余量的一半以上。如果一根数据线上有 3 个换层过孔而另一根线全走表层两者之间的过孔长度差异就是几十 mil 的量级完全无法忽略。3.4 Allegro 中把过孔长度计入等长很多人问过同一个问题Allegro 的走线长度统计里到底有没有包含过孔长度这个问题的答案在不同版本和不同配置下并不一致所以最保险的做法是主动确认而不是依赖默认值。在 Allegro 的 User Preferences 中有一个与等长计算相关的选项路径大致在 Setup - User Preferences - Design Flow - Method里面关于 Etch Length Calculation 的设定会影响约束管理器计算走线长度时是否计入过孔。有些版本提供 Physical / Conductor 这类选择Physical 会把 Z 向路径按物理深度计入Conductor 则更偏向于水平方向上的铜箔投影长度。如果你希望等长计算更贴近真实链路的传播时间建议开启包含过孔长度的方式并在做最终评审时用第三方仿真或者实际测量来验证。如果你的版本里找不到相关设置也可以采用手动补偿的方式在叠层管理器里读取出各层的 Z 坐标然后逐个统计信号路径上经过的过孔数量把每一段换层的厚度差加起来再除以信号有效传播速度得到过孔总延时最后把这部分等效长度加入到约束目标中。这个方法虽然繁琐但胜在完全可控适合项目上对版本配置没有十足把握的场景。4. 实操Pin Delay 过孔长度怎么在 Allegro 里落地4.1 建立带 Pin Delay 的约束集实际操作中我最推荐的做法是在工程一开始就把 Pin Delay 纳入约束集而不是等到布线完成后再补。打开 Constraint Manager切到 Electrical 视图找到 Electrical Constraint Set新建一个 ECSet比如叫 DDR4_CTRL_GROUP。在 Routing - Wiring 下给这个 ECSet 配置 Relative Propagation Delay 属性。配置时需要指定一个目标网络其他网络作为成员网络等长匹配会以目标网络的实际长度和 Pin Delay 作为基准成员网络必须对齐到这个基准。接下来为这个 ECSet 所包含的网络逐一填写 Pin Delay。这里我有一个实用习惯先把芯片封装资料里给出的所有信号 Pin Delay 整理到一张 Excel 表里包括电压域、信号名、引脚名、Pin Delay 值然后在约束管理器的 Pin Delay 编辑窗口中直接粘贴。这样不仅快还方便后期对照检查。填完以后约束管理器会自动计算出每个成员网络相比于目标网络的“有效长度差”并在相关列中显示你需要补偿的长度。4.2 Relative Propagation Delay 等长计算实例举一个简化的例子。假设 DDR4 的一个数据组里DQS0 是目标网络DQ0 到 DQ7 是成员网络。查封装资料得到 DQS0 的接收端 Pin Delay 是 80 ps而 DQ2 的接收端 Pin Delay 是 20 ps。两者的差值就是 60 ps。在 FR4 介质中有效传播速度约 150 mm/ns换算成补偿长度大约是[ 60\ ps \times \frac{150\ mm/ns}{1000} 9\ mm ]等等这个计算要重新捋一下单位。150 mm/ns 表示信号在 1 ns 内走 150 mm所以 1 ps 内走 0.15 mm。60 ps 对应的长度就是[ 60 \times 0.15\ mm 9\ mm ]这个 9 mm 不是让你直接多走 9 mm 的蛇形线而是说 DQ2 由于封装延迟比 DQS0 短了 60 ps所以在 PCB 走线上需要额外补偿约 9 mm 的物理长度。当然真实 DDR4 系统中 Pin Delay 差值可能没有这么大但量级概念是相同的几十 ps 的封装延迟差会要求你在走线长度上补偿出好几毫米的差异。如果不填 Pin Delay这 9 mm 就彻底失踪了等长必然失准。4.3 换层过孔长度测算实操处理过孔长度我通常会走一遍这样的流程。第一步在 Allegro 中打开 Setup - Cross-section记录每一层叠层的 Z 坐标建立一张“层号 - Z 坐标”的对照表。Z 坐标差异就是信号换层的物理厚度差。第二步选中需要分析的信号网络在约束管理器或者 PCB 编辑器中查看该网络的走线路径确认它经过哪些换层过孔。这里可以使用 Allegro 的 Show Element 功能点选每一个过孔查看它的 Start Layer 和 End Layer。如果过孔是盲埋孔起始和结束层都写得清清楚楚如果是通孔通常只显示 Top 到 Bottom但你还需要结合信号网络实际连接到的铜箔层判断信号真正走出的是哪一段。第三步把每个过孔的有效长度累加。比如顶层到 L3 的过孔用了 0.25 mm 厚度L3 到 L5 的过孔用了 0.22 mm 厚度两个过孔合计贡献 0.47 mm 的 Z 向路径。这个值可以直接折算成等效走线长度加到你手工维护的总长度账本里。第四步回到约束管理器如果里面显示的长度还没有包含过孔就把这段折算后的长度加到相应网络的目标要求中。如果显示已经包含过孔则不需要重复添加。这里最怕的就是两边都算一遍所以我建议项目组里统一一个约定要么相信工具要么相信自己不要混着用。4.4 用 SigXplorer 或 Sigrity 做 SI 验证时序和信号完整性问题最终还是要靠仿真来说话。Cadence 生态里SigXplorer 适合做快速的拓扑分析和“可行性仿真”Allegro Sigrity 则适合做更完整的全链路提取。在完成带 Pin Delay 的等长约束后我会把典型信号网络从 Allegro 送入 SigXplorer。在拓扑结构中除了 IBIS 模型、传输线模型之外还要明确加入过孔模型。SigXplorer 里可以设置过孔的层间互连信息也可以导入从叠层和过孔参数生成的无源模型。然后观察源端和接收端的波形检查过冲、振铃和时序余量。更严谨的做法是使用 Sigrity 的 SystemSI 或 PowerSI 做 S 参数级别的提取。不过对于绝大多数设计团队来说先用 SigXplorer 的时域仿真把趋势看明白再决定要不要做更重的全链路仿真是投入产出比最高的路径。仿真结果如果显示眼图闭合或者时序余量不足回头检查 Pin Delay 是否填错、过孔残桩是否需要背钻往往能找到症结。注意仿真不是说代替一切而是验证你约束管理器里的“绿色”到底是不是真实的“绿色”。我见过太多等长约束一片绿、但仿真结果一塌糊涂的案例最后追根溯源都是 Pin Delay 或者过孔长度没有正确纳入计算。5. 常见问题与排查技巧实录5.1 等长明明对了波形为什么还是差这是最经典的问题。我的排查顺序通常是先看等长约束里是否使用了相同的目标网络和成员网络再看 Pin Delay 是否填齐、符号是否正确然后看信号换层过孔是否有残桩最后看参考平面是否连续。很多时候波形差并不是等长没做对而是等长之外的因素在捣乱。举个例子地址组等长在约束管理器里绿得发亮但仿真显示地址信号上升沿有明显的台阶感。查到最后发现其中三根地址线在换层附近穿越了一个被电源平面分割的区域返回电流被迫绕行导致有效回路电感剧增。这和 Pin Delay、过孔长度无关但同样属于高速信号完整性问题。所以遇到现象不要急着怀疑工具先按照链路组成的各个方面逐项排查。5.2 过孔残桩导致的振铃和眼图闭合如果仿真波形上出现周期性振铃而且振铃的周期接近四分之一残桩波长的往返时间那基本可以锁定过孔残桩。处理手段不外乎几种如果层叠允许把高速信号换到更靠近表层的位置减少残桩长度如果设计允许直接做背钻如果因为成本或工艺不能背钻那就减少换层次数甚至用盲埋孔结构替代通孔。在 Allegro 里检查残桩长度时我会重点看信号在哪个信号层进出过孔。一个通孔贯穿 10 层板如果信号从 L2 进、L3 出实际残留的 stub 是从 L3 到底板这一段长度不短。如果信号从 L2 进、直接从表层出那 stub 反而比较短。这个细节在评审时经常被忽略。5.3 层切换后等长显示异常Allegro 中偶尔会出现一种现象某条线在布线时换了一个层约束管理器里的长度就突然变长或者变短变化幅度明显超过预期。这可能就是过孔长度参与计算的设置在起作用也可能是换层导致蛇形线被自动优化掉了一部分。遇到这种情况先别急着调线确认一下你使用的是不是同一套长度计算规则再看换层前后实际的 Z 向路径变化是否合理。5.4 常见问题速查表问题现象可能根因排查方法解决措施等长指标绿仿真时序仍差Pin Delay 未填或填错打开约束管理器 Pin Delay 表逐一核对从封装资料获取准确 Pin Delay统一单位和符号波形出现规律性振铃过孔残桩过长计算过孔 stub 谐振频率对比信号谐波背钻、换层到靠近表层、使用盲埋孔信号换层后等长突变长度计算规则里是否计入过孔不一致检查 User Preferences 的 Etch Length 设置统一团队内部规则避免不同工具设置冲突高速差分对内 skew 过大对内过孔数量或参考层不一致检查差分对内每个单端的换层路径尽量保证差分对走线层和过孔结构对称低电平处有台阶或回勾返回电流路径不完整检查平面层是否有缝隙或开槽优化参考平面连续性在换层处增加回流地过孔这个表格是我在项目复盘时常用的模板实际碰到的问题远不止这些但核心思路是一样的先定位是“长度”的问题还是“路径”的问题还是“阻抗”的问题再决定用什么工具去解决。不要一上来就以为是软件算法有 bug绝大多数情况下是我们没有把所有该考虑的物理路径放进约束里。最后再分享一个个人习惯我在项目里会专门维护一份“时序链路台账”把每条关键信号的源端 Pin Delay、PCB 走线长度、过孔数量与总厚度、接收端 Pin Delay 都列出来用最朴素的方式做一次手算估算再与 Allegro 约束管理器的结果对比。两者差值在合理范围内我才敢放心交给仿真团队。这个习惯帮我提前发现了不少问题尤其是那些“等长全绿但仿真不收敛”的疑难杂症。对于刚接触高速设计的人我也建议从这份台账开始它比任何自动化工具都更能让你理解信号到底是怎么走完一整条链路的。
返回列表