本文档由AI生成,仅供参考。
Virtuoso SKILL 数据模型与常用 API 参考
说明:本文档聚焦于 Cadence Virtuoso SKILL 编程中的数据模型(对象体系)和常用 API,不涉及 SKILL 基本语法(如变量定义、循环、条件判断等)。适用于需要快速查阅自动化操作相关 API 的场景。
目录
- 数据模型体系
- 数据库操作 API
- Schematic 操作 API
- Layout 版图操作 API
- 仿真环境 API(ADE / Maestro / OCEAN)
- 仿真结果处理 API
- CDF 与参数操作 API
- 实用辅助函数
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