1. 先搞清楚:Sigrity 到底是什么
Cadence Sigrity 这套东西,在硬件圈子里混过几年的人多少都听过,但真正能把它用明白的,说实话不多。我最早接触 Sigrity 是因为一块高速板子在实测时发现眼图塌得没法看,示波器一量,上升沿全是振铃,源头怎么查都查不到,后来才意识到问题出在 PCB 通道本身的阻抗不连续上。从那以后我才开始认真用 Sigrity 做信号完整性分析,也算把这块短板补上了。
很多刚接触的朋友会有个误区,以为 Sigrity 是一个独立的仿真软件,装完 Cadence 就能直接用。实际上 Sigrity 是一整套信号完整性(SI)和电源完整性(PI)仿真工具的集合,它和 Allegro 的关系更像是“一个负责画板子,一个负责检查画出来的板子能不能用”。可以这么理解:Allegro 帮你把电路板画出来,Sigrity 负责在板子还没做出来之前,用计算机模拟电流和信号在走线、过孔、连接器、封装里跑一遍,看看会不会出问题。
在硬件开发流程里,仿真环节夹在 Layout 完成和生产制造之间。传统做法是板子做回来再上示波器实测,有问题就改版重做,一版两版算快的,遇到高速接口多的板子,三四版都不稀奇。用 Sigrity 这类工具的价值就在于把一部分“实测”提前到“仿真”,在花几万块打样之前先把大概率会翻车的点揪出来。一个 10Gbps 以上的高速通道,走线过孔怎么打、参考平面怎么切、连接器选什么型号、端接电阻放哪里,这些设计决策如果全靠经验拍脑袋,翻车概率极高。
说到这儿顺便回应一下热词里“cadence和allegro的区别”。Cadence 是公司名也是产品线总称,Allegro 是 Cadence 公司旗下的 PCB 设计工具套件,Sigrity 则是另一条产品线,专注仿真。三者不是同一个东西的三种叫法,而是“总公司—设计工具—仿真工具”的关系。很多初学者装完 Cadence 发现菜单里既有 Allegro 又有 Sigrity,容易懵,实际上这只是安装包里集成了多条产品线而已。
这篇文章我打算把它写成一份实操笔记,面向的是那些已经能用 Allegro 画板子、但还没怎么碰过仿真的硬件工程师、PCB 工程师,以及研究生阶段在做高速电路设计的同学。我会从整套工具怎么上手说起,结合我在实际项目中踩过的坑,把从 PCB 到仿真的链路、TDR 仿真怎么跑、常见报错怎么解决这些问题一次讲清楚。
2. 从 PCB 到可仿真的模型链路
2.1 仿真前的数据准备
很多人拿到 Sigrity 第一件事就是点开仿真界面,然后发现不知道该导入什么文件。这里要明确一个基本概念:Sigrity 仿真的对象不是你画好的 .brd 文件,而是从 .brd 里提取出来的“带电气信息的几何模型”。
具体来说,你需要从 Allegro 里导出一个文件。操作路径是在 Allegro 的 File 菜单下选择 Export,然后选 IPC-2581 格式,这是目前 Sigrity 主推的数据交换格式,比起老一代的 .anf 格式,IPC-2581 保留了更多的叠层、网络、器件属性信息,导入以后丢信息的概率小得多。早期版本常用的是 .anf(Allegro Neutral File Format),如果你用的 Sigrity 版本比较老,导 .anf 也可以,但导出时要注意把“包含叠层信息”和“包含器件属性”这两个选项勾上。
文件导出来只是第一步,更关键的是 Layout 本身的质量。仿真的准确度直接取决于输入模型的完整度,这个道理就像做菜,食材不新鲜,厨艺再好也白搭。我见过很多初次做仿真的同学,拿一块还有很多 DRC 错误的板子直接导出来仿真,结果提取网络的时候发现走线断成了好几截,过孔信息丢失,参考平面被割得乱七八糟,仿真结果自然毫无参考价值。
所以仿真前的检查清单我建议至少包括这么几项:第一,叠层信息完整,每层铜厚、介质材料、介电常数、损耗角正切都填了;第二,高速网络的走线已经完成阻抗规划,差分对等长也做了;第三,电源平面和地平面上没有大量孤岛和细脖子铜皮;第四,DRC 里没有未解决的短路断路问题。这些在 Allegro 里花半小时检查清楚,比在 Sigrity 里折腾半天导出问题要省事得多。
2.2 提取通道的关键设置
文件导入 Sigrity 之后,你会看到整个板子的三维视图,这时候能做的事情非常多,但核心工作流是从中提取出你要分析的通道。
所谓通道,是指信号从驱动端芯片出来,经过封装、焊盘、过孔、走线、连接器,一直到接收端芯片的完整路径。以常见的 DDR 接口为例,一条地址信号的通道包含发送端 FPGA 的封装模型、PCB 上的走线、可能经过的过孔换层、末端接收端 DDR 颗粒的封装模型,每一段都有阻抗和不连续性,仿真就是要看信号跑过这条完整路径之后变成什么样。
在 Sigrity 里打开一块板子之后,第一步是打开层叠编辑器检查材料参数。介质材料的介电常数(Dk)和损耗因子(Df)对高速信号仿真结果影响极大。常规 FR4 材料在 1GHz 以下的 Dk 值通常取 3.8 到 4.2 之间,但在 10GHz 以上,频率对 Dk 和 Df 的影响就不能忽略了。如果你的供应商能提供材料的频变参数表,直接导入最靠谱;如果查不到,那就用软件自带的材料库,选择 FR4 相关类型,仿真结果作为参考评估板子设计是否合理,还是够用的。
设置好叠层,接下来要提取网络。在 Sigrity 的操作窗口里有一个网络提取功能,你可以手工指定起点和终点,也可以直接选择一整条网络让软件自动找路径。这里有个非常容易踩的坑:有些信号网络在 PCB 上是存在分支的,比如时钟信号经过一个电阻分成了两路,如果不做处理直接提取,软件会把整个网络全部纳入通道,导致仿真结果出现莫名其妙的反射。正确的做法是把分支用无源器件模型替代或者从通道中排除,只保留主信号路径。
2.3 模型类型怎么选:S参数、IBIS还是电路级模型
模型文件是仿真的灵魂。Sigrity 支持多种模型类型,但其中最常见的就三类:IBIS 模型、S参数模型和 SPICE 电路级模型。
IBIS 模型是芯片厂商最愿意公开提供的模型,它描述的是芯片输入输出引脚上的电压电流特性,里面包含上升沿时间、输出阻抗、拉灌电流能力这些关键信息。做系统级仿真时,驱动端和接收端都用 IBIS 模型是最常见的做法。IBIS 模型的优点是文件小、仿真速度快、不暴露芯片内部电路细节,所以几乎主流芯片厂商都会提供。
S参数模型描述的是一个无源网络在不同频率下的传输和反射特性,比如一段走线、一个连接器、一个过孔都可以用 S参数 来表征。在高速链路仿真里,芯片用 IBIS,中间的互连用 Sparameters,这是最经典也最高效的组合。
电路级模型则适用于需要对某些细节做精确分析的场景,比如你要单独研究某个过孔的结构对信号的影响,或者在电源完整性分析里对 VRM 做精细建模。
在 Sigrity 里导入模型时需要注意模型引脚和实际 PCB 封装的引脚对应关系。芯片厂商提供的 IBIS 模型里引脚名称通常和芯片数据手册的引脚名一致,但 Allegro 封装里的引脚名可能因为建库人的习惯不同而有差异。导入后建议逐一核对关键信号引脚,特别是电源地和信号的对应关系,引脚一对错了,整个仿真结果基本就废了。
3. 核心实操:TDR 仿真怎么做
3.1 TDR 的原理
TDR 全称是 Time Domain Reflectometry,时域反射计。这个技术最早是从电缆故障检测发展来的,原理非常简单:往一条传输线里注入一个上升沿极快的阶跃脉冲,脉冲在传播过程中遇到阻抗不连续的地方就会产生反射,反射波传回源端,通过分析反射波的幅度和到达时间,就能反推出传输线上各个位置的阻抗变化。
打个比方,你对着一条长长的管道喊一声,管道壁平滑的时候回声很均匀,但某个地方瘪了一块或者堵了东西,回声就会变样,通过分析回声的时间和强弱就能判断管道哪里出了问题。TDR 就是往 PCB 走线这条“管道”里喊一声,看回声在哪个位置、以什么形式回来。
在 Sigrity 里跑 TDR 仿真的实际意义主要有两个:一是验证 PCB 上的走线阻抗是否和目标值一致,比如设计时要求 100 欧姆差分阻抗,实测仿真结果出来是不是在 95 到 105 欧姆这个合理区间;二是定位阻抗不连续的位置,比如走线从表层换到内层时过孔区域阻抗偏低、连接器焊盘处电容效应导致阻抗偏低,这些在 TDR 曲线上都会表现为明显的下凹或者上冲。
3.2 操作步骤与参数设置
Sigrity 里跑 TDR 的路径一般是在 SI Analysis 相关的模块中,不同版本菜单位置会有差异,但核心步骤是一致的。我以 PowerSI 和 SystemSI 里常用的 TDR 仿真功能为例说明。
第一步,把 PCB 文件导入后,在仿真类型里选择 TDR 仿真。第二步,选择要分析的通道或网络。
第三步是设置仿真参数,这里有几个关键点要特别注意:
上升沿时间(Rise Time)是最重要的参数,它直接决定了 TDR 的空间分辨率。原理上,TDR 能分辨的最小长度大约是上升沿时间内信号在介质中传播的距离。在 FR4 材料中,一个 100ps 的上升沿对应大约 15 毫米的传播距离,意味着小于这个尺寸的阻抗不连续点很难被清晰分辨。如果只想检查 PCB 走线层面的问题,建议设 100ps 到 200ps;如果想检查封装级别的细节,就需要设到 20ps 甚至 10ps,但仿真时间和内存消耗会显著上升。
另外一个重要参数是源端阻抗和电压,源端阻抗影响反射系数的计算基准。默认 50 欧姆阻抗和 1V 阶跃电压,对于绝大多数单端信号仿真场景直接采用即可。做差分 TDR 时要设置差分激励模式,Sigrity 里可以同时观察差分阻抗和共模阻抗,选择差分模式后软件会自动在正负两条线上施加极性相反的激励。
参数设好之后点击运行,软件会进行场求解,这个过程可能需要几分钟到几十分钟不等,取决于通道的复杂程度和网格剖分的精细度。
3.3 读 TDR 曲线
仿真跑完后,你会得到一条 TDR 阻抗随距离变化的曲线,横轴是距离或时间,纵轴是阻抗值。读图和检查的关键在于识别曲线的整体趋势和局部突变。
首先看整体趋势是否符合预期。如果是一条设计为 50 欧姆的单端走线,TDR 曲线主体部分应该稳定在 45 到 55 欧姆之间,曲线的平均值如果偏离这个范围,那就要回到叠层设置里看介质厚度和线宽匹配是否合理。比如表层单端 50 欧姆走线,在常见叠层下线宽受铜厚、介质高度和介电常数的影响很大,如果 TDR 仿真结果整体系统性偏高或偏低,大概率是层叠参数填错了。
然后看局部突变。曲线开始位置通常会有一个爬升或过冲,这是探针或连接器焊盘带来的影响。中间部分的每一个凹陷或凸起都对应一个阻抗不连续点,你可以把光标移到突变的中心位置,软件会显示该位置对应的 XY 坐标,把这个坐标和 PCB 上的器件位置对比,就能定位到是哪个过孔、哪段瓶颈线或者哪个焊盘出了问题。
我印象中比较经典的一次案例,是一块 25Gbps 背板的差分走线,TDR 仿真发现在连接器附近有一段差分阻抗掉到了 78 欧姆,设计目标是 100 欧姆,差的非常多。根据坐标定位找到是出线区域因为走线太贴近连接器引脚焊盘,导致差分对之间耦合增加、阻抗下降。后来把出线区域做了挖空处理,增加了焊盘与走线之间的间距,阻抗就拉回到了 98 欧姆左右,板子打样回来实测 S参数 和仿真几乎一致。
读 TDR 曲线有一条非常实用的经验:不要只盯着阻抗数值的绝对值,重点看位置和趋势。不同制造商的板材参数存在差异,仿真和实测之间有 5% 到 10% 的偏差是正常的,但如果位置对了、趋势对了,那设计改进的方向就是对的。
4. 常见问题与排查技巧实录
4.1 安装类问题
热词里有一堆关于 Cadence 安装的搜索记录,比如“cadence 16.6 115”“cadence安装教程”“吴川斌的博客cadence安装”“this application has quit unexpectedly to help cadence detect and analyze the problem”这类。作为常年帮人折腾 EDA 工具的老手,我可以负责任地说一句:Cadence 安装之所以被问得最多,是因为它确实容易出问题,而且报错信息对新手极不友好。
先说这个“This application has quit unexpectedly. To help Cadence detect and analyze the problem...”的弹窗,几乎所有 Cadence 工具都可能在启动或运行过程中弹出来。多数情况下这个弹窗的本质是程序崩溃,原因包括:许可证服务没起来、破解不完整(这个话题不展开)、显卡驱动不兼容、系统缺少某些运行库、或者软件版本和操作系统版本不匹配。遇到这个弹窗,我建议从三个方向排查:第一,确认 License 服务是否正常运行,在服务管理器里检查 Cadence License Manager 的状态,这是最容易被忽略的原因;第二,更新显卡驱动,很多 EDA 工具的 OpenGL 渲染异常会导致闪退;第三,查事件查看器里的应用程序日志,里面会记录更具体的错误模块信息,往往能直接定位到是哪个 DLL 出了问题。
另外一个高发问题是安装过程中报错或者安装完成后某个组件不能启动。这里我强烈建议安装前先读一下安装包里的 Release Notes,里面明确写了支持的操作系统版本和依赖组件。很多安装失败是因为操作系统缺少 Visual C++ Redistributable 或者 .NET Framework 组件,装好这些再执行主安装程序,成功率会高很多。
还有一个非常常见的现象:装了新版 Sigrity 后,Allegro 菜单里看不到 Sigrity 的启动入口。这通常是因为安装时没有选择集成选项,或者两个工具版本不匹配。解决方法是手动从开始菜单启动 Sigrity 独立程序,把文件直接拖进去用,不影响使用。
4.2 ODBC 数据源与器件库连接
“cadence 怎么设置 odbc 数据源”这个搜索词很有意思,说明现在关注 Cadence 的人里有相当一部分在做元器件库管理。ODBC 是数据库连接的标准接口,Cadence 的 CIS(Component Information System)功能就是通过 ODBC 连接外部数据库来管理元器件的。
在 Windows 上配置 ODBC 数据源的路径是控制面板 → 管理工具 → ODBC 数据源(64位/32位),这里要注意位数必须和 Cadence 程序的实际位数一致。配置 SQL Server 或 MySQL 数据源时要填服务器地址、数据库名、登录账号和密码。配置完成后,在 Capture CIS 的配置文件里指定这个 DSN,原理图编辑器里就能通过网络实时查询元件库了。
这个配置经常报错的地方有两处:一是位数不匹配,装了 64 位的 ODBC 驱动,但 Cadence 是 32 位程序,它看不到 64 位的数据源;二是连接字符串里缺少驱动名称,可以用 ODBC 管理器先做一个测试连接,确认无误后再在 Cadence 里引用。
4.3 原理图与 PCB 中的常见告警
“cadence capture 原理图上引脚类型是 power,报警告”“cadence 添加 intersheet references 报错”“cadence 导出 bom”这几个搜索词,暴露出很多刚入门的工程师卡在了原理图绘制的细节上。
原理图引脚类型设置为 Power 却报 Warning,这个问题的本质是电气规则检查(DRC)认为你有一个电源引脚没有正确连接到电源网络。常见原因包括:引脚名称和网络别名大小写不一致、电源符号放置位置不对、或者引脚属性虽然标了 Power 但没有连接到对应的电源网络。解决方法是检查电源符号的全局网络名,确保和电源引脚名称完全一致。
导出 BOM 报错的问题,多数情况下是因为原理图里有元器件缺少 PCB 封装属性(Footprint),或者封装名里含有非法字符。Cadence 导出 BOM 时会检查每个元件的属性完整性,只要有一个元件没有填 Footprint,导出就会中断。解决方法是先在原理图里跑一遍 Design Rules Check,把缺失的属性补全,再执行 BOM 导出。
“cadence 封装导入 PCB”对应的是封装库迁移的问题。在 Allegro 里,封装文件 .dra 建好之后要生成 .psm 才能在 PCB 设计中被调用。新手常犯的错误是在原理图里指定了封装名,但封装并没有被添加到 PCB Editor 的库路径里,导致导入网表时找不到封装。解决方式是在 User Preferences 的 Library 路径设置里把封装库目录加进去。
4.4 瞬态仿真不收敛的处理思路
“cadence 瞬态仿真不收敛”是仿真类搜索里频率非常高的问题。SPICE 类仿真器在做瞬态分析时,本质是在每个时间步长里迭代求解非线性方程组,如果迭代不收敛,仿真器就会报错或者强行减小步长,导致仿真时间无限拉长。
不收敛的原因集中在几个方面。一是电路里存在初始条件冲突,比如电容初始电压和电路稳态值相差过大,可以在仿真设置里勾选“Skip Initial Transient Solution”选项跳过初始瞬态解的计算。二是模型参数设置不合理,比如二极管模型里的串联电阻设成了 0 或者过小,导致在某个偏置点附近迭代震荡。三是时间步长设置过大,把最大步长改小,比如从默认值改成信号周期的百分之一。四是电路本身存在理论上的奇异点,比如理想电压源直接并联电容,这种情况需要加入小的串联电阻来消除奇异。
在 Sigrity 里遇到不收敛,还有一个特有的排查思路:先简化模型。把通道里的连接器模型去掉,看是否收敛;还不行就换成理想的短线模型。用排除法缩小范围,往往是最高效的定位手段。
4.5 其他高频搜索的映射对照
热词里还有“cadence 画 pcb 板框”“cadence pcb 设置线宽”“cadence 怎么选中同一个网络”“cadence 的 pcb 中选项的活动类和子类”“cadence 的 pcb 如何转换为 AD 的 pcb 格式”“cadence 新增器件位号”“cadence 铜皮优先级”“cadence 导入工艺库”“cadence 运算放大器”等,这些都属于基础操作问题。
“画 PCB 板框”在 Allegro 里的标准做法是在 Board Geometry 和 Outline 子类里画闭合线段,然后执行 Z-Copy 生成 Route Keepin 和 Package Keepin。线宽设置在 Constraint Manager 里统一管理,不建议直接在属性里改单根线的宽度,那样会导致后续 DRC 管理混乱。选中同一个网络用右键的 Select Net 功能即可。“活动类和子类”的切换是所有 Allegro 操作的基础,Options 面板里选了哪一个子类,后续的绘制和编辑操作就作用在哪一层,很多新手画出来的线莫名其妙出现在丝印层,就是因为活动子类没切对。
PCB 转换到 AD 格式,建议用 IDF 或者 IPC-2581 中间格式交换,直接把 .brd 给 AD 用大概率会丢失叠层和约束信息。
“cadence 导入工艺库”是指把代工厂提供的 PDK 文件导入到 Virtuoso 环境里,这涉及到 CDS_LIC_FILE 环境变量的设置和 cds.lib 文件的编辑,属于模拟 IC 设计范畴的内容,和数字 PCB 仿真方向差异较大,这里就不展开了。
“铜皮优先级”对应的是 Allegro 里动态铜箔的优先级设置,当多个网络的大片铜皮重叠时,优先级高的铜皮会优先铺铜,这是做电源平面分割时的常用技巧。优先级在 Shape 菜单的 Global Shape Parameters 里设置。
5. 把 Sigrity 用好的几个关键习惯
讲了这么多具体操作,最后分享几个我在实际项目中形成的习惯,都是真金白银换来的经验。
第一,仿真结果不要追求绝对准确,要追求相对一致。很多工程师用仿真工具的第一反应是质疑软件准确性,觉得仿真和实测对不上就是软件不行。实际上任何仿真都是对物理世界的近似,Sigrity 的场求解器再精确,输入模型的参数也是近似值,板材 Dk/Df 有批次差异、蚀刻工艺有公差、芯片模型的典型值和实际芯片有偏差,这些都会导致仿真和实测存在一定差异。真正重要的是仿真趋势的一致性——修改设计后仿真阻抗提高了 5 欧姆,实测应该也有类似的提升,只要趋势一致,仿真在设计优化中的作用就能充分发挥。
第二,建立自己的材料参数库。不同厂家、不同批次的 FR4 材料特性差异可能很大,板厂给出的叠层表里通常只有建议的介电常数,但真实值往往和你手里的测试板有差距。建议每次打样时向板厂要一份阻抗测试报告,把报告里的实际阻抗值反推回材料的有效介电常数,记录到自己的参数库里。积累一定样本量之后,你以后再做仿真时直接用这些校正过的参数,仿真和实测的吻合度会大幅提升。
第三,仿真最好从关键信号挑着做,不要一上来就全板仿真。一块复杂的数模混合板子,信号网络可能有几千个,全板仿真一次耗时可能以小时计,而且结果海量根本看不过来。合理的做法是先挑选高速接口、时钟、复位等关键网络,逐个做 TDR 和眼图分析。等关键链路问题解决了,再视项目节奏扩展到其他网络。
还有一条是关于团队协作的。如果你所在的公司是硬件工程师、PCB 工程师、仿真工程师分开的岗位,那一定要建立清晰的交接规范。PCB 工程师导出的仿真用文件要固定命名规则,叠层参数和材料信息要写在统一的文档里,仿真工程师发现的每一个问题的定位坐标、阻抗偏差幅度、修改建议要回传给 PCB 工程师并跟踪闭环。我在实际项目里发现,仿真项目做得好不好,很多时候不取决于工具用得多溜,而取决于团队之间的信息传递是否顺畅高效。
Cadence Sigrity 这套工具链的学习曲线确实不缓,但它的价值也恰恰体现在深度上——从 PCB 设计到系统级仿真,从 SI 到 PI,它覆盖了一条完整的链路。对于想在高速电路设计领域精进的人来说,花几个月时间把这套工具用熟,带来的收益远超付出的时间成本。希望这篇笔记能帮你少走一些我当年走过的弯路。