ARTICLE DETAIL

资讯详情

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

Allegro高速信号等长:PIN_delay的设置与验证要点

Allegro高速信号等长:PIN_delay的设置与验证要点 简介面向使用 Allegro 进行高速 PCB 设计的硬件工程师这份资料系统讲解为高速信号添加 PIN_delay 的完整流程。内容以 Xilinx FPGA 实际项目为实例覆盖从 Vivado 中导出 PIN_delay 文件、按 169.5ps/in 将 ps 数据换算为 mil、整理为 CSV 并导入 Allegro再到在 SIGXplorer 中建立多路径拓扑和验证数据的全流程。文档重点说明了多路径信号不能直接建立 Match group 的处理方法以及用 Excel VLOOKUP 核对导入数据的技巧并给出具体换算公式和操作截图式描述便于读者按步骤复现。文件共 1 个为 docx 格式约 805KB阅读方便。已有 9018 人学习浏览适合需要处理高速信号时序约束的中高级硬件工程师参考。1. Allegro里给高速信号加PIN_delay绕线前做和绕线后补是两回事Allegro里给高速信号做等长约束只控etch length不够必须把PIN_delay一起加进约束否则绕完线的DDR、SerDes组在芯片die端看仍然是偏的。PIN_delay描述的是芯片封装内部die到引脚之间的那段延迟它不在PCB走线上却真实参与时序。把值补齐以后等长绕线、延迟报告、SigXplorer仿真才能统一到同一个时间基准。下面的内容按概念到参数、参数到落库、落库到验证的顺序展开适合正在调DDR3/DDR4地址组、或者第一次做高速接口等长的Layout工程师。2. 加PIN_delay前先搞清它加在哪一段封装延迟与板级走线的分界2.1 Relative Propagation Delay公式里的PIN_delay是哪一段约束管理器里的相对传播延迟盯的是同一组网络到达目标pin的时刻差。Allegro计算时把每段路径拆成两部分封装内部die到pin的延迟以及PCB上pin之间的走线延迟。关系可以写成Ttotal Tpin TboardTpin就是PIN_delayTboard是etch length换算出的传播时间。Layout能控制的只有Tboard芯片时序要求关心的却是die端的整体关系。等长绕线只比Tboard等于默认所有pin的Tpin都相同——低速板卡这么近似没问题DDR3-1600以上、或者几十Gbps的高速信号接口封装延迟差异已经和时序裕量同量级忽略它会让等长越等越不准。PIN_delay的值可以填正数也可以填负数。方向判断准则是以die为参考点、信号从die往pin传播时取正如果芯片资料给的是pin到die方向的值或者约束表里Reference Pin和Target Pin的取向与数据方向相反符号要相应反转。拿不准时先在SigXplorer里用两个pin搭一个简单拓扑跑一下对比比盲填靠谱。2.2 从IBIS或封装手册换算PIN_delay的两种单位PIN_delay的常见来源有三处IBIS模型里写明的pin-to-die延迟、封装手册里的bonding wire或bump延迟表、芯片应用笔记直接给的推荐值。拿到手多数是ps也有直接给等效mil的。换算要用FR-4上的实际传播速度v_microstrip 6.0 # mil/ps表层微带线约6.6 ps/mm v_stripline 5.3 # mil/ps内层带状线约7.4 ps/mm for ps in [100, 250, 450]: print(f{ps} ps - 表层 {ps*v_microstrip:.0f} mil, 内层 {ps*v_stripline:.0f} mil)输出结果就是在mils显示单位下应填的等效长度反过来也一样。实际操作时先看Constraint Manager当前显示单位是Time还是Length再决定填ps还是mil。内层走线和表层走线的传播速度不同同一组信号最好按实际层叠取对应系数不要全部套同一个数。下面给一个大致的量级参考具体数值以对应芯片手册为准封装类型典型PIN_delay应用场景BGA封装DDR颗粒100~300 psDDR3/DDR4地址、命令组多die封装150~450 ps2DPC、多Die封装需逐die核对SerDes高速封装50~150 psPCIe、10G/25G差分对引线框封装300~700 ps老式QFPbonding wire较长2.3 整组填一个值还是逐pin填粒度怎么选PIN_delay按网络粒度就能填也可以按pin粒度逐个处理。DDR地址/命令组里同一芯片各pin的封装延迟差几十ps很常见DDR3-1600以上这个差量已经需要逐pin修正数据组里DQS与DQ的skew更敏感建议逐pin填。推荐的落地顺序先用芯片手册给的组典型值整组填一版把等长约束先跑起来等信号完整性仿真报出具体margin不足的net再逐pin精修那几条。不要一上来就追求所有pin精确到个位psLayout阶段的约束先把量级锁对精度交给仿真阶段收口。3. 在Allegro约束管理器里添加PIN_delay的详细步骤3.1 打开Constraint Manager定位到高速总线网络菜单路径Setup → Constraints → Constraint Manager快捷键CM。17.4和更新版本的Cadence Allegro里路径一致。左侧树展开Electrical → Net → Routing → Relative Propagation Delay右上角过滤框选到目标bus或net group。差分对则进Electrical → Differential Pair → Relative Propagation DelayPIN DELAY列的位置和单端相同。进表之前先把DDR这类总线收进net group否则表格里几百个网络混在一起填值容易串行。高速信号接口的约束表我习惯按控制器分组一个控制器一个net group填PIN_delay和后续等长都在同一张表里完成。17.4里左侧还有Constraints → All Constraints的汇总入口适合全局检查但编辑PIN DELAY还是在上述工作表中操作。3.2 在Relative Propagation Delay工作表填入PIN DELAY列默认工作表显示的是Total Etch Length和DelayPIN DELAY列需要手动调出来表头右键 → Show → PIN DELAY。列出现后逐行填写关键栏位说明如下栏位填写内容说明Reference Pin参考pin通常选驱动端pin或时钟源pinTarget Pin目标pin接收端pin与Reference组成pin pairPIN DELAY延迟值正负号按2.1的方向准则Tolerance容差可直接填±25 ps这类区间填完点工作表上方的Apply约束立即生效不用重新生成网络。后期换料或者改了封装回到同一张表覆盖数值再Apply一次即可。Tolerance这一列很多人忽略它是等长检查的判定带宽DDR3常用±25 ps数据手册要求更严的会到±5 ps绕线阶段先按手册实际值填别凭感觉放大。两个入口的差异要注意Constraint Manager里填的值会写进系统约束布线时等长计算直接引用用Edit → Properties方式给pin挂PIN_DELAY属性属性同样参与计算但不会显示在数值列里两种方式混用容易有一处漏改实际项目里选一种入口用到头。3.3 用Edit Properties给单个pin挂PIN_DELAY属性的替代做法芯片厂商给的delay表经常是一张Excel几十个pin逐个对照填用属性方式更快菜单Edit → PropertiesFind面板只勾Pin框选目标芯片的高速信号pin新增属性PIN_DELAY值填300ps当前单位是mil就填换算值Apply写入这种方式适合与Excel对照批量核对也适合只给个别特殊pin做补偿。缺点是属性入口不经过Constraint Manager的检查填错单位或拼错属性名不会立刻报错。用这个入口时填完去约束管理器里刷新确认PIN DELAY列或Properties列能看到值。提示无论哪个入口填完都跑一次Constraint Manager的Check确认没有新增DRC错误。单位不识别时Allegro会报但数值大小不合理只能靠后续时序验证兜底。4. 填完PIN_delay后的验证从SigXplorer到延迟报告4.1 用SigXplorer确认PIN_delay参与仿真计算PIN_delay不只是约束表里的一列数字它会随拓扑被带入SigXplorer的信号完整性模型。打开路径是Analyze → SI/PI Simulation → Preferences设好模型库再在SigXplorer里加载对应net的拓扑。选中pin后属性面板里能看到PIN_DELAY已经并入该pin的延迟参数。验证是否生效的快速方法随便挑一个DDR数据组net把PIN_DELAY从0改到目标值观察总延迟的增量是否等于填的值。增量对得上说明模型提取正确增量不对优先检查单位是否被切换过或者这个net实际走的是差分约束表而不是单端表。差分对要P/N两侧一起看SerDes接口尤其要确认两侧的差没有被模型放大。4.2 绕线完成后核对含PIN_delay的整体延迟布线收尾后的核对路径有两条报告工具看什么是否含PIN_delayRoute → Analysis → Delay Report板级etch length和串扰不含Constraint Manager → Relative Propagation Delay延迟和等长状态含可切换Delay显示Delay Report只看PCB走线想确认补偿是否生效回Constraint Manager把显示切到Delay核对每个net的总延迟与目标值的差值。差分对额外看P/N两侧PIN_delay填入后两侧值的差不能造成新的对内skew。绕线目标建议直接设成含PIN_delay的总延迟右键目标net所在行set为Target其余net的Delta自动相对它计算目标值填含补偿的数值。如果继续拿etch length做目标工具会把基准net的封装延迟差异也当作需要绕掉的偏差出现越等长、die端看越偏的反效果。整组绕完后回到工作表看Delta和Tolerance一列所有net应该落在同一个带宽区间里。4.3 等长状态异常时的排查方向绕线完成后等长状态标红按下面顺序查比盲调绕线快先查PIN DELAY列是否有漏填或符号与其它net相反的网络再查混用的两种入口属性方式写入的值是否覆盖了约束表里的系统值最后查Tolerance设置高速接口的容差经常是±5 ps手动绕线很难达到先放宽到数据手册要求的实际值别让容差和pin delay互相打架5. 三种常见的PIN_delay设置错误与批量处理技巧5.1 符号方向填反等长越等越偏最典型的错误是整个组的PIN_delay符号反了。判断技巧填完后跑一次仿真对比skew变化方向。填了值反而恶化基本就是符号问题。DDR地址/命令组以控制器为参考数据组以各自DQS为参考先按这个方向检查一遍再继续调。5.2 单位混用造成量级错误工作表当前显示单位是mil时直接填ps几百ps会被当成几百mil量级差十几倍。填值前右键确认显示单位是Time还是Length与手上的数值单位对齐后再Apply。同一张表里混着ps和mil更麻烦Allegro按当前显示单位解析输入所以统一显示单位是必经动作。5.3 用Allegro SKILL脚本批量给差分对写PIN_DELAY几十对差分对逐行填效率低用Allegro SKILL按网络名批量写; 注册命令 set_pin_delay用法: set_pin_delay 300ps axlCmdRegister(set_pin_delay set_pin_delay) procedure(set_pin_delay(optional (dly 300ps)) let((pins pin) pins axlDBGetDesign()-pins foreach(pin pins when(rexMatchp(^U1_A[0-9]$ pin-name) axlDBPropSet(pin PIN_DELAY dly) printf(pin %s - %s\n pin-name dly) ) ) axlSaveDesign() ) )脚本逻辑axlCmdRegister把set_pin_delay注册成Command窗口命令axlDBGetDesign取得当前设计的所有pinrexMatchp按正则匹配网络名axlDBPropSet把PIN_DELAY属性写入匹配到的pin。正则^U1_A[0-9]$按实际网络命名改跑完到约束管理器确认PIN DELAY列重点抽查差分对P/N两个pin的值是否一致。收尾验证把含PIN_delay的约束导出成Constraint Report逐项核对DDR组和PCIe差分对的实际延迟与目标的margin再交给时序仿真收口。本文还有配套的精品资源点击获取
返回列表