共计 1852 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要学习 Skill 文件?
Skill 是 EDA(电子设计自动化)工具中广泛使用的脚本语言,尤其在 Cadence 系列工具中扮演着重要角色。它让我们能够自动化完成重复性设计任务,比如批量修改元件参数、自动执行设计规则检查、生成报告等。掌握 Skill 可以显著提升硬件工程师的工作效率,将我们从繁琐的手动操作中解放出来。

Skill 与传统脚本语言的差异
Skill 是基于 Lisp 的方言,这给它带来了几个独特的特点:
- 函数式编程特性:Skill 支持高阶函数和闭包
- 前缀表达式:运算符放在操作数前面,例如
(+ 1 2) - 动态类型:变量不需要预先声明类型
- 直接访问 EDA 工具 API:可以直接调用底层设计数据库
基础语法结构详解
变量定义与作用域
Skill 中的变量使用前需要声明,使用 let 或defvar关键字:
let((x 1) (y 2)) ; 局部变量
(defvar *globalVar* 10) ; 全局变量
作用域规则:
let定义的变量只在当前代码块有效defvar定义的变量在整个 Skill 会话期间有效
函数定义与调用
定义函数使用 procedure 关键字:
procedure(addNumbers(a b)
a + b
)
调用函数时使用前缀表示法:
addNumbers(5 10) ; 返回 15
常用 CAD API 调用示例
获取当前设计中的全部实例:
instances = geGetEditCellView()~>instances
修改元件属性:
prop = car(instances)~>prop
prop~>value = "newValue"
实战代码示例
示例 1:批量修改元件属性
procedure(batchChangeProperty(propName newValue)
let((cv insts)
cv = geGetEditCellView()
insts = cv~>instances
foreach(inst insts
when(inst~>propName == propName
inst~>value = newValue
)
)
t ; 返回成功
)
)
示例 2:自动化设计规则检查
procedure(runDRC()
let((results)
drcCheck() ; 执行 DRC 检查
results = drcGetResults()
when(results
printf("发现 %d 个 DRC 违规 \n" length(results))
foreach(viol results
printf("违规类型:%s 位置:%L\n"
viol~>type viol~>location)
)
)
t
)
)
示例 3:报表生成与导出
procedure(generateReport(outFile)
let((cv insts fp)
cv = geGetEditCellView()
insts = cv~>instances
fp = outfile(outFile)
fprintf(fp "设计报告:%s\n" cv~>name)
fprintf(fp "实例数量:%d\n\n" length(insts))
foreach(inst insts
fprintf(fp "实例名:%s 类型:%s\n"
inst~>name inst~>cellName)
)
close(fp)
printf("报告已生成到:%s\n" outFile)
)
)
避坑指南
路径处理中的转义问题
Windows 路径中的反斜杠需要转义:
; 错误写法
load("C:\scripts\mySkill.il")
; 正确写法
load("C:\\scripts\\mySkill.il")
; 或者使用正斜杠
load("C:/scripts/mySkill.il")
内存泄漏预防措施
Skill 没有自动垃圾回收,需要注意:
- 及时释放不再使用的大对象
- 避免在循环中不断创建新对象而不释放
- 使用
free函数手动释放内存
多版本工具兼容方案
不同版本 Cadence 工具的 API 可能有变化,建议:
- 在脚本开头检查工具版本
- 为不同版本提供替代实现
- 使用条件编译
when(isVersion(6.1)
; 6.1 版本的特定代码
...
otherwise
; 其他版本的代码
...
)
继续探索
- 如何实现一个交互式的 Skill 脚本,让用户可以在执行过程中输入参数?
- 当需要处理超大规模设计时,有哪些优化 Skill 脚本性能的方法?
通过本文的学习,你应该已经掌握了 Skill 脚本的基础知识和常见用法。Skill 语言虽然有些特殊,但一旦熟悉了它的思维模式,就能发挥出强大的自动化能力。在实际工作中,建议从小脚本开始,逐步积累经验,最终你将能够开发出复杂的自动化流程,大幅提升工作效率。
正文完
