共计 2026 个字符,预计需要花费 6 分钟才能阅读完成。
为什么选择 SKILL 脚本自动化
在 PCB 设计过程中,工程师经常面临大量重复性操作,比如元件重命名、设计规则检查、报表生成等。传统的手动操作不仅效率低下,还容易出错。常见的自动化方案包括:

- 宏录制:操作简单但灵活性差,无法处理复杂逻辑
- 第三方脚本语言(如 Python):功能强大但需要额外接口支持
- SKILL 语言:Cadence 原生支持,直接调用 Allegro API,执行效率最高
SKILL 作为 Allegro 的内置脚本语言,能够深度集成设计环境,实现真正的无缝自动化。下面我们从基础语法开始逐步掌握 SKILL 开发。
SKILL 语言基础速成
1. 数据类型与变量
; 基本数据类型示例
a = 123 ; 整数
b = 3.14 ; 浮点数
c = "Hello" ; 字符串
d = list(1 2 3) ; 列表
e = make_table("data") ; 哈希表
- 动态类型:变量无需声明类型
- 特殊值:
t表示真,nil表示假 - 列表操作:
car取首元素,cdr取剩余元素
2. 控制结构
; 条件判断
when(a > 10
println("大于 10")
)
; 循环结构
for(i 1 10
printf("当前值:%d\n" i)
)
; 异常处理
errset(axlDBOpenDesign(nil t)
println("设计文件打开成功")
)
3. 函数定义
procedure(addNumbers(a b)
prog((sum)
sum = a + b
return(sum)
)
)
procedure定义函数prog用于局部变量声明- 最后一个表达式的值作为返回值
实战案例精讲
案例 1:元件批量重命名
/*
* 功能:按指定前缀 + 序号重命名所有元件
* 参数:prefix- 新名称前缀
*/
procedure(renameComponents(prefix)
prog((comp count)
count = 1
foreach(comp axlDBGetDesign()->components
axlRenameComp(comp
sprintf(nil "%s%d" prefix count))
count++
)
axlUIWPrint(nil "已完成 %d 个元件重命名" count-1)
)
)
关键 API 说明:
– axlDBGetDesign: 获取当前设计对象
– axlRenameComp: 重命名元件
– axlUIWPrint: 在 Allegro 命令行输出信息
案例 2:设计规则检查自动化
procedure(autoDRC()
prog((violations)
; 执行所有 DRC 检查
axlDrcCheckAll()
; 获取违规列表
violations = axlGetViolations()
; 生成报告文件
with(outfile "drc_report.txt" "w"
fprintf(outfile "发现 %d 个 DRC 违规 \n\n" length(violations))
foreach(v violations
fprintf(outfile "类型:%s\n 位置:%L\n\n"
v->type v->xy)
)
)
)
)
异常处理:
– 添加 errset 包裹关键操作
– 检查文件写入权限
案例 3:BOM 报表自动生成
procedure(generateBOM()
prog((comps outfile)
; 按参考编号排序元件
comps = sort(axlDBGetDesign()->components
'lesspByRefdes)
; 创建 CSV 文件
outfile = outfile("bom.csv" "w")
fprintf(outfile "RefDes,Value,Footprint\n")
; 写入元件数据
foreach(c comps
fprintf(outfile "%s,%s,%s\n"
c->refdes c->compValue c->footprint)
)
close(outfile)
)
)
优化技巧:
– 使用 sort 提高查找效率
– 流式写入避免内存溢出
避坑指南
常见语法错误
- 括号不匹配:SKILL 使用 Lisp 风格语法,每个左括号必须对应右括号
- 变量作用域 :
prog中声明的变量才是局部的 - 字符串比较 :使用
equal而非==比较字符串
性能优化
- 批量操作:尽量使用
axlDBGetDesign一次获取所有数据 - 缓存重用:重复使用的数据保存到变量
- 延迟更新:复杂操作前调用
axlVisibleUpdate(nil)暂停界面刷新
版本兼容
- API 差异:23.1 版本使用
axl前缀,旧版可能用db前缀 - 功能检测:使用
isCallable('axlNewFunction)判断 API 可用性
进阶思考方向
- 外部系统集成 :通过 SKILL 的
system函数调用外部程序,或使用 Socket 实现网络通信 - 复杂规则实现:将设计规则抽象为条件判断 + 几何运算的组合
- 用户界面扩展 :使用
axlFormCreate创建自定义对话框
学习建议
建议从简单脚本开始,逐步增加复杂度。Cadence 安装目录下的 skill 文件夹包含大量示例脚本,是极好的学习资源。遇到问题时,善用 Allegro 命令行中的 help 命令查询 API 文档。
正文完
发表至: 未分类
近两天内
