Clarity 3D Solver 与 Sigrity 协同仿真:从三维建模到通道分析全流程
1. 为什么要把 Clarity 3D Solver 和 Sigrity 放在一条链上跑做高速数字设计或者电源完整性分析的同行大概都有过这种体验PCB 走线密度越来越高信号速率从几 Gbps 一路飙到 25G、56G 甚至更高传统的二维场求解器已经很难把过孔、连接器、封装引脚这些三维结构的寄生参数算准了。Clarity 3D Solver 就是在这种背景下进入大家视野的——它用有限元法做全三维电磁场求解能处理任意形状的导体和介质精度比二维工具高出一大截。但问题也随之而来算得准是一回事怎么把算出来的 S 参数、阻抗曲线、耦合矩阵真正用到系统级仿真里又是另一回事。Sigrity 工具链在这中间扮演的角色就是那个“翻译官”和“调度员”。它能把 Clarity 输出的 Touchstone 文件、SPICE 模型、IBIS 模型整合进一个统一的仿真环境里做通道级眼图分析、TDR 阻抗曲线提取、电源噪声传播路径追踪。换句话说Clarity 负责把物理结构算准Sigrity 负责把算准的结果用起来。这两者之间的协同不是简单导个文件就完事中间涉及模型边界设定、端口定义、频率扫描范围、网格收敛判断、结果后处理映射等一系列细节。任何一个环节没对齐最后出来的眼图可能就是“看着像那么回事实际上完全不能用”。这篇文章面向的是已经有一定 PCB 设计或信号完整性仿真基础、但还没把 Clarity 和 Sigrity 串起来跑通全流程的工程师。我会从环境准备开始一步步讲到结果分析把每个环节里容易踩的坑、参数怎么定、为什么这么定都掰开揉碎说清楚。全文基于我在实际项目中的操作经验结合常见工程实践补充了必要的原理说明力求让你看完就能在自己的机器上复现一遍。2. 环境准备与工具链版本对齐2.1 版本兼容性不是越新越好Cadence 的这套工具链版本管理是个老大难问题。Clarity 3D Solver 和 Sigrity 虽然同属 Cadence 家族但它们的发布节奏并不完全同步。我遇到过最典型的情况是Clarity 2023.1 输出的 Touchstone 文件在 Sigrity 2022 里导入时端口顺序对不上导致 S 参数矩阵错位仿真结果完全失真。后来查了半天才发现是 Touchstone 文件格式版本差异——Clarity 默认输出的是 Touchstone 2.0而老版本 Sigrity 只认 1.0。所以第一步先确认你手头两个工具的版本号。打开 Clarity在 Help 菜单里找 About记下完整版本号同样操作在 Sigrity 里做一遍。然后去 Cadence 官网的支持页面查兼容性矩阵。根据我的经验比较稳妥的组合是 Clarity 2023.1 配 Sigrity 2023.1或者 Clarity 2022.2 配 Sigrity 2022.2。跨大版本使用不是绝对不行但你要做好手动处理文件格式转换的准备。提示如果公司采购的是浮动许可证注意 Clarity 和 Sigrity 可能用的是不同的 License Server。提前确认两个服务的端口和主机名配置正确否则会出现“工具能打开但求解器无法启动”的尴尬情况。2.2 工作目录与临时文件管理Clarity 在求解过程中会生成大量临时文件特别是做宽带扫频的时候一个过孔结构的网格文件加上中间结果轻松吃掉几十 GB 磁盘空间。我建议在开始任何项目之前先规划好目录结构。我的习惯是这样project_root/ ├── clarity_workspace/ # Clarity 项目文件 │ ├── models/ # 三维模型导入目录 │ ├── mesh/ # 网格文件 │ └── results/ # S 参数输出 ├── sigrity_workspace/ # Sigrity 项目文件 │ ├── topologies/ # 通道拓扑 │ ├── models/ # 导入的模型库 │ └── reports/ # 仿真报告 └── shared/ # 共享交换区 ├── touchstone/ # 交换用的 Touchstone 文件 └── ibis/ # IBIS 模型这样做的好处是Clarity 的输出可以直接指向shared/touchstone/Sigrity 的模型库也指向同一个位置避免文件复制带来的版本混乱。另外Clarity 的临时目录最好设置到 SSD 上机械硬盘的读写速度会成为瓶颈。在 Clarity 的 Preferences 里可以修改 Scratch Directory改完之后记得重启工具生效。2.3 材料库与叠层参数的同步这是最容易被忽略但影响最大的环节。Clarity 做三维场求解时需要知道每个导体和介质的电磁参数——电导率、介电常数、损耗角正切。Sigrity 做通道仿真时同样需要这些参数来计算传输线损耗。如果两边用的材料库不一致比如 Clarity 里 FR4 的 Dk 设成了 4.3Sigrity 里默认是 4.5那算出来的插损曲线在 10 GHz 以上能差出 0.5 dB/inch。我的做法是在项目启动阶段就建立一个统一的材料库 CSV 文件包含以下字段材料名称类型介电常数 (Dk)损耗角正切 (Df)电导率 (S/m)备注FR4_Generic介质4.30.020通用板材FR4_HighTg介质4.10.0150高 Tg 板材Copper_ED导体--5.8e7电解铜SolderMask介质3.50.030阻焊层然后在 Clarity 的 Material Library 和 Sigrity 的 Stackup Editor 里分别导入这个 CSV。注意Clarity 对材料名称大小写敏感Sigrity 不敏感所以统一用大写加下划线的命名规则最保险。3. 从 Allegro 到 Clarity三维模型的正确导出方式3.1 导出前的模型简化原则直接从 Allegro 把整块 PCB 导进 Clarity 做全板三维求解理论上可行实际上几乎跑不动。一块 20 层板上面几万个过孔、几千条走线网格划分出来轻松上亿个单元内存直接爆掉。所以导出之前必须做简化只保留你真正关心的那部分结构。我的简化原则是“三留三去”留过孔、留连接器引脚、留关键走线去大面积铜皮、去无关器件、去测试点。具体操作上在 Allegro 里用 Skill 脚本或者手动选择把目标区域框出来然后导出为 EMN 或 STEP 格式。EMN 格式的好处是保留了层叠信息和材料属性STEP 格式则更通用但需要手动重新指定材料。注意导出 EMN 时Allegro 的版本要和 Clarity 的导入器版本匹配。我遇到过 Allegro 17.4 导出的 EMN 在 Clarity 2023 里导入后层叠顺序错乱的情况解决办法是在 Allegro 的 Export 设置里勾选“Use Legacy EMN Format”虽然名字叫 Legacy但兼容性反而更好。3.2 过孔结构的单独处理过孔是三维求解的核心对象也是最容易出问题的地方。一个典型的差分过孔包含钻孔、焊盘、反焊盘、连接走线等多个几何特征。在 Clarity 里我建议把过孔结构单独提取出来做求解而不是混在整板模型里。具体步骤是在 Allegro 里用“Via Structure Extraction”功能选中目标过孔及其周围一小段走线导出为独立的 EMN 文件。然后在 Clarity 里新建一个项目专门求解这个过孔结构。这样做的好处是网格可以划得很细求解精度高而且计算时间可控。算完之后把 S 参数导出再在 Sigrity 里作为“黑盒模型”嵌入到通道拓扑中。这里有个参数需要特别注意反焊盘的直径。很多设计里反焊盘比焊盘大 0.1 mm 左右这个尺寸直接决定了过孔的寄生电容。在 Clarity 里导入模型后第一件事就是检查反焊盘的几何尺寸是否和设计一致。我见过因为 Allegro 导出时单位换算错误反焊盘被放大了 10 倍的情况结果算出来的过孔阻抗只有 30 欧姆完全不对。3.3 端口定义的规范Clarity 里的端口定义方式直接影响 S 参数的物理意义。对于过孔结构我通常用波端口Wave Port加在走线的两端端口的参考面要垂直于走线方向并且足够大以包含所有的场分布。端口的尺寸一般取走线宽度的 5 到 10 倍太小会截断场太大则浪费计算资源。对于差分对两个端口要设置成差分模式Clarity 会自动计算差模和共模 S 参数。这里有个细节差分端口的极性要设置正确否则差模和共模会颠倒。在 Clarity 的 Port Setup 里可以指定每个端口的正负节点通常 P 端接信号线N 端接参考地。端口的阻抗归一化值也要注意。默认是 50 欧姆但如果你的走线设计阻抗是 85 欧姆差分即 42.5 欧姆单端那归一化阻抗要改成对应的值否则 S11 的读数会误导你。我一般会在 Clarity 里先跑一个宽频扫描看看 S11 在低频段是否接近 0 dB如果偏离很大先检查端口设置。4. Clarity 求解设置网格、扫频与收敛判断4.1 自适应网格划分的取舍Clarity 的自适应网格划分功能很强大但也很“吃”时间。它的逻辑是先粗划网格算一遍然后根据场分布梯度自动加密反复迭代直到收敛。对于过孔这种结构通常需要 3 到 5 轮迭代才能达到满意的精度。我的经验是第一轮用默认设置跑看收敛曲线如果第二轮和第三轮的 S 参数差异小于 0.1 dB就可以停了。但自适应网格不是万能的。对于某些尖锐几何特征比如焊盘和反焊盘的边缘自适应加密可能会陷入局部细化导致网格数量爆炸。这时候需要手动设置网格种子点在关键区域预先指定网格尺寸。在 Clarity 的 Mesh Setup 里可以针对特定的面或体设置最大网格边长一般取最小几何特征的 1/3 到 1/5。提示如果求解时间超过 4 小时还没收敛先检查是不是有某个细小结构被反复加密。我遇到过一次一个 0.05 mm 的测试点导致网格数量从 200 万涨到 8000 万后来把测试点去掉20 分钟就算完了。4.2 频率扫描范围的确定扫频范围要根据你的信号速率来定。对于 25 Gbps 的 NRZ 信号基频是 12.5 GHz但眼图分析需要考虑 3 到 5 次谐波所以扫频上限至少要到 40 GHz。对于 56 Gbps 的 PAM4 信号基频 28 GHz扫频上限建议到 80 GHz 甚至 100 GHz。扫频点数也很关键。Clarity 默认是每 GHz 采 10 个点对于宽带扫频来说这个密度够了。但如果你的结构在某个频段有谐振比如过孔在 30 GHz 附近有谐振峰那需要在这个频段加密采样否则会漏掉谐振细节。我通常先用较稀的点数跑一遍看 S 参数曲线有没有异常尖峰如果有再在尖峰附近加密。扫频类型选“Interpolating”还是“Discrete”取决于你的需求。Interpolating 模式会用有理函数拟合速度快但可能在谐振点附近失真Discrete 模式逐点计算慢但准确。对于最终交付的模型我建议用 Discrete 模式虽然多花几个小时但数据可靠。4.3 收敛判断与结果验证Clarity 的收敛判断主要看两个指标S 参数的迭代变化量和网格数量的增长趋势。在求解日志里每一轮迭代都会输出当前的最大 S 参数变化。我的标准是连续两轮的变化量小于 0.05 dB且网格数量增长小于 5%就认为收敛了。但收敛不等于正确。算完之后一定要做物理合理性检查。比如过孔的插入损耗在低频段应该接近 0 dB随着频率升高单调下降回波损耗在低频段应该很低比如 -30 dB 以下在谐振点附近会出现峰值。如果插入损耗在低频段就是 -3 dB那肯定是哪里出了问题常见原因包括端口设置错误、材料参数不对、或者参考地不连续。还有一个验证方法是能量守恒检查。Clarity 可以输出 S 参数矩阵你可以手动算一下 |S11|^2 |S21|^2 是否接近 1。对于无源结构这个值应该小于等于 1如果大于 1说明求解有问题。我一般会在 MATLAB 或 Python 里写个小脚本做这个检查几行代码的事。5. Sigrity 侧的模型导入与通道搭建5.1 Touchstone 文件的导入与端口映射Clarity 算完之后导出 Touchstone 文件。这里有个关键点Touchstone 文件里的端口顺序必须和 Sigrity 里通道拓扑的端口顺序一致。Clarity 默认按端口编号顺序输出但 Sigrity 导入时可能会重新排序。我的做法是在 Clarity 里导出之前先给每个端口起一个有意义的名字比如“TX_P”、“TX_N”、“RX_P”、“RX_N”然后在 Sigrity 里导入时手动映射。Touchstone 文件的格式也要注意。Clarity 支持 Touchstone 1.0 和 2.0Sigrity 2023 对 2.0 的支持比较好但如果你用的是老版本建议导出 1.0 格式。另外Touchstone 文件里的频率单位默认是 GHz但有些工具默认 Hz导入后要检查一下频率轴是否正确。注意如果 Touchstone 文件很大比如扫频点数超过 10000Sigrity 导入时可能会卡顿。这时候可以在 Clarity 里先做数据降采样或者用 Sigrity 的“Model Reduction”功能做有理函数拟合把模型阶数降下来。5.2 通道拓扑的搭建逻辑Sigrity 里的通道拓扑搭建本质上是在做一个“系统级连接图”。你把发送端芯片的 IBIS 模型、封装模型、PCB 走线模型、过孔模型、接收端 IBIS 模型依次连接起来形成一个完整的信号路径。每个模型可以是 Touchstone 文件、SPICE 网表、或者 IBIS 模型。我通常按以下顺序搭建放置发送端 IBIS 模型设置电源电压和驱动强度。连接封装模型如果有的话通常是从芯片厂商拿到的 S 参数。连接 PCB 走线模型这里可以用 Clarity 算出来的过孔 S 参数也可以用 Sigrity 自带的传输线模型。连接接收端 IBIS 模型设置输入电容和端接电阻。添加激励源通常是 PRBS 码型设置速率和上升时间。这里有个容易出错的地方IBIS 模型的版本和 Sigrity 的兼容性。有些老 IBIS 模型用的是 IBIS 2.1 格式Sigrity 2023 可能不认。解决办法是用 IBIS 编辑器转换一下或者找厂商要新版本。5.3 电源分配网络PDN的协同仿真除了信号通道Clarity 和 Sigrity 还可以协同做 PDN 分析。Clarity 算电源平面的三维场分布输出阻抗矩阵Sigrity 把阻抗矩阵和 VRM 模型、去耦电容模型结合起来做全频段 PDN 阻抗扫描。这个流程里Clarity 的输出是 Z 参数阻抗矩阵不是 S 参数。导出的时候要选对格式。Sigrity 导入 Z 参数后会自动转换成 S 参数做后续分析。这里要注意Z 参数的参考阻抗通常是 50 欧姆但 PDN 分析里更关心的是毫欧级别的阻抗所以导入后要检查一下阻抗曲线的量级是否正确。我做过一个案例Clarity 算出来的电源平面阻抗在 1 MHz 是 5 毫欧导入 Sigrity 后变成了 50 欧姆查了半天发现是导出时选了“Normalize to 50 Ohm”选项。取消这个选项后数据就对了。6. 仿真结果的后处理与问题定位6.1 眼图分析中的参数设置Sigrity 的眼图分析功能很强大但参数设置不对出来的眼图就是“假眼”。关键参数包括码型长度PRBS7 够用PRBS15 更接近真实情况但仿真时间翻倍。采样率至少是信号速率的 10 倍比如 25 Gbps 信号采样率设 250 Gbps。抖动设置随机抖动RJ和确定性抖动DJ要分开设RJ 通常用 RMS 值DJ 用峰峰值。均衡器设置如果发送端有 FFE接收端有 CTLE 或 DFE要在对应位置加上。我见过有人做 56 Gbps PAM4 仿真码型用 PRBS7结果眼图张开度很好但实际测试完全打不开。原因是 PRBS7 的码型太短没有覆盖足够的低频分量PDN 噪声和基线漂移没体现出来。后来换成 PRBS15眼图高度掉了 30%这才接近实测。6.2 TDR 阻抗曲线的提取与解读TDR时域反射是分析过孔和传输线阻抗不连续性的常用手段。在 Sigrity 里可以从 S 参数直接算 TDR也可以从时域仿真结果里提取。我通常用 S 参数算 TDR因为这样不需要额外的激励源设置。TDR 曲线的解读要注意几点上升时间TDR 的上升时间决定了空间分辨率。上升时间越短能分辨的阻抗变化越精细。但上升时间太短高频噪声也会被放大。一般取信号上升时间的 1/3 到 1/5。参考阻抗TDR 曲线是相对于参考阻抗的通常是 50 欧姆。如果走线设计阻抗是 85 欧姆差分那 TDR 要设置成差分模式。过孔阻抗一个设计良好的过孔阻抗应该控制在目标阻抗的 ±10% 以内。如果过孔阻抗偏低通常是反焊盘太小或者过孔太长偏高则是反焊盘太大或者参考地不连续。我遇到过一个案例TDR 曲线在过孔位置出现了一个 20 欧姆的凹陷查了半天发现是过孔的反焊盘在 Allegro 里被误设成了和焊盘一样大导致寄生电容过大。改回正常尺寸后阻抗恢复到 50 欧姆附近。6.3 插损与回损的频域分析频域分析主要看插入损耗S21和回波损耗S11。对于高速通道插损在奈奎斯特频率处应该小于 -10 dB否则接收端需要很强的均衡。回损在低频段应该小于 -20 dB在高频段可以放宽到 -10 dB。分析插损曲线时要注意区分介质损耗和导体损耗。介质损耗随频率线性增加以 dB 为单位导体损耗随频率的平方根增加。如果插损曲线在某个频段突然下降可能是遇到了谐振需要检查过孔或连接器的结构。我通常会把 Clarity 算出来的插损曲线和实测的 VNA 数据做对比。如果差异在 1 dB 以内说明模型可信如果差异很大先检查材料参数和几何尺寸再检查端口设置。7. 实操中积累的几个关键经验7.1 模型边界条件的设定技巧Clarity 求解三维结构时边界条件决定了场在边界上的行为。默认是“Radiation”边界模拟开放空间。但如果你的结构周围有金属外壳或者屏蔽罩就要改成“Perfect Conductor”边界。设错了边界S 参数在低频段可能没问题但高频段会完全失真。我一般会在模型周围留出至少 1/4 波长的空气层然后把边界设成 Radiation。对于 40 GHz 的扫频上限1/4 波长大约是 1.9 mm所以空气层至少留 2 mm。如果结构本身很小比如一个过孔那空气层可以适当减小但不要小于 0.5 mm。7.2 多核并行计算的配置Clarity 支持多核并行但核数不是越多越好。我实测下来8 到 16 核的加速比最高超过 16 核之后核间通信开销会抵消计算收益。在 Clarity 的 Solver Setup 里可以设置核数一般设成物理核数的一半到三分之二比较稳妥。内存方面每个核至少分配 2 GB。如果网格数量很大比如超过 500 万单元那内存需求会急剧上升。我建议在求解之前先用“Mesh Statistics”看一下预估内存如果超过机器物理内存的 80%就要考虑简化模型或者换机器。7.3 结果文件的版本管理Clarity 和 Sigrity 的项目文件都比较大不适合用 Git 直接管理。我的做法是每次求解完成后把关键的 S 参数文件、仿真报告、设置截图打包成一个 ZIP用日期和版本号命名比如“20250115_v1.2_via_model.zip”。然后在项目文档里记录每个版本的变更内容和对应的仿真结果。这样做的好处是当后面发现某个版本的结果有问题时可以快速回滚到之前的版本而不需要重新跑一遍仿真。我吃过这个亏有一次改了一个材料参数结果忘了改回去后面所有的仿真都基于错误的参数白白浪费了两天时间。7.4 常见报错与快速排查报错信息可能原因解决办法“Port impedance mismatch”端口归一化阻抗设置错误检查 Port Setup 里的阻抗值“Mesh generation failed”几何模型有自相交或零厚度面在 CAD 工具里修复几何“Solver diverged”材料参数不合理或边界条件错误检查 Dk/Df 值和边界设置“Touchstone file format error”文件格式版本不兼容导出时选 1.0 格式“IBIS model parse error”IBIS 版本过老或语法错误用 IBIS 编辑器转换这些是我在实际项目中遇到频率最高的几个问题基本上覆盖了 80% 的报错场景。剩下的 20% 通常和具体设计相关需要具体分析。8. 从仿真到实测的闭环验证仿真做得再好最终还是要和实测对上。我一般会在 PCB 打样回来后用 VNA 测过孔和走线的 S 参数用 TDR 测阻抗曲线用示波器测眼图。然后把实测数据和仿真数据放在一起对比。对比的时候要注意实测的 S 参数包含了测试夹具的影响比如 SMA 连接器、测试走线等。这些影响在仿真里通常没有建模所以直接对比会有偏差。解决办法是做“去嵌入”De-embedding把夹具的影响从实测数据里去掉。Sigrity 里有专门的去嵌入工具可以自动处理。如果去嵌入之后仿真和实测的插损曲线在 20 GHz 以内差异小于 1 dB那说明模型精度足够了。如果差异大于 2 dB就要回头检查材料参数、几何尺寸、或者端口设置。我遇到过一次仿真和实测在 15 GHz 以上差了 3 dB后来发现是 PCB 厂商用的板材 Df 比我们假设的高了 0.005改过来之后就对上了。这个闭环验证的过程虽然麻烦但它是保证仿真可信度的唯一途径。没有实测验证的仿真只能叫“计算”不能叫“分析”。