ARTICLE DETAIL

资讯详情

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

DDR走线等长总不达标?Pin Delay与过孔影响全解析

DDR走线等长总不达标?Pin Delay与过孔影响全解析 干了十几年PCB Layout有一个问题被问到的频率特别高DDR走线等长明明在Constraint Manager里全都拉平了长度也相等可高速仿真或者实测的时候时序裕量总是不达标。排查叠层、拓扑、阻抗都没问题最后发现罪魁祸首竟然是Pin Delay和过孔没有算进走线长度里。这类坑在CadenceAllegro环境下特别典型因为工具默认计算的往往是走线在PCB板面上的物理长度而芯片封装内部那段“隐形走线”、信号换层时经过的过孔垂直路径并不会自动体现在等长结果中。这篇文章我想把这个话题彻底讲透围绕Cadence走线长度计算中Pin Delay与过孔影响展开说说两者的物理本质、工具机制、实操设置方法以及我这些年踩过哪些坑、如何排查。无论是刚接触Allegro的新手还是已经在做高速设计的Layout工程师这篇内容都值得收藏备用。1. 为什么Pin Delay和过孔会影响走线长度计算1.1 Pin Delay的本质封装内部的“隐藏走线”很多工程师会把“芯片引脚”当成信号从芯片进入PCB的起点但这个理解在高速设计中不够准确。信号实际是从芯片内部的Die裸片出发封装内部有 bonding wire键合线或RDL再分布层、引线框架再经过封装引脚到达焊盘。这段路径虽然只有几毫米到十几毫米但它是实实在在的物理传输线。Pin Delay指的就是信号从Die内部参考点到达封装引脚所需的时间不同引脚的Pin Delay可能相差很大。比如一个BGA封装的FPGADie位于封装中心Bank分布在四边中心到不同边缘的引脚的物理距离差异可能达到甚至超过10mm。以典型PCB内层走线延迟约170ps/inch估算10mm大约0.4英寸延迟差异就是70ps左右。对DDR3/4这样以几百兆到几G速率工作的总线来说这个差异足以让时序裕量明显恶化。我在实际项目里遇到过最典型的案例4片DDR3拓扑地址线做T型等长所有PCB段走线长度严格控制在±5mil以内仿真却报告DQ/DQS的数据有效窗口变窄。后来把厂商提供的IBIS模型里各引脚的Pin Delay导出发现同一芯片上某一根地址信号的Pin Delay比另一根多了45ps补偿上去之后时序立刻恢复正常。从那以后我每次做高速板都会检查器件手册或仿真模型包里是否附带Pin Delay数据。1.2 过孔影响的物理成因过孔是另一个长度计算中的“隐形路径”。在Cadence中默认的走线长度统计只计算x/y平面上的走线信号在换层时经过的过孔垂直方向路径不会自动折算成走线长度。过孔对延迟的影响来自两部分物理高度板厚1.6mm的四层板信号从L1层穿透到L4层过孔高度约1.6mm约63mil。信号在过孔内的传播速度接近内层走线的传播速度。若按内层延迟170ps/inch计算单个过孔的延迟约10.5ps。寄生参数过孔本身有焊盘、反焊盘导致的寄生电容C和寄生电感L会降低信号传播速度并引发阻抗突变。尤其在高速SerDes中过孔stub还会造成频率相关的损耗。很多人觉得单个过孔10ps太小但一条地址线从顶层到底层再到内层走3个过孔就是30ps数据线如果换层频繁5到6个过孔就是60ps以上。配合Pin Delay和其他误差时序预算就会被一点点吃掉。1.3 等长匹配与时序预算的关系等长匹配的核心目的不是让所有PCB走线长度相等而是让一组信号从发送端到接收端的总传播延迟满足时序要求。总传播延迟应包括总延迟 输出端内部延迟 Pin Delay发送端 PCB走线延迟 过孔延迟 Pin Delay接收端如果只把PCB走线物理长度作为等长目标而Pin Delay相差明显过孔数量不一致那么即使物理长度完全相等电气长度也不相等。反过来如果电气长度相等而物理长度不等这才是理想状态。我在DDR布线规范里都会要求同事这样区分PCB物理等长由Constraint Manager中的Match Group、Relative Propagation Delay来控制。电气总等长必须额外加上Pin Delay和过孔延迟的折算量。下面这张表是信号传播延迟的典型参考值适用于大多数FR4材质走线类型定义典型延迟表层微带线走在外层参考平面在下一层约85 ps/inch (37 ps/cm)内层带状线走在内层参考平面在上下层约140~180 ps/inch (55~71 ps/cm)过孔垂直方向穿透整个板厚依板厚和结构约 5~20 ps/个注意这些数值受叠层结构、介质材料、线宽线距的影响会有浮动具体项目里最好用SI工具提取或者用厂商提供的Expedition/Sigrity模型参数。2. Cadence中走线长度计算的底层机制2.1 Constraint Manager里到底算的是什么长度Allegro的Constraint Manager简称CM中等长设置大多基于Physical约束里的Total Etch Length总蚀刻长度或者Electrical约束里的Relative Propagation Delay相对传播延迟。Total Etch Length统计的是所有走线段的实际物理长度之和不包含过孔不包含引脚封装延迟。Relative Propagation Delay这里可以设置延迟值单位通常为mil或ps。当单位为ps时Allegro会根据叠层中设置的材料介电常数和层间结构把走线物理长度换算成延迟值。Match GroupAllegro的等长组工具支持按物理长度或延迟值做匹配。默认情况下匹配对象是走线总长度同样不包含Pin Delay和过孔。所以问题的根源在于CM默认的等长逻辑忽略了封装延迟和过孔延迟而很多工程师并不知道需要手动补偿。工具本身并不“智能”你必须告诉它要包含哪些额外量。2.2 Pin Delay数据是从哪里来的Pin Delay的数据来源通常是这几条路径芯片厂商的IBIS模型IBIS模型的[Pin]段中可能包含R_pin、L_pin、C_pin等寄生参数但纯IBIS不一定直接给出Pin Delay值。更完整的IBIS-AMI模型或厂商专门提供的Package Delay清单里会有每个引脚的封装延迟值。芯片规格书Datasheet部分厂商会在封装章节中列出引脚延迟例如t_PDPackage Delay。器件厂商的Cadence专用Symbol有些厂商直接提供包含Pin Delay属性的PCB封装或原理图符号导入后属性自动带入。在Cadence的器件属性中实现Pin Delay的字段主要有PACKAGE_DELAY一个器件级的属性用来定义每个引脚的封装延迟。可以是统一的值也可以是按引脚区分的列表格式通常为(pin_name delay_value)。PIN_DELAY某些流程中也会使用这个命名。具体要看公司封装库的规范。如果符号或器件库中没有这些属性CM就无法自动识别Pin Delay你必须手动补充。2.3 过孔延迟在工具中的映射逻辑Allegro本身没有“过孔延迟”这个直接的界面输入项。它的延迟计算模型里走线延迟依赖叠层和Cross Section参数但过孔通常被视为连接不同层的通道不参与x/y的走线长度统计。那工程上怎么处理过孔延迟常见做法是在等长约束的“总延迟预算”中预留额外的mil数或ps数。例如某根信号需要走3个过孔按照每个过孔等效15mil走线长度来折算就在约束里额外加45mil的余量。更严谨的做法是在Allegro中统计该信号的换层次数可通过Report - Report by Layer查看每层的走线长度换层数非连续走线层数-1最直接的办法是打开走线看到Via的数量。计算过孔的总延迟贡献。在CM的Relative Propagation Delay中减去这部分延迟或者在实际匹配时预留对应的长度余量。我习惯在项目评审阶段就确定过孔折算规则每块板子根据叠层结构计算单过孔等效长度写入Layout设计规范。例如1.6mm板厚、内层带状线单过孔等效长度取20mil2.0mm板厚等效长度取25mil。这样等长操作时大家的标准一致不会出现同项目不同工程师算出来的结果南辕北辙。3. 实操在Allegro中设置Pin Delay并处理过孔影响3.1 通过器件属性设置Pin Delay以Allegro 17.x版本为例手动给器件添加Pin Delay属性的步骤如下。第1步确认器件位号在PCB Editor中选中需要设置的器件例如U1。打开右侧面板的Find勾选Symbols在Command窗口输入edit symbol delay第2步编辑器件属性选中器件后右键选择Edit - Properties打开Edit Property界面。在Available Properties中找到PACKAGE_DELAY如果没有该属性点击Other...手动输入属性名。添加属性时格式建议写成(1 100ps) (2 100ps) (3 120ps) ...括号内第一项是Pin Number第二项是该引脚的延迟值单位可以是ps或mil。Allegro会自动识别常用单位如果单位不写按当前设计单位处理。注意属性值里的引脚编号需要与封装的Pin Number完全一致包括字母大小写。如果封装里是A1你写成a1属性会不生效。第3步确认CM中Pin Delay已生效设置好属性后打开Constraint Manager在Electrical分析中查看目标Net。如果Net的Delay列能显示出包含Pin Delay的数值说明设置成功。Allegro在计算Total Delay时会把Pin Delay折算进总延迟前提是CM中相应Delay模式下启用了Pin Delay选项。检查方法在CM菜单中点击Objects - Delay - Setup...查看Delay Calculation对话框中是否勾选了Include Pin Delay。如果没有这个勾选项或它呈灰色不可选需要先确认器件属性是否写入、CM刷新是否正常或者直接关闭CM重新打开。3.2 延迟计算中的数据录入ps还是mil我不建议在Pin Delay属性里混用单位。每个项目一开始就要统一约定。更稳妥的做法是要求芯片厂商只提供ps值然后由Layout工程师根据叠层的延迟率换算成mil。换算公式很简单等效长度mil 延迟ps / 延迟率ps/mil例如某芯片地址信号Pin Delay为50ps假设内层延迟为3.0ps/mil约等于170ps/inch则等效长度为50 / 3.0 ≈ 16.7mil。然后在匹配组里把该信号的长度目标相应调整到比其他信号多16.7mil即可。这么做的好处是物理层面的等长调整依然可以依赖眼睛和Report电气层面的差异已经通过约束数值进行补偿。3.3 统计过孔数量并折算进等长操作Allegro时我一般分三步处理过孔对等长的影响。第一步按网络统计过孔数量在PCB Editor中使用Tools - Quick Reports - Via Report可以快速列出设计中所有过孔。针对某一网络可以使用Edit - Properties查看Net的Via数量或者在Find面板勾选Vias然后在对应网络上框选查看。第二步确定每层的延迟率通过Setup - Cross Section查看叠层结构注意每层介质的介电常数Er和厚度。表层微带线延迟率通常约2.4ps/mil内层带状线延迟率约2.8ps/mil。具体值我用阻抗计算工具或者Allegro自带的功能计算后确认。第三步计算单过孔等效长度并匹配如果信号在L1和L3之间换层叠层中L1到L3的距离是过孔的物理高度。按高度乘以该过孔所在区域的延迟率得到过孔延迟。最后把所有过孔的延迟相加换算成mil后在等长匹配中给该网络设置补偿量。一个实用的经验值对于常规FR4板厚1.6mm我习惯把每个过孔按10~20mil走线长度计算。过孔多的时候比如BGA内部扇出单个过孔的等效长度取15mil不会有太大偏差如果要求特别严就用上文的方法手动精算。3.4 利用Relative Propagation Delay做精细控制CM中的Relative Propagation DelayRPD是处理Pin Delay和过孔补偿最直接的地方。针对一组要做等长的Net可以设置Target Pin Pair选择发送端和接收端的引脚对。Delay Value设定目标延迟值单位用ps或mil。Tolerance设定允许误差DDR3设计我通常设在±5mil。在RPD界面中右键某个Net选择Properties可以手动输入该Net的额外偏置Delta值。这里就是补偿Pin Delay和过孔差异的主战场。例如某一根DQ线过孔数量多总过孔等效长度比同组其他线多30mil就在该Net的Delta值中填入30mil让CM等长时自动放宽这段额外长度。这样等到最后用交互式等长调整Route - Delay Tune时Allegro会把Delta值考虑进去拉线的过程中走线物理长度和实际目标长度能够实时对应就不会出现“明明长度一样电气延迟却不一样”的问题。4. 工程中的常见问题与避坑经验4.1 Pin Delay属性设置后不生效怎么排查我见过很多同事在器件属性里填了PACKAGE_DELAY但CM中的延迟值没有变化。排查步骤可以按下面的顺序检查属性名是否正确。Allegro默认识别的是PACKAGE_DELAY有些版本也识别PIN_DELAY但要看安装的Skill或补丁是否支持。检查属性值的格式。格式必须是一对对的括号括号内第一项是引脚编号第二项是延迟值。引脚编号的写法必须与器件Pin一一对应。检查CM中是否启用了Include Pin Delay选项这一步最容易漏。检查网络是否定义了Pin Pair。Pin Delay一般跟在Pin Pair的Source和Target上如果网络没有建立Pin PairCM无法计算总延迟。如果以上都无误关闭并重新打开Constraint Manager或者执行Tools - Database Check修复让工具重新读取属性。4.2 过孔数量不匹配导致的等长偏差我曾经处理过一个DDR4数据组等长问题一组8根DQ线物理长度差异都在3mil以内但仿真结果显示其中一根线的时序比其他线差了约25ps。后来检查发现这根线从L1层换到L4层途中走了5个过孔而其他7根线因为布线收敛性更好只走了2到3个过孔。单个过孔延迟约10ps5个过孔就是50ps其他线只算30ps差异自然很大。排查方法很简单在Allegro中逐条查看DQ线的过孔数量再用上述的折算方法补进等长匹配中。从那以后我设计高速DDR时都会提前规定同组走线尽量统一换层策略过孔数量差异最多不能超过1个。这比最后再补偿省事得多。4.3 表层与内层走线延迟率不同造成的误差表层走线延迟率明显低于内层走线这是一个很容易被忽略的点。比如同样1000mil走线长度表层微带线延迟约85ps内层带状线延迟约170ps如果一组信号中一半走表层一半走内层即使物理长度完全一致时间差也能到几十ps。在Allegro的CM中Delay per mil的默认值通常是按照某一层的值统一计算的不会精确到每根线的层间差异。处理办法有两个一种是在等长时严格要求同一组信号尽量走在同一层不让工具用统一的延迟率去计算不同层的网络。另一种是使用Allegro的电气长度Electrical Length视图在显示栏中选择以延迟为单位显示走线长度这样CM会按叠层参数计算每段走线的真实延迟再用来做匹配。在我的实际项目中这两种方法经常组合使用关键总线先用同层策略布线再辅以电气长度视图做校验。4.4 几个容易踩的坑和代代相传的小技巧坑一不要忽略芯片手册里的Package Delay单位。很多芯片手册给出的Pin Delay单位是ps但也有一些厂商习惯用mil或者mm。录入属性前务必换算清楚否则一个单位错误就会导致整个DDR总线等长失效。坑二过孔延迟不是固定的。对Via系列盲埋孔、背钻、贯穿孔来说盲孔只穿透部分介质层贯穿孔从顶层到底层两者延迟差异很大。如果设计中混用了不同孔型不能简单统一按一个等效值来折算需要分层逐个统计。小技巧一在Cm中创建虚拟网络测试延迟率。如果对当前叠层的延迟率数值没把握可以在CM中设置一个测试Net长度设1000mil查看CM计算出的延迟值再反推出延迟率ps/mil。这样后续在做Pin Delay和过孔折算时用的数据来源和工具一致不会出现换算误差。小技巧二善用ALLEGRO的ETCH LENGTH报告。利用Tools - Quick Reports - Etch Length by Layer and Net导出每根网络的各层长度。通过Total Etch Length判断物理长度再依据各层占比手工修正延迟差异。这份报告在交付前给硬件工程师评审时也很有说服力。5. 一个可复用的检查清单最后分享一份我每次出带等长要求的板子之前的自检清单照着做基本不会遗漏检查项目操作位置结果标准Pin Delay属性是否录入器件Edit Properties每个关键IC的PACKAGE_DELAY已填写CM是否启用Pin Delay计算Constraint Manager - Delay SetupInclude Pin Delay处于勾选状态过孔数量是否统计Via Report / 手动统计同组信号过孔数量差异1过孔折算长度是否加入CM中Net Delta值或匹配余量总延迟差异在预算范围内表层/内层延迟率是否统一Cross Section Electrical Length使用工具电气长度视图校验总长度报告复核Quick Reports - Etch Length物理长度和电气延迟均满足要求检查清单做完以后再跑一遍仿真或者做产品测试时序表现往往很稳定。很多工程师对Pin Delay和过孔影响的理解还停留在“知道有这回事”的层面真到了设计执行时又容易忽略。写这篇文章就是希望把这些容易被忽视的细节转化成可操作的步骤帮大家少走弯路。我自己刚接触高速设计时也因为这些问题吃过亏后来慢慢整理出了这套处理流程现在每个项目都会在一开始就把延迟补偿规则定好后期的等长工作会轻松很多。
返回列表