news 2026/9/25 4:41:54

Clarity 3D Solver 与 Sigrity 协同仿真:从三维建模到通道分析全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.3,Sigrity 里默认是 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.0,Sigrity 2023 对 2.0 的支持比较好,但如果你用的是老版本,建议导出 1.0 格式。另外,Touchstone 文件里的频率单位默认是 GHz,但有些工具默认 Hz,导入后要检查一下频率轴是否正确。

注意:如果 Touchstone 文件很大(比如扫频点数超过 10000),Sigrity 导入时可能会卡顿。这时候可以在 Clarity 里先做数据降采样,或者用 Sigrity 的“Model Reduction”功能做有理函数拟合,把模型阶数降下来。

5.2 通道拓扑的搭建逻辑

Sigrity 里的通道拓扑搭建,本质上是在做一个“系统级连接图”。你把发送端芯片的 IBIS 模型、封装模型、PCB 走线模型、过孔模型、接收端 IBIS 模型依次连接起来,形成一个完整的信号路径。每个模型可以是 Touchstone 文件、SPICE 网表、或者 IBIS 模型。

我通常按以下顺序搭建:

  1. 放置发送端 IBIS 模型,设置电源电压和驱动强度。
  2. 连接封装模型(如果有的话),通常是从芯片厂商拿到的 S 参数。
  3. 连接 PCB 走线模型,这里可以用 Clarity 算出来的过孔 S 参数,也可以用 Sigrity 自带的传输线模型。
  4. 连接接收端 IBIS 模型,设置输入电容和端接电阻。
  5. 添加激励源,通常是 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,改过来之后就对上了。

这个闭环验证的过程,虽然麻烦,但它是保证仿真可信度的唯一途径。没有实测验证的仿真,只能叫“计算”,不能叫“分析”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 4:41:48

UDS诊断0x06子功能深度解析:读取DTC扩展数据记录与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 4:39:54

全志H5平台AP6212 WiFi移植实战:SDIO驱动、设备树与固件全链路调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 4:39:13

STM32学习不贪不放:核心外设组合拳与实战排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 4:39:08

ExternalDNS 对接 Pi-hole 自定义 DNS:从部署到验证的完整指南

云原生 【免费下载链接】external-dns Configure external DNS servers dynamically from Kubernetes resources 项目地址: https://gitcode.com/gh_mirrors/ex/external-dns 点击查看 免费下载 导读 本指南基于 external-dns 官方教程,讲解如何将 Kub…

作者头像 李华