SIwave SI/PI协同仿真指南:从IR Drop到S参数的高速PCB仿真
2026/9/23 14:35:26 网站建设 项目流程

简介:面向信号完整性与电源完整性工程师的SIwave中文培训手册,围绕高速PCB设计中SI/PI与EMI的关联展开,既讲清传输线、特性阻抗、S参数、去耦电容、目标阻抗等基础理论,又结合完整仿真实例演示如何排查谐振、阻抗失配、SSN、DC压降以及远场辐射问题。压缩包内为单个PDF文件,约4.66MB,排版清晰、目录完整,内容贯穿PCB数据导入、层叠设计、平面分割、去耦电容配置,以及布线后的谐振模式分析、阻抗分析、DCIR drop、TDR、串扰、差分信号与眼图仿真等模块,均有逐步讲解。已有3527人学习下载,特别适合需要快速上手SIwave软件并贯通信号完整性和电源完整性仿真实战操作的硬件设计人员,能帮助读者建立从参数设置到结果判读的完整仿真思路,减少盲目试错,提升高速板设计的一次成功率。

1. 手册背后的真实内容:SIwave的SI/PI协同仿真闭环

信号完整性与电源完整性过去往往被拆成两个独立专业来维护。做信号的工程师盯着过孔阻抗、参考平面连续性和S参数,做电源的工程师只关心DC-DC纹波、环路稳定和去耦电容数量,两边在同一个PCB上工作,却很少共用一套物理模型。真正出问题的场景往往夹在两者之间——10Gbps以上的交换板上,电源平面的高频噪声经由过孔耦合进信号通路,在接收端表现为无法用眼图模板解释的时钟抖动。这类问题在时域示波器上很难定位,根源却常常落在电源地平面的谐振上。SIwave是Ansys推出的一款面向PCB和IC封装的全波电磁场仿真工具,它能在一个工程文件里同时完成直流压降、交流阻抗谱和S参数提取,把信号、电源两条分析链放进同一个版图模型里闭环迭代。本文按项目推进的顺序,把从数据导入到仿真结束的全过程拆开讲透。

2. 从版图到SIwave:EDA数据导入与建模预处理

2.1 导入路径选型:ODB++、Gerber与直接联动

SIwave工程的第一步是把版图数据从Layout工具带进来,这一步做得扎实与否,直接决定后面所有仿真结果是否可信。最常见的做法是使用ODB++格式,它在一个压缩包里同时携带走线、焊盘、层叠和网表信息,SIwave对这套格式支持得最完整。在Cadence Allegro中导出ODB++时执行File -> Export -> ODB++ SRC,会生成一个tgz包,然后在SIwave里File -> Import -> ODB++ (tgz)导入即可。如果上手阶段拿不到原工具,Gerber是后备选项,但Gerber不携带网表,导入后需要在Netlist Assign面板里逐网络手工指定电源和地,网络数量几百上千时会非常耗时。

另一个可用的路径是IPC-2581,Altium Designer和部分Mentor工具支持导出该格式,网表与层叠信息保留程度与ODB++接近。被动导入之外还有一种主动联动方式,SIwave安装并配置好EDA接口后,可以直接读取当前打开的Allegro或Xpedition版图数据。直接联动的好处是省去中间文件格式转换,铺铜和过孔信息基本零丢失,缺点是需要同时具备两套工具的正版运行环境,出差或云环境里不好施展。

导入完成后打开File -> Project Info检查长度单位,确保mm和mil没有混用。单位错一个数量级时,网格剖分和过孔间距判断会全错,而且这种错误不会直接报错,只会让波形看起来不合常理,排查起来非常浪费时间。

导入格式网表信息层叠还原适合场景
ODB++ (tgz)完整准确标准流程首选
IPC-2581完整准确跨工具协同
Gerber缺失部分还原数据链不完整时的备选
直接联动完整准确原机环境可用时优先

2.2 层叠与铜箔粗糙度:SIwave材料参数的核对点

数据导入后的第二件事是核对层叠结构,入口在Edit -> Layer Stack Editor。这里有两个高频检查项,第一是每层介质的厚度。Layout工具导出的ODB++通常能保住层厚度,但某些中间格式会把多组半固化片折算成单一厚度值,实际上PP片与芯板是两类完全不同的介质,介电常数和损耗角正切都不一样,压成一层会直接导致谐振频率偏移。处理办法是打开板厂的层叠图,逐条对照介质厚度和材料类型,把半固化片拆分回原始结构。

第二项是铜箔表面粗糙度。高速数字链路在5GHz以上时,铜箔表面粗糙度对插入损耗的影响就很明显了。SIwave的材料设置中可以启用Roughness Model来计入这一影响,Huray模型的输入参数是绒球平均半径,没有准确实测值时可以先给2μm做基线,仿真结果与实验室实测对比后再调整。粗糙度给得过大,S参数曲线在高频段会出现比预期更陡的衰减拐点,这个是排查时比较明显的特征。

# 快速核对板厂层叠表里英制厚度与公制的换算 # 半固化片厚度通常以mil记录,而仿真界面里习惯填mm def mil_to_mm(mil_value): return mil_value * 0.0254 # 举例:2116 + 1080 两层半固化片的累计厚度 pp_2116 = 4.2 # mil pp_1080 = 2.5 # mil total_mil = pp_2116 + pp_1080 print(f"total = {total_mil:.1f} mil = {mil_to_mm(total_mil):.4f} mm")

这段代码把板厂层叠表里常用的mil数值换算成SIwave界面使用的mm,实际使用时可以把整张层叠表的关键层厚度都列在一组变量里,批量输出核对。换算时要注意SIwave里的厚度值填写的是单层介质厚度,不是两导体表面之间的总间距。

参数项设置位置常见错误
介质厚度Edit -> Layer Stack Editor两层PP合并成一层
铜箔粗糙度材料属性中的Roughness Model完全不设置
损耗角正切Dielectric属性拷贝标准FR4值后不核对
电导率Conductor属性未按完成铜厚修正

电导率对IR Drop结果的影响很直接。PCB厂通常按1oz铜报交付,1oz的标称厚度是35μm,经过表面处理后的完成铜厚会有偏差。若板厂实际完成的只有0.5oz左右,走线电阻会明显上升,IR Drop仿真可以接近实际值一倍。最好的习惯是直接问板厂确认完成铜厚,把它填进Layer Stack而不是用标称值。

2.3 电源地网络归并:先把P/G网表认清楚

进入仿真前的最后一道工序是确认电源与地网络的分类。在Edit -> Net Assignments中,把VCC_1V0、VDD_0V9这类网络全部归入Power组,把GND、AGND、VSS归入Ground组,这个分类直接决定后续DC和AC分析里的回流路径。分类一旦错乱,AC阻抗结果里会出现说不清楚的共振峰,而后处理阶段再去反查网络归属会很被动。

归类完成后需要给电源网络添加激励。电压源放在VRM输出端,目标电压填实际电平,电流源放在负载芯片的电源引脚附近,数值为负代表从网络抽取电流。我习惯在电流源对话框里填芯片规格书中的最大瞬态电流而不是平均电流,因为直流IR Drop关心的本来就是最恶劣工况,平均电流会把局部热点掩盖掉。

用Tools -> Check -> Connectivity检查过孔连通性时,把盲埋孔和背钻过孔单独高亮出来看。背钻过孔在S参数上能改善高频回损,但如果导入过程中反焊盘信息丢失,过孔寄生电容变大,回损会整体恶化。反焊盘的核验在Pad Stacks面板里逐孔抽查,至少把连接电源平面的过孔中的5%过一遍,这样能拦住大部分导入错误。

3. 电源完整性:SIwave的IR Drop与阻抗谱分析参数

电源完整性是SIwave各项分析里上手最快的一类,输入条件直白,输出结果直观。只要给定电源电压、负载电流和目标阻抗,就能得到整板的电压分布。但参数填写错误导致结果异常时,从云图上往往看不出来,因此需要把直流和交流两个方向的参数意义讲透。

3.1 直流压降仿真的关键设置与判据

直流IR Drop分析的入口是Simulate -> DC IR Drop Analysis。弹出的设置窗口里,最需要核对的是Excitation页,它会把前面定义的电压源和电流源全部列出来。电流源的正负号在这里很关键,负值对应负载抽流,正值表示流入网络,填反了会在电压云图上看到负载端电压反而高于VRM端的奇特现象。

参数设置建议说明
Excitation电压源放VRM端,电流源放负载端负值电流表示抽载
Result ResolutionMedium起步热点区域Custom边长≤0.5mm
Solver TypeDC或Electro-Thermal温升敏感时选择后者
Output Options勾选Voltage与Current Density云图和电流密度同时保留

仿真结束后通过Data -> Plot Mode -> Filled Contour查看电压分布云图。判断IR Drop是否达标的通用做法,是先查负载芯片的低功耗运作边界,确认最低工作电压,再减去连接器和封装引脚上的压降预算,剩下的才是允许落在PCB平面上的部分。0.9V核心电压允许的压降和5V供电允许的压降差距巨大,用固定百分比去套并不科学。

如果电压云图上某点异常偏低,先检查是不是网格剖分过粗导致的局部电流密度奇异。把Result Resolution切到Custom,缩小最大三角形边长重新计算,多数情况下这个异常点会消失。若加密后仍然偏低,则要回Stack Editor核对过孔是否与电源平面实际相连,问题多半出在过孔属性或反焊盘设置上。

Electro-Thermal耦合是直流分析里容易被高估收益的选项。Solver Type选择该模式后,求解器把铜箔电导率随温度的变化纳入迭代。但一开始就跑电热耦合会大幅增加求解时间,建议先用纯DC模式找到热点区域,再单独对热点区域做局部电热耦合验证,同样的结论用一半时间就能拿到。

3.2 目标阻抗与PDN阻抗谱计算

交流阻抗分析的入口是Simulate -> AC Analysis -> Sweep,扫频范围一般取1kHz到1GHz。平面谐振通常落在几十MHz到几百MHz,这个范围能把去耦网络和平面模态都覆盖到。设置面板里的Analysis Mode选择Sweep,定义起止频率和采样点数,频段内使用对数间隔可以让低频分布更均匀,谐振峰位置不会因为采样不足被漏掉。

目标阻抗的估算逻辑是允许的电压扰动除以电流变化量,实际计算可以用一段很短的小工具快速完成。

# 计算PDN目标阻抗Ztarget,单位:Ω def calc_ztarget(core_voltage_v, ripple_ratio, di_a): """ core_voltage_v: 核心电压, V ripple_ratio: 允许纹波比例, 0.03表示3% di_a: 瞬态电流变化幅值, A """ dV = core_voltage_v * ripple_ratio return dV / di_a # 例:1.0V核心电压,3%纹波,15A瞬态阶跃 z = calc_ztarget(1.0, 0.03, 15) print(f"Ztarget = {z*1000:.1f} mΩ")

运行这段代码得到2.0mΩ,意味着整个电源分配网络从VRM到负载的阻抗曲线都要低于这条线。实际工程里不可能全频段压住单一阻抗目标,常见做法是把频率轴切成分段包络,低频段交给VRM闭环响应,中频段靠Bulk电容,高频段才由板级去耦电容负责,每段的允许阻抗可以不一样。

AC Sweep结果主界面上会显示阻抗幅值曲线。低频起始段的阻抗由VRM模型决定,如果SIwave里没有加VRM模型而是直接理想电压源,低频阻抗会趋近于零,这与实测不符。中频段的峰大多对应平面谐振,高频段则由去耦电容的ESL主导,这个阶段增加小容值电容比加大电容更有效。

3.3 Decap Optimization:位置和取值的平衡

SIwave的去耦电容优化入口是Simulate -> Decap Optimization。使用前要准备好三类输入:候选电容库、可放置的位置集合和目标阻抗曲线。电容库在Edit -> Capacitor Library中维护,每一个电容记录容值、ESR、ESL和封装尺寸,ESR和ESL的准确性直接影响优化结果的可用性。

优化设置里的Optimization Mode一般选Frequency,优化器会以目标阻抗作为频域约束条件去寻找电容组合。优化结束后返回的是推荐电容组合,一般包括数量、型号和推荐放置位置。一个常见的误区是把手头所有容值的电容都堆到优化器里选,这样解空间太大,结果会倾向复杂,反而难做物理布局。

提示:Decap Optimization输出的是一个满足约束的解,不是数学最优解。拿到推荐组合后,先剔除落在板边或散热器正下方的位置,再重新优化两轮,得到的结果才更接近可实施的方案。

4. 信号完整性分析:SIwave的S参数提取与损耗评估

电源完整性保证了电压域的稳定,信号完整性则要处理比特级的时域质量。SIwave在信号完整性方面的核心能力是从版图几何中提取S参数,并将结果交给眼图工具或脚本做进一步分析。这一章把端口创建和结果判读的关键参数按顺序讲清。

4.1 端口创建与差分对处理

S参数分析的入口是Simulate -> S-Parameters Analysis -> Sweep。进入后先选择要分析的信号网络,对差分信号,需要同时选中P和N两个网络再创建差分对。这里最容易出的问题是P和N端口各自引用的参考地不一致,混合模式转换之后SDD21会面目全非。

创建端口时可以设置参考阻抗和扫描范围,参考阻抗本身不影响场求解结果,它只是后处理时计算S参数所用的归一化阻抗,因此应和Layout工具里的目标阻抗保持一致,差分线对应的Zdiff通常设为85到100Ω。扫描范围要覆盖链路信号基频的5倍以上,比如25Gbps的NRZ信号基频12.5GHz,至少扫到30GHz才够看到三次谐波。

设置项推荐范围说明
起始频率10MHz或1kHz取DC会增加求解时间
终止频率基频的5倍以上有时需包含三次谐波
频率点数800~1200过少会引TDR振铃
差分端口阻抗85~100Ω与Layout定义一致

扫描类型选Linear Spacing还是Logarithmic,取决于后续是否做TDR变化。做TDR建议用线性间隔,傅里叶变换时旁瓣误差小,时域曲线更干净;只关心频域峰值时用对数间隔效率更高。

4.2 用Python脚本读取.sNp结果做损耗拆分

仿真结束后可以在输出目录里找到.sNp文件,通过File -> Export选择Touchstone格式导出,精度选Flexible保证小数位足够。拿到S参数文件后,我一般会用skrf做快速分析,比反复打开GUI面板效率高很多。

import skrf as rf import numpy as np # 读取4端口S参数文件,对应一对差分信号 nw = rf.Network('channel_a.s4p') nw.renormalize(50) # 混合模式转换,提取差分插入损耗SDD21 mm = nw.mixed_mode sdd21 = mm.s[:, 1, 0] # 打印关键频点处的插损读数 for ghz in [5, 12.5, 20]: idx = int(np.argmin(abs(nw.frequency.f - ghz*1e9))) loss_db = 20 * np.log10(abs(sdd21[idx])) print(f"{ghz}GHz: SDD21 = {loss_db:.2f} dB")

这段代码先用Network读取.s4p,然后用renormalize统一参考阻抗为50Ω,再去掉归一化阻抗不匹配带来的误差,接着通过mixed_mode把单端S参数矩阵转换为混合模式参数,取出SDD21得到差分插入损耗。普通FR4板材在12.5GHz时链路插损大约在-5dB到-8dB范围,明显低于-8dB时就要怀疑过孔参考平面断裂或板材选择偏离预期。

S参数的另一个常看指标是SDC11差分回波损耗,它的异常峰对应链路上的阻抗不连续点。把峰频率换算成介质中的波长的整数倍,可以反推不连续点的物理位置。例如在15GHz左右,FR4中的有效波长大约10mm级,周期性的回损峰通常指向过孔阵列或连接器焊盘区。

4.3 时域反射TDR结果的判读规则

SIwave的TDR仿真在Simulate -> TDR菜单下,输入参数是上升时间和观察窗口。上升时间要按物理系统里信号真实边沿速率设置,参考值是PCIe Gen4的35ps、10Gbps以太网的20到30ps。上升时间设置得比实际慢太多,TDR曲线会把过孔凹陷平滑掉,等于白跑。

TDR曲线的一个典型特征是过孔位置出现阻抗下降,幅度大约5到10Ω。如果下降幅度超过15Ω,说明残桩偏长或者反焊盘口径偏小,这时需要用三维场求解器对该过孔做局部细化。连接器区域一般表现为阻抗向上凸起,对应寄生电感;线宽收窄处表现为阻抗抬升,反射量与收窄比例大致对应。

TDR与S参数在数学上是紧密相关的,TDR曲线可以理解成S参数在时域的投影。频率上限不够时TDR的上升沿分辨率变差,连一个过孔的影响都看不出来。这也是为什么设置S参数扫描上限时必须留到基频5倍以上。实际操作里先扫一遍S参数,看回损峰值区域,再做同参TDR,两个结果互相印证的效率比单独跑一种高很多。

5. 把SIwave放进跨工具链路:协同仿真的实用做法

SIwave的单板级分析通常不是终点,它在这个大协同链里承担的是物理提取的角色,把平面、过孔、走线变成可验证的传输特性,再交付给通道仿真工具。这一章讲两条最常走的数据通路和一个常用的验证技巧。

5.1 与HFSS互连的边界对接

当板上包含连接器或封装内部复杂结构时,SIwave的二维半平面模型精度不够,常见做法是先在SIwave里定位问题区域,再把局部几何搬到HFSS做三维全波分析,最后把HFSS的S参数作为n端口网络回嵌到SIwave的全局链路中。回嵌时两边端口阻抗和参考平面必须严格一致,一个容易被忽略的细节是单位:SIwave层厚记录的是mm,HFSS默认习惯是mil,不一致会在回嵌时产生相位偏差。对多通道并行设计,只选择故障通道做三维细化,不要把全部网络都送进HFSS,否则求解时间会急剧膨胀。

5.2 结果文件组织与通道级联

从SIwave导出的.sNp文件可以直接与驱动器和接收端IBIS模型串联成完整通道。典型链路是驱动器IBIS加封装模型加SIwave提取的PCB通道再加连接器模型再接接收端IBIS,在Ansys Designer或ADS里跑瞬态仿真生成眼图。眼图是否越过模板边界,按PCIe或以太网标准定义判断。SIwave在这里贡献的是PCB物理行为的准确性,与理想传输线仿真结果会有可观察的差异,正是这些差异决定设计裕量是否够。

5.3 一个值得保留的验证技巧

分享一个我在多轮项目里反复使用的交叉验证方法。AC阻抗扫描结束后,把仿真出的第一个谐振峰频率与理论公式计算的平面谐振频率对一下,能快速发现介质参数是否被设错。矩形电源平面TM模式下的谐振频率近似为f = 1/(2√με)·√((m/a)² + (n/b)²),取m=1、n=0就是一阶模式。如果仿真峰值与理论值偏离超过5%,优先怀疑板长或板宽的单位出错,其次怀疑介电常数被填成了空气的默认值。

这个方法只需要一张层叠表和一台能开平方的计算器,在任何机器上都能复现。每次在SIwave里新建工程,我习惯先把理论谐振频率算出来摆在一旁,再去跑AC Sweep。仿真结果里若看不到预期的谐振峰,说明平面形状或开挖区域与数据表对不上,这里一定有层叠设置问题。用这个办法,我不用打开完整云图就能先对一遍估算值,多数参数错误会在仿真跑完之前被提前拦住。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询