ARTICLE DETAIL

资讯详情

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

高速PCB设计:Pin Delay与过孔长度对时序的影响及Allegro处理方法

高速PCB设计:Pin Delay与过孔长度对时序的影响及Allegro处理方法 搞高速PCB设计这些年我踩过一个特别典型的坑一块DDR4板卡原理图照着参考设计画的等长规则也按芯片手册做了可板子贴回来死活跑不到标称频率。排查到最后才发现问题根本不在我画的那段板内走线而在芯片封装里面那段看不见的“路”以及换层时那个不起眼的过孔上。从那以后我再也没有小看过Pin Delay和过孔长度对信号完整性造成的影响而Allegro里这两项恰恰又是最容易被人忽略的约束项。这篇东西我就把这两块内容彻底拆开讲透希望能帮大家少走弯路。1. Pin Delay的本质芯片引脚到Die之间那段被忽略的“隐藏走线”1.1 从物理结构拆解Pin Delay的来源大多数人对“走线延迟”的理解都停留在PCB表层或者内层那一段看得见摸得着的铜箔上但实际上信号从驱动端芯片内部出来到真正进入PCB走线中间还有一段路要走。这段路就是芯片封装内部的Die到引脚之间的连接包括bond wire金线/铜线或者flip chip的凸点、基板走线、封装引脚自身。一段FR4板材上的微带线延迟大概是每英寸140到160ps而封装内部基板的材料介电常数往往比FR4更复杂再加上bond wire本身的电感效应这段隐藏走线造成的延迟通常在几十皮秒到几百皮秒不等。举个例子一颗普通的BGA封装FPGADie在封装中心引脚分布在外围从Die到四个角落的引脚走线长度差异可能达到几百mil换算成时间就是几十甚至上百ps的差距。对于DDR4 2400这样的接口一个UI只有约833ps时序裕量常常只有几十psPin Delay的差异完全可能吃掉你辛辛苦苦拉等长攒下来的那点余量。在Cadence Allegro中Pin Delay被定义为芯片Die焊盘到器件引脚焊盘之间的信号传播时间。它不是一个固定常量同一个封装里不同引脚的Pin Delay值是有差异的。Allegro在计算网络时序时如果在约束设置里没有把Pin Delay包含进去那么你看到的等长结果只是PCB板上那一段真正的全链路时序可能已经不知不觉地偏出去了。1.2 用一组实际数据看懂Pin Delay的量级影响很多新手对Pin Delay没有概念觉得几十ps无关痛痒。我拿实际项目里的数据来说明。某品牌FPGA的DDR4接口芯片手册提供的Pin Delay数据大致如下表所示引脚组最大Pin Delay最小Pin Delay组内偏差DQ[0:7]180 ps125 ps55 psDQS0165 ps140 ps25 psDQ[8:15]172 ps118 ps54 psDQS1158 ps136 ps22 psDDR4的DQ与DQS之间时序裕量有多少呢以2400MT/s为例tDQSSDQS与CLK的建立保持时间的裕量本来就紧巴巴组内skew要求通常做到±10ps级别才算稳妥。如果DQ组的Pin Delay偏差达到50ps而你没有纳入约束等于等长做到再好实际上电时序已经偏出去一个UI的百分之六了。对DDR3或许还能勉强扛住到了DDR4就很容易偶发报错。1.3 Pin Delay、封装延迟与器件延迟三个容易混淆的概念讨论这个话题有个前提是先分清三个概念。Pin Delay指的是封装内部带来的延迟是物理路径导致的不随信号翻转方向变化。封装延迟有时候也被混用为Pin Delay但严格来说封装延迟还可能包含封装引脚本身的引线电感对信号边沿的影响。器件延迟则是芯片内部逻辑门电路的传输延迟通常是tPD类的参数由工艺和电压温度决定。在Allegro的约束管理器里这三者的处理方式不同。Pin Delay可以在器件属性里直接设置或从厂商文件导入Allegro会自动把它加到网络的总飞行时间中。器件延迟一般是芯片手册给一个范围需要你手动在约束的器件延迟Device Delay里填写。如果你的设计把器件延迟算错了或者干脆没填仿真出来的时序是完全不可信的。2. 过孔长度从Z轴方向给信号带来的“额外时间税”2.1 过孔的等效电路模型为什么它不只是一段导线很多工程师直观地认为过孔就是把信号从一层搬到另一层的一根圆柱导体延迟跟它在板子里的物理长度成正比就完了。实际上过孔是一个复杂的阻抗不连续点它的等效模型包含串联电感和对地电容。一个典型的通孔过孔从顶层贯穿到底层寄生电容大约在0.3pF到1pF之间寄生电感则在0.5nH到2nH量级具体数值跟过孔焊盘直径、反焊盘大小、孔径和板厚都有关系。把电容和电感折算成对信号的影响。过孔电容会导致信号上升沿变缓等效为额外的时间延迟过孔电感则会产生感应电压降恶化信号完整性。在高速信号中一个过孔对时序的影响往往用“等效延迟”来估算这个值通常比按过孔物理长度乘板材延迟算出来的要大。因为信号在过孔处的电磁场分布远没有传输线中那么理想一部分能量被储存在寄生参数里表现出来的就是信号到达时间的滞后。算一笔真实项目的账。一块典型的1.6mm板厚FR4材质微带走线延迟约每英寸150ps内层走线延迟约每英寸160到180ps。一个贯穿1.6mm板厚的过孔物理长度大约63mil按材料延迟估算只有约10ps上下。但加上焊盘电容充电和寄生电感的影响实测等效延迟可以达到20到40ps。这意味着一个过孔顶得上几英寸走线带来的延迟设计里换层越频繁累计的“过孔税”就越可观。2.2 工程估算公式与留余量的思路实际设计里我不建议做所谓“精细化”的过孔延迟计算因为过于追求精确反而浪费时间。更务实的做法是用经验范围去留余量。过孔等效延迟的基础估算可以按过孔长度乘材料的单位延迟近似再加上焊盘寄生参数造成的额外延迟。工程上常用的粗略公式是过孔自身物理延迟约等于 过孔长度×板材单位延迟FR4大约6.3ps/mm过孔寄生参数附加延迟按过孔数量叠加通常预留3到8ps每个背钻后的过孔残桩减少寄生电容下降附加延迟可以取下限比如说一条高速信号从顶层走到BGA底部扇出换到内层再换回顶层连接接收端全程两个过孔按每个过孔等效30ps算这条链路光是过孔贡献的延迟就有60ps。如果规则允许少换层或者通过合理的布线规划减少过孔数量对时序的影响非常直接。2.3 残桩是过孔长度问题的放大器过孔长度真正可怕的地方在于残桩Stub。一个通孔过孔信号从第四层换层走到内层过孔从第四层到顶层这一段是信号不经过的但它仍然连接在传输线上相当于在信号路径上并联了一个开路的短截线。这个残桩虽然不承担传输功能却会反射信号、引起谐振而且会让过孔的等效电容和电感变得更大。对高速信号的量化影响残桩长度超过信号上升沿对应波长的十分之一时反射损耗会明显恶化。一个1.6mm板厚设计里信号如果走L4层而顶层到L4之间有1.1mm的残桩对5Gbps以上的信号就足以让眼图闭合。消除残桩的手段就是背钻把过孔多余的桶钻掉。Allegro里对背钻也做了专门支持可以设置背钻深度、背钻孔径以及哪些网络需要背钻。DDR4设计里我建议所有高速信号换层过孔都做背钻哪怕成本高一截换来的时序余量是值得的。3. Allegro中Pin Delay的落地设置与约束管理3.1 获取Pin Delay数值的几种渠道Pin Delay数据看起来是个小数字但错误录入的后果很严重。这个数值从哪里来首选出芯片厂商提供的封装模型FPGA厂商通常提供包含Pin Delay信息的ASCII文件可以直接导入Allegro。导入路径一般在约束管理器或者PCB Editor的导入功能里格式可能是CSV、XML或者厂商自定义格式。没有现成文件时也可以从芯片数据手册的封装延迟表格里手动录入。Allegro的器件属性里有Pin Delay属性可以对每个引脚单独赋值也可以对一组引脚统一设定。这个操作虽然繁琐但是DDR4以上速率的设计里值得花这个时间。还有一种情况是芯片厂商的IBIS模型里含封装参数包括R_pin、L_pin、C_pin可以粗略估算Pin Delay。但要注意IBIS封装参数主要是为了I/V曲线仿真用的计算出来的延迟精度未必高。能用厂商明确给出的Pin Delay文件就别偷懒用估算值。3.2 在约束管理器中把Pin Delay纳入总线等长计算拿到Pin Delay数据后关键是让Allegro在计算等长约束时把它包含进去。操作上的核心是设置约束管理器的Delay Calculation选项勾选上Pin Delay选项。这个时候Allegro计算相对传播延迟Relative Propagation Delay时就会把每个Pin的延迟时间加在一起。举个实际例子。DDR4的DQ0到DQ7作为一组Match Group如果你定义了引脚Pin Delay属性并开启包含Pin Delay的计算那么Allegro的RPD结果会显示为实际板内走线延迟加引脚延迟的净值。你在Length面板里看到的不是纯走线长度而是做了延迟折算后的等效长度。DQS信号本身的Pin Delay和DQ不同软件会自动按延迟折算走线长度来匹配省去了大量手算工作。不过要注意Allegro显示的长度折算采用了默认的延迟模型如果你板子的叠层材料与默认差异较大应该在约束管理器的叠层设置里把每层的介电常数和延迟常数填对折算结果才有意义。3.3 关于SMD焊盘和通孔焊盘的差异处理另一个实操中容易翻车的是SMD引脚和通孔引脚混合的情况。BGA焊球属于SMD焊盘结构而传统的DIP、插件连接器则是通孔结构。通孔引脚本身带有过孔残桩在高速设计里这个残桩会造成额外反射。Allegro里可以通过设置引脚属性为Through-Hole并配合背钻规则来优化但要注意的是这类引脚的Pin Delay与SMD引脚不同建模时需单独验证。DDR5时代这种情况更加明显因为速率进一步提升同样的残桩长度对时序的影响成倍放大。如果芯片封装是BGA尽量用SMD焊盘加盘中孔的设计配合树脂塞孔和背钻把引脚处的反射降到最低。4. 过孔长度控制在Allegro设计流程中的切入时机4.1 叠层设计阶段就要决定过孔的类型和长度很多工程师习惯在布线阶段才开始想过孔的问题其实过孔的类型和长度在叠层设计阶段就基本被锁死了。叠层决定了信号在哪一层走、过孔从哪层到哪层、残桩有多长。比如8层板1.6mm厚度信号走L3层时从L1到L3的过孔长度大概占板厚的四分之一左右残桩则占四分之三。这个比例直接决定你后续要不要背钻。Allegro里做好叠层设置后信号层分配会影响过孔长度表现。建议在叠层阶段就把DDR走线层尽量靠近表层分配减少过孔总长度同时高速信号尽可能在同一层完成走线避免频繁换层。这里有个容易被忽略的点Allegro的叠层管理器虽然只是设计工具但它提供的延迟常数会影响所有等长计算过孔长度对延迟的影响也要在这个阶段评估。4.2 换层设计时过孔对时序的“蝴蝶效应”每次换层都意味着路径上新增一个阻抗不连续点。高速信号从表层微带走线换到内层带状线时参考平面发生变化回流路径也要跟着切换。如果旁边没有放置足够的回流地过孔回流电流就得绕远路形成一个大环路这个环路的电感效应比过孔本身的寄生参数还可怕造成的额外延迟可达几十ps。所以我在Allegro里做DDR布线时有个习惯高速信号换层的位置一定放置地过孔阵列信号过孔两侧各放至少两个地孔间距不超过信号过孔间距的150mil。Allegro的复制和阵列摆放功能可以很快完成这件事但很多人根本不意识到这些地孔是在给时序“省税”。4.3 背钻、盲埋孔与BBVia的处理逻辑过孔长度控制的手段无非三种背钻减小残桩、盲埋孔从结构上消除残桩、以及尽量降低换层次数。Allegro在背钻处理上很成熟可以定义背钻深度公差也可以生成背钻图纸。但背钻规则必须集中在特定的高速网络上因为背钻孔径比原过孔大如果整板都做背钻密度和成本都承受不了。盲埋孔则从叠层结构上解决问题。比如一阶HDI板使用L1-L2的盲孔信号从L1到L2本身就只有很短的过孔残桩问题从源头消失。但盲埋孔的成本高等长计算也更复杂因为不同层的过孔长度不一样。Allegro支持在约束管理器中设置不同的过孔延迟模型对盲埋孔设计要充分利用这个能力。对于同时存在多种过孔类型的设计最稳妥的方法是让Allegro的延迟计算把过孔纳入进来。PCB Editor的Constraint Manager里可以设定Via Delay并把它与走线延迟一起计入等长匹配。DDR5设计里这部分已经变成标配了。5. DDR4到DDR5的实战视角Pin Delay和过孔是如何协同影响时序的5.1 一条完整时序链路的拆解计算做高速接口设计不能只看某一小段链路。以一个DDR4写操作路径为例从控制器Die到DRAM Die的完整延迟包括以下几段控制器封装内部的Pin Delay约80到200ps控制器引脚到PCB走线起点之间的过孔延迟约20到40psPCB表层走线延迟每英寸约140到160ps换层过孔延迟每处约20到40psPCB内层走线延迟每英寸约160到180ps接收端引脚过孔延迟约20到40psDRAM封装内部的Pin Delay约50到150ps把这些段全部加起来才是信号真正的飞行时间。很多人做等长的口径只算了PCB走线那一段偶尔加个过孔估算值Pin Delay几乎从不考虑。这也是为什么仿真和实测总是对不上的关键原因。我们做一个具体的数字代入。假设控制器Pin Delay为150psPCB走线为2000mil表层线约300ps两个换层过孔共60psDRAM Pin Delay为100ps实际总延迟约610ps。如果等长设计只算了300ps再把其他信号的等长也按300ps去匹配时序偏出去的量可想而知。5.2 等长不等价的真相不同层走线延迟差与过孔数量的叠加还有一个很多人忽视的问题同样标称等长的差分对或总线因为走线层的不同实际延迟并不相等。表层微带线的延迟也许只有140ps/inch而内层带状线可能有170ps/inch相差超过两成。同样做到等长度实际延迟差了30ps/inch。如果一组DQS走在表层而对应的DQ走内层就算长度匹配得天衣无缝实际时序就是偏的。Allegro的等长计算默认是按物理长度比较的但如果你在叠层管理器里正确配置了每层的介电常数和延迟常数它可以显示“延迟长度”而非单纯的物理长度这个功能一定要用起来。Allegro中把等长模式切换成延迟约束模式以时间为单位做匹配这样内部控制延迟差异就能被吸收。5.3 仿真验证是最终试金石约束管理器的计算结果再完美也只是“基于模型的预测”。高速设计里模型误差、制造偏差和材料差异始终存在所以一定要用仿真软件做最终验证。Cadence生态里有Sigrity系列工具可以做时域反射和眼图仿真把Allegro里布好的板子导进去提取完整的链路模型包括Pin Delay、过孔残桩、过孔寄生参数统统纳入眼图分析。我习惯的做法是先做拓扑提取与仿真看看每个关键网络的时序裕量还有多少如果裕量不足回到Allegro调整等长规则或者修改换层方案再仿真迭代。一般迭代两三轮链路里的每一项延迟都被“逼”到了可控范围内。6. 实际项目中踩过的坑与给新手的保命建议6.1 踩过的坑只做板内走线等长Pin Delay没纳入结果批量返工我做过一个项目DDR4的DQ组和DQS组在Allegro里匹配得非常精确长度差控制在±5mil以内。结果板子回来后测试发现高低温下的读写时序裕量分布非常差部分芯片在低温下干脆跑不过。用示波器量了DQS和DQ的相对位置发现两组信号之间的偏置接近80ps而这80ps正好对应了两种信号在芯片封装内Pin Delay的差异。当时芯片手册里其实是有Pin Delay表格的但原理图工程师没有导入Allegro我也没在约束管理器里确认这个选项。后来把所有DQ/DQS引脚的Pin Delay输进去重新算等长再调整走线长度问题立刻消失。那次返工让我明白了一个道理等长不是目的时序对齐才是目的而Pin Delay就是连接这两者的桥梁。6.2 踩过的坑高速信号换层过孔过多导致时序余量被悄悄“吃”掉另一个项目里DDR地址信号从控制器出来为了绕开电源区域我换了四次层。每个过孔等效延迟按25ps算的话四个过孔就是100ps。当时觉得地址信号的时序要求比DQ宽松没太在意。结果仿真时发现该网络的时序裕量比预期少了将近100ps眼图闭合风险很高。后来优化布线尽量让地址信号保持在同一层走完换层次数从四次降到了两次过孔贡献的延迟降了一倍。这一处改动就让整个接口的时序裕量恢复到了合理范围。从那以后我在布线规则里明确限制了高速网络的换层次数所有DDR信号默认最多换两次层关键信号最好一次层都不换。6.3 Allegro里实用的小技巧检查Pin Delay设置状态与延迟可视化最后分享几个Allegro里的实用小技巧。一是检查Pin Delay到底有没有被设置可以在PCB Editor里高亮某个器件打开属性编辑器查看每个引脚的DEVICE PIN DELAY属性是否与芯片手册一致。如果都是空值那说明你压根没配置。二是在做时序分析时让Allegro显示“总延迟”而非单纯“走线长度”。通过测量工具或者约束管理器的报告功能勾选包含Pin Delay和过孔延迟选项把网络的全链路延迟拉出来对比一目了然。三是利用Allegro的Timing Vision功能看信号到达时间。Timing Vision会把各网络在板上的延迟分布用颜色深浅直观呈现延迟大的区域一眼就能看出来比盯着数字表格判断高效得多。DDR4/DDR5项目中我全靠这个功能快速定位时序瓶颈网络。四是做背钻检查时在约束管理器里设置背钻规则并让Allegro高亮不满足背钻要求的过孔避免漏检。过孔残桩问题如果不是亲眼看到仿真结果很难相信只有几十mil的铜桶会造成那么大的信号质量恶化这个检查步骤不能省。根据我个人经验Pin Delay和过孔长度这类“非板内走线因素”的延迟在DDR3时代可以靠设计余量掩盖过去到了DDR4已经变成必须正视的项目而DDR5时代不做全链路延迟统筹信号完整性设计基本寸步难行。Allegro作为一个功能强大的平台其实每个工具链路都给你留好了入口关键是你有没有意识到这些入口背后对应的物理问题。别再把等长等同于长度匹配了真正该匹配的是信号到达的时间。
返回列表