在当今的集成电路设计中,随着设计复杂度增加,节点和元件数量呈指数级增长。仿真信号的盲目保存会消耗大量的磁盘空间并延长仿真时间。Cadence 的 “Using Spectre SAVE Effectively” (RAK) 详细介绍了如何通过 save 和 options 语句精确控制信号保存,本文旨在全面总结该 RAK 的核心技术点。
1. 基础 save 语句语法
save 语句用于指定需要保存的信号。其基本格式支持以下参数:
- signalName: 节点的名称(如
save vout)。- 使用
:q或:dynamic后缀保存节点电荷而非电压(如save 7:q)。
- 使用
- compName: 元件名称,用于保存该元件内部的信号。
- modifier: 修饰符,用于指定保存的具体内容,如端口名、端口索引、工作点名称、参数名或 VerilogA 内部变量。
常用关键字 (Keywords)
| 关键字 | 用途 |
|---|---|
currents |
保存器件的所有电流 |
static |
保存器件的电阻电流 |
displacement |
保存器件的电容电流 |
dynamic |
保存器件的电荷或磁通 |
oppoint |
保存器件的工作点参数 (Operating Points) |
probe |
使用探针测量电流 |
pwr |
保存电路、子电路或器件的功耗 |
all |
保存器件的所有关联信号 |
2. 进阶 save 控制参数
除了基础语法,save 语句还支持丰富的控制参数:
- depth=num: 控制通配符匹配的深度。默认匹配所有层级。
- sigtype: 定义保存对象的类型,可选
node(默认),dev,subckt, 或all。 - devtype: 限制特定类型的器件。
- subckt=subckt_master: 仅保存特定子电路 master 实例中的信号。
- exclude: 使用通配符排除特定的信号列表。
- compression: 控制波形压缩(
no,all,wildcardonly)。 - ports=yes/no: 是否保存子电路的端口名称。
- filter=rc: 过滤掉仅连接到寄生元件的内部 RC 节点。
- probelvl=num: 递归探测层级中的终端电流深度。
- time_window: 指定仿真输出的时间窗口(如
time_window=[10n 50n])。
3. options 语句中的全局设置
options 语句可以设置仿真器的全局保存行为:
- save: 定义默认保存的信号级别(
selected,allpub,lvlpub,all,none)。 - nestlvl: 定义子电路输出的层级深度。
- subcktprobelvl: 定义自动探测子电路终端电流的深度。
- subcktiprobes: 是否在计算子电路终端电流时插入
iprobe器件。 - currents: 全局设置输出电流(
selected,all,nonlinear,none)。 - useprobes: 测量终端电流时是否使用电流探针。
- useterms: 输出终端标记方式。
name使用节点名(M1:d),index使用索引(M1:1)。 - pwr: 全局功耗计算设置(
none,all,subckts,devices,total)。 - savehdlvars: 设置 AHDL(如 Verilog-A)变量的保存级别。
4. 15 个实战场景总结 (Lab 内容概括)
RAK 通过 15 个实验展示了不同需求下的最佳实践:
- 保存全设计电压: 使用
saveOptions options save=allpub。 - 仅保存顶层电压电流:
save * *:currents depth=1。 - 保存特定路径信号:
save X1.X1.X1.in(支持多级层级路径)。 - 保存指定器件/子电路的所有电流:
save X1:currents Q0:currents。 - 保存至第 n 层级(排除子电路终端电流):
save * *:currents depth=n。 - 保存至第 n 层级(包含子电路终端电流): 设置
subcktprobelvl=n。 - 保存所有非线性器件电流:
options currents=nonlinear。 - 保存除子电路终端外的所有电流:
options currents=all。 - 特定子电路端口关联信号探测:
save Ix_1:portname probelvl=3。 - 特定网络 (Net) 关联信号探测:
save netname:currents probelvl=3。 - 堆叠 FinFET 参数保存: 配合
subcktoppoint=yes指定内部管子参数(如I1:vds)。 - DC 与 Transient 工作点保存:
- 静态:
dcOpInfo info what=oppoint - 动态:
finalTimeOP或指定infotimes。
- 静态:
- 通配符与时间窗口:
save X*.* depth=3 time_window=[t1 t2]。 - 功耗分析:
- 全局:
save :pwr - 特定子电路:
save X1:pwr
- 全局:
- VerilogA 变量及内部信号:
saveOptions options saveahdlvars=all。
5. ADE Maestro/Explorer GUI 操作建议
在 Virtuoso ADE 界面中,可以通过以下方式实现高效保存:
- Save Options 表单: 在
Outputs -> Save All中设置全局参数。 - Save By Subckt 标签页: (IC6.1.8 ISR3+) 直接在 GUI 中通过表格选择实例、设置深度和信号类型(sigtype)。
- 外部 .scs 文件: 编写专门的
save.scs文件,在Setup -> Model Libraries中加载,这是管理复杂save语句最推荐的方式。
[!TIP] 善用
filter=rc和通配符排除功能,可以极大减小仿真后产生的 PSF 文件体积,提高波形查看器 (ViVA) 的加载速度。
参考资料
- Cadence Rapid Adoption Kit: Using Spectre SAVE Effectively (Product Version: IC 6.1.8 ISR17, SPECTRE 20.1 ISR4)