背景
一直想有一个在Allegro中换层的skill,比如输入
l 1 2 3
,就显示1、2、3这三层。最近学了点基础的Skill语言,简单写了一个,基本能用。
软件:Cadence Allegro 16.6
切层skill代码
; change_layer.il
; 放在.brd同路径下,allegro中执行skill load("change_layer.il")后可以使用
; 切换线路层,例如,
;l 1 2 ; 1/2 两层,
;l 3 4 5 ; 3/4/5 三层
;l ;清空显示
axlCmdRegister( "l" 'showlayers);注册指令"l"
defun(showlayers (@rest args)
axlVisibleDesign(nil) ;清空显示
foreach(item args
layerNum = evalstring(item)
showlayer(layerNum)
);设置每一层的显示
axlVisibleUpdate(t)
)
defun(showlayer (layerNum)
allLayer = axlGetParam("paramLayerGroup:ETCH")->groupMembers
;axlVisibleDesign(nil)
layerName = nthelem(layerNum allLayer) ;layerName = nthelem(2 allLayer)
etchlayer = strcat("ETCH/" layerName)
axlVisibleLayer(etchlayer t)
when(axlDBGetLayerType(etchlayer) == "PLANE"
axlVisibleLayer( "ANTI ETCH/ALL" t )) ;如果是plane,额外显示anti etch/all层
axlVisibleLayer(strcat("PIN/" layerName) t)
axlVisibleLayer(strcat("VIA CLASS/" layerName) t)
axlVisibleLayer(strcat("BOUNDARY/" layerName) t)
axlVisibleLayer(strcat("DRC ERROR CLASS/" layerName) t)
axlVisibleLayer(strcat("route keepout/" layerName) t)
axlVisibleLayer(strcat("via keepout/" layerName) t)
axlVisibleLayer(strcat("CONSTRAINT REGION/" layerName) t)
axlVisibleLayer( "CONSTRAINT REGION/ALL" t )
axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t )
axlVisibleLayer( "route keepout/all" t )
axlVisibleLayer( "route keepin/all" t )
planlayer = strcat("PLAN/" layerName)
when(axlLayerGet(planlayer)
axlVisibleLayer( planlayer t ))
axlSetActiveLayer(strcat("ETCH/" layerName))
;axlVisibleUpdate(t)
)
使用skill
临时使用
放在和
.brd
设计文件同一个路径下,在下方控制台输入
skill load("change_layer.il")
,即可使用。
Command > skill load("change_layer.il")
t
Command > l 2 3
Command > l 3 4 5
效果:
自动加载
-
把
change_layer.il
复制到
x:\Cadence\SPB_16.6\share\local\pcb\skill
目录下。 -
新建一个
allegro.ilinit
如下:(当然,也可以复制一份目录下的
example.ilinit
,改名为
allegro.ilinit
,加载当前目录下的所有
.il
文件。)
;allegro.ilinit
;x:\Cadence\SPB_16.6\share\local\pcb\skill
load("change_layer.il")
-
allegro启动时会执行allegro.ilinit,加载
change_layer.il
最后
-
和直接在右侧visibility一栏鼠标点击切换相比,感觉好像没有更方便?
- 可能涉及不同的class时,会显得更加方便,见后文的参考资料中的其他skill。扩展一下当前这个skill,也可以切机械层、丝印层等等。
-
也可以保存成view,并使用鼠标切换
-
的确是这样,但是键盘操作也有一定好处。比如,把用过的切层指令复制,存在剪贴板助手中,
win+V
(或者是
Ditto
、
CopyQ
等等),或是绑定成快捷键,后面调用也挺方便。
-
的确是这样,但是键盘操作也有一定好处。比如,把用过的切层指令复制,存在剪贴板助手中,
备忘
-
函数名
showlayers
和参数的括号
(@rest args)
之间必须加空格,否则会报错,查了好久。-
defun(showlayers (@rest args)
-
E-
Error
defun: argument #1 should be a symbol (type template = “sgg”) – _Check_Refdes_main()
=>必須將_Check_Refdes_main()** 改為_Check_Refdes_main () ,
main
_與 ()_之間要空格
SKILL编程常见报错及解决办法(持续更新中……) – 编译调试 – Cadence Skill 论坛 – Powered by Discuz! (allegro-skill.com)
-
关于经常出现的
t
和
nil
,简单看,t可以表示true,nil表示false或empty:The true condition is represented by the special atom
t
or anything other than
nil
. -
axlCmdRegister( "l" 'showlayers)
-
有两个shell,启动Allegro时,默认是在
Allegro PCB Editor shell system
,而skill语句是在
SKILL-AXL
这个shell中执行的。执行
axlCmdRegister
,在注册skill函数,则输入
l
这个指令+对应参数,会传入
SKILL-AXL
处理。
-
有两个shell,启动Allegro时,默认是在
-
axlVisibleUpdate
等函数:主要是和显示层有关的函数,见
Allegro® User Guide: SKILL Reference
-
nthelem
、
foreach
、
@rest
等:skill语言的基本语法和函数,见
SKILL Language User Guide
-
nthelem(layerNum allLayer)
:从
allLayer
这个字符串list中取出第
layerNum
个字符串,即第
layerNum
层的层 -
(@rest args)
指示不定数量的参数。实现传入多个层号的效果。
-
上面这个skill的一些执行步骤记录:
-
skill
,进入
SKILL-AXL
这个shell;
exit
,退出。
Command > skill
Skill > allLayer = axlGetParam("paramLayerGroup:ETCH")->groupMembers
("TOP" "02_GND1" "03_SIG1" "04_GND2" "05_SIG2"
"06_GND3" "07_SIG3" "08_GND4" "09_PWR1" "10_PWR2"
"11_GND5" "12_SIG4" "13_GND6" "14_SIG5" "15_GND7"
"BOTTOM"
)
Skill > layerNum=3
3
Skill > layerName = nthelem(layerNum allLayer)
"03_SIG1"
Skill > etchlayer = strcat("ETCH/" layerName)
"ETCH/03_SIG1"
Skill > axlVisibleLayer(etchlayer t)
t
Skill > exit
t
Command >
参考资料
-
SKILL Language User Guide
:
X:\Cadence\SPB_16.6\doc\sklanguser
-
Allegro® User Guide: SKILL Reference
:
X:\Cadence\SPB_16.6\doc\algroskill
-
基于
【skill源码】键盘切层工具clayer – Layouto
修改而来,参考这个代码学习了一些基本语法和显示相关的函数,节省了不少时间。另外这个skill里面还有丝印层等指令。 -
Gtopen (awesomeopensource.com)
另外一些skill,有空可以再看看。 -
GitHub – hanun2999/cadence-skill
另外一些skill2,有空可以再看看。 -
自定义skill的存放目录:
Allegro PCB Skill Tutorial | Loading from file (referencedesigner.com)
-
用来展示的brd文件来源,KC705开发板,(登陆AMD账号后才能下载):
Xilinx Kintex-7 FPGA KC705 Evaluation Kit
版权声明:本文为qq_34181877原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。