Cadence Sigrity仿真实战:从TDR到PI的高速信号完整性分析 1. Sigrity到底解决了什么问题从一次高速板调试失败说起前两年我做过一块PCIe Gen4的板卡原理图评审过了PCB走线也按阻抗要求控好了可上板一测眼图就是睁不开。当时第一反应是怀疑连接器焊接问题拿着烙铁反复补焊结果没用。后来把板子切了送TDR测试才发现问题根本不在焊接而是过孔反焊盘开得不对导致换层处的阻抗直接掉到60多欧姆。那一次返工教会我一个道理高速设计里靠经验和感觉把关的时代已经过去了必须借助仿真工具在投板前把问题找出来。Cadence是目前国内硬件工程师接触最多的PCB设计平台但很多人对它的认知停留在Allegro画板层面。实际上Cadence旗下还有一条完整的仿真产品线其中专门负责信号完整性和电源完整性分析的就是Sigrity家族。Sigrity不是某一个单独的工具而是一整套面向SI信号完整性、PI电源完整性和EMI/EMC分析的仿真平台。它能做的事情可以简单归纳为三类帮你确认高速链路能不能跑通帮你确认电源网络纹波和压降是否达标帮你定位EMI风险的源头。这篇文章不打算写产品宣传稿而是以我实际用下来的经验聊聊Sigrity到底能解决哪些问题、和Allegro之间的关系、跑通一条TDR仿真需要做哪些准备以及我在项目里踩过的一些坑。无论你是刚接触仿真的新手还是已经在用Sigrity但经常被各种报错折磨的老手这篇内容应该都能给你一些参考。2. 从原理图到仿真模型跑通Sigrity仿真的完整准备链路很多初学者拿到Sigrity之后第一反应是装上软件打开界面然后对着空白工程发愣——不知道该从哪里下手。这很正常因为Sigrity不是那种丢一个网表进去就能出结果的简单工具它需要上游设计数据足够规范仿真结果才有意义。我自己总结下来跑通一条完整的Sigrity仿真链路至少要经过三个阶段的准备。2.1 原理图阶段就要种下仿真的种子先说原理图。Cadence生态里画原理图主要用OrCAD Capture把原理图处理好是后续一切仿真的前提。热搜词里几个高频问题——capture原理图上引脚类型是power报警告添加intersheet references报错都属于这个阶段的门槛。boot是电源引脚类型设成POWER没问题但如果信号引脚误设成POWER类型导入PCB和仿真时都会出现莫名其妙的问题。处理原则很简单电源网络VCC、GND这类的引脚类型设置为POWER信号引脚一律设置为PASSIVE。遇到警告不要直接忽略双击引脚检查属性。intersheet references报错通常是跨原理图页的网络标号重复或格式不一致引起的。我的习惯是在工程里统一设置图纸命名规则并且在放置跨页符时开启自动编号功能不要手填页码手填很容易出现重复或跳号。这些看似跟仿真无关的琐事恰恰是很多仿真导入失败的根源——原理图数据不干净后面所有环节都会被波及。热搜词里还有一条cadence怎么设置ODBC数据源这主要牵涉到Capture和物料库系统对接。如果你在公司里用的是共享元件库或第三方元器件管理系统ODBC配置错了会导致元件库打不开进而影响BOM导出和后续仿真模型的关联。这个配置本身不难但经常被人忽略。2.2 PCB阶段布局布线数据直接决定仿真可信度原理图确认无误后进入PCB阶段这里涉及的热搜词就更多了cadence pcb设置线宽cadence画pcb板框cadence铜皮优先级cadence封装导入pcb。这些基本功如果不扎实后面导入Sigrity时会遇到一个很尴尬的情况——网表、叠层、铜皮这些信息残缺不全仿真引擎要么报错要么算出来的结果明显失真。个人体会是进仿真之前至少要确认以下几项叠层结构和材料参数是否建立完整特别是介质层厚度和DK/DF值需要仿真的关键网络是否有完整的地参考跨分割的走线在仿真时会直接体现为阻抗突变铜皮优先级设置是否正确避免在仿真模型里出现本不该存在的短路或开路封装和焊盘模型是否与实际器件一致尤其是BGA封装引脚映射错一位都会让仿真结果南辕北辙。其中铜皮优先级这块我有一个挺深的教训。有一次做电源模块仿真出来结果显示某段铜箔电流密度异常大怎么查都查不出原因后来回到Allegro里一看是两层不同网络的铜皮叠在一起优先级设置不当虽然DRC没报错但仿真模型把底层铜皮也吸收进去了。从那之后我养成了一个习惯跑PI仿真之前先把所有动态铜皮转成静态铜皮再核对一遍网络归属。2.3 模型获取IBIS、S参数与叠层参数缺一不可Sigrity仿真能不能算出可信的结果模型质量占了很大权重。常用的模型有三类IBIS模型描述芯片输入输出电气特性。大多数主流FPGA、CPU、存储器厂商官网都会提供IBIS文件下载时需要选择对应速度等级和封装选项。S参数模型描述无源器件的频域特性。连接器、线缆、滤波器厂商一般都会提供偶尔需要自己用三维电磁仿真工具提取。叠层参数板材的介电常数和损耗正切。这个需要PCB板厂提供不同厂家、不同批次可能都会有差异。实际项目中我经常遇到的情况是——模型找到了但版本和芯片实际使用的封装对不上。举个例子某FPGA厂商官网上同一个型号有FC封装和CB封装两套IBIS模型如果随手下一个仿真时管脚映射完全对不上结果自然离谱。所以建议在下载模型后先对照原理图封装确认引脚名称再导入仿真工程。3. TDR仿真实操为什么测出来的阻抗总是和你算的不一样热搜词里有一条sigrity怎么仿真tdr这可能是新手问得最多的一个功能。TDR全称是时域反射计Time Domain Reflectometry原理上很像雷达测距——向传输线发出一个上升沿非常陡峭的脉冲当遇到阻抗不连续点时一部分能量会被反射回来根据反射波形就能判断出阻抗变化的位置和幅度。在Sigrity里跑TDR仿真最常用的工具是PowerSI的TDR功能或SystemSI。以PowerSI为例操作流程其实是固定的导入ODB或Allegro数据库选定要分析的网络设置端口位置然后直接跑TDR仿真。但新手最容易卡住的地方在于仿真结果出来了怎么解释这条曲线。3.1 TDR仿真里最容易被误解的那条曲线很多初学者拿到TDR波形后看到曲线有起伏第一反应就是这条走线有问题。这话对也不对。关键要搞清楚TDR曲线的物理含义——它反映的是沿传播方向各个位置上的瞬态阻抗而不是我们常说的某个频率下的特性阻抗。线宽算出来是50欧姆为什么TDR实测出来只有48欧姆这个问题我在论坛上见过无数次也曾经纠结过很久。原因其实包括好几个层面PCB厂商蚀刻时侧蚀效应导致铜箔顶部比底部窄玻纤布编织导致的介质不均匀过孔残桩、焊盘、参考层挖空等都会造成局部阻抗偏差。3.2 TDR曲线的四个检查区段拿到TDR曲线后我习惯把它分成四个区段来分别检查起点、走线中段、过孔换层处、末端连接器。每个区段对应不同类型的制造和设计因素排查的方向也完全不同。第一段是起点区域也就是探针或端口接触的位置。这个位置通常会看到一个明显的阻抗低谷那是因为测试点处的焊盘和过孔引入了寄生电容。不少设计人员看到这个低谷就紧张其实只要数值偏差不超过15%基本不用管这是测试结构本身带来的不是设计缺陷。第二段是走线本体。这里主要看阻抗是否平坦如果出现周期性的波动大概率是玻纤布编织效应尤其在10Gbps以上的高速信号中比较明显。解决思路是走线时采用一定的角度而不是完全平行于板材纹路或者选择更优质的基材。如果是某个局部位置突然出现一个尖锐的阻抗凸起或凹陷则要重点检查那个位置是否有过孔、焊盘残桩或线宽突变。第三段是过孔换层位置。这个区段是问题高发区也是最容易被前期计算忽略的地方。我之前那块PCIe板卡就是死在这上面。过孔在换层时焊盘、反焊盘、残桩、回流路径切换每一个因素都会造成阻抗突变。Sigrity仿真时可以单独提取过孔模型来看S参数也可以直接在TDR曲线上观察突变点的影响幅度。解决手段通常包括优化反焊盘尺寸、增加回流地孔、背钻掉残桩等。第四段是末端通常会看到阻抗上扬或下跌这取决于末端是开路还是接到了芯片封装。如果连接器区域阻抗异常要排查连接器厂商提供的封装模型是否准确以及PCB封装焊盘间距是否合理。3.3 仿真和实测对不上怎么办有工程师反馈过这样一个问题Sigrity里TDR仿真出来的阻抗曲线和实际板子用示波器TDR探头测出来的曲线形状能对上但数值总是差几个欧姆。这个差异来源主要有两个一是仿真模型里的材料参数用的是板厂提供的典型值而实际板材的介电常数会随频率变化且不同批次有离散性二是仿真时端口激励和真实测试探头的模型不完全一致TDR测试时探头本身的寄生参数会叠加进结果。我自己的处理经验是先在仿真里跑一版记录关键位置的阻抗值板子回来后实测一组数据把两组曲线放在一起对比。如果形状一致、只是数值整体平移了几个欧姆那说明模型趋势是准的可以反推修正板厂材料参数后续仿真的可信度会大幅提升。如果形状都对不上那就得回头查导入的PCB设计数据是否完整。3.4 建立一个用于TDR仿真的黄金工程跑过一段时间TDR之后我强烈建议你建立一个黄金工程。所谓黄金工程就是把你最常用、验证结果最准确的板卡设计做成一个标准模板包含正确的叠层参数、标准的端口设置、成熟的供电配置。后续做新项目时直接复制模板只替换PCB数据库能节省大量重复配置时间。4. PI仿真的隐藏价值电源网络不是铺铜就完事SI领域的TDR仿真做得多了很多人会忽略Sigrity另一半的核心能力——电源完整性分析。事实上在我接触过的大量高速板故障案例里因为电源问题导致信号质量劣化的比例远高于很多人想象。热搜词里cadence瞬态仿真不收敛可能说的是电路仿真但放在电源完整性语境下同样值得展开聊聊。4.1 目标阻抗PI仿真中最核心的量化指标做电源完整性分析绕不开一个概念叫目标阻抗。一个电源网络在负载端允许的纹波电压除以瞬态电流变化就是该网络的目标阻抗。比如一个1.0V供电的核电压允许5%纹波也就是50mV如果瞬态电流变化5A那么从VRM到负载之间的电源分配网络总阻抗必须控制在10毫欧姆以下这件事如果等板子回来再用示波器去测成本极高而在Sigrity里做一次仿真就能提前判断。Sigrity家族里负责DC压降分析的是PowerDC负责AC阻抗分析的是PowerSI。PowerDC主要看的是大电流路径上的静态压降和电流密度尤其适合检查BGA区域的电源引脚是否足够、过孔数量是否满足载流要求。我见过不少设计电源平面和过孔数量看着不少但压降分析一做某些角落的电压已经跌破芯片的最低工作要求这就是典型的电流瓶颈。PowerSI则更偏频域用来做平面的谐振分析和去耦电容效果的评估。去耦电容不是放得越多越好重要的是放在正确的位置并使用正确的容值和ESL组合。初学者最容易犯的错误是把一堆0.1uF电容均匀撒在板子上结果在某个本该被抑制的频率点电源平面反而因为电容和平面之间的寄生电感形成了并联谐振。用PowerSI可以快速扫频出电源平面的阻抗曲线再针对峰值去补充对应频段的电容。4.2 去耦电容的八二法则在PI仿真里有一个很实用的经验法则我习惯叫它八二法则八成以上的去耦效果是由两成位置正确的电容贡献的。这个说法不绝对但它提醒了一个事实——电容放置位置造成的差异远比电容数量造成的差异更明显。从物理上说电容只有尽量靠近负载引脚它的引线电感和过孔寄生电感才会够低否则高频去耦效果会大打折扣。Sigrity里可以直接在仿真结果中查看电流流向图和敏感区域的热点图哪些电容真正生效、哪些是气氛组肉眼可见。4.3 DC压降仿真需要注意的模型简化做PowerDC仿真时有一个比较容易忽略的点——芯片封装模型。很多人只建了PCB部分的模型忽略了芯片封装基板上的电源引脚和走线这会导致负载端提取到的电压比实际乐观。比较好的做法是如果芯片厂商提供封装模型就把它加进仿真链路里如果实在拿不到就要在目标阻抗上留出10%到20%的裕量。4.4 谐振分析与电磁仿真资源开销平面谐振分析是PI仿真里最耗费计算资源的一项。一次全板PowerSI AC分析网格数量轻松突破几百万普通的办公电脑跑起来风扇声音跟飞机起飞一样。我的建议是全板谐振分析放在PCB设计后期做一次即可日常优化阶段只提取关键区域的局部模型比如某个BGA下面的电源平面把模型范围缩小仿真速度会快很多且对于定位局部问题是完全够用的。5. 从Allegro走到Sigrity我踩过的那些数据交互坑Sigrity和Allegro同属Cadence生态但跨工具链的数据交接并不总是丝滑的。最让人头疼的踩坑点集中在工程导入、叠层信息映射和版本兼容这几个方面。5.1 导入PCB数据的两种主流方式Sigrity并不直接打开Allegro的.brd文件来仿真而是通过中间格式导入。目前主流的有两种方式一种是直接用Cadence的桥接插件把当前Allegro工程一键导出到Sigrity另一种是先导出ODB格式再在Sigrity里新建工程导入。我个人的建议是优先用桥接插件方式一方面操作步骤少另一方面网络、器件位号、叠层信息的映射更完整。不过要注意桥接插件对Allegro和Sigrity的版本匹配有要求新版本Allegro导出到老版本Sigrity经常出现模型映射不全的问题。最简单粗暴的解决办法让两者保持相同大版本。ODB格式的优势是跟版本无关但导入后需要手工核对的地方多一些。典型的问题是叠层信息缺失ODB里如果只定义了板厚而无各介质层的厚度导入后叠层会变成一个大平板仿真结果失真得非常厉害。所以我导入完成后第一件事永远是打开叠层编辑器逐个核对每一层的厚度、材料、铜厚。5.2 端口设置Paste、Probe还是Internal Port端口定义是SI仿真里最影响结果的一步但也是很多人随手一放的部分。Sigrity里常见的端口类型有三种Paste端口、Probe端口、Internal Port。Paste端口适合模拟探针直接压在焊盘上的测试方式Probe端口一般用于连接示波器探头位置的建模Internal Port则用于芯片引脚或连接器引脚等内部节点。选错端口类型相当于测试时接错了探头的位置结果当然没有参考价值。我的习惯是仿真场景中有明确的测试点位置就用Paste或Probe建模只关心芯片到芯片的内部链路就用Internal Port。5.3 仿真不收敛的排查顺序热搜词里cadence瞬态仿真不收敛是提得很多的一个词。Sigrity里如果碰到求解器不收敛也就是报错信息里反复出现Failed to converge之类的问题先不要急着调求解器参数按下面这个顺序排查通常更有效检查模型是否有悬空的引脚或未连接的平面层检查是否出现了互相重叠的铜皮这在导入第三方设计的ODB之后很常见检查层叠设置里是否有厚度为0或材料DK为0的异常数据最后再考虑调整求解器的迭代次数和误差容限。按我的经验前面三条占了不收敛原因的绝大部分真正需要调求解器参数的情况反而很少。5.4 库和版本的连续性还有一个容易被踩的地方是元件模型库和Sigrity版本的匹配。Sigrity自带的库文件会跟随版本更新老工程在升级版本后重新打开时有的模型可能被替换成新库里的默认模型导致仿真结果跟当初存档的对不上。我现在的做法是在项目仿真结束后把关键模型导出到本地作为项目附件保存同时把仿真工程打包存档而不是只归档最终的仿真报告。这样即使将来版本升级也能回溯当时的仿真条件。6. 根据我的经验Sigrity新手必须知道的几件事写到这里再聊一点个人体会。我见过不少人下载Sigrity后第一件事就是找各种教程视频照着界面一步一步点结果视频里顺畅的操作到自己手里总出问题。问题往往不出在操作本身而是出在准备环节——叠层没有核对模型没有更新端口位置和视频里不一致这些前置条件只要差一个后面的结果就判若云泥。初学者上手Sigrity我建议按照这样的路径来推进先不用急着学复杂的全链路仿真而是找一块已经量产、实测数据可用的旧板子导入Sigrity跑一遍TDR和简单的PI分析把仿真结果和实测数据对比。这个过程能逼着你把模型参数、叠层结构、端口设置这些东西挨个搞明白因为每一个参数错了都会反映在结果偏差里。等你能解释清楚偏差的来源再开始做新项目的仿真就顺理成章了。另外一个建议是尽量在项目早期引入仿真。最理想的时间点是PCB布局刚完成、布线走了一半的时候这时候发现的SI/PI问题修改成本还不高。等全部布完线再去仿真一旦发现关键网络要调整走线或层叠改动量非常大甚至可能导致交期延误。我通常的做法是布局完成后先做一轮快速的平面谐振分析和关键网络预仿真相当于给设计上个保险布线完成后再做一轮精确的链路仿真两轮叠加下来投板之后能出问题的概率已经被压到很低了。Sigrity这套工具链的体量不小要想彻底吃透需要花费的时间精力远超一篇文章能覆盖的范畴。但这并不妨碍你从今天开始用一块旧板子和一次TDR仿真迈出信号完整性分析的第一步。那一次因为过孔反焊盘翻车的PCIe调试经历让我彻底明白了仿真这件事的意义——它不是老师傅用来炫耀的技巧而是高速设计里给自己兜底的最后一条安全绳。