ARTICLE DETAIL

资讯详情

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

Cadence走线长度计算:Pin Delay与过孔等效长度的完整指南

Cadence走线长度计算:Pin Delay与过孔等效长度的完整指南 前阵子调一块DDR3板子地址线在PCB上量出来长度都差不多但读时序的裕量就是不对。后来把封装内部那截路径算进去才发现问题出在Pin Delay和过孔两条“看不见的走线”上。很多刚接触Cadence Allegro的工程师做等长时只看etch length等板子回来测试才发现差了几十mil。这篇文章就把Cadence走线长度计算里Pin Delay和过孔的影响机制、设置方法、以及实际怎么折算讲透。1. 为什么总长度不能只算PCB上的铜皮1.1 信号的真实路径从die到die我们常说的“走线长度”默认是PCB上铜皮的物理长度。但高速信号的传输路径从源端芯片内部的die开始经过芯片封装内部走线、封装引脚/焊球再到PCB焊盘、过孔、平面层、走线最终到达接收端的封装引脚和die。整条路径是“die到die”的完整链路。Cadence约束管理器里计算走线长度时如果只约束etch length相当于默认所有芯片的封装内部路径完全一致。板内等长做得再漂亮封装那部分不一致实际到达接收端die的时间仍然不一样。DDR3/DDR4这类并行总线时序裕量本来就紧张几十mil的封装长度差异换算成时间大约是5到10ps看起来不大但叠加到整个地址/命令组的偏斜预算上就可能吃掉不少裕量。1.2 什么时候可以忽略Pin Delay和过孔也不是所有板子都必须把Pin Delay和过孔算进去。2层板、低速信号、或者一个封装内所有信号引脚到die的距离接近时忽略它们问题不大。但有以下几种情况建议一定要算使用BGA封装尤其焊球数量多、die偏置明显的器件封装内部走线长度差异能到几百mil。多颗粒DDR拓扑例如4片DDR3/4挂在同一条地址总线上每片颗粒的封装延迟不同组内偏斜会显性化。走线经过换层过孔数量不一致。信号从表层到内层再回到表层这部分的Z轴路径在etch length里完全不体现。1.3 长度计算的核心等式Total Etch Pin Via我在Cadence里做等长时心里始终有一个公式总路径等效长度 PCB铜皮走线长度(Etch Length) 芯片引脚延迟(Pin Delay) 过孔等效长度(Via Equivalent)其中Etch Length是Allegro里可以直接量到的Pin Delay来自芯片封装手册或IBIS模型Via Equivalent需要根据叠层自己折算。Cadence的约束管理器确实能帮你算总延迟但它不会替你把封装数据变出来也不会自动判断过孔怎么折算。搞懂这个等式后面设置约束、看报告才不会发懵。2. Pin Delay的正负号之争与数据来源2.1 封装延迟不是“固定延迟”是路径差Pin Delay在Cadence里的单位一般有mil和ps两种早期很多资料叫它“Pin Delay”大版本更新后也叫“Device Pin Delay”或“Package Delay”。它描述的是芯片die到某个封装引脚ball/pin之间的等效走线长度或传输时间。要注意这个值不是固定的“延迟多少秒”而是指封装内部那截走线的长度。两个引脚如果封装内部走线长度不同Pin Delay就不同。BGA封装里die通常不在封装正中心靠近die一侧的ball路径短远离die的路径长所以工程师会在手册里看到一组不均匀的封装长度数据。2.2 正负号约定的两种说法以约束目标为准关于Pin Delay的正负网上的讨论特别多因为在不同软件、不同版本的约束管理器里表现不完全一致。我自己的经验是先别纠结字面定义用“以谁为基准”来判断。如果你在Cadence约束管理器里设置的是一个绝对目标长度例如整组线要求Total Delay为5000mil那么这个组的引脚可以都填正值含义是“这部分长度发生在封装内部需要在总长度为5000mil里占一块”。系统计算外部走线目标时会自动用总目标减去Pin Delay外部etch就会短一截。如果是在Relative Propagation Delay里相对某个基准引脚做等长那情况更简单基准引脚的Pin Delay设为0其他引脚填上与基准引脚的“差值”。某个引脚封装路径比基准长50mil就填50mil因为它的外部走线要比基准短50mil如果比基准短就填负值。这里有个真实场景的坑同样一个数据手册里的封装长度表有人把它逐项填成正值有人填成负值最后等长结果正好相反。我建议填完之后先做一次快速仿真或者在Constraint Manager里看Total Delay列验证一下和预期方向是否一致。正号的物理含义是“增加总路径长度”负号是“减少总路径长度”。2.3 Pin Delay数据从哪里拿Pin Delay数据通常有三个来源芯片数据手册/封装图纸部分厂商会直接给“Package Delay”或“Ball to Die Length”表格。IBIS模型IBIS文件里有[Pin]段落包含R_pin、L_pin、C_pin等寄生参数有些还会给出封装延迟。虽然IBIS主要是做仿真用的但里面的封装寄生参数可以转换成延迟估算。厂商官网/EDA工具库有的芯片厂商在发布封装库时会附带一个包含Pin Delay的CSV或Excel表Cadence的本地库也可以存这些信息。我习惯的做法是收到一个芯片封装时先问FAE要封装延迟表没有的话自己从IBIS里提取L_pin和C_pin按经验公式估算。公式如下T_pin ≈ 84 × sqrt(L_pin × C_pin)其中L_pin单位nHC_pin单位pF得到的T_pin单位ps。这个结果不一定精确到个位数但作为等长补偿足够用。把数据整理成Excel表对应到Cadence里的Refdes和Pin number再录入约束管理器比在界面里一格一格填要可靠得多。3. 过孔等效长度的估算与叠层换算3.1 过孔长度不是“孔深”那么简单的很多人理解过孔对走线长度的影响第一反应是“过孔多深就算多长”。这个说法只对了一半。对信号来说它从过孔的一端进入从另一端出去路径长度不是孔的总深度而是信号实际经过的Z轴距离。举个例子一个信号从TOP层进入过孔在同一颗过孔的另一侧直接转到L4层走线那它的Z轴路径大概是TOP到L4的介质厚度叠加上下焊盘厚度而不是整个过孔从TOP到BOTTOM的全长。反过来如果信号从TOP层进孔直接从BOTTOM层出孔那确实接近板厚。还要注意过孔不是一根理想直导线孔径、焊盘、反焊盘、相邻过孔都会让信号的实际电气长度和物理长度不一致。工程上不可能每个过孔都做场仿真所以需要一套快速估算方法。3.2 一种工程化的过孔等效长度计算方法我目前常用的折算方法分三步第一步看叠层确定信号换层前后的两个层。比如从L1到L3就去叠层表里查L1到L3的介质厚度加上两个层的铜厚得到一个物理距离H。第二步把物理距离H乘上一个修正系数。系数取决于过孔类型普通信号通孔我一般取1.2到1.5背钻过的深孔可以取1.1左右如果是盲埋孔路径短修正系数更接近1。这个系数不是拍脑袋它吸收的是过孔反焊盘寄生电容以及过孔自身电感带来的附加延迟。第三步把这个等效长度加到网络总长度里。如果过孔比较多可以先统计网络里换层过孔的数量和类型。例如一条地址线从控制器出来经过一个通孔换到内层再经过一个通孔回到表层两个过孔分别算等效长度加起来进约束。还有一点如果过孔连接的是电源或地平面层的参考过孔一般不需要计入信号走线长度因为信号时序关心的是信号路径不是回流路径。不过回流路径上的过孔会影响阻抗和EMI那是另一个话题不影响等长计算。3.3 过孔Stub与反焊盘对时序的高频影响低速情况下过孔Stub的影响不明显但到了DDR3-1600以上甚至DDR4-2400过孔Stub就会引入谐振和额外延迟。叠层厚、信号走内层时通孔没有经过的TOP到内层之间的那截孔壁就是Stub它像一个开路短线会反射部分高频能量。反映在长度计算上就是实际等效延迟会略大于物理Z轴距离。所以我前文说的修正系数1.2到1.5不是随便给的它涵盖了Stub带来的附加影响。如果你的板子DDR速率比较高建议在过孔旁边加反焊盘优化或者对深层信号用过孔背钻。等长计算层面只要系数取得合理不会出系统性偏差。4. Allegro里Pin Delay和过孔约束的落地操作4.1 在Constraint Manager中给Pin设置Delay打开Cadence Allegro的Constraint Manager约束管理器找到需要设置Pin Delay的网络或Xnet。在Electrical Constraint Set里找到Relative Propagation Delay或Pin Delay相关的表格。对于Allegro 16.x到17.x版本操作路径大致如下在Constraint Manager左侧选择“Electrical Constraint Set”下的“Wiring”或“Relative Propagation Delay”。右侧表格选中需要设置的网络/组右键选择“Properties”或直接在表格里找到Pin Delay列。进入后可以按引脚填写延迟值。单位在约束管理器右上角或Setup里设置常见是mil或ps。如果网络是Xnet要特别注意Xnet的Pin Delay是加在分立器件引脚上的比如电阻两端。如果错误地把Pin Delay加在Xnet中间的被动器件两端可能造成长度计算重复。这里补充一个经验在Allegro里“Pin Delay”可以针对物理引脚设置也可以是属性形式。如果你用Cadence Capture原理图导入网表可以在原理图里预先给器件添加PINDELAY属性例如“0.5mm”或“100mil”等网表导入后会自动带到PCB约束管理器中。流程化的团队一般都在原理图阶段就把Pin Delay作为属性统一维护。4.2 不要漏掉这个开关很多工程师在约束管理器里填完了Pin Delay但布线时发现Allegro左下角或者Delay Tune面板里显示的长度根本没变化。问题多数出在“显示/计算是否包含Pin Delay”这个开关上。在Allegro中查看网络长度时有几个地方都要确认开启了Pin Delay计入Route - Interactive Delay Tune延迟调节的选项菜单里需要勾选包含Pin Delay。约束管理器里相对延迟列的显示方式有的版本默认显示“Etch Length”要切换成“Delay”或“Total Delay”。如果使用“Show Measure”或者“Reports”里的长度报告需要看清楚报告列是Etch Length还是包含Pin Delay。这个开关不会影响PCB物理走线只影响你怎么判断长度有没有等好。漏掉它的结果就是你辛辛苦苦把板内长度调成完全一致实际上总长度差异还在。4.3 怎么把过孔长度折算进约束管理器Cadence官方并没有一个叫“Via Delay”的栏目直接把过孔等效长度输进去所以过孔的折算必须自己处理。我见过几种做法第一种直接修改等长目标值。比如地址组目标Total Length本来设定为5000mil所有网络平均有2个换层过孔每个过孔等效按30mil算那把这60mil加到目标值或从目标值中扣除后续全部网络按新目标执行。这种做法适合过孔数量一致的简单拓扑。第二种用CAD文件里的Group/Class做额外长度补偿。把过孔等效长度以额外走线长度的形式通过在约束里给某个网络单独加Match Group差值实现。本质是手工给每个网络加偏移量。第三种真正一劳永逸的做法在Allegro中把过孔也建模成有长度的走线段。做法是给过孔设置一个特殊的Dummy走线长度或者使用第三方脚本统计过孔后自动在矩阵表中生成补偿值。我目前最推荐的做法是先把约束管理器里的“Match Group”目标设成一个初始值布线完成后用脚本统计各网络的过孔数量然后统一调整组内各网络的Target Delay。不管用哪种一定要建立文档记录过孔折算的公式和系数来源方便团队复核。5. DDR3地址组等长一个完整计算实例5.1 叠层与器件Pin Delay数据看一个具体的简化案例。6层板叠层为L1信号、L2地、L3内层信号、L4内层信号、L5电源、L6信号。DDR3地址线走线主要在L1和L3之间切换。控制器使用BGA封装DDR3颗粒也是BGA封装。从控制器数据手册查到的地址线Pin Delay数据如下表示意值网络控制器Pin Delay (mil)DDR颗粒Pin Delay (mil)A0180120A1195135A2210125A3175130这里的数值代表die到BGA焊球的封装内部等效长度。控制器是一个大BGA地址引脚分布在不同位置所以Pin Delay有散差DDR颗粒引脚相对集中散差小一些。信号从控制器BGA焊球出线表层走一段后通过一个通孔换到L3再走一段到DDR颗粒下方的过孔换回表层进入DDR颗粒。每个网络都有两个换层通孔类型相同。5.2 基准选择与组内差值计算地址线组需要以CK时钟或控制器内部的目标延迟为基准做等长。这里我们简化以控制器A0引脚的路径为基准组内其他网络都向A0对齐。先计算过孔等效长度。L1到L3的介质厚度加铜厚约为8mil考虑通孔修正系数1.3单个过孔等效长度就是8 × 1.3 10.4mil。每个网络2个过孔过孔总贡献20.8mil。然后计算每个网络的总路径长度不含受控端到DDR颗粒die之间的那段因为大家目标相同可以抵销Total_A0 控制器A0 Pin Delay 180 过孔20.8 板内走线长度Total_A1 控制器A1 Pin Delay 195 过孔20.8 板内走线长度要让Total_A0 Total_A1则A1的板内走线应该比A0少15mil。同理A2比A0少30milA3比A0多5mil。在Constraint Manager中如果以A0为基准并设Pin Delay为0那A1应填15mil表示A1封装路径更长外部需少走15milA2填30milA3填-5milA3封装路径更短外部需多走5mil。5.3 CM录入、布线与报告验证打开Constraint Manager在Relative Propagation Delay里新建一个Match Group把A0到A3、以及CK等网络放进去。选中基准网络A0设置为基准Target然后按上一步计算出来的差值填写各网络引脚的Pin Delay。设置完成后Allegro布线时可以用Delay Tune交互调线。调完以后回到约束管理器看Delay列确认每个网络相对基准的延迟差都在容差范围内比如±10mil以内。报告验证时要注意Constraints Manager里的相对延迟差值显示的是Total Delay差值不是etch length差值。如果你用菜单Reports - Etch Length by Layer and Net Report去核对看到的只是铜皮长度需要自行把Pin Delay和过孔折算再加回去否则会误以为“明明约束管理器显示差10mil报告里却是差的更多”。5.4 实测裕量情况这个案例里把Pin Delay和过孔修正加进去之后板内地址线长度看似“长短不一”但DDR3读时序裕量比之前好了不少。原因是原来外部走线完全对齐内部Pin Delay差异直接暴露成组内偏斜现在外部走线主动补偿真正的die到die路径对齐了接收窗口自然好了。这让我更确定一点等长的本质是等“总路径”不是等“可见路径”。Cadence只是工具最终要算的是整个信号链路。6. 实操中踩过的坑与对应解法6.1 单位混用ps和mil到底按哪个算Cadence约束管理器里Pin Delay单位可以在Setup里切换但切换只影响显示和输入解析。有的工程师从IBIS里拿到的是ps从封装图纸里拿到的是mil录入时不做换算直接填结果整组约束全部偏掉。常规FR4板材上信号传播速度大约是5.5到6mil/ps也就是每英寸约170ps左右。如果手头是ps值想转成mil按5.9mil/ps估算比较通用。换算完要统一单位再录入并在记录文档里注明原始数据和换算系数。6.2 属性设了不生效检查Class/Subclass和网络别名有一次我给别人看一个Pin Delay设置明明约束管理器的表格里已经填了值但布线调线工具就是不按照这个值计算。查了半天发现这个网络的物理引脚在原理图里用的是“A0”这样的别名而约束管理器里按封装引脚名比如BGA球号关联。两者没对应上导致设置只作用在错误的引脚上。遇到Pin Delay设置不生效优先检查三处网络是不是Xnet、引脚名和Refdes是否匹配、同一个网络是否有多个属性定义冲突。Allegro里如果一个网络既有网络级属性又有引脚级属性有时高优先级会覆盖掉引脚级的Pin Delay设置。6.3 过孔长度重复计算或完全漏算过孔长度最常见的坑是重复计算。特别是信号从L1到L3再到L1有些人会把L1到L3算一次L3到L1再算一次同一个过孔的Z轴路径被算了两遍。正确做法是看信号换层动作的次数而不是过孔数量。一个过孔完成一次有效换层只算一次Z轴路径。还有一种情况是漏算当信号在表层走了很长时间才换层换层后在内层走了很短距离又换回表层这时过孔路径虽短但仍存在。尤其注意靠近BGA扇出区域的过孔因为距离短、看起来无关紧要实际寄生的附加延迟会影响高频时序。6.4 报告长度与CM显示不一致Allegro不同版本、不同报告工具对“Length”的定义不完全一致。Quick Reports里的Etch Length是物理铜皮长度Constraint Manager里有些列显示的是包含Pin Delay后的总延迟而第三方的DFM软件导出的长度又可能是按连接线段统计的。遇到不一致时不要急着怀疑软件出错先确认每一列的定义。我的习惯是以Constraint Manager中Relative Propagation Delay的Delay列为最终核对标准其他报告只作为参考。导出生产文件前再用Valor或CAM工具做一次物理长度检查确保物理等长也没有异常这样双重校验最稳妥。做这份工作久了我的体会是Cadence里所有长度约束都只是把“物理连接”翻译成“时间关系”的手段。Pin Delay和过孔之所以容易被忽略是因为它们在图上“看不见”。建议设计一开始就建立一个总路径长度跟踪表把每颗芯片的Pin Delay、过孔折算方式和走线长度分开列等到仿真或测试出问题时这张表就是排查问题的地图。先想清楚要算什么再动手打开Cadence比上来就画板要靠谱得多。
返回列表