在 Cadence Virtuoso ADE Assembler/Explorer 中以 ICRP 模式运行仿真时,用户有时会看到如下状态组合:
- History Item 的 Status 栏:
running - 0/1 complete - Test 和 Corner 的结果表格:各行显示
loading
这并不是报错,而是仿真流程中的一个正常中间状态。本文解释 ICRP 是什么,以及 loading 期间后台在做什么。
1. ICRP 是什么?
ICRP 全称 IC Remote Process(集成电路远程进程),是 ADE Assembler / Explorer(即 adexl)在后台为每个仿真点启动的一个独立的 virtuoso -nograph 子进程。
其工作原理如下:
1
2
3
4
5
Maestro (主进程)
└── 任务调度 (Job Manager)
├── ICRP-1 (virtuoso -nograph) → 负责 Corner 1 的 netlisting + Spectre
├── ICRP-2 (virtuoso -nograph) → 负责 Corner 2 的 netlisting + Spectre
└── ...
每个 ICRP 进程负责一个仿真点(或一组仿真点)的完整执行周期:网表生成 → 启动仿真器 → 结果回传。
2. running vs loading 各代表什么?
| 位置 | 状态 | 含义 |
|---|---|---|
| History Item → Status | running | Maestro 的任务管理器已启动并开始分发仿真任务 |
| Test / Corner 表格 | loading | 对应的 ICRP 子进程已收到任务,但尚未启动仿真内核(如 Spectre) |
简而言之:running 是”调度层已开跑”,loading 是”执行层正在准备”,两者同时出现是正常的过渡阶段。
3. loading 期间后台在做什么?
ICRP 子进程在 loading 阶段通常依次执行以下操作:
3.1 初始化环境
启动 virtuoso -nograph,加载用户环境配置:
- 读取
.cdsinit、cdsinit.il等初始化脚本 - 加载 CDF、SKILL 工具箱
- 加载 Model 文件路径配置
注意:如果
.cdsinit中有耗时的 SKILL 代码(如自动加载大量库),这一步会显著延长loading时间。
3.2 网表生成(Netlisting)
ICRP 根据当前的电路设计和变量配置生成仿真网表(.scs 或 .sp 文件):
- 对于原理图视图(schematic),调用 OSS 网表器
- 对于抽取视图(extracted view),调用 xRC/EMX 等引擎并合并网表
- 处理 Corner 变量的参数替换
这是最常见的耗时操作,设计规模越大或使用了抽后仿真(Post-layout simulation),耗时越长。
3.3 加载数据库
打开并读取仿真点所涉及的所有单元视图(Cellview),包括:
- 设计库(Design Library)中的层次化单元
- PDK 中的模型文件
3.4 等待 License
启动仿真器内核(Spectre / APS / UltraSim),并向 License Server 申请检出相应的 License。若 License 资源紧张,ICRP 进程会阻塞在此步骤直到获取到 License。
3.5 执行前置脚本
如果在 ADE 中配置了仿真前置触发(Pre-simulation triggers)或 Ocean 脚本,ICRP 也会在此阶段执行这些脚本。
完成上述所有准备工作后,仿真器真正启动,表格状态才会从 loading 变为 running(显示具体的仿真进度)。
4. loading 正常持续时间
| 设计规模 | 正常持续时间 |
|---|---|
| 小型原理图仿真 | 几秒 ~ 30 秒 |
| 中型设计 | 30 秒 ~ 2 分钟 |
| 大型 / 抽后仿真 | 2 分钟 ~ 10 分钟 |
若超过 10 分钟仍显示 loading,通常说明卡住了,需要进行排查。
5. 如何监控 ICRP 的细分状态
Run Summary Assistant 提供了比主界面更细粒度的状态信息:
- 菜单栏选择 View → Assistants → Run Summary(或直接在 History Item 处右键查看)。
- 在助手界面中,可以看到每个 ICRP 的当前阶段:
- Pending:任务已排队,等待 ICRP 启动
- Starting:正在启动
virtuoso -nograph - Configuring:正在加载环境和执行初始化脚本
- Netlisting:正在生成网表
- Running:仿真器已启动,正在计算
- Cleaning up:仿真完成,正在整理结果
将鼠标悬停在状态图标上,可以看到更详细的进度提示。
6. 常见问题排查
6.1 长时间停在 loading / Configuring
原因:.cdsinit 中存在耗时操作(如 autoload 大量库,执行复杂 SKILL 脚本)。
解决方法:
- 在
.cdsinit中添加判断,当运行在-nograph模式(即 ICRP 模式)时跳过不必要的 UI 初始化:
; 在 .cdsinit 中添加,跳过 ICRP 模式下的 UI 相关加载
unless(getShellEnvVar("ADEXL_NOGRAPH") == "1"
; 加载 UI 相关的 SKILL 工具
load("myUITools.il")
)
- 或使用环境变量
CDS_NOGRAPH_SKIP_INITFILE跳过部分初始化(需 Virtuoso IC617 及以上版本)。
6.2 长时间停在 Netlisting
原因:设计层次复杂,或使用了多层抽取视图。
解决方法:
- 检查是否需要使用 APS 的增量网表功能(Incremental Netlisting)
- 减少非必要的抽取层次(在 ADE 中修改 Switch View List)
- 确认
.tmpADEDir临时目录不存在冲突文件;必要时清理后重跑(Simulation → Clean Simulation Results)
6.3 长时间停在等待 License
原因:License Server 上相应 License 已用尽,ICRP 进程队列等待。
解决方法:
- 通过
lmstat -a查看当前 License 占用情况 - 在 ADE 中减少并行仿真数量(Job Policy 设置中调低
Max parallel jobs) - 联系 EDA 管理员确认 License 配置
6.4 通过 Job Log 查看详细报错
在 Test/Corner 表格中右键点击报错的仿真点,选择 View Job Log,可以看到 ICRP 进程的完整日志输出,是定位卡顿具体阶段最直接的方式。
6.5 相关环境变量
| 环境变量 / SKILL 设置 | 说明 |
|---|---|
adexl.icrpStartup → startMaxJobsImmediately |
设为 t 时所有任务同时启动,在资源受限时可能互相竞争 |
adexl.icrpStartup → maxConcurrentJobs |
控制最大并行 ICRP 数量 |
CDS_NOGRAPH_SKIP_INITFILE |
跳过 -nograph 模式下的部分初始化 |
7. 参考资料 (References)
- FAQ: Managing jobs in Assembler, issues and behavior of Job Policy settings (LSCS and ICRP) — Article 20492205,详细解释状态图标及其含义(需登录)
- How to debug slowness or unresponsiveness while opening maestro view or running simulation — Article 20518370,ICRP 启动慢和 loading 延时的排障步骤(需登录)
- What is the Run Summary Assistant? — Article 20492747,Run Summary Assistant 的使用方法(需登录)
- Cadence Virtuoso ADE Assembler User Guide — “Running Simulations” 章节,ICRP 模式架构说明