Virtuoso_全量使用与管理手册
本手册整合 Virtuoso 基础操作、高级仿真、集群调度、管理员配置、第三方工具集成等全维度内容,覆盖模拟 IC 设计前端仿真、版图设计、工具运维全流程,适用于模拟前端工程师、IC 设计仿真工程师及 Virtuoso 管理员,基于 IC6.1.8(推荐版本)编写,兼顾实操性与运维规范性。
一、工具核心认知¶
1.1 Virtuoso工具定位与核心功能¶
Virtuoso 是 Cadence 旗下模拟 / 混合信号 IC 设计的核心 GUI 平台,本身不具备仿真计算能力,仅提供设计、仿真配置的可视化界面,实际仿真通过后台调用Spectre/Hspice等仿真器完成,核心功能覆盖 IC 设计全流程:
- 设计类:原理图绘制、版图绘制、GDSII 导入 / 导出
- 仿真类:仿真参数配置、仿真任务运行与控制、波形结果分析
- 验证类:版图验证前端 GUI 调用、工艺角 / 蒙特卡罗仿真支持
- 集成类:第三方 EDA 工具(Calibre/EMX/StarRC)无缝集成
1.2 推荐版本与版本避坑¶
| 版本类型 | 推荐选择 | 不推荐原因 |
|---|---|---|
| 主版本 | IC6.1.8 ISR16 及以上 | 修复 cdsXvnc 残留、x-lock 文件占用等多用户集群问题,改用 xvfb 实现分布式任务,稳定性最优 |
| 低版本 | IC6.1.7(仅迫不得已使用) | 存在字体混乱、缺码,cdsXvnc 端口抢占,需升级至 IC6.1.7-64b.500.23 + 并打 Hotfix_IC06.17.823 补丁 |
| 更早版本 | IC6.1.5~IC6.1.8 ISR14 | 分布式任务依赖 cdsXvnc,易出现端口占用、任务提交失败,无官方修复支持 |
配套仿真器:Spectre 19 ISR19 及以上,对 AVX512 指令集优化,Intel 高主频机型运行性能更佳
1.3 核心组件与关键概念¶
1.3.1 仿真界面组件¶
| 组件 | 核心能力 | 适用场景 |
|---|---|---|
| ADE L | 经典轻量界面,仅支持单 job 本地运行,无分布式能力 | 单个模块小仿真、快速验证、单 case 调试 |
| ADE XL/ADE Explorer | ADE L 超集,支持多 job 分布式仿真,兼容 LBS / 调度器 | Multi-corner(工艺角)、Monte Carlo(蒙特卡罗)仿真,集群环境大规模仿真 |
1.3.2 设计仿真关键概念¶
| 概念 | 定义 / 说明 | 工程价值 |
|---|---|---|
| 网表(Netlist) | 原理图 “编译” 后的文本文档,仿真器核心输入 | 仿真器与 GUI 的桥梁,定义电路拓扑与器件连接 |
| Model Files | PDK 中器件物理 / 电气特性描述文件,文本格式 | 决定仿真精度,匹配实际工艺制造特性 |
| 工艺角(Corner) | 器件工艺误差上下限的排列组合,对应 Model Files 的 section 字段 | 验证电路在工艺极限下的边界性能,保证设计鲁棒性 |
| 蒙特卡罗(Monte Carlo) | 器件参数在工艺偏差内随机取值仿真,一个取样点为一个 job | 验证芯片性能一致性,直接关联产品良率(通常 500-2000 个 job 并发) |
| 前仿(Pre-simulation) | 仅原理图转网表仿真,不考虑寄生特性 | 设计初期快速验证,定位模块级问题 |
| 后仿(Post-simulation) | 从版图抽取网表,考虑导线 / 过孔寄生、信号串扰 | 设计后期整体验证,接近芯片实际工作状态,需更大内存 |
| LBS(Load Balance System) | 负载均衡调度器,原生支持 LSF/SGE,速石平台适配 SGE wrapper | 集群环境下分布式任务调度,提高仿真效率 |
1.3.3 Virtuoso 系列差异¶
| 系列 | 功能特点 | 适用工艺节点 |
|---|---|---|
| ic | 基础版,功能全面,社区资料最丰富 | 平面 MOS 工艺(如 0.18μm、0.35μm) |
| icadv | 进阶版,支持先进工艺设计流程 | FinFET 工艺(如 28nm、14nm) |
| icadvm | icadv 新版,优化先进工艺适配 | 5nm 及以下更先进制程 |
二、Virtuoso环境准备与工程标准化搭建¶
2.1 系统与基础环境要求¶
操作系统:CentOS7(官方推荐,兼容性最优)
环境管理:推荐使用modules统一管理 EDA 工具环境变量,避免多用户配置不一致
硬件要求:集群节点建议 Intel 高主频机型(适配 Spectre AVX512 优化),单节点核数≥8,内存≥64G(后仿建议≥128G)
2.2 工程目录标准化规范¶
核心原则:不使用用户 HOME 目录,挂载专用 project 目录,保证数据归档与权限管理便捷性。
2.2.1 集群环境推荐路径¶
/projects/<PROJ_NAME>/<USER> # 按项目+用户划分,PROJ_NAME为项目名,USER为用户名
2.2.2 工程必备文件(初始化最小集)¶
所有文件均需与 PDK 匹配,Foundry 提供基础文件,用户自定义配置补充,文件作用与来源如下:
| 文件名 | 文件类型 | 核心用途 | 来源 / 配置方 |
|---|---|---|---|
| display.drf | 普通文件 | 定义 layout / 原理图的显示层次、样式、颜色 | Foundry(PDK 自带) |
| cds.lib | 普通文件 | 定义工艺库 / 设计库的名称与实际物理路径 | 用户根据 PDK 配置编写 |
| .cdsinit | 隐藏文件 | Virtuoso 初始化配置,含第三方工具集成、GUI 自定义、仿真参数默认值 | 用户编写(工程级 / 全局级) |
| models | 软链接 | 指向 PDK 中 Spectre Model Files 所在文件夹 | 用户创建(ln -s 源路径 目标路径) |
2.2.3 工程文件的作用¶
cds.lib:定义设计库的映射关系,是访问工艺库和设计库的基础。-
display.drf:定义原理图和版图的图形显示规则,如颜色、线型等 $HOME/.cdsenv:设置仿真精度、格点间距、默认仿真结果路径等$HOME/.cdsinit:用户主目录下的初始化脚本文件。这是一个Skill脚本,用于加载用户自定义脚本、定义快捷键、配置工作流程等
当前工作目录的cds.lib和display.drf:用于覆盖用户主目录或系统默认的库和显示设置。
环境变量CDS_LOAD_ENV可以控制.cdsenv的加载行为,例如设置为CWD+可同时加载工作目录和主目录的配置
2.3.4 集群调度器启动(srun 方式)¶
若需通过调度器启动 GUI,直接使用srun,不推荐 srun --x11(Slurm 对 X11 转发支持不佳):
module load ic/6.1.8
module load spectre/19.10
srun virtuoso &
2.4 环境变量全局配置¶
2.4.1 核心环境变量(必配)¶
| 环境变量 | 取值(速石 FCCE/FCP 平台) | 作用 |
|---|---|---|
| LBS_BASE_SYSTEM | LBS_SGE | 指定 LBS 调度器类型,适配 SGE wrapper |
| CDS_XVNC_OFFSET | 0-9(可选) | 低版本 Virtuoso 端口偏移,避免多用户端口抢占 |
| CDS_XVNC_TENBASE | 1-9/+(可选) | 低版本 Virtuoso 端口十位基数,配合 OFFSET 使用 |
2.4.2 配置方式¶
将环境变量写入/etc/profile或 modules 配置文件,实现全局统一配置,避免每个用户单独编写脚本:
# 示例:modules配置文件中添加
setenv LBS_BASE_SYSTEM LBS_SGE
setenv CDS_XVNC_OFFSET 2
三、Virtuoso基础仿真流程(ADE L)¶
ADE L 为单任务本地仿真专用,不支持 Multi-corner、LBS 分布式计算,操作简洁、启动快速,适合模块级快速验证。
3.1 启动与基础配置¶
-
原理图界面执行:
Launch→ADE L,打开仿真配置界面; -
仿真器全局设置:点击Setup → High-Performance Simulation,优先级高于具体分析设置,会覆盖后者;
-
运行模式:选择 Spectre/APS(APS 为高性能模式,推荐);
- 精度预设:Conservative(保守,精度最高)、Moderate(中等,平衡精度与速度)、Liberal(宽松,速度最快),精度定义参考《Spectre 用户参考手册》;
-
多线程:ADE L 仅本地运行,建议关闭或设为 Auto。
-
具体分析设置:点击Analyses → Choose Analyses,选择仿真类型并配置参数:
-
常用仿真类型:tran(瞬态)、ac(交流)、dc(直流)、noise(噪声)、stb(稳定性);
-
关键参数:瞬态仿真需设置
Stop Time(仿真终止时间,区别于仿真耗时),如 20u(20 微秒)。 -
变量与输出配置:
-
设计变量:
Variables→Edit,定义器件参数、电源电压等变量(如 vdd=1.8V,load=1pF); - 输出信号:
Outputs→To Be Plotted,直接在原理图点选需观测的线网 / 器件端口,仿真后自动绘制波形。
3.2 仿真运行与结果查看¶
点击仿真界面Simulation → Run,任务以 local 方式在当前节点运行;
仿真完成后,波形自动弹出,可通过Plot菜单进行波形放大、叠加、测量(如峰峰值、延迟);
结果保存:File → Save Results,将仿真结果保存为 psf 格式,便于后续回溯。
四、Virtuoso高级仿真流程(ADE XL)¶
ADE XL 是集群环境大规模仿真核心工具,支持 Multi-corner、Monte Carlo 多 job 分布式仿真,包含 ADE L 全部功能,是模拟 IC 设计后期仿真的首选。
4.1 ADE XL 会话管理¶
支持新建会话(全新仿真)和打开已有会话(旧项目续跑 / 结果分析),两种方式操作如下:
4.1.1 新建会话(适用于全新仿真)¶
- 原理图界面执行:
Launch→ADE XL; - 弹出对话框选择
Create New View,默认配置直接点击OK(自动生成 adexl 视图文件)。
4.1.2 打开已有会话(适用于旧项目)¶
方式 1(Library Manager):
- 点击
Tools→Library Manager; - 按
Library→Cell→View层级,找到adexl视图,双击打开。
方式 2(原理图直接打开):
- 原理图界面
Launch→ADE XL; - 选择
Open Existing View,选择对应工程的 adexl 文件,点击OK。
4.2 仿真 Case 标准化配置¶
4.2.1 添加 Test(关联原理图)¶
- 展开 ADE XL 左侧
Tests,点击Click to add test; - 在弹出的
Choose Design中选择仿真对应的Library/Cell/View(schematic); - 打开模式选择
read(只读,避免修改原理图),点击OK完成关联。
4.2.2 添加仿真分析¶
-
展开左侧
Analyses,点击Click to add analysis; -
选择仿真类型(tran/ac/noise/Monte Carlo 等),勾选 Enabled开启该分析;
-
配置仿真参数(如瞬态仿真Stop Time、精度errpreset),点击OK;
-
蒙特卡罗仿真:需额外设置
Number of Runs(取样次数)、Distribution(参数分布类型)。
4.2.3 添加输出信号(观测项)¶
- 切换至
Outputs Setup选项卡,右键空白处选择Add Signal; - 点击
Detail窗格右侧...按钮,回到原理图点选需观测的线网 / 器件端口; - 勾选信号对应的
Plot(仿真后绘制波形)和Save(保存结果),完成输出配置。
4.3 分布式 Job 提交设置(集群核心)¶
ADE XL 支持Command 方式(首推)*和*LBS 方式两种分布式提交方式,核心原则:调度器资源分配参数与 Spectre 多线程参数必须严格一致,避免调度器资源统计错误。
4.3.1 方式 1:Command 方式(首推,原生支持速石调度器)¶
核心优势:不依赖 LSF/SGE wrapper,无需初始化环境变量,支持所有调度器,稳定性最优。
-
点击
Options→Job Setup,Distribution Method选择Command; -
核心配置项:
-
Command:填入调度器原生命令,格式为srun -c<核数> --mem=<内存> -p<分区>,示例:srun -c4 --mem=16G -p hpc(4 核、16G 内存、提交至 hpc 分区); Max. Jobs:Virtuoso 一次向调度器提交的最大 job 数(如 16,根据集群资源调整);-
Timeouts:超时时间,默认 300s 即可,无需修改。 -
srun 常用参数详解(速石平台):
| 参数 | 用法 | 说明 |
| ---- | ---- | ---- |
|-c N|-c 4| 指定单个 job 使用的 CPU 核数,不可跨服务器,默认 1|
|--mem X|--mem=16G| 指定单个 job 最小分配内存,溢出不终止,不足则 pending|
|-p <分区>|-p hpc| 指定任务运行分区,不加则使用默认分区 |
|-t <时长>|| 指定 job 最大运行时长,格式为 h:m:s,超时自动终止 |
|--deadline|| 指定 job 强制结束时刻,优先级高于 - t|
|-w <节点>|| 指定 job 运行节点,资源不足则 pending|
4.3.2.2 Job Setup 图形化配置¶
点击Options → Job Setup,Distribution Method选择LBS;
核心配置项:
Hard Resource Req:每 job 预分配资源,格式num_proc=<核数>,mem_free=<内存/core>,示例:num_proc=8,mem_free=10G(8 核、每核 10G,总计 80G);Queue:勾选后填写分区名(如 ssim),不勾选则使用默认分区;Max Jobs:一次提交的最大 job 数(如 16);Job Policy Name:自定义策略名称(如 ADC_8core_80G),可保存复用,避免重复配置
4.3.3 特殊场景:srun Virtuoso 二次提交 job¶
若通过srun virtuoso将 GUI 运行在计算节点(非 login 节点),二次分发仿真任务时需修改提交命令,否则任务无法提交:
- 方案 1:将 Command 中的
srun替换为salloc srun,示例:salloc srun -c4 --mem=16G -p hpc; - 方案 2:使用 lsf wrapper 的
bsub -I命令替代 srun,示例:bsub -I -n4 -q hpc -R rusage[mem=16G]
4.4 Spectre 多线程精细化设置¶
多线程设置直接影响仿真效率,禁止盲目设置大核数,需结合电路网表大小、结构适配,步骤如下:
点击Setup → High-Performance Simulation,Simulation Performance Mode选择APS(高性能模式);
Multi-Threading设置(核心):
- 试跑阶段:选择
Auto,让 Spectre 自动分配线程(避免手动设置被驳回); - 正式运行:根据试跑结果选择
Manual,填入实际使用的线程数(超线程为 vCPU,关闭超线程则为物理核);
可选配置:Processor affinity,指定线程绑定的 CPU 核(如 0-3),适合对性能要求极高的仿真。
最佳实践:
- 先以 1 个 job 试跑,查看仿真日志中
Multithreading Enabled: N threads,记录 N 值; - 正式批量仿真时,手动将线程数设为 N,同时让调度器参数(-c/num_proc)与 N 严格一致
4.5 多任务资源分配最佳实践(集群避坑核心)¶
调度器无法自动识别 Spectre 实际使用的 CPU / 内存,若参数不匹配会导致节点满载仍提交任务、job 运行异常、节点死机等问题,核心规则如下:
参数一致性:High-Performance Simulation 中手动指定的线程数,与 Job Setup 中的资源参数必须完全一致:
- Command 方式:
srun -c N↔ 手动线程数 N; - LBS 方式:
num_proc=N↔ 手动线程数 N;
内存合理预估:mem_free为 job 内存下限,实际使用超分配不会被终止,但需根据前仿 / 后仿预估(后仿内存需求通常为前仿的 2-5 倍);
禁止直登计算节点:集群环境下,所有任务必须通过调度器提交,禁止 ssh 直接登录计算节点执行,避免抢占资源导致调度器统计错误;
大电路特殊处理:元件数量>128 的电路,必须手动指定线程数,禁止使用 Auto,同时开启 APS 高性能模式。
4.6 仿真结果查看与回溯¶
4.6.1 实时结果查看¶
- 仿真完成后,切换至 ADE XL
Results选项卡; - 双击波形图标,打开Virtuoso Visualization & Analysis XL,可查看:
- 信号波形:瞬态 / 交流 / 噪声波形的放大、叠加、测量;
- 工艺角对比:不同 Corner 下的波形差异,直观查看边界性能;
- 蒙特卡罗统计:良率分析、参数分布、Pass/Fail 结果统计。
4.6.2 异常中断任务结果回溯¶
若 GUI 退出 / 崩溃导致仿真中断,已完成的 job 结果可直接回溯,无需重新运行:
- 切换至 ADE XL
History选项卡,找到异常中断的仿真作业(按提交时间排序); - 展开作业,右键选择
View Results,即可查看已完成 job 的波形与统计结果; - 未完成 job:右键选择
Re-run Unfinished/Error Points,单独续跑失败 / 未完成的 job。
五、Virtuoso与第三方工具深度集成¶
Virtuoso 支持与Calibre/EMX/StarRC/SOS等主流 EDA 工具无缝集成,集成配置通过 .cdsinit文件实现,支持工程级配置 (仅当前工程生效)和全局级配置(所有工程生效)。
5.1 集成配置文件说明¶
- 工程级:将.cdsinit 放在工程工作目录(
/projects/<PROJ_NAME>/<USER>),仅当前工程生效; - 全局级:将.cdsinit 放在用户 HOME 目录(
~/.cdsinit),所有工程均生效; - 语法:基于SKILL 语言(Cadence 专用脚本语言),语法参考《Virtuoso SKILL 语言参考手册》
5.2 主流工具集成配置示例¶
5.2.1 EMX(电磁仿真工具)集成¶
EMX 用于提取电感、变压器等无源器件的电磁特性,集成后可在 Virtuoso 中直接调用,配置如下:
;; EMX初始化开始
(load "emxskill/emxconfig.i") ; 加载EMX配置文件,路径为EMX安装目录下的skill文件夹
;; 设置EMX默认仿真参数
(envSetVal "emx" "simType" 'string "3D") ; 仿真类型:2D/3D
(envSetVal "emx" "freq" 'real 1e9) ; 默认仿真频率:1GHz
;; EMX初始化结束
5.2.2 Calibre(物理验证工具)集成¶
Calibre 用于版图 DRC(设计规则检查)、LVS(版图与原理图一致性检查),集成后可在版图界面直接调用,配置如下:
;; Calibre初始化开始
(load "calibre/calibreSkill.i") ; 加载Calibre SKILL库
;; 设置Calibre DRC/LVS默认规则文件
(envSetVal "calibre" "drcRuleFile" 'string "./rules/drc.rul") ; DRC规则文件路径
(envSetVal "calibre" "lvsRuleFile" 'string "./rules/lvs.rul") ; LVS规则文件路径
;; 版图界面添加Calibre菜单
(hiMenuAdd "Calibre" "Tools" '("DRC" "LVS" "PEX") '("calibreDRC" "calibreLVS" "calibrePEX"))
;; Calibre初始化结束
5.2.3 StarRC(寄生参数提取工具)集成¶
StarRC 用于后仿寄生参数提取(提取导线 / 过孔的 RC/RLC 寄生),集成后可直接在 Virtuoso 中生成提取脚本,配置如下:
;; StarRC初始化开始
(load "starrc/starrcSkill.i") ; 加载StarRC SKILL库
;; 设置StarRC默认工艺文件与提取级别
(envSetVal "starrc" "techFile" 'string "./tech/starrc.tch") ; 工艺文件路径
(envSetVal "starrc" "extractLevel" 'int 3) ; 提取级别:1(全局)~5(精细)
;; StarRC初始化结束
5.2.4 自定义仿真数据目录¶
;; 设置仿真临时数据目录
(envSetVal "asimenv" "tmpDir" 'string "/projects/<PROJ_NAME>/<USER>/virtuoso_tmp")
;; 设置仿真结果默认保存目录
(envSetVal "adexl" "resultDir" 'string "/projects/<PROJ_NAME>/<USER>/virtuoso_results")
5.3 集成后工具调用方法¶
GUI 直接调用:集成后,工具菜单会自动添加至 Virtuoso 的Tools菜单,直接点击对应功能(如 Calibre → DRC)即可;
命令行调用:在 Virtuoso 命令行窗口输入工具专用命令(如emxSimulate、calibreDRC),执行对应操作;
批量调用:通过 SKILL 脚本编写批量操作命令,实现一键仿真 / 验证
六、Virtuoso GUI 自定义与优化¶
6.1 字体自定义(解决字体混乱 / 缺码)¶
针对 CentOS7 下 Virtuoso 字体混乱、中文缺码、显示不全问题,提供可视化配置和脚本配置两种方式,推荐结合使用。
6.1.1 可视化配置(临时生效)¶
- 打开 Virtuoso,点击
Options→Set Fonts; - 分别设置(标签)和(文本)字体:
- 推荐字体:Open Sans(Label)、Roboto Mono(Text),支持英文 / 数字完美显示;
- 字体大小:根据屏幕分辨率调整,推荐 11-14 号;
- 点击
Apply→OK,立即生效,关闭 Virtuoso 后失效。
6.1.2 脚本配置(永久生效)¶
在.cdsinit 文件中添加字体配置,启动 Virtuoso 自动加载,永久生效:
;; GUI字体自定义
(hiSetFont "label" '("Open Sans" 12 0 0)) ; 标签字体:Open Sans,12号
(hiSetFont "text" '("Roboto Mono" 11 0 0)) ; 文本字体:Roboto Mono,11号
(hiSetFont "menu" '("Open Sans" 11 0 0)) ; 菜单字体:Open Sans,11号
;; 开启字体抗锯齿
(envSetVal "hi" "fontSmoothing" 'boolean t)
6.2 界面布局与快捷键自定义¶
6.2.1 界面布局自定义¶
在.cdsinit 中设置仿真界面、库管理器的默认大小和位置,避免每次手动调整:
;; 设置ADE XL界面默认大小(宽x高)
(envSetVal "asimenv.window" "width" 'int 1200)
(envSetVal "asimenv.window" "height" 'int 800)
;; 设置库管理器默认位置(x,y坐标)
(envSetVal "libManager.window" "x" 'int 50)
(envSetVal "libManager.window" "y" 'int 50)
6.2.2 快捷键自定义¶
自定义常用操作快捷键(如原理图保存、仿真运行),提高操作效率:
;; 原理图一键保存:Ctrl+S
(schBindKey "Ctrl<Key>s" 'schSave)
;; ADE XL一键运行仿真:F5
(adexlBindKey "<Key>f5" 'adexlRunSimulation)
;; 版图一键放大:Ctrl+++
(leBindKey "Ctrl<Key>plus" 'leZoomIn)
七、Virtuoso 管理员运维指南¶
7.1 集群多用户管理核心规则¶
- 版本统一:所有用户使用IC6.1.8 ISR16+,禁止混合使用低版本,避免 cdsXvnc 端口抢占;
- 资源隔离:按项目划分工程目录,设置目录权限(
chmod 750 /projects/<PROJ_NAME>/<USER>),避免跨用户数据篡改; - 任务管控:通过调度器配置资源配额(如每个用户最大并行 job 数 32,单 job 最大核数 16),防止个别用户抢占集群资源;
- 日志监控:定期查看 Virtuoso 日志(
~/.virtuoso/log)和调度器日志,及时发现任务异常、资源耗尽问题。
7.2 GUI 退出后仿真任务后台保持运行¶
实现 Virtuoso GUI 退出 / 崩溃后,Spectre 仿真任务继续在后台运行,避免前期工作白费,配置如下:
- 在工程工作目录的.cdsinit 文件中添加以下 SKILL 代码:
lisp
; 开启GUI退出后后台继续运行仿真
envSetVal("adexl.distribute" "continueICRPRunOnAbruptGUIExit" 'boolean t)
-
生效条件与限制:
-
为 Virtuoso 内置功能,与调度器类型无关,无需额外配置;
- 仅适用于GUI 界面退出 / 崩溃,Spectre 本身崩溃、计算节点 OOM、系统死机无效;
- 静态集群有效,动态集群(auto-scale)节点释放后,进程会被销毁,无法继续运行
7.3 常见故障排查与解决¶
7.3.1 字体混乱 / 缺码 / 显示不全¶
故障原因:CentOS7 缺少 xorg-x11-front 的 75dpi/100dpi 字体包,或 IC617 版本未打补丁。
- 安装缺失字体包:
yum install -y xorg-x11-fonts-75dpi xorg-x11-fonts-100dpi xorg-x11-fonts-misc
- IC617 版本:升级至 IC6.1.7-64b.500.23+,并安装 Hotfix_IC06.17.823_lnx86 补丁。
7.3.2 ADE XL 无 LBS 选项¶
故障原因:缺少LBS_BASE_SYSTEM环境变量,或变量取值错误。
解决方法:
- 检查环境变量:
env | grep LBS_BASE_SYSTEM,确认取值为LBS_SGE; - 若未设置,执行:
setenv LBS_BASE_SYSTEM LBS_SGE,并写入全局配置文件。
7.3.3 cdsXvnc 残留与 x-lock 文件占用(低版本核心故障)¶
故障触发条件:
-
Virtuoso 版本:IC6.1.5~IC6.1.8 ISR14;
-
分布式任务以 LBS/Command 方式运行;
-
仿真异常退出,或多用户(>10 人)同时运行仿真。
故障现象:job 状态显示 TERMINATED,无法提交分布式任务,计算节点/tmp目录下出现.X*-Lock文件,存在 cdsXvnc 残留进程。
解决方法:
方法 1:官方推荐(彻底解决)
升级 Virtuoso 至IC6.1.8 ISR15+,官方放弃 cdsXvnc,改用 xvfb 实现分布式任务,无端口占用问题。
方法 2:临时解决(低版本迫不得已使用)
- 清理残留进程与文件:登录计算节点,执行以下命令(核实文件 / 进程所属用户,避免误删):
# 杀死cdsXvnc残留进程
ps -ef | grep cdsXvnc | grep -v grep | awk '{print $2}' | xargs kill -9
# 删除x-lock文件
rm -f /tmp/.X*-Lock
- 多用户端口错开:为每个用户配置不同的 CDS_XVNC_OFFSET/CDS_XVNC_TENBASE,避免端口抢占:
# 用户A
setenv CDS_XVNC_OFFSET 1
setenv CDS_XVNC_TENBASE 9
# 用户B
setenv CDS_XVNC_OFFSET 2
setenv CDS_XVNC_TENBASE 9
7.3.4 调度器资源统计错误,job 运行异常¶
故障原因:Spectre 多线程参数与调度器资源分配参数不一致,调度器无法识别实际资源使用。
解决方法:
- 严格保证参数一致性:手动指定 Spectre 线程数,让调度器参数(-c/num_proc)与之一致;
- 禁止使用 Auto 多线程:批量仿真时必须手动指定线程数;
- 清理计算节点非调度器任务:ssh 登录计算节点,杀死直登执行的任务,统一通过调度器提交
八 Spectre 电路仿真器全量使用手册¶
本手册全面覆盖 Spectre 电路仿真器的核心认知、环境配置、使用方法、多线程与精度调优、与 Virtuoso 协同操作、问题排查等内容,适用于模拟 IC 设计工程师、仿真工程师及运维人员,基于Spectre 19.10(推荐版本)编写,兼顾命令行原生使用与 Virtuoso GUI 集成使用场景,同时包含集群调度适配、性能优化等工程化实操方案
1 工具核心认知¶
Spectre 是 Cadence 旗下经典的模拟 / 混合信号电路仿真器,为业界黄金仿真标准,Foundry 通常以 Spectre 的仿真结果作为校正 PDK(工艺设计包)数据的参考依据,是模拟 IC 设计从模块验证到芯片量产全流程的核心仿真工具。
- 本质:纯命令行工具,无独立 GUI 界面,通过读入网表、模型文件完成电路微分方程组的数值求解,输出仿真结果与日志;
- 典型应用:配合 Virtuoso 作为后台仿真引擎使用,也可单独通过命令行 / 脚本实现批量仿真;
- 适用场景:前仿(原理图仿真)、后仿(版图寄生提取后仿真)、工艺角(Corner)仿真、蒙特卡罗(Monte Carlo)仿真、噪声 / 稳定性 / 瞬态等各类电路特性仿真
1.2 核心特性与限制¶
| 特性 | 说明 |
|---|---|
| GPU 支持 | 无,模拟电路仿真的微分方程组求解算法暂不适配 GPU,工具本身也未提供 GPU 加速能力 |
| 调度器支持 | 完美适配集群调度器,可通过 srun/bsub/qsub 等命令直接提交至 Slurm/LSF/SGE 调度器 |
| 多线程支持 | 有条件支持,仅电路元件数量≥128 时可开启多线程,否则会被强制单线程运行;线程数为上限值,实际使用由电路结构 / 仿真算法决定,无法强制干预 |
| 精度分级 | 提供多档精度配置,可在速度与精度间灵活权衡,满足不同电路仿真需求 |
| 工艺适配 | 支持全工艺节点,从传统平面 MOS 工艺到先进 FinFET/5nm 工艺,兼容各 Foundry 的 PDK 模型文件 |
1.3 核心版本与模式差异¶
Spectre 提供多种运行模式,不同模式对应不同的多线程支持、精度与性能,适配不同仿真场景,核心模式及多线程参数限制如下:
| 运行模式 | 多线程开关 | 默认线程数 | 最大线程数 | 核心适用场景 |
|---|---|---|---|---|
| Spectre(默认) | Off | 4 | 4 | 简单模块单 case 仿真,对性能要求低 |
| Spectre APS | On | 8 | 64 | 中大型电路仿真,兼顾精度与速度,工程化首选 |
| Spectre X | On | 8 | 128 | 高精度模拟电路仿真,黄金参考仿真 |
| Spectre XPS S-mode | On | 8 | 64 | 射频 / 高速混合信号电路仿真 |
2 环境配置与基础准备¶
2.1 系统与依赖要求¶
- 操作系统:CentOS7(官方推荐,兼容性最优,与 Virtuoso 无缝适配);
- 配套工具:与 Virtuoso IC6.1.8 ISR16 及以上版本搭配使用(低版本 Virtuoso 存在调度 / 端口兼容问题);
- 硬件要求:推荐 Intel 高主频机型(对 AVX512 指令集优化,仿真性能提升显著);集群节点核数≥8,后仿建议内存≥128G。
2.2 环境变量配置(FCCE/FCP 平台标准)¶
Spectre 的环境变量需全局配置,推荐通过modules管理,避免用户间配置不一致,核心配置如下(csh/tcsh 环境):
# 指定Spectre安装根目录
setenv MMSIM_HOME /fastone/software/cadence/spectre/19.10
# 强制开启64位运行模式
setenv CDS_AUTO_64BIT ALL
# 调度器适配(速石平台,配合Virtuoso LBS使用)
setenv LBS_BASE_SYSTEM LBS_SGE
# 添加可执行文件路径至系统PATH
prepend-path PATH $MMSIM_HOME/bin
prepend-path PATH $MMSIM_HOME/tools/bin
prepend-path PATH $MMSIM_HOME/tools/dfII/bin
bash 环境可将setenv替换为export,prepend-path替换为export PATH=xxx:$PATH
2.3 核心输入文件准备¶
Spectre 的仿真输入为文本格式文件,核心包含 5 类,可通过 Virtuoso ADE L/XL 导出(执行netlist and run即可,无需完成仿真),也可手动编写,文件组成及用途如下:
| 文件类型 | 核心组成 | 用途 | 来源 |
|---|---|---|---|
| 电路网表 | netlist、input.scs 等 | 描述电路拓扑、器件连接、激励源设置,是仿真的核心输入 | Virtuoso 导出 / 手动编写 |
| 运行脚本 | runSimulation 等 | 包含 Spectre 命令行指令、参数配置,实现一键仿真 | Virtuoso 导出 / 手动编写 |
| 模型文件 | spectre_lib(.scs/.lib) | PDK 中器件的物理 / 电气特性描述,对应不同工艺角 | PDK 提取 |
| 仿真日志 | spectre.out、*.log | 记录仿真过程、报错 / 警告信息,用于问题调试 | 仿真自动生成 |
| 输出配置 | control、designInfo 等 | 指定仿真结果格式、保存路径、观测信号 | Virtuoso 导出 / 手动编写 |
2.3.1 模型文件关键配置¶
模型文件为 Spectre 仿真的精度基础,需根据仿真工艺角引用对应section,典型引用格式如下(写入 input.scs):
// 引用PDK中的模型文件,指定不同工艺角section
include"/fastone/users/test/models/eflash55n_vamb.Lib.scs" section=setup
include"/fastone/users/test/models/eflash55n_vamb.Lib.scs" section=tt_io25
include"/fastone/users/test/models/eflash55n_vamb.Lib.scs" section=tt_bjt
2.4 仿真结果文件说明¶
仿真完成后自动生成psf 目录,为 Spectre 的标准结果格式,包含波形数据、器件参数、仿真统计等,核心内容:
tran.tran.tran.psfxl:瞬态仿真波形文件,可通过 Virtuoso Visualization & Analysis XL 打开查看;element.info:电路器件信息统计;modelParameter.info:模型参数实际取值;finalTimeOP.info:直流工作点信息。
3 核心使用方法¶
Spectre 支持纯命令行使用和Virtuoso GUI 集成使用两种方式,前者适合批量仿真、脚本化调度,后者适合交互式仿真、参数调试,核心操作如下:
3.1 命令行原生使用(核心)¶
3.1.1 基础命令格式¶
Spectre 的所有功能通过主命令 + 参数实现,基础格式:
spectre [输入网表文件] [全局参数] [模式参数] [精度/多线程参数] [输出参数]
3.1.2 典型命令示例¶
spectre input.scs +escchars +log ../psf/spectre.out -format psfxl -raw ../psf +aps=conservative +mt=32 +lqtimeout 900 -maxw 5 -maxn 5
input.scs:核心输入网表文件;+escchars:支持特殊字符解析;+log ../psf/spectre.out:指定仿真日志保存路径;-format psfxl -raw ../psf:指定结果格式为 psfxl,保存至../psf 目录;+aps=conservative:开启 APS 模式,精度设为保守;+mt=32:设置多线程上限为 32;+lqtimeout 900:设置队列超时时间 900 秒;-maxw/-maxn:设置仿真迭代最大警告 / 错误数
3.1.3 不同运行模式命令行参数¶
| 运行模式 | 启动命令行参数 |
|---|---|
| Spectre(默认) | spectre +mt=<N> [网表文件] [其他参数] |
| Spectre APS | spectre +aps +mt=<N> [网表文件] [其他参数] |
| Spectre X | spectre +preset=ax +mt=<N> [网表文件] [其他参数] |
| Spectre XPS S-mode | spectre +xps=s +mt=<N> [网表文件] [其他参数] |
3.1.4 批量仿真执行¶
将 Spectre 命令写入runSimulation脚本,通过调度器提交至集群,实现批量仿真:
- 编写脚本(runSimulation):
#!/bin/csh
module load spectre/19.10
spectre input.scs +aps +mt=16 +log ./psf/spectre.out -format psfxl -raw ./psf
-
添加执行权限:
chmod +x runSimulation; -
集群提交:
sbatch runSimulation(Slurm)/bsub < runSimulation(LSF)
3.2 Virtuoso GUI 集成使用(主流场景)¶
Spectre 是 Virtuoso 的默认后台仿真器,通过 Virtuoso ADE L/XL 完成可视化参数配置,后台自动生成 Spectre 命令行并执行,核心操作流程参考 Virtuoso 手册,关键适配点:
- 仿真器选择:在 ADE L/XL 中
Setup→Simulator,选择spectre; - 模式与多线程配置:
Setup→High-Performance Simulation,选择运行模式(Spectre/APS/X),配置多线程(Auto/Manual); - 参数同步:Virtuoso 中的精度、仿真类型、激励源等配置,会自动转换为 Spectre 的命令行参数;
- 结果查看:仿真完成后,在 Virtuoso 中直接打开 psf 格式结果,无需手动解析。
核心优势:无需记忆复杂命令行参数,可视化调试参数,适合电路设计初期的交互式仿真。
4 多线程调优与集群调度适配¶
Spectre 的多线程是性能优化核心,但需与集群调度器参数严格匹配,否则会导致调度器资源统计错误、节点满载、job 运行异常等问题,核心调优方案与调度适配规则如下:
4.1 多线程核心规则¶
- 开启条件:电路元件数量≥128,否则强制单线程,手动设置
+mt无效; - 参数性质:
+mt=<N>为线程数上限,实际使用线程数由 Spectre 内置算法根据电路结构 / 仿真类型决定,无法强制干预; - 调度器识别:调度器将一个
+mt=N的 Spectre 任务识别为1 个 job,而非 N 个 job,节点核数占用统计为 1 核,实际占用 N 核,需手动告知调度器实际核数需求。
4.2 多线程最佳配置流程¶
- 试跑阶段:通过 Virtuoso 设置多线程为
Auto,或命令行设置+mt=64(APS 模式),执行单个 job 试跑; - 获取实际线程数:查看仿真日志
spectre.out,找到Multithreading Enabled: N threads,记录 N 值; -
正式配置:
-
命令行:设置
+mt=N,与试跑实际线程数一致; -
Virtuoso:
High-Performance Simulation中选择Manual,填写 #Threads=N; -
调度器适配:在调度器提交命令中指定核数为 N,与 Spectre 线程数一致。
4.3 集群调度器参数匹配规则¶
调度器(Slurm/LSF/SGE)无法自动识别Spectre 实际使用的核数 / 内存,需手动显式指定,否则会出现 “队列显示 1 核,实际使用 N 核” 的资源统计错误,核心匹配规则:
| Spectre 配置 | 调度器参数(Slurm/srun) | 调度器参数(LSF/bsub) |
|---|---|---|
+mt=N/Manual #Threads=N |
srun -c N --mem=<内存> |
bsub -n N -R rusage[mem=<内存>] |
| APS 模式 + mt=16 | srun -c16 --mem=64G -p hpc |
bsub -n16 -q hpc -R rusage[mem=64G] |
关键注意事项:
- 禁止通过 ssh 直接登录计算节点执行 Spectre 任务,需统一通过调度器提交,避免抢占资源;
--mem/mem_free为内存下限,实际使用超分配不会被调度器终止,后仿需根据网表大小适当提高;- 批量仿真(如蒙特卡罗)时,需将
Max. Jobs(Virtuoso)与调度器的并行队列数匹配,避免节点过载
4.4 特殊场景:srun Virtuoso 二次提交 Spectre 任务¶
若 Virtuoso 通过srun在计算节点启动(非 login 节点),二次分发 Spectre 任务时,需修改调度命令,否则任务无法提交:
- 方案 1:将
srun替换为salloc srun,例:salloc srun -c16 --mem=64G -p hpc; - 方案 2:使用 LSF wrapper 的
bsub -I命令,例:bsub -I -n16 -q hpc -R rusage[mem=64G]。
5 仿真精度调优¶
Spectre 提供多档精度配置,不同精度对应不同的仿真速度与结果准确性,可根据电路类型、仿真阶段灵活选择,核心精度分级及适配场景如下,精度越高,仿真速度越慢。
5.1 Spectre/APS 模式精度分级¶
Spectre 与 APS 模式为工程化主流使用模式,精度分为三级,通过参数+aps=<精度>(APS 模式)或 Virtuoso 中Error Preset配置:
| 精度等级 | 参数配置 | 核心特性 | 适用场景 |
|---|---|---|---|
| Liberal(宽松) | +aps=liberal/Virtuoso 选择 Liberal |
精度最低,速度最快,迭代次数少 | 数字电路、模拟电路中的数字逻辑门、非关键通路仿真 |
| Moderate(中等) | +aps=moderate/Virtuoso 选择 Moderate(默认) |
精度与速度平衡,满足绝大多数仿真需求 | 普通模拟电路、模块级验证、前仿常规测试 |
| Conservative(保守) | +aps=conservative/Virtuoso 选择 Conservative |
精度最高,速度最慢,迭代次数多,结果最准确 | 关键信号通路、对噪声 / 工艺误差敏感的模拟电路、后仿、量产前黄金仿真 |
5.2 Spectre X 模式精度分级¶
Spectre X 为高精度仿真模式,通过+preset=<参数>配置,精度高于 APS 模式,为黄金参考仿真,核心分级:
| 预设参数 | 精度等级 | 适用场景 |
|---|---|---|
| CX | 最高精度 | 需要黄金仿真参考的核心电路、高精度模拟应用(如运放、ADC/DAC) |
| AX | 中等精度(默认) | 绝大多数高精度模拟电路仿真 |
| MX | 宽松精度 | 电源管理电路、对精度要求较低的模拟应用 |
| LX/VX | 超宽松精度 | 自定义 IC 验证、快速原型验证 |
5.3 APS 与 Spectre X 精度映射关系¶
APS 模式的精度可与 Spectre X 的预设参数一一映射,便于根据场景切换模式,映射关系如下:
| APS 精度参数 | Spectre X 预设参数 | Post-Layout 配置 |
|---|---|---|
+aps=liberal |
CX | +postlayout=upa(超精密模拟) |
+aps=conservative |
AX | +postlayout=hpa(高精度模拟) |
+aps(默认) |
MX | +postlayout=hpa |
++aps |
LX/VX | +postlayout |
5.4 精度调优最佳实践¶
前仿阶段:使用Moderate(APS)/AX(X),平衡精度与速度,快速定位设计问题;
后仿阶段:使用Conservative(APS)/CX(X),保证仿真结果准确性,匹配实际芯片工作状态;
模块验证:非关键模块用Liberal,关键模块用Conservative;
蒙特卡罗仿真:试跑用Moderate,正式仿真用Conservative,保证良率统计的准确性;
精度与多线程结合:高精度仿真建议搭配合理的多线程数(如 16/32 核),抵消精度带来的速度损耗
6 与 Virtuoso 协同操作核心要点¶
Spectre 与 Virtuoso 为深度绑定的工具组合,Virtuoso 负责可视化设计与参数配置,Spectre 负责后台仿真计算,二者协同的核心要点与避坑指南如下:
6.1 核心配置同步规则¶
Virtuoso 中的所有仿真配置会自动转换为 Spectre 的命令行参数,全局设置优先级高于具体分析设置:
High-Performance Simulation(Virtuoso):为 Spectre 的全局设置,包含运行模式、多线程、全局精度,会覆盖具体分析的精度设置;Choosing Analyses(Virtuoso):为 Spectre 的单分析设置,包含仿真类型(tran/ac/dc)、Stop Time、单分析精度,若与全局设置冲突,以全局为准;- 变量映射:Virtuoso 中定义的设计变量(如 vdd=1.8V、load=1pF)会自动写入 Spectre 网表文件,无需手动修改。
6.2 网表与模型文件管理¶
Virtuoso 中Setup→Model Libraries添加的 PDK 模型文件,会自动在 Spectre 网表中生成include语句,指定对应工艺角section;
若需修改模型文件路径,可直接在 Virtuoso 中更新,或手动修改 input.scs 中的include行,无需重新绘制原理图;
执行netlist and run后,Virtuoso 会在工程目录下生成netlist和psf目录,分别为 Spectre 的输入与输出文件,可直接用于命令行仿真。
6.3 GUI 退出后保持 Spectre 仿真后台运行¶
Virtuoso GUI 退出 / 崩溃后,可通过配置让 Spectre 仿真继续在后台运行,避免前期工作白费,仅适用于 GUI 异常,Spectre 本身崩溃无效:
- 配置方法:在 Virtuoso 工程目录的
.cdsinit文件中添加以下 SKILL 代码:
; 开启GUI退出后Spectre后台继续运行
envSetVal("adexl.distribute" "continueICRPRunOnAbruptGUIExit" 'boolean t)
- 结果回溯:Virtuoso 重启后,在 ADE XL
History选项卡找到异常中断的任务,右键View Results查看已完成的仿真结果,Re-run Unfinished/Error Points续跑未完成任务。
6.4 仿真日志与问题调试¶
- 日志查看:Virtuoso 中
Results→Open Run Log可直接查看 Spectre 的仿真日志spectre.out,也可通过命令行cat psf/spectre.out查看; - 报错调试:日志中包含
ERROR/WARNING信息,对应电路设计问题(如激励源错误、器件参数超限)或仿真参数问题(如精度不足导致不收敛); - 不收敛解决:提高仿真精度(如从 Moderate 改为 Conservative)、增加迭代次数(
-maxw/-maxn)、调整激励源斜率(如增大 tr/tf)。
7 常见问题与故障排查¶
7.1 多线程无法开启,强制单线程¶
故障原因:电路元件数量<128,或多线程参数设置错误;
解决方法:
- 检查电路网表,确认元件数量≥128;
- 确认多线程参数格式正确(如 APS 模式为
+aps +mt=N,而非单独+mt=N); - Virtuoso 中确认
High-Performance Simulation的多线程未设置为Disable。
7.2 调度器资源统计错误,节点满载仍提交任务¶
故障原因:Spectre 多线程数与调度器核数参数不匹配,调度器无法识别实际核数占用;
解决方法:
- 严格保证 Spectre 的
+mt=N/Manual #Threads=N 与调度器的-c N/-n N一致; - 批量仿真时禁止使用 Auto 多线程,手动指定实际线程数;
- 清理计算节点上的非调度器任务,统一通过调度器提交
7.3 仿真不收敛,日志报迭代次数超限¶
故障原因:精度设置过低、激励源突变过大、电路拓扑存在问题;
解决方法:
- 提高仿真精度(如从 Liberal 改为 Conservative);
- 调整激励源参数,增大上升 / 下降时间(tr/tf),避免突变;
- 检查电路拓扑,确认无短路 / 开路、器件参数合理;
- 增加迭代次数,如
-maxw 10 -maxn 10。
7.4 模型文件报错,提示 section 不存在¶
故障原因:模型文件路径错误,或工艺角 section 名称与 PDK 不一致;
解决方法:
- 检查 input.scs 中的
include语句,确认模型文件路径正确(绝对路径 / 相对路径); - 打开 PDK 的模型文件,确认
section名称与引用一致(如 tt/ff/ss/io25 等); - Virtuoso 中
Setup→Model Libraries重新添加模型文件,选择正确的工艺角
7.5 Virtuoso 中无法选择 Spectre 仿真器¶
故障原因:Spectre 环境变量未配置,或 Virtuoso 与 Spectre 版本不兼容;
解决方法:
- 检查 Spectre 环境变量,确认
MMSIM_HOME与PATH配置正确; - 确保 Virtuoso 为 IC6.1.8 及以上版本,Spectre 为 19.10 及以上版本;
- 重新加载模块:
module unload spectre && module load spectre/19.10
7.6 仿真结果文件无法打开,提示格式错误¶
故障原因:仿真结果格式设置错误,或仿真未正常完成;
解决方法:
- 确认命令行中指定了正确的格式参数(如
-format psfxl); - 查看仿真日志,确认无
ERROR信息,仿真正常完成; - Virtuoso 中选择
File→Open,指定 psf 目录,选择正确的结果文件
九 EMX 5.7 电磁仿真工具全量使用¶
本手册基于 EMX 5.7 版本编写,全面覆盖工具环境配置、Virtuoso 集成、实操流程、集群调度、参数调优、故障排查等核心内容,适用于模拟 / 射频 IC 设计工程师、仿真工程师,兼顾基础使用与工程化实操,适配速石 FCC/FCCE 平台,同时包含通用配置与 PDK 适配要点。
EMX 是 Cadence 旗下专业的电磁仿真工具,主打射频 / 模拟 IC 中无源器件(电感、变压器、MOM 电容、巴伦等)的电磁特性提取与仿真,可精准计算器件的 S 参数、电感值、Q 值、寄生参数等,仿真结果可直接生成模型嵌入 Virtuoso/Spectre 进行联合仿真,是射频 IC 设计的核心工具之一
1 工具核心认知¶
1.1 核心功能与适用场景¶
EMX 专注于片上无源器件的 3D 电磁仿真与建模,核心解决射频 / 模拟 IC 中无源器件的寄生效应、高频特性仿真问题,具体功能与适用场景:
| 核心功能 | 适用器件 | 工程价值 |
|---|---|---|
| 电磁特性提取 | 螺旋电感、片上变压器、巴伦(Balun) | 精准计算 L、Q、R、寄生电容,匹配高频实际工作特性 |
| S 参数仿真 | MOM 电容、传输线、射频走线 | 输出全频段 S 参数,用于射频链路匹配设计 |
| 3D 网格剖分仿真 | 复杂无源器件、异质结构器件 | 基于 3D 结构的高精度仿真,贴合实际工艺制造 |
| 模型自动生成 | 各类无源器件 | 生成 Spectre/Virtuoso 兼容模型,直接嵌入电路仿真 |
| 高频损耗分析 | 电感 / 变压器 | 分析金属损耗、衬底损耗,优化器件 Q 值 |
1.2 工具核心特性¶
- 与 Cadence 生态深度集成:无缝对接 Virtuoso/Spectre,仿真结果可直接生成 Virtuoso 视图,无需手动转换;
- 工艺适配性强:支持主流 Foundry 的 PDK(如 TSMC/GF/SMIC),PDK 会提供专属的 EMX 工艺文件(.proc)与模板;
- 集群调度支持:可通过 bsub/srun 等调度命令提交至集群,支持多线程与分布式仿真,提升大尺寸器件仿真效率;
- 开箱即用模板:速石 FCC/FCCE 平台提供标准化 template,包含示例器件、工艺配置,无需从零配置;
- 多格式结果输出:支持 Touchstone、Spectre、Matlab 等格式,适配不同仿真工具的联合仿真需求。
1.3 配套工具依赖¶
EMX 需与 Cadence 旗下其他工具协同使用,核心依赖如下,版本需严格匹配,避免兼容性问题:
| 依赖工具 | 推荐版本 | 作用 |
|---|---|---|
| Virtuoso | IC6.1.8 | 提供可视化版图设计与 EMX 操作 GUI,作为 EMX 前端界面 |
| Spectre | 19.10 | 接收 EMX 生成的无源器件模型,进行整体电路联合仿真 |
| Calibre | 2022(可选) | 辅助版图 DRC/LVS 验证,确保无源器件版图符合工艺规则 |
2 环境配置(速石 FCC/FCCE 平台标准)¶
EMX 的环境配置分为基础环境加载和自定义环境变量配置,速石平台提供模块化管理,基础配置可一键加载,高级配置可通过修改环境变量与配置文件实现。
2.1 基础环境一键加载(推荐)¶
FCC/FCCE 平台已完成 EMX 的模块化封装,进入工作目录后直接执行以下命令,自动加载所有依赖与 EMX 核心环境:
# 初始化平台环境
source /fastone/softwares/eda/cshinit
# 加载配套工具
module load ic/6.1.8
module load spectre/19.10
module load calibre/2022 # 可选,仅需版图验证时加载
# 加载EMX 5.7核心环境
module load emx/5.7
2.2 自定义环境变量配置(高级 / 手动配置)¶
若需手动配置环境变量(如修改 EMX 安装路径、模型生成路径),可在~/.cshrc/~/.bashrc或模块配置文件中添加以下内容,适用于非平台化部署场景:
2.2.1 csh/tcsh 环境¶
# EMX核心环境变量
setenv EMX_HOME /fastone/software/others/emx
setenv MDG_HOME /fastone/software/others/emx # ModelGen配套环境
# 添加可执行文件路径至系统PATH
prepend-path PATH $EMX_HOME/emx64-5.7
prepend-path PATH $MDG_HOME/modelgen64-2.22
# 可选:EMX临时工作目录
setenv EMX_WORK_DIR ./EMX_work
2.2.2 bash/zsh 环境¶
# EMX核心环境变量
export EMX_HOME=/fastone/software/others/emx
export MDG_HOME=/fastone/software/others/emx
# 添加可执行文件路径至系统PATH
export PATH=$EMX_HOME/emx64-5.7:$PATH
export PATH=$MDG_HOME/modelgen64-2.22:$PATH
# 可选:EMX临时工作目录
export EMX_WORK_DIR=./EMX_work
2.3 环境验证¶
配置完成后,执行以下命令验证环境是否生效,无报错则说明配置成功:
# 查看EMX版本(进入EMX安装目录执行)
cd $EMX_HOME/emx64-5.7
./emx -version
# 验证Virtuoso与EMX的环境关联
virtuoso -nograph -batch -eval 'puts "EMX environment loaded"'
3 Virtuoso 深度集成配置¶
EMX 无独立的 GUI 界面,需作为插件嵌入 Virtuoso实现可视化操作,核心通过修改 Virtuoso 的初始化文件.cdsinit完成集成,包含基础集成和高级参数配置两步。
3.1 基础集成:将 EMX 嵌入 Virtuoso 菜单¶
修改 Virtuoso 工程目录下的.cdsinit文件(工程级,仅当前工程生效)或用户 HOME 目录下的.cdsinit(全局级,所有工程生效),添加以下 SKILL 代码,实现 EMX 菜单在 Virtuoso 中的加载:
;################## EMX 5.7 与Virtuoso集成 ##################
; 定义EMX安装目录(与环境变量EMX_HOME一致)
setenv("EMX_INSTALL_DIR" "/fastone/software/others/emx/")
; 加载EMX核心配置脚本
loadi(strcat(getShellEnvVar("$EMX_INSTALL_DIR") "emxinterface/emxskill/emxconfig.il"))
关键注意:emxconfig.il的路径必须与实际安装路径一致,若路径错误,Virtuoso 中会无 EMX 菜单,需检查路径是否存在该文件。
3.2 高级配置:修改 emxconfig.il 核心参数¶
emxconfig.il是 EMX 的核心配置文件,位于$EMX_HOME/emxinterface/emxskill/,需根据工程需求修改以下关键参数,所有路径均为绝对路径,避免相对路径导致的文件找不到问题:
; 1. EMX接口文件路径(包含skill脚本、工艺模板)
EMX_interface_path="/fastone/software/others/emx/cadence6/emxinterface"
; 2. 集群调度配置(空为本地运行,注释为调度器运行,根据平台选择)
; LSF调度器(速石FCCE平台)
; EMX_remote_machine="bsub -q desired_queue" # desired_queue替换为实际分区(如hpc/ssim)
; SGE调度器
; EMX_remote_machine="qsub -q desired_queue"
EMX_remote_machine="" # 本地运行,清空则为默认
; 3. EMX主程序路径(与EMX_HOME一致)
EMX_path=(strcat (getShellEnvVar "EMX_HOME") "/emx64-5.7")
; 4. ModelGen路径(模型生成工具,与MDG_HOME一致)
EMX_modelgen_path=(strcat (getShellEnvVar "MDG_HOME") "/modelgen64-2.22")
; 5. PDF阅读器配置(EMX查看工艺文档用,选择系统已安装的阅读器)
EMX_ps_viewer="evince" # 可选:okular/gv/ggv/acroread/konqueror
; 6. EMX临时工作目录(生成仿真中间文件、日志,建议工程内独立目录)
EMX_working_dir="./EMX_work"
; 7. 加载EMX表单脚本(无需修改,确保路径正确)
(load (strcat EMX_interface_path "/emxskill/emxform.ils"))
3.3 集成验证¶
完成配置后,启动 Virtuoso,打开任意版图视图(Layout),若在顶部菜单栏能看到EMX选项,且点击EMX→Simulate能弹出仿真配置窗口,说明集成成功。
4 EMX 核心仿真流程(Virtuoso GUI 可视化操作)¶
以平台模板中的单端电感(symind) 为例,讲解 EMX 从版图打开到结果查看、模型生成的完整仿真流程,其他器件(变压器 / 巴伦 / 电容)流程完全一致,仅需修改器件类型与仿真参数。
5.1 步骤 1:启动 Virtuoso 并打开目标器件版图¶
- 进入 EMX 工作目录,启动 Virtuoso:
virtuoso &; - 打开 Virtuoso 的
Library Manager(库管理器):Tools→Library Manager; - 按
Library→Cell→View层级,打开testdir→symind→layout视图,即单端电感的版图视图。
5.2 步骤 2:启动 EMX 仿真配置窗口¶
在版图视图的顶部菜单栏,执行EMX→Simulate,弹出 EMX 核心仿真配置窗口,所有仿真参数均在此窗口配置,分为基础配置和高级配置两大模块。
5.3 步骤 3:核心仿真参数配置¶
EMX 仿真参数配置围绕工艺文件、器件结构、仿真精度、频率范围、输出设置展开,带 * 为必配参数,其余可使用默认值,PDK 场景下需替换为 PDK 专属工艺文件。
5.3.1 基础必配参数¶
| 参数分类 | 配置项 | 设置值(示例 / 默认) | 说明 |
|---|---|---|---|
| 工艺配置* | Process | ./processes/generic65.proc |
工艺文件路径,PDK 场景替换为 PDK 的.proc 文件 |
| 器件结构 | X-section | Scaled | 截面类型,Scaled(缩放)/Unscaled(非缩放),默认 Scaled |
| Black-boxed cells | 空 | 黑盒化单元,无需修改 | |
| GDS view | EMX | GDS 视图类型,默认 EMX | |
| 精度配置 | Edge mesh | 1 | 边缘网格剖分精度,单位 μm,值越小精度越高(仿真越慢) |
| Thickness | 1 | 金属厚度剖分精度,单位 μm,默认 1 | |
| Via merge | 0.5 | 过孔合并精度,单位 μm,默认 0.5 | |
| 3D metals | 勾选 | 开启 3D 金属仿真,必选(保证高频精度) | |
| 端口配置* | Ports | All | 端口选择,All(所有端口)/ 自定义,示例电感为 P1/P2 |
| Signals | P1P2 | 信号端口,与器件版图的 pin 对应 | |
| Grounds | DIF | 地端口,与器件版图的地 pin 对应 | |
| 频率范围* | Start | 1e8(100MHz) | 仿真起始频率,单位 Hz |
| Stop | 2e10(20GHz) | 仿真终止频率,单位 Hz | |
| Step | 1e8(100MHz) | 频率步长,单位 Hz,步长越小结果越精细 |
5.3.2 高级配置(集群调度 / 多线程 / 输出格式)¶
点击配置窗口中的Advanced options展开高级配置,核心用于集群提交、多线程设置、结果格式选择,本地运行可忽略,集群运行必配:
- 多线程设置:勾选
Multi-threading,设置Threads数(如 4/8/16,根据集群资源调整); - 集群调度:勾选
Use bsub,在Bsub options中填写调度参数(如-q hpc -n 8,指定分区与核数); - 输出格式:
Types:选择仿真结果类型(S-parameters/Y-parameters,射频仿真优先 S-parameters);Formats:选择结果文件格式(Touchstone/Spectre/Matlab,需与 Spectre 联合仿真选 Spectre);- 模型生成:
Pole-zero models选择none(默认),无需修改。
5.3.3 器件类型与模型生成配置¶
在Plotting and model creation模块,配置器件类型与模型生成规则,用于仿真后自动生成 Virtuoso 可用模型:
Type:选择器件类型(示例为Single-ended inductor,变压器选Transformer,电容选Capacitor);Create model:勾选(仿真后自动生成器件模型);Create view:勾选(生成 Virtuoso 的model/symbol视图,可直接拖入电路仿真);File or view:填写模型保存名称(如EMX_form,与模板一致即可,用于保存仿真参数)
5.4 步骤 4:启动仿真并监控运行状态¶
- 所有参数配置完成后,点击配置窗口中的Simulation→Start,启动仿真;
- 仿真过程中,配置窗口会显示
Status(运行中 / 完成 / 错误),同时在EMX_working_dir目录生成中间文件与日志; - 仿真成功标志:日志最后输出
process exited normally,无 ERROR 信息
5.5 步骤 5:查看仿真结果波形¶
仿真成功后,点击配置窗口中的Plot按钮,自动弹出 Virtuoso 的Visualization & Analysis XL波形查看窗口,核心查看无源器件的关键指标:
-
单端电感:电感值(L)、品质因数(Q)、谐振频率(f0)随频率的变化;
-
变压器:互感(M)、耦合系数(k)、初级 / 次级电感值;
-
MOM 电容:电容值(C)、等效串联电阻(ESR)、高频损耗;
-
射频走线:S11(回波损耗)、S21(插入损耗)。
波形操作:支持放大、叠加、数据导出,可将关键指标截图用于工程分析
5.6 步骤 6:生成并使用 EMX 器件模型(与 Spectre 联合仿真)¶
EMX 的核心价值是生成与 Spectre/Virtuoso 兼容的无源器件模型,仿真成功后自动生成,可直接嵌入电路进行联合仿真,步骤如下:
- 模型生成位置:在
testdir→symind库中,自动生成model(模型视图)和symbol(符号视图); - 调用模型:在 Virtuoso 原理图中,直接将
symind→symbol拖入电路,与有源器件(晶体管 / 运放)连接; - 联合仿真:启动 Spectre 仿真(ADE L/XL),Spectre 会自动加载 EMX 生成的模型,完成电磁 - 电路联合仿真,精准反映无源器件的高频特性。
6 集群分布式仿真配置(工程化高效仿真)¶
对于大尺寸无源器件(如大功率变压器、大面积 MOM 电容)或高精度 3D 仿真,本地运行效率极低,需将 EMX 任务提交至集群进行分布式仿真,EMX 支持 LSF/SGE/Slurm 调度器,速石 FCCE 平台优先使用LSF 调度器(bsub)
6.1 集群仿真两种配置方式¶
方式 1:GUI 可视化配置(推荐,无需记忆命令)¶
在 EMX 仿真配置窗口的Advanced options中,直接勾选配置,步骤如下:
- 勾选
Use bsub(开启集群提交); - 在Bsub options中填写调度参数,格式:-q <分区名> -n <核数> -R rusage[mem=<内存>];
- 示例:
-q hpc -n 8 -R rusage[mem=16G](8 核、16G 内存、提交至 hpc 分区); - 勾选
Multi-threading,设置Threads数与-n的核数一致(如 8); - 点击
Simulation→Start,任务自动提交至集群,无需手动执行 bsub 命令。
方式 2:配置文件硬编码(批量仿真 / 脚本化)¶
修改emxconfig.il中的EMX_remote_machine参数,硬编码调度命令,适用于批量仿真,无需每次 GUI 配置:
; LSF调度器(速石FCCE平台),替换为实际分区与资源
EMX_remote_machine="bsub -q hpc -n 8 -R rusage[mem=16G]"
; SGE调度器
; EMX_remote_machine="qsub -q hpc -l nodes=1:ppn=8,mem=16G"
注意:配置后,GUI 中Use bsub会自动勾选,无需重复操作。
6.2 集群仿真任务监控与管理¶
- 任务查看:在终端执行
bjobs(LSF)/qstat(SGE)/squeue(Slurm),查看 EMX 任务的状态(RUN/PEND/EXIT); - 任务终止:执行
bkill <任务ID>(LSF)/qdel <任务ID>(SGE),终止异常运行的任务; - 日志查看:集群任务的日志保存在
EMX_working_dir目录下,与本地运行一致,可通过cat <日志文件>查看报错信息。
6.3 集群仿真最佳实践¶
- 资源匹配:核数与内存需根据器件尺寸调整,大尺寸器件(如边长>100μm 的电感)建议 16 核 32G,小器件建议 4 核 8G;
- 频率步长优化:高频段(>10GHz)可适当增大频率步长,减少仿真时间,不影响关键指标精度;
- 网格精度权衡:Edge mesh/Thickness 并非越小越好,在满足精度要求的前提下,适当增大值(如 2μm),提升仿真效率;
- 避免资源浪费:仿真完成后,及时清理
EMX_working_dir的中间文件,释放集群存储资源。
7 核心参数调优指南(精度与效率的平衡)¶
EMX 的仿真精度与效率成反比,网格越细、频率步长越小,精度越高,但仿真时间越长,需根据工程需求(前仿 / 后仿 / 射频指标要求)灵活调优,核心调优参数与原则如下:
7.1 精度调优核心参数(优先级从高到低)¶
| 参数 | 调优原则 | 前仿推荐值 | 后仿推荐值 |
|---|---|---|---|
| Edge mesh(边缘网格) | 值越小,边缘剖分越细,精度越高 | 2μm | 0.5-1μm |
| Thickness(金属厚度) | 值越小,金属层剖分越细,贴合实际工艺 | 2μm | 0.5-1μm |
| Via merge(过孔合并) | 值越小,过孔仿真越精准,适合多过孔器件 | 1μm | 0.2-0.5μm |
| 3D metals(3D 金属) | 必勾选,关闭后为 2D 仿真,精度大幅下降 | 勾选 | 勾选 |
| Frequency Step(频率步长) | 步长越小,频率点越密,结果越精细 | 5e8Hz | 1e8Hz |
7.2 不同工程阶段的参数配置策略¶
| 工程阶段 | 核心目标 | 参数配置策略 |
|---|---|---|
| 器件原型设计(前仿) | 快速验证器件趋势,优化结构 | 网格精度适中(2μm)、频率步长大(5e8Hz)、本地运行 |
| 器件性能优化(中仿) | 精准计算关键指标(L/Q/f0) | 网格精度较高(1μm)、频率步长中等(1e8Hz)、4/8 核集群 |
| 量产前验证(后仿) | 黄金仿真,匹配实际工艺 | 网格精度最高(0.5μm)、频率步长最小(5e7Hz)、16 核以上集群 |
7.3 射频关键指标优化的参数侧重¶
| 优化指标 | 需重点调优的参数 | 说明 |
|---|---|---|
| 电感 Q 值 | Edge mesh、3D metals、衬底模型 | 衬底损耗是 Q 值下降的核心原因,需 PDK 提供精准的衬底工艺文件 |
| 变压器耦合系数 k | Via merge、金属重叠区域剖分 | 保证初级 / 次级金属重叠区域的网格精度 |
| 高频谐振频率 f0 | Frequency Step、3D metals | 高频段需减小频率步长,精准捕捉谐振点 |
| S 参数平坦度 | Frequency Step、端口配置 | 确保端口接触良好,频率步长均匀 |
8 常见问题与故障排查¶
8.1 Virtuoso 中无 EMX 菜单,集成失败¶
故障原因:
-
.cdsinit中的 EMX 配置代码路径错误; -
emxconfig.il文件缺失; -
EMX 环境变量未正确加载。
解决方法:
-
检查
EMX_INSTALL_DIR的路径是否与实际安装路径一致; -
验证
$EMX_HOME/emxinterface/emxskill/下是否存在emxconfig.il和emxform.ils; -
重新加载 EMX 环境:
module unload emx/5.7 && module load emx/5.7,重启 Virtuoso。
8.2 仿真启动失败,提示 “process exited with error”¶
故障原因:
-
工艺文件(.proc)路径错误或文件损坏;
-
器件版图无 pin / 端口配置错误;
-
临时工作目录EMX_working_dir无写入权限。
解决方法:
-
检查 Process 参数的路径是否为绝对路径,PDK 场景替换为 PDK 的.proc 文件;
-
打开器件版图,验证
Create→Pin是否正确创建信号 / 地端口,与 EMX 的 Signals/Grounds 匹配; -
给工作目录添加写入权限:
chmod 775 ./EMX_work,或重新定义EMX_working_dir至用户有权限的目录。
8.3 集群提交任务后立即 PEND/EXIT,无运行日志¶
故障原因:
-
Bsub options参数填写错误(如分区不存在、核数 / 内存超过集群配额); -
集群调度器未初始化;
-
EMX 无集群节点的执行权限。
解决方法:
-
验证分区名是否正确:
bqueues(LSF)查看所有可用分区,调整核数 / 内存至配额内; -
初始化集群环境:
source /opt/fastone/wrappers/sge/profile.sge(速石平台); -
联系集群管理员,赋予 EMX 在计算节点的执行权限。
8.4 仿真结果异常(如电感值为 0、Q 值极低)¶
故障原因:
-
器件版图绘制错误(如金属开路、短路、端口接触不良);
-
3D metals 未勾选,为 2D 仿真;
-
工艺文件与器件工艺不匹配(如金属厚度设置错误)。
解决方法:
-
打开版图,执行
Verify→Connectivity检查金属连通性,确保端口与器件有效接触; -
确认 EMX 配置中勾选了
3D metals,重新启动仿真; -
PDK 场景下,替换为 PDK 专属的.proc 文件,避免使用通用工艺文件。
8.5 模型生成成功,但无法在 Spectre 中调用¶
故障原因:
-
模型格式选择错误(未选 Spectre 格式);
-
Virtuoso 库中未生成
model/symbol视图; -
模型文件路径未添加至 Spectre 的模型库。
解决方法:
-
重新配置 EMX 的
Formats为Spectre,重新仿真生成模型; -
确认 EMX 配置中勾选了
Create model和Create view; -
在 Virtuoso ADE L/XL 中,
Setup→Model Libraries添加 EMX 模型所在目录,确保 Spectre 能识别。
8.6 仿真速度极慢,大尺寸器件耗时数小时¶
故障原因:
-
网格精度设置过细(如 Edge mesh=0.1μm);
-
频率步长过小,频率点过多;
-
本地单线程运行,未使用集群多线程。
解决方法:
-
适当增大网格精度(如从 0.1μm 调整为 1μm),在精度与效率间平衡;
-
增大高频段的频率步长,或缩小仿真频率范围至器件工作频段;
-
提交至集群,使用 8/16 核多线程运行,匹配网格精度设置。
十 Calibre 全量使用与运维手册(2018-2022 版本适配)¶
本手册整合 Calibre 2018/2020/2022 全版本核心功能,覆盖环境配置、三大核心任务(DRC/LVS/PEX)实操、集群调度、分布式仿真、性能优化、故障排查等全维度内容,适用于 IC 后端版图工程师、仿真工程师及运维人员,适配速石 FCC/FCCE 平台,兼顾基础使用与工程化高效仿真需求
Calibre 是 Siemens(原 Mentor)旗下芯片后端版图验证的黄金工具,广泛应用于模拟 / 数字 / 射频 IC 设计流程,核心解决版图 “可制造性” 与 “功能一致性” 问题,是芯片量产前的关键验证环节,与 Cadence Virtuoso 深度集成,支持全工艺节点 PDK 适配。
1 工具核心认知¶
1.1 核心功能与工程价值¶
Calibre 的三大核心功能覆盖版图验证全流程,是芯片设计从版图完成到量产的必经之路:
| 核心功能 | 英文全称 | 核心作用 | 工程价值 |
|---|---|---|---|
| DRC | Design Rule Check(设计规则检查) | 验证版图线宽、间距、元件摆放等是否符合 Foundry 工艺规则 | 确保版图可被正常制造,避免因工艺违规导致芯片报废 |
| LVS | Layout vs Schematic(版图与原理图对比) | 验证版图与原理图的器件、连接关系一致性 | 确保版图功能与设计意图一致,避免因版图绘制错误导致功能失效 |
| PEX | Parasitic Extraction(寄生参数提取) | 从版图中提取导线 / 过孔的寄生电阻(R)、电容(C)、耦合电容(CC) | 生成包含寄生参数的网表,用于后仿验证,精准匹配芯片实际工作特性 |
1.2 工具核心特性¶
- 多版本兼容:2018-2022 版本支持 LSF/SGE/Slurm 调度器,2021 + 版本新增 SGE-wrapper 适配,2022 版本优化 GUI 分布式配置;
- 任务特性:DRC/LVS/PEX 均为线程间数据无关的检查类任务,支持多线程 / 多机分布式处理,计算效率与节点数量成正相关;
- 硬件需求:对 CPU 主频要求低,对内存容量要求极高(大版图验证需 64G + 内存),推荐大内存机型(如 c6i.128、z1d.48);
- 输出兼容性:PEX 提取结果支持 CalibreVIEW、SPICE、Spectre 等格式,可直接导入 Virtuoso/Spectre 进行后仿;
- 分布式原理:将版图 “切块” 分发至多个节点独立验证,主节点负责任务拆分与结果汇总,理论上节点数量与计算效率成反比。
1.3 版本差异与适配建议¶
| 版本 | 核心差异 | 调度器支持 | 推荐场景 |
|---|---|---|---|
| Calibre 2018 | GUI 仅支持 LSF-wrapper,MTFlex 需手动编写配置文件,-n 参数无效 | LSF(Single/Multi-thread) | 老项目兼容、静态集群环境 |
| Calibre 2020 | 新增 Other Cluster 提交方式,支持 salloc 嵌套 srun | LSF/Slurm | 动态集群(Auto-Scale)、混合调度环境 |
| Calibre 2022 | GUI 直接支持 MTFlex 分布式配置,无需手动编写文件,新增 Custom Grid 提交方式 | LSF/SGE/Slurm | 新项目、大规模版图验证、高效集群环境 |
适配原则:优先使用 2022 版本,兼顾功能完整性与操作便捷性;老项目需兼容 2018 版本时,需规避 LSF-wrapper 的 - n 参数问题。
2、环境配置(速石 FCC/FCCE 平台标准)¶
2.1 基础环境变量配置¶
Calibre 环境变量需通过modules统一管理,避免用户间配置不一致,核心配置如下(以 2022 版本为例):
2.1.1 csh/tcsh 环境¶
# Calibre安装根目录
setenv MGC_HOME /fastone/software/mentor/calibre2022/aoj_cal_2022.2_38.20
# 许可证环境变量(浮动授权)
setenv MGLS_LICENSE_FILE 27001@<License-IP> # 替换为实际License服务器IP
# 添加可执行文件路径
prepend-path PATH $MGC_HOME/bin
# 添加库文件路径
prepend-path LD_LIBRARY_PATH $MGC_HOME/lib
2.1.2 bash/zsh 环境¶
export MGC_HOME=/fastone/software/mentor/calibre2022/aoj_cal_2022.2_38.20
export MGLS_LICENSE_FILE=27001@<License-IP>
export PATH=$MGC_HOME/bin:$PATH
export LD_LIBRARY_PATH=$MGC_HOME/lib:$LD_LIBRARY_PATH
2.2 环境验证¶
配置完成后,执行以下命令验证环境是否生效,无报错则说明配置成功:
# 启动Calibre GUI(后台运行)
calibre -gui &
# 查看版本信息
calibre -version
2.3 Virtuoso 集成配置¶
将 Calibre 菜单嵌入 Virtuoso,实现版图视图中直接调用 Calibre,步骤如下:
- 编辑 Virtuoso 的
.cdsinit文件(工程级 / 全局级均可):
;################## Calibre与Virtuoso集成 ##################
; 加载Calibre SKILL脚本
load(strcat(getShellEnvVar("MGC_HOME") "/shared/pkgs/icv/tools/queryskl/calibre.skl"))
; 添加Calibre菜单到Virtuoso
hiMenuAdd("Calibre" "Tools" '("Run nmDRC..." "Run nmLVS..." "Run PEX..." "Start RVE") '("calibreDRC" "calibreLVS" "calibrePEX" "calibreRVE"))
- 重启 Virtuoso,打开版图视图,在
Tools→Calibre中可看到 DRC/LVS/PEX 选项,说明集成成功
3 核心任务实操(DRC/LVS/PEX)¶
3.1 前置条件(通用)¶
所有核心任务执行前需满足以下条件,避免验证失败:
- 已准备 Virtuoso 工程的
layout与schematic视图,且位于同一 Cell 下; - 版图已通过基础连通性检查(
Verify→Connectivity),无开路 / 短路; - LVS/PEX 任务需先确保 DRC 无致命错误(Error),仅允许少量警告(Warning);
- 已获取 Foundry 提供的工艺规则文件(DRC:.rule/.drf;LVS:.lvs;PEX:.rcx/.pex)
3.2 DRC(设计规则检查)实操¶
以 Calibre 2022 为例,讲解 GUI 下 DRC 的完整流程,2018/2020 版本操作类似,仅调度器配置有差异:
3.2.1 启动 Calibre DRC¶
- 打开 Virtuoso 版图视图(
Library→Cell→Layout); - 执行
Tools→Calibre→Run nmDRC...,弹出 Calibre Interactive DRC 配置窗口。
3.2.2 核心参数配置¶
(1)Rules(规则文件配置)
- 点击
Rules选项卡,在Rules File中选择 Foundry 提供的 DRC 规则文件(如cal_drc.rule); - 点击
Load加载规则,确保无 “文件找不到” 报错。
(2)Inputs(输入文件配置)
Layout选项卡:Format选择GDSII,Export from layout viewer勾选,自动读取当前版图的Top Cell(如inv)、Library Name(如testdir);- 其他选项默认,无需修改。
(3)Outputs(输出配置)
Run Directory:指定 DRC 临时文件与结果输出路径(如./drc_results),建议每个任务单独创建目录,避免文件冲突;- 勾选
View Results after DRC finishes,仿真完成后自动打开结果查看器(RVE)。
(4)Run Control(运行控制,集群核心)
根据集群环境选择提交方式,推荐使用Custom Grid(2022 版本)或Other Cluster(2020 版本):
方式 1:Custom Grid(2022 版本,推荐)¶
Run Calibre On选择Custom Grid;Submission Command:填写 Slurm 调度命令,例:sbatch -p drc -c 16 --mem=64G(16 核、64G 内存、提交至 drc 分区);Run Calibre DRC using选择Multiple Threads;Number of CPUs to use填写 16(与调度命令-c参数一致);License File Name选择MGLS_LICENSE_FILE,确保许可证正常加载。
方式 2:Remote Host(MTFlex 分布式,静态集群)¶
Run Calibre On选择Remote Host;Host Name填写主节点名称(如drc-a1,不建议用 login 节点);Run Calibre DRC using选择Distributed (MTFlex);Remote Hosts选择Specify from GUI,点击+添加从节点(如drc-a2、drc-a3),确保节点间 ssh 免密登录;- 勾选从节点左侧复选框,等待 Calibre 读取节点信息(显示
Ready)。
3.2.3 启动 DRC 与结果查看¶
-
点击
Run DRC启动任务,调度器中可通过squeue(Slurm)/bjobs(LSF)查看任务状态; -
任务完成后,自动弹出 RVE(Result Viewing Environment)窗口,查看 DRC 错误:
-
红色标记:致命错误(需修改版图);
-
黄色标记:警告(可根据工艺要求判断是否需要修改);
-
导出 DRC 报告:
File→Save Report,生成drc.summary文件,包含错误统计、运行时间等信息。
3.3 LVS(版图与原理图对比)实操¶
LVS 流程与 DRC 类似,核心差异在于需同时导入版图与原理图,验证二者一致性:
3.3.1 启动 Calibre LVS¶
执行Tools→Calibre→Run nmLVS...,弹出 Calibre Interactive LVS 配置窗口。
3.3.2 核心参数配置¶
(1)Rules(规则文件配置)
- 选择 Foundry 提供的 LVS 规则文件(如
cal_lvs.lvs),点击Load加载。
(2)Inputs(输入文件配置)
Layout选项卡:与 DRC 一致,自动读取当前版图信息;Netlist选项卡:Format选择SPICE,Export from schematic viewer勾选,自动读取当前 Cell 的schematic视图,确保Top Cell与版图一致。
(3)Outputs(输出配置)
Run Directory:指定输出路径(如./lvs_results);- 勾选
Generate LVS Report,生成包含匹配结果的报告文件。
(4)Run Control(运行控制)
与 DRC 配置一致,根据版本选择Custom Grid/Other Cluster,确保调度器参数与 CPU 核心数匹配。
3.3.3 LVS 结果分析¶
- 任务完成后,RVE 窗口显示匹配结果:
Total Matched:器件、网表完全匹配,无错误;Mismatch:存在不匹配项(如器件型号错误、网表连接不一致),需根据报告修改版图;- 重点查看
Device Mismatch(器件不匹配)和Net Mismatch(网表不匹配),修改后重新运行 LVS,直至完全匹配。
3.4 PEX(寄生参数提取)实操¶
PEX 需在 LVS 完全匹配后执行,核心提取版图的寄生 R/C/CC 参数,用于后仿验证,以 2022 版本为例:
3.4.1 启动 Calibre PEX¶
执行Tools→Calibre→Run PEX...,弹出 Calibre Interactive PEX 配置窗口。
3.4.2 核心参数配置¶
(1)Rules(规则文件配置)
- 选择 Foundry 提供的 PEX 规则文件(如
cal_pex.rcx),点击Load加载。
(2)Inputs(输入文件配置)
Layout选项卡:自动读取当前版图信息;Netlist选项卡:Format选择SPICE,勾选Export from schematic viewer,确保与 LVS 使用的原理图一致。
(3)Outputs(输出配置)
Netlist Format选择CalibreVIEW(与 Virtuoso 兼容,可直接导入);Netlist Path指定寄生网表输出路径(如./pex_results/inv.pex.netlist);Use Names From选择Source Names(使用原理图中的器件 / 网表名称);Extraction Mode选择XRC(高精度提取),Resistance/Capacitance选择R+C+CC(提取电阻 + 电容 + 耦合电容)。
(4)Run Control(运行控制)
与 DRC/LVS 一致,配置调度器参数,确保资源充足(PEX 提取需更大内存,建议 64G+)。
3.4.3 生成 Calibre View(Virtuoso 导入)¶
-
任务完成后,弹出Calibre View Setup窗口,配置如下:
-
CalibreView Netlist File:选择生成的寄生网表(inv.pex.netlist); Output Library:选择目标库(如testdir);Calibre View Name:填写calibre(视图名称);-
Calibre View Type:选择schematic; -
点击
OK,生成 Calibre 视图,在 Virtuoso Library Manager 中可看到calibre视图; -
导入 Spectre 后仿:将 Calibre 视图拖入原理图,启动 Spectre 仿真,即可包含寄生参数的影响。
4 集群分布式仿真配置(MTFlex)¶
Calibre 支持MTFlex 分布式仿真,适用于大版图(如芯片 Top 层)验证,可大幅缩短计算时间,支持Remote Host和LSF-wrapper两种方式,2022 版本 GUI 配置更便捷。
4.1 方式 1:Remote Host 分布式(静态集群,全版本支持)¶
4.1.1 前置准备¶
- 确保主节点与从节点间ssh 免密登录(执行
ssh <节点名>无需输入密码); - 静态集群需手动开启节点(N 个从节点 + 1 个主节点),任务完成后手动关闭。
4.1.2 配置步骤(2022 版本)¶
- 启动 Calibre DRC/LVS/PEX,进入
Run Control选项卡; Run Calibre On选择Remote Host;Host Name填写主节点名称(如drc-a1),负责任务拆分与结果汇总;Run Calibre using选择Distributed (MTFlex);Remote Hosts选择Specify from GUI,点击+添加从节点(如drc-a2、drc-a3);- 勾选从节点,等待 Calibre 读取节点信息(显示
Ready); - 点击
Run DRC/LVS/PEX启动分布式任务。
4.1.3 注意事项¶
- 主节点内存需足够大,建议能独立运行该任务(避免拆分 / 汇总时内存不足);
- 任务分发绕开调度器,调度器中无法查看子任务,仅显示主节点任务;
- 不推荐在多用户共享集群中使用,会导致调度器资源统计错误。
4.2 方式 2:LSF-wrapper 分布式(动态集群,2020 + 版本支持)¶
4.2.1 配置步骤(2022 版本)¶
- 进入
Run Control选项卡,Run Calibre On选择Platform LSF; Submission Host选择localhost(仅作为 GUI 显示节点,无计算负载);Run Calibre using选择Distributed (MTFlex);Primary Host Selection:设置主节点资源(如Min CPUs=48),点击Hosts刷新符合条件的主节点;- Remote Hosts Selection:
Total CPUs:从节点总核心数(如 96);Min CPUs Per Host:单个从节点最小核心数(如 48);- 点击
Hosts刷新符合条件的从节点(自动分配 2 个 48 核节点); License File Name选择MGLS_LICENSE_FILE,点击Run DRC/LVS/PEX。
4.2.2 任务数量计算¶
从节点数量 = Total CPUs / Min CPUs Per Host,例:96 核总核心数 ÷48 核 / 节点 = 2 个从节点。
4.3 分布式性能测试结果¶
| 测试机型 | 核心数 | 运行时间 | 结论 |
|---|---|---|---|
| z1d.48(单机) | 48 | 9.17 小时 | 核心数增加,运行时间成比例缩短 |
| c6i.128(单机) | 128 | 3.57 小时 | 核心数倍率(128/48=2.67)与时间缩短倍率(9.17/3.57=2.57)基本一致 |
| c.96(5 节点分布式) | 96 | 2.6 小时 | 分布式仿真效率优于单机,瓶颈在存储 IO 与网络通信 |
5 不同版本关键配置差异¶
5.1 Calibre 2018 版本注意事项¶
- LSF-wrapper 提交时,
-n参数无效,需通过Queue Command指定核心数; - MTFlex 分布式需手动编写
mtflex.config文件,示例:
LAUNCH AUTOMATIC
REMOTE HOST hpc-1 RSH ssh
REMOTE HOST hpc-2 RSH ssh
- 生成
mtflex.config的快捷命令:
#!/bin/csh
echo "LAUNCH AUTOMATIC" > mtflex.config ; srun -n 4 echo "REMOTE HOST $HOSTNAME RSH ssh" >> mtflex.config
5.2 Calibre 2020 版本关键配置¶
- 支持
Other Cluster提交方式,Queue Command填写:salloc -c 16 srun %C(16 核,与 CPU 核心数一致); - License 配置需在
Environment→Licensing中选择MGLS_LICENSE_FILE,避免许可证冲突。
5.3 Calibre 2022 版本新增功能¶
- GUI 直接支持 MTFlex 分布式配置,无需手动编写文件;
- 新增
Custom Grid提交方式,支持 Slurm 原生命令,适配动态集群; - 支持All Threads与--exclusive组合,实现节点独占(适合大版图验证):
Submission Command:sbatch -p drc --exclusive;Run Calibre using:All Threads。
6 性能优化指南¶
6.1 硬件选型优化¶
- 内存优先:大版图验证(如 Top 层 DRC)推荐 128G + 内存,避免内存不足导致任务卡顿;
- 存储 IO 优化:使用 NVMe 硬盘存储版图文件与验证结果,减少 IO 等待时间;
- 节点选择:分布式仿真选择同机架节点,降低网络通信延迟。
6.2 参数配置优化¶
- CPU 核心数匹配:调度器
-c参数与 CalibreNumber of CPUs to use必须一致,避免资源浪费; - 任务拆分粒度:大版图建议拆分为 16-32 核 / 节点,过小会增加通信开销,过大则降低并行效率;
- 输出文件优化:仅勾选必要的输出选项(如不勾选
Save Intermediate Files),减少磁盘占用。
6.3 工程流程优化¶
- 分模块验证:先进行模块级 DRC/LVS,再进行 Top 层验证,提前定位问题;
- 增量验证:版图修改后,仅验证修改区域(
Check Selection选择修改部分),无需全版图重跑; - 规则筛选:前期验证可关闭非致命规则(如部分警告规则),加快迭代速度,最终验证需加载完整规则。
7 常见问题与故障排查¶
7.1 环境类问题¶
(1)Calibre GUI 无法启动,提示许可证错误
原因:License 服务器未连通,或环境变量MGLS_LICENSE_FILE配置错误;
解决方法:
- 检查 License 服务器 IP 是否可达(
ping <License-IP>); - 确认
MGLS_LICENSE_FILE格式正确(27001@<IP>); - 执行
lmutil lmstat -a -c 27001@<IP>,验证许可证是否可用。
(2)Virtuoso 中无 Calibre 菜单
原因:.cdsinit中 Calibre SKILL 脚本路径错误;
解决方法:
- 确认
calibre.skl路径正确($MGC_HOME/shared/pkgs/icv/tools/queryskl/calibre.skl); - 重启 Virtuoso,查看 CIW 窗口是否有路径错误提示,修正后重新加载。
7.2 任务提交类问题¶
(1)集群提交任务后立即 PEND
原因:调度器分区不存在,或资源请求超过集群配额;
解决方法:
- 执行
sinfo(Slurm)/bqueues(LSF),确认分区名称正确; - 降低资源请求(如将
--mem=128G改为--mem=64G),或联系管理员调整配额。
(2)Calibre 2018 版本-n参数无效
原因:2018 版本 LSF-wrapper 不支持-n参数;
解决方法:
- 使用
Queue Command指定核心数(如bsub -I -q drc -n 16 %C); - 升级至 2020 + 版本,规避该兼容性问题。
7.3 结果类问题¶
(1)DRC 错误过多,无法定位
原因:版图存在基础连通性问题,或规则文件加载错误;
解决方法:
- 先执行 Virtuoso 的
Verify→Connectivity,修复开路 / 短路; - 重新加载 DRC 规则文件,确保无 “规则解析错误”。
(2)LVS 不匹配,提示 “Device Mismatch”
原因:版图器件型号与原理图不一致(如晶体管宽长比错误);
解决方法:
- 查看 LVS 报告,定位不匹配的器件;
- 在版图中修改器件参数(
Edit→Properties),确保与原理图一致。
(3)PEX 提取失败,提示 “LVS Mismatch”
原因:LVS 未完全匹配,PEX 依赖 LVS 的匹配结果;
解决方法:先修复 LVS 不匹配项,确保 LVS 完全匹配后再执行 PEX。
7.4 分布式类问题¶
(1)Remote Host 分布式任务卡住,从节点无负载
原因:主节点与从节点 ssh 免密登录未配置,或节点间网络不通;
解决方法:
- 验证主节点能否免密登录从节点(
ssh <从节点名>); - 检查防火墙设置,确保节点间 22 端口开放。
(2)调度器显示任务 Running,但 Calibre 无进度
原因:CPU 核心数不匹配,或内存不足导致任务卡顿;
解决方法:
- 确认调度器
-c参数与 Calibre 核心数一致; - 查看节点内存使用情况(
free -h),若内存使用率超过 90%,需增加内存配置。