Virtuoso SKILL 数据模型与常用 API 参考

Posted by Deepseek & MaZhaoxin on June 27, 2026

本文档由AI生成,仅供参考。

Virtuoso SKILL 数据模型与常用 API 参考

说明:本文档聚焦于 Cadence Virtuoso SKILL 编程中的数据模型(对象体系)和常用 API,不涉及 SKILL 基本语法(如变量定义、循环、条件判断等)。适用于需要快速查阅自动化操作相关 API 的场景。


目录

  1. 数据模型体系
  2. 数据库操作 API
  3. Schematic 操作 API
  4. Layout 版图操作 API
  5. 仿真环境 API(ADE / Maestro / OCEAN)
  6. 仿真结果处理 API
  7. CDF 与参数操作 API
  8. 实用辅助函数

1. 数据模型体系

1.1 核心对象层级

Library (库)
  └── Cell (单元)
        └── CellView (视图)
              ├── Instance (实例/器件)
              │     ├── Pin (引脚)
              │     └── Parameter (参数)
              ├── Net (网络/连线)
              │     └── Term (端子)
              ├── Shape (图形, Layout)
              │     ├── Rect (矩形)
              │     ├── Polygon (多边形)
              │     ├── Path (路径/走线)
              │     └── Label (标签)
              ├── Pin (顶层引脚, Schematic/Layout)
              └── Wire (连线, Schematic)

1.2 关键对象类型与属性访问

对象 说明 常见属性(通过 ~> 访问)
cvId / dbCellView 打开的 cellview cellName, libName, viewName, instances, nets, terminals, shapes, bBox
instId / dbInstance 器件实例 name, cellName, libName, viewName, master, instTerms, prop, parameters, bBox, xy, orient
netId / dbNet 网络 name, terminals, allInstTerms
termId / dbTerm 端子 name, net, instTerms
pinId / dbPin 引脚 name, direction, term, net, bBox
figId / dbFig 图形基类 bBox, layerName, layerNum, purpose
wireId / dbWire 连线 points, net, bBox

1.3 对象属性查询方式

; 查看对象所有属性
obj~>??
; 查看对象单个属性
obj~>cellName
; 条件查询
obj~>prop~>w          ; CDF 参数
obj~>parameters~>w    ; 器件参数

2. 数据库操作 API

2.1 打开/关闭数据库

函数 说明
dbOpenCellViewByType(lib cell view "" "r") 以只读方式打开 cellview
dbOpenCellViewByType(lib cell view "" "a") 以编辑方式打开 cellview
dbOpenCellViewByType(lib cell view "schematic") 打开 schematic 视图
dbOpenCellViewByType(lib cell view "layout") 打开 layout 视图
dbClose(cvId) 关闭数据库对象
dbSave(cvId) 保存数据库对象
geGetEditCellView() 获取当前正在编辑的 cellview
geGetWindowCellView() 获取当前窗口的 cellview

2.2 查询对象

函数 说明
dbGetInsts(cvId) 获取所有 instance
dbGetNets(cvId) 获取所有 net
dbGetPins(cvId) 获取所有 pin
dbGetTerminals(cvId) 获取所有 terminal
dbGetShapes(cvId) 获取所有 shape
dbGetShapes(cvId layerName) 获取指定层的 shape
dbGetq(obj attr) 安全获取对象属性
dbFindAnyInstByName(cvId name) 按名称查找 instance
dbFindAnyNetByName(cvId name) 按名称查找 net

2.3 axlDB 系列(推荐,容错更好)

函数 说明
axlDBGetInstances(cvId) 获取实例列表
axlDBGetNets(cvId) 获取网络列表
axlDBGetPolygons(cvId layer) 获取指定层的多边形
axlDBGetShapes(obj layer) 获取指定对象在某层的图形
axlDBGetBBox(obj) 获取对象边界框
axlDBGetBBoxCenter(obj) 获取边界框中心坐标

3. Schematic 操作 API

3.1 创建器件实例

函数 说明 签名示例
dbCreateInst 创建 instance dbCreateInst(cvId masterLib masterCell masterView name origin orient)
dbCreateParamInst 创建带参数的 instance dbCreateParamInst(cvId masterLib masterCell masterView name origin orient ?w "10u" ?l "1u")
schCreateInst Schematic 层级创建 instance 参数与 dbCreateInst 类似
; 示例:放置一个 NMOS 器件
cv = geGetEditCellView()
dbCreateParamInst(cv "gpdk045" "nmos1v" "symbol" "M1" list(0 0) "R0"
    ?w "10u" ?l "180n" ?nf 4)

3.2 创建连线

函数 说明
schCreateWire(cvId netName listOfPoints) 创建连线
schCreateWireLabel(cvId netName point label) 在连线上创建标签
schCreatePin(cvId netName direction point) 创建原理图引脚
dbCreateNet(cvId netName) 创建网络
dbCreateTerm(netId instId termName) 创建端子(连接 instance pin 到 net)
dbCreatePin(netId figId) 创建引脚
; 示例:创建一条从 (0,0) 到 (2,0) 到 (2,1) 的连线
schCreateWire(cv "net01" list(0:0 2:0 2:1))

; 示例:创建引脚
schCreatePin(cv "VDD" "input" 0:1)

3.3 属性操作

函数 说明
dbReplaceProp(instId propName propValue) 替换/设置 instance 属性
dbDeleteProp(instId propName) 删除属性
instId~>prop~>w = "20u" 直接赋值修改参数
instId~>parameters~>l = "180n" 直接修改器件参数

3.4 查询与导航

函数 说明
instId~>instTerms 获取 instance 的所有 term
instId~>master~>terminals 获取 master cell 的 terminal 列表
instId~>master~>cellName 获取 master cell 名称
netId~>terminals 获取 net 上的所有 terminal
schCheck(cvId) 检查原理图连接

4. Layout 版图操作 API

4.1 创建图形

函数 说明 签名
dbCreateRect(cvId layerName bBox) 创建矩形 dbCreateRect(cv "M1" list(0:0 10:5))
dbCreatePolygon(cvId layerName listOfPoints) 创建多边形 dbCreatePolygon(cv "M1" list(0:0 10:0 10:5 0:5))
dbCreatePath(cvId layerName listOfPoints width) 创建路径/走线 dbCreatePath(cv "M1" list(0:0 10:0 10:5) 0.5)
dbCreateLabel(cvId layerName point "orientation" "anchor" text) 创建标签 dbCreateLabel(cv "text" 5:2 "R0" "center" "M1")
dbCreatePin(cvId figId) 将图形转换为 pin
dbCreateVia(cvId viaDefName point orient) 创建过孔 dbCreateVia(cv "M1_M2" 5:5 "R0")

4.2 操作图形

函数 说明
dbMoveFig(figId deltaPoint) 移动图形
dbCopyFig(figId deltaPoint) 复制图形
dbDeleteObject(objId) 删除对象
dbStretchFig(figId edge delta) 拉伸图形
dbMergeFigs(figList) 合并图形
dbLayerOr(obj1 obj2) 图形 OR 运算
dbLayerAnd(obj1 obj2) 图形 AND 运算
dbLayerNot(obj1 obj2) 图形 NOT 运算
dbLayerSize(obj amount) 图形尺寸调整(expand/shrink)

4.3 层次化操作

函数 说明
dbCreateInst(cvId lib cell view name origin orient) 放置 instance(layout 中使用 “layout” view)
dbFlattenInst(instId level) 打散 instance
dbMakeCell(shapeList lib cell view) 将图形做成 cell
dbGetOverlaps(cvId bBox layer) 获取 bBox 区域内的重叠图形

5. 仿真环境 API(ADE / Maestro / OCEAN)

5.1 ADE L / XL(传统 API)

函数 说明
asiGetCurrentSession() 获取当前 ADE 会话
asiGetSessionName(ses) 获取会话名称
asiGetDesignName(ses) 获取设计名称
sevGetDesignVar(ses varName) 获取设计变量
sevSetDesignVar(ses varName value) 设置设计变量
asiSetNetlistOption(ses option value) 设置网表选项
asiAddAnalysis(ses analysis) 添加分析
asiDeleteAnalysis(ses analysis) 删除分析
asiSetAnalysisOption(ses analysis option value) 设置分析选项
asiSetOutput(ses outputExpr) 设置输出表达式
asiGetOutput(ses outputExpr) 获取输出表达式
asiCreateNetlist(?session ses) 创建网表
asiRunSimulation(?session ses) 运行仿真
asiGetResult(ses) 获取仿真结果
asiGetWaveform(ses signalExpr) 获取波形

5.2 Maestro(ADE Explorer / Assembler, IC618+ 推荐)

Maestro 使用 mae 前缀的 API,支持两种模式:

  • GUI mode:用于交互式仿真
  • Background mode:用于批量读写配置
函数 说明
maeOpenSession(lib cell view ?mode "r") 打开 maestro session(只读)
maeOpenSession(lib cell view ?mode "a") 打开 maestro session(编辑)
maeCloseSession(sessionId) 关闭 maestro session
maeGetAllTests(sessionId) 获取所有 test
maeGetTestSetup(sessionId testName) 获取 test 设置
maeGetDesignVariables(sessionId testName) 获取设计变量
maeSetDesignVariables(sessionId testName varList) 设置设计变量
maeGetAnalyses(sessionId testName) 获取分析列表
maeAddAnalysis(sessionId testName analysis) 添加分析
maeGetOutputs(sessionId testName) 获取输出列表
maeAddOutput(sessionId testName outputExpr) 添加输出表达式
maeSetSimulator(sessionId testName simulator) 设置仿真器
maeSetModelFiles(sessionId testName modelFiles) 设置模型文件
maeRunSimulation(sessionId testName) 运行仿真
maeGetResults(sessionId testName) 获取仿真结果
maeGetResult(sessionId testName outputExpr) 获取指定输出结果
maePlotResult(sessionId testName outputExpr) 绘制结果
maeGetHistory(sessionId testName) 获取仿真历史

5.3 OCEAN 脚本 API

OCEAN 是 SKILL 的子集,用于无 GUI 环境下的仿真自动化。

仿真器与设计设置

函数 说明
simulator('spectre) 指定仿真器为 Spectre
design(lib cell view) 指定设计
resultsDir("./simResults") 设置结果目录
modelFile('("model.scs" "section")) 加载模型文件
desVar("varName" value) 设置设计变量

分析类型

函数 说明
analysis('dc ?saveOppoint t) DC 分析
analysis('ac ?start 1 ?stop 1G ?dec 20) AC 分析
analysis('tran ?start 0 ?stop 100n ?step 100p) 瞬态分析
analysis('sp ?ports list("PORT0")) S 参数分析
analysis('pss ?fund 2.4G ?nharm 5) 周期稳态分析
analysis('pnoise ?start 1k ?stop 100M ?dec 10) 相位噪声分析
analysis('noise ?start 1 ?stop 1G ?dec 20) 噪声分析

仿真执行与结果

函数 说明
run() 运行所有已设置的分析
run(?analysisName "tran") 运行指定分析
ocnWaveform?() 检查对象是否为波形
getData("/net01") 获取节点电压/电流数据
selectResult('tran) 选择当前分析结果
plot(value vsw ?expr '("/net01" "/net02")) 绘制波形
plot(getData("/net01") getData("/net02")) 同时绘制多波形
ocnPrint(?output "./out.csv" signal) 将信号数据输出到文件

OCEAN 典型脚本模板

; OCEAN 典型脚本结构
simulator('spectre)
design("myLib" "myCell" "schematic")
resultsDir("./simResults")
modelFile('("models.scs" "tt"))

desVar("VDD" 1.8)
desVar("TEMP" 27)

analysis('dc ?saveOppoint t)
analysis('ac ?start 1 ?stop 1G ?dec 20)
analysis('tran ?start 0 ?stop 100n ?step 100p)

; 设置输出
selectResult('ac)
plot(dB20(getData("/vout")))

; 执行仿真
run()

6. 仿真结果处理 API

6.1 波形数据操作

函数 说明
awvGetWaveform(session expr) 获取波形对象
awvPlotWaveform(session expr) 绘制波形
awvGetWaveformData(waveform) 获取波形数据(x/y 向量)
awvGetBBox(waveform) 获取波形范围
drGetWaveformXVec(waveform) 获取 X 轴向量
drGetWaveformYVec(waveform) 获取 Y 轴向量
drGetElem(waveform index) 获取波形第 N 个元素

6.2 计算器函数(Calculator Functions)

与 Virtuoso Calculator 中可用的函数对应:

函数 说明
value(waveform xValue) 获取指定 X 值处的 Y 值
cross(waveform threshold n "rising") 获取第 n 次穿越阈值的位置
deriv(waveform) 求导
integ(waveform) 积分
average(waveform) 求平均值
rms(waveform) 求 RMS 值
peakToPeak(waveform) 求峰峰值
ymax(waveform) 求最大值
ymin(waveform) 求最小值
xval(waveform) 获取波形 X 轴向量
yval(waveform) 获取波形 Y 轴向量
dB20(waveform) 20*log10 转换
dB10(waveform) 10*log10 转换
phase(waveform) 相位提取
gainMargin(waveform phaseWave) 增益裕度
phaseMargin(waveform) 相位裕度
bandwidth(waveform 3 "low") 计算 -3dB 带宽
riseTime(waveform) 上升时间
fallTime(waveform) 下降时间
settlingTime(waveform) 建立时间
clip(waveform xMin xMax) 截取波形区间
sample(waveform interval) 按间隔采样
freq(waveform) 频率提取
getSpiceWave(ses signalName) 获取 SPICE 仿真结果波形

6.3 结果文件操作

函数 说明
openResults("./simResults") 打开结果目录
selectResult('tran) 选择分析类型结果
ocnPrint(?output "data.csv" signal1 signal2) 输出数据到 CSV
ocnPrint(?output "data.txt" ?precision 6 signal) 指定精度输出

7. CDF 与参数操作 API

7.1 CDF 操作

函数 说明
cdfGetInstCDF(instId) 获取 instance 的 CDF 对象
cdfGetBaseCellCDF(cellId) 获取 cell 的基础 CDF
cdfGetParamCdfgData(cdfId paramName) 获取参数 CDF 信息
cdfGetDplConfigName(cdfId) 获取 display 配置名
cdfFindParamByName(cdfId paramName) 按名称查找 CDF 参数
cdfCreateBaseCellCDF(cellId) 创建基础 CDF
cdfDeleteCDF(objId) 删除 CDF
cdfDump(cdfId ?fileName "cdf.txt") 导出 CDF 到文件
abInvokeCdfCallbacks(instId) 调用 CDF 回调(更新器件参数)
CCSinvokeCdfCallbacks(instId) 调用 CDF 回调(另一种实现)

7.2 参数批量设置示例

; 批量设置 NMOS 参数
procedure(setNMOSParams(instId @key (w "10u") (l "180n") (nf 4) (m 1))
    instId~>w = w
    instId~>l = l
    instId~>nf = nf
    instId~>m = m
    CCSinvokeCdfCallbacks(instId)
)

8. 实用辅助函数

8.1 坐标与几何

函数 说明
list(x y) 创建坐标点
x:y 创建坐标点(简写)
centerBox(bBox) 获取 bBox 中心点
dbTransformPoint(point transform) 坐标变换
dbGetq(obj bBox) 获取对象边界框

8.2 技术库与层

函数 说明
techGetTechFile(cvId) 获取 technology file
techGetLayers(techId) 获取所有层定义
techFindLayer(techId layerName) 查找指定层
techGetPurpose(techId purposeName) 获取 purpose 定义
techGetViaDefs(techId) 获取所有过孔定义
techFindViaDef(techId viaName) 查找指定过孔定义
ddGetObj(libName) 获取 library 对象
ddGetObj(libName cellName) 获取 cell 对象
ddGetObj(libName cellName viewName) 获取 cellview 对象
ddGetObjChildren(obj) 获取子对象列表

8.3 Library/Cell 管理

函数 说明
ddGetLibList() 获取所有 library 列表
ddGetCellList(libName) 获取 library 中所有 cell 列表
ddGetObj(lib cell) 获取 cell 对象
ddCreateLib(libName techLib) 创建 library
ddCopyLib(srcLib dstLib) 复制 library
ddDeleteLib(libName) 删除 library
ddCreateCell(libName cellName) 创建 cell
ddRenameCell(libName oldName newName) 重命名 cell
ddDeleteCell(libName cellName) 删除 cell

8.4 文件与路径

函数 说明
getWorkingDir() 获取当前工作目录
setWorkingDir(path) 设置工作目录
simGetWorkingDir() 获取仿真工作目录
prependInstallPath(relPath) 获取 Cadence 安装路径下的完整路径

8.5 通用工具

函数 说明
hiRegTimer("callback" interval) 注册定时器
hiEnqueueCmd("callback") 入队执行命令(UI 线程安全)
hiGetCurrentWindow() 获取当前窗口
hiGetAppType() 获取当前应用类型
axlAirGap(shape1 shape2 layer) 检查两图形间距
axlAddMouseLocFunction(callback "prompt" button) 注册鼠标点击回调
axlCmdRingLoad(cmdList) 加载并执行命令序列

附录:快速参考速查表

A. Schematic 自动化流程

dbOpenCellViewByType → 打开/创建 cellview
  ↓
dbCreateParamInst → 放置器件(设置参数)
  ↓
schCreatePin → 创建引脚
  ↓
schCreateWire → 连线
  ↓
CCSinvokeCdfCallbacks → 调用回调(参数生效)
  ↓
schCheck → 检查原理图
  ↓
dbSave → 保存

B. Layout 自动化流程

dbOpenCellViewByType → 打开/创建 layout cellview
  ↓
dbCreateInst → 放置器件 instance
  ↓
dbCreateRect / dbCreatePath / dbCreateVia → 创建图形/连线/过孔
  ↓
dbCreatePin → 将图形标记为 pin
  ↓
dbSave → 保存

C. 仿真自动化流程(OCEAN)

simulator('spectre) → 指定仿真器
design(...) → 指定设计
resultsDir(...) → 设置结果目录
desVar(...) → 设置变量
analysis(...) → 设置分析
run() → 执行仿真
selectResult(...) → 选择结果
plot(...) / ocnPrint(...) → 处理/输出结果

D. 仿真自动化流程(Maestro)

maeOpenSession → 打开 maestro session
  ↓
maeGetAllTests → 获取所有 test
  ↓
maeSetDesignVariables → 设置设计变量
maeAddAnalysis → 添加分析
maeAddOutput → 添加输出
  ↓
maeRunSimulation → 运行仿真
  ↓
maeGetResult / maePlotResult → 获取/绘制结果
  ↓
maeCloseSession → 关闭 session

参考资源

  • Cadence SKILL Language User Guide (CDNSHelp)
  • Cadence SKILL Language Reference Manual
  • Cadence OCEAN Reference Manual
  • Cadence Virtuoso ADE Verifier User Guide
  • Maestro SKILL API Reference
  • Cadence Community Forums: Custom IC SKILL