Allegro Skill简介和换层skill(任意线路层)

背景

一直想有一个在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

效果:

自动加载

  1. change_layer.il复制到x:\Cadence\SPB_16.6\share\local\pcb\skill目录下。
  2. 新建一个allegro.ilinit如下:(当然,也可以复制一份目录下的example.ilinit,改名为allegro.ilinit,加载当前目录下的所有.il文件。)
;allegro.ilinit
;x:\Cadence\SPB_16.6\share\local\pcb\skill
load("change_layer.il")
  1. allegro启动时会执行allegro.ilinit,加载change_layer.il

最后

  1. 和直接在右侧visibility一栏鼠标点击切换相比,感觉好像没有更方便?
    1. 可能涉及不同的class时,会显得更加方便,见后文的参考资料中的其他skill。扩展一下当前这个skill,也可以切机械层、丝印层等等。
  2. 也可以保存成view,并使用鼠标切换
    1. 的确是这样,但是键盘操作也有一定好处。比如,把用过的切层指令复制,存在剪贴板助手中,win+V(或者是DittoCopyQ等等),或是绑定成快捷键,后面调用也挺方便。

备忘

  1. 函数名showlayers和参数的括号(@rest args)之间必须加空格,否则会报错,查了好久。
    1. 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)

  1. 关于经常出现的tnil,简单看,t可以表示true,nil表示false或empty:The true condition is represented by the special atom t or anything other than nil.
  2. axlCmdRegister( "l" 'showlayers)
    1. 有两个shell,启动Allegro时,默认是在Allegro PCB Editor shell system,而skill语句是在SKILL-AXL这个shell中执行的。执行axlCmdRegister,在注册skill函数,则输入l这个指令+对应参数,会传入SKILL-AXL处理。
  3. axlVisibleUpdate 等函数:主要是和显示层有关的函数,见Allegro® User Guide: SKILL Reference
  4. nthelemforeach@rest等:skill语言的基本语法和函数,见SKILL Language User Guide
    1. nthelem(layerNum allLayer):从allLayer这个字符串list中取出第layerNum个字符串,即第layerNum层的层
    2. (@rest args)指示不定数量的参数。实现传入多个层号的效果。

上面这个skill的一些执行步骤记录:

  1. 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 > 

参考资料

  1. SKILL Language User Guide: X:\Cadence\SPB_16.6\doc\sklanguser
  2. Allegro® User Guide: SKILL Reference: X:\Cadence\SPB_16.6\doc\algroskill
  3. 基于【skill源码】键盘切层工具clayer – Layouto修改而来,参考这个代码学习了一些基本语法和显示相关的函数,节省了不少时间。另外这个skill里面还有丝印层等指令。
  4. Gtopen (awesomeopensource.com) 另外一些skill,有空可以再看看。
  5. GitHub - hanun2999/cadence-skill另外一些skill2,有空可以再看看。
  6. 自定义skill的存放目录:Allegro PCB Skill Tutorial | Loading from file (referencedesigner.com)
  7. 用来展示的brd文件来源,KC705开发板,(登陆AMD账号后才能下载):Xilinx Kintex-7 FPGA KC705 Evaluation Kit
  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Allegro 是一个流行的游戏开发库,它提供了丰富的功能和工具来创建游戏应用程序。作为 Allegro 的一个重要组成部分,显示 skill(也称为 Sprite and Image Library,简称SIL)是用于处理图像和精灵的功能集合。 Allegro 的显示 skill 提供了一个高效、灵活和易于使用的方法来加载、显示和操作图像。它支持各种主流图像格式,包括常见的位图、矢量图等。开发者可以使用 skill 来加载游戏中的背景图、角色图像、特效和其他游戏元素,从而实现更生动和吸引人的游戏界面。 在 Allegro 的显示 skill 中,精灵是一种特殊类型的图像对象,它代表游戏中的角色或物体。对于游戏动画和交互来说,精灵是非常重要的。Skill 提供了精灵创建、移动、碰撞检测等功能,使开发者能够方便地操作和管理游戏中的角色和物体。 除了基本的图像和精灵功能之外,Allegro 的显示 skill 还提供了一些高级特性,例如图像的缩放、旋转和混合,以及精灵的动画序列和状态管理。这些功能可以帮助开发者轻松实现各种视觉效果和游戏元素的交互效果,让游戏更加精彩和逼真。 总之,Allegro 的显示 skill 为游戏开发者提供了丰富的功能和工具,使他们能够更容易地处理和管理图像和精灵。通过 skill开发者可以创建出精美绚丽的游戏界面,为玩家带来更好的游戏体验。无论是初学者还是有经验的开发者,都可以通过 Allegro 的 skill 获得更高效和高质量的游戏开发体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值