共计 2238 个字符,预计需要花费 6 分钟才能阅读完成。
Skill 语言简介
Skill 是 Cadence 公司开发的一种脚本语言,主要用于电子设计自动化 (EDA) 工具的扩展和自动化。它的主要特点包括:

- 专为 EDA 工具优化的语法结构
- 强大的数据处理能力
- 可直接调用 EDA 工具 API
- 支持面向对象编程
Skill 最常见的应用场景包括:
- 自动化重复性设计任务
- 创建自定义 EDA 工具命令
- 数据分析和报告生成
- 设计流程自动化
开发环境搭建
- 安装 Cadence IC 工具套件(包含 Skill 解释器)
- 配置环境变量
- 设置 CDS_ROOT 指向 Cadence 安装目录
- 将 $CDS_ROOT/tools/bin 加入 PATH
- 验证安装
- 在终端输入 ”virtuoso &” 启动 Cadence Virtuoso
- 在 CIW 窗口输入 ”skill” 进入交互模式
基础语法讲解
数据类型和变量声明
Skill 支持多种基本数据类型:
; 整数
num = 123
; 浮点数
fnum = 3.14
; 字符串
str = "Hello Skill"
; 列表
lst = list(1 2 3 "four")
; 符号
sym = 'symbol
; 布尔值
trueVal = t
falseVal = nil
控制结构
条件判断
; if 语句
if( x > 10 then
printf("x is greater than 10\n")
else
printf("x is 10 or less\n")
)
; cond 语句
cond
((x < 0) printf("Negative\n") )
((x == 0) printf("Zero\n") )
(t printf("Positive\n") )
)
循环
; for 循环
for( i 0 9
printf("Count %d\n" i)
)
; while 循环
count = 0
while( count < 10
printf("While count %d\n" count)
count++
)
; foreach 循环
foreach(element list(1 2 3 4 5)
printf("Element %L\n" element)
)
函数定义和调用
; 定义函数
defun(addTwoNumbers (a b)
a + b
)
; 调用函数
sum = addTwoNumbers(3 5)
printf("Sum is %d\n" sum)
; 匿名函数
lambdaFunc = lambda((x y) x * y )
result = apply(lambdaFunc list(4 5))
实用代码示例
示例 1:批量重命名器件
procedure(renameDevices(@optional (cellViewId geGetEditCellView()))
let((instances newName)
; 获取当前 cell 中的所有实例
instances = geGetInstances(cellViewId)
; 遍历并重命名
foreach( inst instances
newName = sprintf(nil "inst_%s" inst->name)
dbRenameInst(inst newName)
printf("Renamed %s to %s\n" inst->name newName)
)
)
)
示例 2:自动创建矩形
procedure(createRectangle(layerName width height)
let((rect bBox)
; 创建边界框
bBox = list(0:0 width:height)
; 在指定层创建矩形
rect = dbCreateRect(geGetEditCellView() layerName bBox)
printf("Created rectangle on layer %s\n" layerName)
rect
)
)
示例 3:属性查询工具
procedure(displayProperties(obj)
let((props)
; 获取对象属性
props = obj~>?
; 显示属性
printf("Properties of %s:\n" obj~>objType)
foreach( prop props
printf("%s: %L\n" prop get(obj prop))
)
)
)
常见错误与调试技巧
错误 1:变量未定义
; 错误
x = y + 1 ; y 未定义
; 解决方法
y = 5 ; 先定义 y
x = y + 1 ; 再使用
错误 2:括号不匹配
; 错误
defun(add a b
a + b
; 解决方法
defun(add (a b)
a + b
)
错误 3:类型不匹配
; 错误
x = "123"
y = x + 1 ; 不能将字符串与数字相加
; 解决方法
x = atoi("123") ; 先转换为整数
y = x + 1
调试技巧
- 使用 printf 输出中间值
- 在 CIW 窗口使用 ”trace” 命令跟踪函数调用
- 使用 ”setBreakpoint” 设置断点
- 使用 ”skillDebugger” 启动图形化调试器
- 检查返回值是否与预期一致
进阶学习建议
- 官方文档
- Cadence Skill Language User Guide
-
Skill API Reference
-
实用技巧
- 学习使用 db 函数操作设计数据库
- 掌握 hi 函数处理用户界面
-
了解 axl 函数用于 Allegro PCB 设计
-
社区资源
- Cadence Support Community
-
Skill 编程论坛
-
项目实践
- 自动化版图 DRC 检查
- 创建自定义设计规则
- 开发参数化单元(PCell)
实践练习
尝试完成以下任务来巩固所学知识:
- 编写一个 Skill 函数,计算从 1 加到 n 的和
- 创建一个程序,在指定层上绘制一个十字形图案
- 开发一个脚本,查找并列出设计中所有宽度小于最小值的连线
- 实现一个交互式命令,允许用户选择器件并显示其属性
完成练习后,可以在 Cadence Virtuoso 的 CIW 窗口中测试你的代码。记住,Skill 编程最有效的学习方式就是不断实践和尝试解决实际问题。
正文完
