共计 1342 个字符,预计需要花费 4 分钟才能阅读完成。
1. Skill 脚本简介及其在 IC 设计中的重要性
Skill 是 Cadence Virtuoso 内置的脚本语言,专为 IC 设计自动化需求开发。它可以直接调用 Virtuoso 底层功能,实现版图编辑、参数修改、数据提取等操作的批量处理。在复杂 IC 设计中,Skill 能帮助工程师:

- 减少重复性手动操作(如批量修改器件参数)
- 确保设计规则一致性
n- 实现复杂逻辑的判断和自动化执行
2. 开发环境配置
- 启动 Virtuoso 后,通过菜单栏选择 Tools → Skill IDE 打开集成开发环境
-
首次使用时建议配置:
-
设置默认工作目录(
setWorkingDir()函数) - 开启语法高亮(Preferences → Editor → Syntax Highlighting)
- 绑定快捷键(推荐 Ctrl+ E 执行当前脚本)
3. 基础语法速览
变量定义
; 数值变量
width = 0.5e-6 ; 500nm
; 字符串
cellName = "INVX1"
; 列表
params = list(1.2 2.4 3.6)
控制结构
; 条件判断
if(width < 1e-6 then
printf("宽度小于 1um")
else
printf("宽度大于等于 1um")
)
; 循环
foreach(param params
printf("当前参数: %f\n" param)
)
4. 核心 API 示例
版图操作
; 获取当前选中器件
selectedObj = geGetSelSet()
; 修改 MOS 管宽度
foreach(obj selectedObj
when(obj~>objType == "mos"
obj~>width = 2e-6 ; 修改为 2um
)
)
参数提取
; 提取 NMOS 阈值电压
vt = spectreResult("dcOpInfo" "m1" "vth")
printf("阈值电压: %f V\n" vt)
5. 实战案例:自动调整 MOS 尺寸
procedure(autoResizeMos(@optional (factor 1.5))
let((cv selMos)
cv = geGetEditCellView()
selMos = geGetSelSet()
; 遍历选中器件
foreach(mos selMos
when(mos~>objType == "mos"
; 按比例调整尺寸
mos~>width = mos~>width * factor
; 保持 L 不变,仅修改 W
mos~>length = mos~>length
printf("已调整 %s: W=%.3fum\n"
mos~>name mos~>width*1e6)
)
)
)
)
6. 优化与调试技巧
- 性能优化:
- 使用
let局部变量减少内存占用 -
批量操作时先收集对象再处理
-
常见错误:
- 对象未选中时
geGetSelSet()返回 nil - 单位混淆(默认是米制,1e- 6 表示 1um)
7. 进阶学习路径
- 官方文档:Virtuoso Documentation → Skill API Reference
- 实用函数库:
axl*系列函数(高级版图操作)db*系列函数(数据库访问)- 社区资源:Cadence Support Community 技能交流板块
思考与实践
试着为你的当前项目编写一个脚本:
– 如何批量修改特定层(如 metal1)的线宽?
– 能否自动检测并标记不符合设计规则的连线?
(提示:使用 leGetEntryLayer() 获取图层,dbCreateMarker()创建规则标记)
正文完
发表至: 未分类
近两天内
