EDA365电子论坛网

标题: 记录SKILL学习之旅 [打印本页]

作者: 萧萧雨下    时间: 2022-2-14 10:31
标题: 记录SKILL学习之旅
接触SKILL是2010的时候,历经这么多年,中间间有几次鼓起勇气说要啃一下SKILL,没人带,也一直不得入门,现在被push着,一定要把它啃下来,心理还是没有信心,所以在这里立个flag,时刻提醒自己,也想说出来,某种程度下会有被监督的感觉,虽然有难度,但只要坚持,应该可以的吧,哈,人不是说能做layout的,智商都要达到多少多少吗?那自认为还可以的layout智商应该更可以的吧,哈哈哈,勿喷,自测128,不高,但也够用了吧。我现在的初步行计划是:1 先搜集一些自认为实用的各种SKILL,整合在一起,然后研究下,最好能找到源码,啃啃。2 同步研读收集SKILL的基础函数 SKILL USER GUIDE
                                   3 上手写一些小程序练练手 4 最终目标是能做到自如开发自己想实现的各种功能。
哈,现在还在第一步阶段,一直以来在这件事上,三天打鱼,两天晒网的,如何能持之以恒?
开动 开动 开动
                                    




作者: db-_-    时间: 2022-2-14 11:13
加油。送你几个我自己刚入门级时写的程序给你玩玩

  1. ;;获取以D开头的器件,并打印出来。
  2. procedure(myGetCompName()
  3. prog(
  4. (myDesign myComponent item compName compNameList)
  5.         ;获取顶层设计ID并赋值给Design
  6.         myDesign = axlDBGetDesign()

  7.         ;获取设计中的所有器件
  8.         myComponent = myDesign->components

  9.         ;遍历所有器件
  10.         foreach(item myComponent
  11.                 ;获取器件的名称
  12.                 compName = item->name
  13.                 ;当器件名满足条件
  14.                 if(rexMatchp("^D[0-9]+$" upperCase(compName)) then
  15.                         compNameList = cons(compName compNameList)
  16.                 )
  17.         )

  18.         ;翻转所有元素
  19.         compNameList = reverse(compNameList)
  20.        
  21.         ;控制台打印所有元素
  22.         foreach(item compNameList
  23.                 printf("位号:%L,器件名:%L" item->name item->??)
  24.         )
  25.        
  26.         return(compNameList)
  27. ))
复制代码

  1. ;;v1.0 初稿
  2. axlCmdRegister("laytop" 'dbSetTopLayer ?cmdType "general")
  3. axlCmdRegister("laybtm" 'dbSetBtmLayer ?cmdType "general")
  4. ;;---------------------------------------------------------
  5. ;;set_layer_visible.il
  6. ;;指令:laytop 和 laybtm
  7. ;;功能:只显示TOP层或者BOTTOM层
  8. ;;描述:v1.0
  9. ;;  可自行修改代码中的CLASS/SUBCLASS
  10. ;;  15.2未测试
  11. ;;---------------------------------------------------------               
  12.                
  13. procedure(dbSetTopLayer()
  14. (let ()
  15.         ;;清空所有层
  16.         axlVisibleDesign(nil)

  17.         ;;设置层可见
  18.         axlVisibleLayer("via class/soldermask_top" t)
  19.         axlVisibleLayer("pin/top" t)
  20.         axlVisibleLayer("via class/top" t)
  21.         axlVisibleLayer("drc error class/top" t)
  22.         axlVisibleLayer("etch/top" t)
  23.         ;;设置层可见
  24.         axlVisibleLayer("board geometry/soldermask_top" t)
  25.         axlVisibleLayer("board geometry/silkscreen_top" t)
  26.         axlVisibleLayer("board geometry/outline" t)
  27.         axlVisibleLayer("board geometry/design_outline" t)
  28.         axlVisibleLayer("package geometry/silkscreen_top" t)
  29.         axlVisibleLayer("package geometry/soldermask_top" t)
  30.         ;;生效
  31.         axlVisibleUpdate(nil)
  32. ))

  33. procedure(dbSetBtmLayer()
  34. (let ()
  35.         ;;清空所有层
  36.         axlVisibleDesign(nil)

  37.         ;;设置层可见
  38.         axlVisibleLayer("via class/soldermask_bottom" t)
  39.         axlVisibleLayer("pin/bottom" t)
  40.         axlVisibleLayer("via class/bottom" t)
  41.         axlVisibleLayer("drc error class/bottom" t)
  42.         axlVisibleLayer("etch/bottom" t)
  43.         ;;设置层可见
  44.         axlVisibleLayer("board geometry/soldermask_bottom" t)
  45.         axlVisibleLayer("board geometry/silkscreen_bottom" t)
  46.         axlVisibleLayer("board geometry/outline" t)
  47.         axlVisibleLayer("board geometry/design_outline" t)
  48.         axlVisibleLayer("package geometry/silkscreen_bottom" t)
  49.         axlVisibleLayer("package geometry/soldermask_bottom" t)
  50.         ;;生效
  51.         axlVisibleUpdate(nil)
  52. ))
复制代码


  1. ;;v1.2 添加注释
  2. ;;v1.1 整理结构
  3. ;;v1.0 初稿
  4. axlCmdRegister("nextlayer" 'dbNextLayer)
  5. axlCmdRegister("lastlayer" 'dbLastLayer)
  6. ;;---------------------------------------------------------
  7. ;;change_layer.il
  8. ;;指令:nextlayer 和 lastlayer
  9. ;;功能:从第一层开始,让所有的非地层轮流显示。
  10. ;;描述:v1.2
  11. ;;  系统默认的+和-是用来轮循当前激活层(Active Class and Subclass),可以改成这个。
  12. ;;  该命令不改变当前激活层,而是改变可见层。
  13. ;;  15.2未测试
  14. ;;---------------------------------------------------------

  15. temp_curLayer = nil        ;全局变量,

  16. procedure(dbNextLayer()
  17. (let ()
  18.         _dbSetLayerVisible("Next")
  19. ))

  20. procedure(dbLastLayer()
  21. (let ()
  22.         _dbSetLayerVisible("Last")
  23. ))

  24. ;;设置层显示
  25. procedure(_dbSetLayerVisible(direction)
  26. (let (item allLayers itemClass)

  27.         foreach(item axlSubclasses("etch")        ;获取etch class下的的所有subclass的字符串
  28.                 unless(index(item "GND")        ;把字符串不含GND的层先收集起来
  29.                         allLayers = cons(item allLayers)        ;收集
  30.                 )
  31.         )
  32.         allLayers = reverse(allLayers)        ;因为cons是在list开头增加,所有颠倒一下

  33.         when(allLayers
  34.                 temp_curLayer = _dbSearchLayer(allLayers direction)        ;获取下一个要显示的层
  35.                 axlVisibleDesign(nil)        ;关闭所有层显示
  36.                 foreach(itemClass '("pin" "via class" "drc error class" "etch")
  37.                         axlVisibleLayer(strcat(itemClass "/" temp_curLayer) t)        ;打开这些层
  38.                 )
  39.                 axlVisibleUpdate(nil)        ;刷新层显示
  40.         )
  41. ))

  42. ;;寻找下一个要显示的层
  43. procedure(_dbSearchLayer(allLayers direction)
  44. (let (curIndex nextIndex)
  45.        
  46.         if(temp_curLayer then
  47.                 curIndex = lindex(allLayers temp_curLayer)        ;计算当前层在所有层中的序号
  48.                 if(direction == "Next" then                ;如果是NEXT,序号就+1
  49.                         nextIndex = curIndex + 1
  50.                         when(nextIndex > length(allLayers)        ;当序号超出list的长度,自动恢复到list开头
  51.                                 nextIndex = 1
  52.                         )
  53.                 else
  54.                         nextIndex = curIndex - 1        ;如果是LAST,序号就-1
  55.                         when(nextIndex < 1
  56.                                 nextIndex = length(allLayers)        ;当序号小于1,自动恢复到list尾
  57.                         )
  58.                 )
  59.                 temp_curLayer = nthelem(nextIndex allLayers)        ;根据序号,计算下一个层的层名
  60.         else
  61.                 temp_curLayer = car(allLayers)        ;如果第一次运行,就显示第一层
  62.         )
  63.         temp_curLayer                ;运行的最后一行表示返回值。这一行写不写都行,if和else里面最后一行本来就返回temp_curLayer了。
  64. ))


  65.        
复制代码


作者: yuyang6222000    时间: 2022-2-15 09:37
好东西支持一下
作者: 萧萧雨下    时间: 2022-2-15 14:36
db-_- 发表于 2022-2-14 11:13
加油。送你几个我自己刚入门级时写的程序给你玩玩

谢谢了,刚载了Vincent Skill V1.6,很多功能很不错,在看,与EDA365的相互补充使用,已经能满足能多使用场景了。

作者: 敢敢    时间: 2022-3-10 11:40
萧萧雨下 发表于 2022-2-15 14:36
谢谢了,刚载了Vincent Skill V1.6,很多功能很不错,在看,与EDA365的相互补充使用,已经能满足能多使用 ...

你的Vincent Skill V1.6现在还能用吗,我的用不了了

作者: lvlj    时间: 2022-3-10 11:45
加油,我也是想学,奈何总没空,只能用现成的先对付,楼主学习心得可分享啊




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2