ARTICLE DETAIL

资讯详情

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

Cadence Sigrity PCB仿真全流程:从PowerDC压降分析到Broadband SPICE提取

Cadence Sigrity PCB仿真全流程:从PowerDC压降分析到Broadband SPICE提取 做硬件这行有一个痛我是深有体会板子投出去之前总担心电源压降、高速链路会不会出问题板子回板之后一旦出问题查起来往往要花几周时间。后来我把Cadence Sigrity这套流程跑顺之后很多隐患在投板前就能圈定出来。Sigrity里最常用也最好用的两条线一条是PowerDC做直流电源完整性分析另一条是PowerSI配合Broadband SPICE标题里常写成Boardband SPICE正确拼法其实是Broadband SPICE做频域到时域的链路仿真。这篇文章就围绕这两个模块从数据导入到叠层设置、从压降分析到宽带SPICE模型提取给你捋出一条可以直接落地的PCB仿真全流程。适用对象是画过Allegro、想系统学习PCB仿真或者正在给DDR、PCIe、多路电源板卡做SI/PI验证的硬件工程师。1. 先搞清楚Sigrity到底解决什么问题1.1 从一块真实板卡说起的痛点我之前处理过一块八层的FPGA板卡四路DDR3、两路PCIe、核心电压1.0V。板子回样后在跑大型bitstream的时候FPGA内核电压从1.0V跌落到了0.86V芯片直接进入欠压复位状态。一开始怀疑芯片功耗估算不对后来又怀疑DCDC电源模块的动态响应不够折腾了两周最后用PowerDC对整板做了一遍直流压降仿真才定位到真正的问题某条电源网络经过BGA扇出区域时只有一小排过孔在承载整片平面的电流电流密度严重超标路径电阻被拉高瞬间压降自然就压不住了。这个案例典型的地方在于它说明了所谓PCB仿真并不是简单跑一个什么“检查”按钮。电源完整性PI和信号完整性SI在真实设计中是互相纠缠的芯片管脚上的电源电压一旦有跌落或纹波输出信号的抖动就会变大高速链路的眼图也会塌下去。反过来信号走线阻抗不连续回流噪声加大又会通过地平面耦合到电源网络里去。Sigrity这类工具的价值就是把这些在图纸上肉眼看不出来的问题用仿真数据变成可视化的电压云图、电流密度图、S参数曲线和眼图。1.2 Sigrity全家桶模块划分与选型很多新手第一次打开Sigrity面对一堆模块会有点懵。其实不用急你只需要先分清几个最核心的模块就能干活了。模块主要功能典型应用场景PowerDC直流压降IR Drop、电流密度、电热协同分析电源网络直流验证检查过孔和铜皮载流能力PowerSIS参数提取、频域分析高速通道建模提取DDR/PCIe差分对模型Broadband SPICE从S参数生成宽带等效SPICE模型把PCB模型带到HSPICE、ADS等时域仿真环境SystemSI高速串行/并行链路系统级仿真DDR总线读写、PCIe链路眼图分析OptimizePI去耦电容布局优化电源目标阻抗设计T2B布局阶段快速拓扑评估设计早期选层、选线宽对入门来说PowerDC和PowerSI/Broadband SPICE这两条线是最优先打通的。你不需要一开始就把所有模块都啃一遍先把一条从直流到交流、从频域到时域的完整链路跑通其他模块后面再用的时候自然就熟了。2. 前期准备PCB数据导入与叠层/电源树梳理2.1 导入数据前必做的三件事Sigrity不是直接打开PCB图就能仿真的。我以前见过不少同事拿到一个.brd就往PowerDC里拖结果叠层缺失、网络类型全是默认仿真出来的压降图跟实际差得离谱。这里有三件事我每次都会在导入前反复确认。第一确认手里是原始布局文件还是第三方转出文件。Sigrity对Allegro的.brd支持最完整直接导入能保留铜皮、过孔、平面、器件位号全部信息。如果手里只有Gerber可以用ODB格式导入但叠层、器件模型、网络分类这些信息可能会丢失需要大量手工补。条件允许的话尽量做后仿真时拿到原始Allegro文件。第二确认单位和叠层。Allegro里用的是mil还是mm导入后要和Sigrity设置统一不然后面所有几何计算全错。叠层信息必须在导入后逐一核对层名、铜厚、介质厚度、材料介电常数DK、损耗因子DF。叠层是整个仿真的地基这块一旦填错后面所有仿真的绝对值都不可信。第三确认器件模型映射。Sigrity仿真不是只要一个网络拓扑它得知道每个器件是什么模型。电阻电容电感这种无源器件可以用RLC等效FPGA、DDR颗粒、电源模块这种关键器件要映射到对应的模型文件。如果模型没映射仿真时要么报“器件未定义”要么用默认的0欧姆导通结果完全失真。2.2 叠层参数影响一切的基础叠层参数看起来简单但很多人在这里栽跟头。我见过一份板厂图纸叠层里写的DF是“0.020”结果实际板材是低损耗类型真实DF接近0.008按错参数跑出来的高速链路插损差了一大截。所以叠层参数最好是直接找PCB厂要而不是随手填默认值。一份典型的八层板叠层参数在Sigrity里大概长这样层名类型铜厚介质材料DKDF介质厚度L1TOP微带1oz0.035mm阻焊半固化片3.80.0200.1mmL2GND1ozFR44.20.0200.15mmL3POWER1ozFR44.20.0200.15mmL4SIGNAL1oz芯板4.20.0200.2mmL5GND1oz半固化片4.20.0200.2mmL6SIGNAL1ozFR44.20.0200.15mmL7POWER1ozFR44.20.0200.15mmL8BOTTOM1ozFR44.20.0200.1mm这只是示意真正的关键在于每一层之间介质厚度和DK误差会直接决定阻抗。微带线阻抗估算公式 Z0 ≈ 87/√(εr1.41)×ln(5.98h/(0.8wt))算出来和仿真结果差距可以很小但前提是h介质厚度、w线宽、t铜厚都对。如果叠层里介质厚度填错了0.05mm特性阻抗可能偏好几欧姆高速仿真就没意义了。2.3 电源树与负载模型仿真结果准不准七成看这里PowerDC仿真的时候电源树和负载电流的建模比叠层还关键。我经常跟组里新人说叠层填错了改起来容易电源树建歪了往往要到结果定性时才暴露。电源树描述的是从板卡输入电源到各级VRM再到每个负载芯片的完整供电路径。Sigrity的Power Tree窗口会自动尝试从PCB数据中识别电源网络和器件引脚关系但自动生成的树经常把VRM输入输出认反或者漏掉中间级负载。我一般会在仿真前手工核对一遍输入连接器给谁的电源DCDC的输入输出网络分别是哪个LDO前面是什么电压后面是什么负载。负载电流的设置更具决定性。一个FPGA核心电压1.0V,数据手册给出最大功耗20W那么核心电流就是20A如果芯片手册给了不同工况的电流分布就按最恶劣工况分配。我习惯在最大电流基础上再留10%~15%余量因为仿真本身就是看极限工况下的压降留余量才不会让板子在温升后暴露问题。VRM模型方面大多数直流分析场景用理想电压源加等效输出阻抗就够了只有分析开关纹波时才需要完整电源模型。负载Sink则用电流源表示简单场景选恒定电流需要看动态跌落时就把Sink电流设成阶跃变化的动态源模拟芯片从待机到满负载跳变的瞬间。3. PowerDC直流压降与电流密度仿真实战3.1 用PowerDC做IR Drop的完整操作序列PowerDC的完整仿真流程我总结成八个步骤照着做基本不会漏。第一步新建PowerDC工程并导入.brd或.spd文件。第二步核对叠层参数把PCB厂给的叠层数据逐项填好。第三步设置网络类型把电源网络标记为Power Net地网络标记为Ground Net。第四步放置VRM选择VRM输出引脚对应的网络和位置设置输出电压比如1.0V。第五步放置Sink在芯片电源引脚附近放置负载设置电流值。第六步设置工作温度。铜的电阻率随温度升高而增大我评估板卡工作环境超过50℃时会把仿真温度设为85℃或更高否则压降会被低估。第七步运行直流仿真求解器会根据铜箔电阻、过孔电阻和电流分布算每一节点的电压。第八步查看结果主要看Voltage Drop图、Current Density图和Temperature图。IR Drop的原理说白了就是欧姆定律V_drop I×R。电流从VRM出发经由铜皮、过孔、平面到达负载芯片路径上每个环节都有电阻。铜的体积电阻率约1.72×10⁻⁸Ω·m温度升高时按系数加大。举个例子一个直径0.2mm、长度1mm的过孔内壁镀铜厚度按25μm算截面积约π×0.2mm×0.025mm≈0.0157mm²单孔电阻大约1.1mΩ。如果流过20A电流单孔压降就有22mV这对1.0V核心电压来说已经超过了5%的裕量。所以大电流网络必须用多个过孔并联十个孔并联后电阻降到0.11mΩ压降才能压回2.2mV。3.2 压降与电流密度超标的定位思路跑完PowerDC之后最常见的两类问题就是压降超标和电流密度超标。这两类问题定位思路不太一样。压降超标先看哪段路径贡献最大。在PowerDC的Voltage Drop图上用Probe工具沿着从VRM到Sink的路径逐点探测电压跌得最陡的那一段就是瓶颈所在。我遇到过的瓶颈位大多是这几种连接器引脚密集处因为引脚间距小、铜皮窄BGA扇出区域过孔数量不足或者过孔排列太靠一侧电源平面某个缩颈位置比如平面被信号线槽切了一道口子电流只能绕行。定位到具体瓶颈后改版的方向就清晰了。电流密度超标本质是JI/A的问题。当路径截面积不够时电流密度上升局部温升增大。PowerDC的Current Density图会在红色区域标出热点。看到热点就要反查是铜皮宽度不够、过孔数量不够还是过孔连接方式不对。比如BGA下方电源过孔如果只用外圈那几排孔过流内圈孔全走信号电流就会向一个方向拥挤。处理方式通常是增加过孔阵列或者把电源网络连接到一整片铜皮而不是几根窄走线。还有一个容易被忽略的点Cutout和Anti-pad的影响。平面层上的隔离孔、反焊盘会把回流路径挤窄电流必须绕弯走。绕行路径又长又窄压降和热点一起出现。看结果的时候把Voltage map和Current Density叠加显示往往能一眼看出哪段铜皮被“削”得只剩一条细脖子。3.3 铜皮优先级与铺铜方式对PowerDC结果的影响这里我要专门聊一下“cadence 铜皮 优先级”这个高频问题因为它真的会直接影响PowerDC仿真结果。Allegro里的动态铜皮是有优先级的当不同网络的铜皮在平面上重叠时优先级低的会被优先级高的自动避让。如果你在画铺铜时没注意优先级比如GND铜皮优先级设得很高电源铜皮优先级低那么电源平面会被地铜皮“挤”出一个大缺口表面上看着是一片电源实际上电源平面被割成几块孤岛电流只能从很窄的连接通道走。PowerDC一仿压降和电流密度全部超标。所以我在仿真前会在Allegro里检查所有动态铜皮的优先级确保电源和地网络之间不会出现互相遮蔽。另外还有一个非常实际的经验大电流网络上的过孔与铜皮连接方式必须用Full Connect全连接不要用Thermal Relief热焊盘/十字花焊盘。Thermal Relief是为了手工焊接时散热慢一点才用的但它把过孔和平面之间的连接面积砍掉了七成以上载流能力大打折扣。你想想一个0.3mm的过孔全连接时导电面积是完整的圆环十字连接时只有四条窄筋电阻直接翻倍。第一次做电源仿真的人经常在这个地方踩坑。4. Broadband SPICE模型提取从频域到时域的桥梁4.1 为什么一定要提Broadband SPICE而不是直接用S参数高速信号链路仿真一般先提取PCB通道的S参数再放进时域环境里跑眼图。但这里有个问题S参数是频域数据没法直接被HSPICE、Spectre这类时域仿真器原生使用。你可以强行把S参数转成时域响应然后用卷积或分段线性源去逼近但这样出来的波形非常容易振荡而且S参数的非因果性问题会让时域结果出现“提前响应”看起来就像是信号在时间倒流完全没法用。Broadband SPICE的价值就在这里。它通过有理函数拟合把一个频域S参数网络转换成由RLC和受控源组成的等效SPICE电路模型。在拟合过程中会强制保证无源性和因果性保证模型放进时域仿真里是稳定的。你不需要理解每个RLC节点具体代表什么物理结构只需要知道它从频域来、能在时域用而且精度非常高。典型场景是DDR3/DDR4时序浪涌验证里把控制器、颗粒的IBIS模型加上PCB走线、过孔、封装引脚的Broadband SPICE模型放在同一个仿真环境里跑读写眼图。PCIe链路仿真也类似一端是发送端模型中间是PCB通道模型另一端是接收端模型整个链路的美标全在这里。4.2 PowerSI提取S参数的实操要点Broadband SPICE模型不是凭空生成的它的源头在PowerSI。用PowerSI提取S参数的实操流程有几个关键点需要注意。第一步创建PowerSI工程并导入同一份PCB数据。第二步确定提取对象。单端网络只选一个网络加参考地差分对要把正负两根走线都选中并设置差模端口。第三步设置端口。端口位置放在网络两端比如驱动器和接收器所在位置。最关键的是参考地设置——很多人忽略这一步结果提取出来的S参数里回流路径缺失高频段数据完全不对。参考地必须是稳定的地平面不能选一个被分割得七零八落的地网络。第四步设置频率范围。采样频率上限至少要到信号带宽的3~5倍。带宽估算公式是BW0.35/TrTr是信号的上升沿时间。比如DDR4信号Tr约100ps带宽就是3.5GHz最高扫到10GHz到12GHz比较稳妥。如果只看PCIe Gen3带宽约3.6GHz扫到10GHz也够了。第五步运行提取得到Touchstone格式的S参数文件。提取完成后先看插入损耗SDD21和回波损耗SDD11曲线。正常情况下插损曲线应该平缓下降如果高频出现异常谐振尖峰就要怀疑是过孔stub太长、参考地不连续或者提取网格不够密。这时候回到PCB数据里去检查对应位置比盲目改模型更有效。4.3 Broadband SPICE生成、校验与复用拿到S参数之后生成Broadband SPICE模型的操作就简单了。在PowerSI结果窗口里选中网络或差分对点击生成Broadband SPICESigrity会自动做有理函数拟合输出.slisp格式的模型文件你也可以让模型用Touchstone格式输出方便其他工具调用。生成时有几个参数需要关注。模型阶数也就是拟合使用极点的数量建议先用自动推荐值不要一上来就拉高。极点数量越多拟合误差越小但模型越复杂时域仿真速度越慢还可能引入高频数值噪声。我习惯先看拟合误差报告如果误差在1%以内就不去动它。频率范围要和前面提取S参数时保持一致如果模型带宽不够时域仿真里的高频分量会被截断眼图上升沿会变钝。模型生成后必须做两件事无源性校验和因果性校验。无源性不通过说明模型在某些频点会往外输出能量时域仿真时表现为波形发散、自激振荡。因果性不通过说明模型有提前响应时域波形会产生虚假的预冲。这两项如果不过回到提取环节调整频率范围或网格再重新拟合。校验完成后还要做一次最朴素的验证把模型单独放进一个瞬态仿真里激励给一个阶跃源看输出波形是否正常。我见过有人拿到模型直接跑去跑整个DDR总线仿真跑两三小时不收敛最后回来查才发现模型本身就有问题。先花五分钟做个模型级验证能省掉后面大把时间。模型的复用也值得养成习惯。每个关键通道提取出来的Broadband SPICE要按“项目-版本-网络名”的规则命名存放比如DDR4_CPU_CH0_R2V2.slisp。同一个项目的模型后续做多轮仿真时不用反复提取直接调用就行。5. 全流程路线图与工程落地要点5.1 从PowerDC到Broadband SPICE的完整链路如果给整条流程画一条路线就是下面的样子。注意这不是单向走一遍就完的事实际工程里是一个迭代循环先跑DC再看AC发现问题就回Layout改改完重新仿真。阶段工具输入输出关键指标1 数据准备Sigrity平台.brd、叠层参数、器件模型仿真工程叠层正确、模型映射完整2 直流PI验证PowerDC电源树、VRM/Sink压降图、电流密度图、温度图IR Drop小于2%~5%热点不超标3 频域通道提取PowerSI关键网络、差分对S参数Touchstone插损、回损满足预算4 宽带模型生成Broadband SPICES参数.slisp模型无源、因果校验通过5 时域联合仿真SystemSI/HSPICE等IBIS模型PCB模型眼图、抖动、时序眼高眼宽裕量达标实际执行时我的习惯是先用“前仿真”思路快速摸一遍底在布局阶段用初步叠层和估算网络拓扑跑一次PowerDC看电源路径是否有明显瓶颈再把DDR时钟、PCIe差分对挑出来做一次快速通道评估。这时候连布线都还没完成结果只是趋势性的但能帮助Layout同事避开最危险的坑。等布线完成再做“后仿真”用最终的原稿数据把压降、电流密度、S参数、眼图全部精确跑一遍。这个流程里最关键的心态是承认迭代。第一次跑出来的结果几乎不可能全绿总是会有几个网络压降偏高或者某条链路插损超了。不要试图靠调仿真参数把结果“凑”到合格而是要把问题反馈给设计改铜皮、加过孔、换走线层然后重新仿真。仿真最大的好处就是改版成本低一个晚上能迭代好几轮比起投板后改实物便宜太多了。5.2 仿真数据组织与版本管理的实战习惯仿真做久了最痛苦的不是跑不通而是版本混乱。我见过同事电脑上同时存在“仿真_最终版”“仿真_最终版2”“仿真_真最终版”这种命名没过多久自己都分不清哪份对应哪个PCB版本。所以我会要求项目里按规范组织仿真数据。目录结构建议这样建project/ rev_A/ source/ // 原始Allegro .brd文件 sim/ powerDC/ // PowerDC工程 si/ // PowerSI工程 broadband/ // 生成的.slisp和S参数 report/ // 仿真实录和问题清单每个仿真开始前在仿真工程里写一条备注对应PCB版本号、叠层来源、模型映射清单、本次仿真的目的是什么。仿真结束后把发现的问题整理成图文清单给出具体坐标、网络名、超标数据和修改建议。比如“U3附近过孔区域电流密度28A/mm²建议过孔从6个增加到10个并改为全连接”。这样Layout工程师拿到手可以直接改不用再自己翻一遍仿真工程。版本管理上PCB每改一版仿真也同步开一个新目录。PCB为R2仿真就叫R2_PI_CHECK。回头出问题回溯时能迅速找到哪个版本仿了什么、结论是什么。这样做的效率提升比我一开始预想的大得多。6. 常见问题与实操避坑实录6.1 从热搜问题看新手高频卡点网上关于Sigrity的问题很多我挑几个高频的说说。“sigrity怎么仿真tdr”——TDR时域反射计仿真在Sigrity里不是独立模块而是PowerSI或SystemSI里的一种激励方式。你可以在通道的端口上施加一个阶跃源沿走线观察特性阻抗随时间的变化。TDR结果里阻抗突然降低的位置通常是过孔、焊盘、参考面断裂阻抗突然升高的位置通常是走线变细、跨分割。用来定位高速链路中的阻抗不连续点非常直观。“cadence瞬态仿真不收敛”——这是个让新人很崩溃的问题。在我经验里最多的情况是模型无源性或因果性出了问题其次是激励源上升沿设置太陡、时间步长太小、S参数频带不够。处理途径一般是强制模型无源化把Passivity Tolerance放宽一点把仿真最小步长调大或者把激励上升沿设置到符合实际器件的数值不要追求极端的1ps。注意瞬态不收敛不见得是Cadence软件问题先把模型本身检查一遍。“如何使用flotherm对pcb热仿真”——Flotherm擅长的是系统级散热仿真有风扇、散热器、机箱风道这些完整环境属于热设计工程师常用的工具。而PowerDC里的电热协同Electro-Thermal是PCB板级自热分析可以告诉你某个铜皮区域到底多热。两者解决的问题尺度不同可以先做PowerDC的电热协同再给系统级热仿真提供板卡功耗分布作为输入。“cadence仿真器件未定义”——这个提示一般出在模型映射阶段说明某个元件的位号没有关联到具体模型。解决方法是回到模型映射界面把原理图或封装里的位号和模型文件一一对应起来。有的初学者问“封装导入pcb”之类的问题其实和仿真模型映射是类似的思路先保证器件的物理位号和引用名一致再去做电气仿真。6.2 我踩过的几个坑下面这些坑都是我真金白银花时间填过的。第一个坑是叠层损耗因子。某次仿真用的DF是0.020后来找板厂拿到准确的板材数据才知道实际只有0.008高频插损仿真结果与实测差距接近30%。从那以后我坚决要求板厂随板提供叠层和材料参数尤其是DF再也不随手填默认值。第二个坑是提取Broadband SPICE时忘设参考地。当时提取一条DDR数据线参考地选成了“Default”结果模型里回流路径穿过了一块被割裂的地平面仿真得到的回波损耗在高频段有一个很大的凸起怎么看都不合理。后来把参考地明确指定为完整地平面网络重新提取就正常了。第三个坑是PowerDC里面把Sink电流合在一起设置没有分散到具体芯片电源管脚。结果是电压云图看起来很正常但某个局部的电流密度却已经红了。后来养成习惯每个Sink都按管脚位置单独放置哪怕同网络的多组Sink电流总和不变也要让电流路径分布符合真实物理。第四个坑是过孔模型没考虑stub。高速链路走线从顶层换到底层过孔多余部分的stub在高频段会形成谐振眼图在高频分量多的时候明显恶化。提取S参数时过孔要按实际背钻情况建模或者至少确认仿真里有没有包含过孔stub长度。第五个坑是联合仿真时IBIS模型的速率设置跟目标不一致。有一次仿真DDR3 1600眼图怎么都打不开最后发现模型里I/O速率设成了DDR3 800。这个错误很低级但很容易被忽略。换模型跑之前先核对模型参数和设计规格对得上。6.3 参数调试技巧速查把上面这些经验整理成一张速查表按症状导向去找原因效率会高很多。故障现象常见原因处理建议PowerDC某网络压降过大铜皮被割裂、过孔数量不足、连接方式为热焊盘检查铜皮完整性和优先级过孔改全连接增加过孔电流密度图出现热点BGA扇出区域过孔少、平面缩颈加宽铜皮、增加过孔阵列、调整过孔排列S参数插损高频毛刺多提取网格太粗、端口参考地不正确加密网格、检查参考地平面完整性Broadband SPICE仿真实时不收敛模型无源性不足强制无源化降低频率上限增大拟合容差TDR曲线在过孔处阻抗骤降过孔stub过长、回流过孔不足背钻、增加回流过孔、调整换层位置眼图裕量不够走线阻抗偏差、串扰大、端接不准检查阻抗匹配拉开走线间距优化端接最后再分享一个习惯每次做完一轮仿真我都喜欢把整套流程沉淀成模板叠层参数、电源树配置、模型映射规范、报告格式都固定下来。后面再做新项目的时候套模板改数据效率比从零开始快很多。如果你正准备入手Sigrity真不用急着把每个模块都研究透先把PowerDC和Broadband SPICE这两条线彻底打通你就已经能在投板前拦住一大批电源和信号问题了。
返回列表