共计 1800 个字符,预计需要花费 5 分钟才能阅读完成。
1. 背景介绍:为什么需要 Skill 脚本
在 IC 设计流程中,Virtuoso 作为主流的版图设计工具,每天需要处理大量重复性操作。例如批量修改器件参数、自动布局连线、设计规则检查等。如果全靠手动操作,不仅效率低下,还容易出错。

Skill 脚本正是为解决这些问题而生。它是 Virtuoso 内置的 Lisp 方言脚本语言,可以直接调用工具的所有 API,实现:
- 自动化重复任务(节省 90% 以上时间)
- 定制专属设计流程
- 开发辅助工具插件
- 与其他 EDA 工具交互
2. 开发环境配置
2.1 基本配置
- 启动 Virtuoso 后,通过菜单栏选择【Tools】→【Skill Development】→【CIW】打开交互窗口
- 在 CIW 中输入
load("脚本路径 / 文件名.il")即可运行脚本
2.2 推荐开发工具
- 代码编辑器:VS Code + Skill 语法插件
- 调试工具:内置
printf函数 +axlDebug工具 - 文档查询:Cadence 安装目录下的
skill.pdf手册
3. 基础语法精要
3.1 变量与数据类型
; 基本变量定义
a = 123 ; 整数
b = 3.14 ; 浮点数
c = "text" ; 字符串
d = list(1 2) ; 列表
; 特殊类型
cellView = geGetEditCellView() ; 获取当前编辑视图
instances = cv~>instances ; 获取所有器件实例
3.2 函数定义
procedure(addNumbers(a b)
"两数相加" ; 函数说明
a + b ; 返回值
)
3.3 流程控制
; 条件判断
if( a > 10 then
printf("大于 10")
else
printf("小于等于 10")
)
; 循环遍历
foreach( inst instances
printf("处理器件:%s" inst~>name)
)
4. 实战代码示例
示例 1:批量修改器件属性
procedure(batchChangeWidth(cv targetWidth)
"将所有 MOS 管的宽度改为指定值"
foreach( inst cv~>instances
when( inst~>master~>name == "nmos" || inst~>master~>name == "pmos"
dbSetq(inst "w" targetWidth) ; 修改宽度属性
printf("已修改 %s 宽度为 %f" inst~>name targetWidth)
)
)
t ; 返回成功标识
)
示例 2:自动连线工具
procedure(autoConnect(pin1 pin2)
"在两个引脚间创建金属 1 连线"
let((wirePath)
wirePath = list(list(pin1~>xy 0)
list(pin2~>xy 0)
)
dbCreateLine(geGetEditCellView()
list("layer" "metal1" "width" 0.1)
wirePath
)
printf("已连接 %s 和 %s" pin1~>name pin2~>name)
)
)
5. 调试技巧
5.1 基础调试方法
- 使用
printf输出变量值 - 在 CIW 中直接执行代码片段测试
- 通过
axlCmdRegister注册命令进行交互测试
5.2 高级调试工具
; 开启详细调试模式
debugMode = t
; 检查函数执行时间
startTime = time()
; 执行代码...
printf("耗时:%f 秒" float(time() - startTime))
6. 性能优化指南
- 减少数据库查询 :缓存
geGetEditCellView()结果 - 使用哈希表 加速查找:
makeTable/gettable - 避免嵌套循环 :对大列表使用
mapcar代替foreach - 内存管理 :及时用
delete释放大对象
7. 常见问题解决方案
7.1 脚本加载失败
- 现象 :
load函数返回 nil - 解决:检查文件路径是否含中文 / 空格
7.2 函数未定义
- 现象:Error undefined function
- 解决:确保函数定义在调用之前
7.3 对象属性访问错误
- 现象:Error nil variable
- 解决 :先用
boundp检查对象是否存在
进阶学习建议
- 官方文档:
$CDSHOME/doc/skill.pdf - 实用函数库:
$CDSHOME/tools/dfII/samples - 社区资源:Cadence Support Portal 的 Skill 论坛
通过持续实践,你会发现 Skill 脚本能帮你把重复劳动变成一键操作。建议从小的工具脚本开始,逐步积累自己的工具库。当你能用脚本完成 90% 的日常操作时,你会获得完全不同的设计体验。
正文完
