在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10444|回复: 24

[求助] SKILL

[复制链接]
发表于 2021-3-11 15:47:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
http://bbs.eetop.cn/forum.php?mod=viewthread&tid=878287&authorid=1696014&page=6
来自大佬的帖子。
load之后提示undefined function -ChangeLayer该怎么解决




  1. procedure(CtrlChangeLayer()
  2. let((cv objs layerList pinList viaList layerName pinName viaName)
  3. cv = geGetEditCellView()
  4. objs = geGetSelSet()
  5. layerList = list("M1" "M2" "M3" "M4" "M5" "M6" "M7" "TM1" "TM2" "ALPA")
  6. pinList = list('("MnTXT" "metal1") '("MnTXT" "metal2") '("MnTXT" "metal3") '("MnTXT" "metal4") '("MnTXT" "metal5") '("MnTXT" "metal6") '("MnTXT" "metal7") '("MnTXT" "topmetal1") '("MnTXT" "topmetal2") '("ALPATXT" "drawing"))
  7. viaList = list("M2_M1" "M3_M2" "M4_M3" "M5_M4" "M6_M5" "M7_M6")
  8. foreach(obj objs
  9. case(obj ~> objType
  10. ("path" || "rect" || "polygon" || "pathSeg"
  11. layerName = obj ~> layerName
  12. if(bb == 1 then
  13. obj ~> layerName = cadr(member(layerName layerList))
  14. println("+1")
  15. else
  16. obj ~> layerName = cadr(member(layerName reverse(layerList)))
  17. println("-1")
  18. );if
  19. )
  20. ("label"
  21. pinName = obj ~> lpp
  22. if(bb == 1 then
  23. obj ~> lpp = cadr(member(pinName pinList))
  24. println(obj~>lpp)
  25. else
  26. obj ~> lpp = cadr(member(pinName reverse(pinList)))
  27. println(obj~>lpp)
  28. );if
  29. );"label"
  30. ("stdVia"
  31. viaName = obj ~> viaHeader ~> viaDefName
  32. if(bb == 1 then
  33. viaName = cadr(member(viaName viaList))
  34. println("+1")
  35. else
  36. viaName = cadr(member(viaName reverse(viaList)))
  37. println("-1")
  38. );if
  39. CreateVia(obj viaName)
  40. );"stdVia"
  41. );case
  42. );foreach
  43. );let
  44. );proc


  45. procedure(CreateVia(obj viaName)
  46. let((cv tech viaDefId origin viaParams newVia)
  47. cv = geGetEditCellView()
  48. tech = techGetTechFile(cv)
  49. viaDefId = techFindViaDefByName(tech viaName)
  50. origin = obj ~> origin
  51. orient = obj ~> orient
  52. viaParams = list(
  53.         list("cutRows"        obj ~>cutRows)
  54.         list("cutColumns"        obj ~>cutColumns)
  55.         list("layer1Enc"        obj ~>layer1Enc)
  56.         list("layer2Enc"        obj ~>layer2Enc)
  57.         list("layer1Offset"        obj ~>layer1Offset)
  58.         list("layer2Offset"        obj ~>layer2Offset)
  59.         list("imp1Enc"        obj ~>imp1Enc)
  60.         list("imp2Enc"        obj ~>imp2Enc)
  61.         list("cutSpacing"        obj ~>cutSpacing)
  62.         list("originOffset"        obj ~>originOffset)
  63.         list("cutWidth"        obj ~>cutWidth)
  64.         list("cutHeight"        obj ~>cutHeight)
  65. );list
  66. newVia = dbCreateVia(cv viaDefId origin orient viaParams)
  67. geSelectObject(newVia)
  68. dbDeleteObject(obj)
  69. );let
  70. );proc

  71. hiSetBindKey("Layout" "Ctrl<Btn4Down>" "ChangeLayer(1)")
  72. hiSetBindKey("Layout" "Ctrl<Btn5Down>" "ChangeLayer(-1)")


复制代码


发表于 2021-3-11 16:05:29 | 显示全部楼层
你定义的函数名字ctrlChangeLayer。。。。但是你最后面用的是ChangeLayer。。你把名字弄成一样应该就可以了
 楼主| 发表于 2021-3-11 16:45:59 | 显示全部楼层


13728688465 发表于 2021-3-11 16:05
你定义的函数名字ctrlChangeLayer。。。。但是你最后面用的是ChangeLayer。。你把名字弄成一样应该就可以了 ...


试过了,也不行。SKILL调试窗口直接报ERROR ...CtrlChangeLayer takes at most 0 non-keyed argsCtrlChangeLayer 1)                                                                            CtrlChangeLayer takes at most 0 non-keyed argsCtrlChangeLayer -1)
快捷键使用的话CIW窗口提示error  CtrlChangeLayer :too many argument(0expected,1 given)
发表于 2021-3-12 09:36:59 | 显示全部楼层
把开头的CtrlChangeLayer改成ChangeLayer,后面的括号内加个bb
procedure(ChangeLayer( bb)
 楼主| 发表于 2021-3-12 10:49:24 | 显示全部楼层


annyzer 发表于 2021-3-12 09:36
把开头的CtrlChangeLayer改成ChangeLayer,后面的括号内加个bb
procedure(ChangeLayer( bb) ...


谢谢,果然可以了。但是后面又有个error techFindViaDefByName: argument #2 should be a string (type template = "dt")能帮忙看下吗?
发表于 2021-3-12 12:02:55 | 显示全部楼层


zhuxiaowu 发表于 2021-3-12 10:49
谢谢,果然可以了。但是后面又有个error techFindViaDefByName: argument #2 should be a string (type t ...


请问是否方便提供出错时的CIW报错截图?
发表于 2021-3-12 12:09:12 | 显示全部楼层
我明白了。脚本中定义的、layerList、pinList、viaList要根据你所适用的工艺做相应的修改。你所提供的这个脚本对via的定义只支持M1~M7,若使用的工艺金属层数大于7,就会产生你描述的错误信息。
发表于 2021-3-12 12:34:55 | 显示全部楼层


zhuxiaowu 发表于 2021-3-12 10:49
谢谢,果然可以了。但是后面又有个error techFindViaDefByName: argument #2 should be a string (type t ...


做了一些简单的修改,修改以后的脚本可以在大部分工艺下直接使用,极少数工艺不支持pin层修改。(极少数工艺tech文件中没有定义LabelLayers变量,无法得到有效的pinList)




  1. procedure( ChangeLayer( bb)
  2.         let((cv objs layerList pinList viaList layerName pinName viaName)
  3.                 cv = geGetEditCellView()
  4.                 objs = geGetSelSet()
  5.                 layerList = GetMetalLayersFromTech( cv)
  6.                 pinList = techGetStampLabelLayers( techGetTechFile(cv))

  7.                 viaList = techGetTechFile( cv)~>viaDefs~>name
  8.                 foreach(obj objs
  9.                                 case(obj ~> objType
  10.                                         ("path" || "rect" || "polygon" || "pathSeg"
  11.                                                 layerName = obj ~> layerName
  12.                                                 if(bb == 1 then
  13.                                                         obj ~> layerName = cadr(member(layerName layerList))
  14.                                                         println("+1")
  15.                                                 else
  16.                                                         obj ~> layerName = cadr(member(layerName reverse(layerList)))
  17.                                                         println("-1")
  18.                                                 );if
  19.                                         )
  20.                                 ("label"
  21.                                         when(pinList
  22.                                                 pinName = obj ~> lpp
  23.                                                 if(bb == 1 then
  24.                                                         obj ~> lpp = cadr(member(pinName pinList))
  25.                                                         println(obj~>lpp)
  26.                                                 else
  27.                                                         obj ~> lpp = cadr(member(pinName reverse(pinList)))
  28.                                                         println(obj~>lpp)
  29.                                                 );if
  30.                                         )
  31.                                 );"label"
  32.                                 ("stdVia"
  33.                                         viaName = obj ~> viaHeader ~> viaDefName
  34.                                         if(bb == 1 then
  35.                                                 viaName = cadr(member(viaName viaList))
  36.                                                 println("+1")
  37.                                         else
  38.                                                 viaName = cadr(member(viaName reverse(viaList)))
  39.                                                 println("-1")
  40.                                         );if
  41.                                         CreateVia(obj viaName)
  42.                                 );"stdVia"
  43.                         );case
  44.                 );foreach
  45.         );let
  46. );proc

  47. procedure( GetMetalLayersFromTech( cellview)
  48.         let( ( MetalLayerName)
  49.                 foreach( ViaLayer techGetViaLayers( techGetTechFile( ddGetObj( cellview~>libName)))
  50.                         MetalLayerName = append1( MetalLayerName car( ViaLayer))
  51.                         MetalLayerName = append1( MetalLayerName car( last( ViaLayer)))
  52.                 )
  53.                 ;MetalLayerName = artUnique( MetalLayerName)
  54.                 MetalLayerName = setof( x artUnique( MetalLayerName) rexMatchp( "^M" x))
  55.                 MetalLayerName = sort( MetalLayerName nil)
  56.                 MetalLayerName
  57.         )
  58. )


  59. procedure(CreateVia(obj viaName)
  60.         let((cv tech viaDefId origin viaParams newVia)
  61.                 cv = geGetEditCellView()
  62.                 tech = techGetTechFile(cv)
  63.                 viaDefId = techFindViaDefByName(tech viaName)
  64.                 origin = obj ~> origin
  65.                 orient = obj ~> orient
  66.                 viaParams = list(
  67.                         list("cutRows"        obj ~>cutRows)
  68.                         list("cutColumns"        obj ~>cutColumns)
  69.                         list("layer1Enc"        obj ~>layer1Enc)
  70.                         list("layer2Enc"        obj ~>layer2Enc)
  71.                         list("layer1Offset"        obj ~>layer1Offset)
  72.                         list("layer2Offset"        obj ~>layer2Offset)
  73.                         list("imp1Enc"        obj ~>imp1Enc)
  74.                         list("imp2Enc"        obj ~>imp2Enc)
  75.                         list("cutSpacing"        obj ~>cutSpacing)
  76.                         list("originOffset"        obj ~>originOffset)
  77.                         list("cutWidth"        obj ~>cutWidth)
  78.                         list("cutHeight"        obj ~>cutHeight)
  79.                 );list
  80.                 newVia = dbCreateVia(cv viaDefId origin orient viaParams)
  81.                 geSelectObject(newVia)
  82.                 dbDeleteObject(obj)
  83.         );let
  84. );proc

  85. hiSetBindKey("layout" "Ctrl<Btn4Down>" "ChangeLayer(1)")
  86. hiSetBindKey("Layout" "Ctrl<Btn5Down>" "ChangeLayer(-1)")


复制代码


发表于 2021-3-12 12:39:15 | 显示全部楼层


annyzer 发表于 2021-3-12 12:34
做了一些简单的修改,修改以后的脚本可以在大部分工艺下直接使用,极少数工艺不支持pin层修改。(极少数 ...


此处@chinarml 原作者
 楼主| 发表于 2021-3-12 13:32:36 | 显示全部楼层


annyzer 发表于 2021-3-12 12:09
我明白了。脚本中定义的、layerList、pinList、viaList要根据你所适用的工艺做相应的修改。你所提供的这个 ...


谢谢!另外我使用的时候删掉了PIN那段,还有我用的是6层金属的TSMC工艺。使用的时候金属层能切换,但是VIA就出error
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 17:58 , Processed in 0.021819 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表