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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: sunxeu

[转贴] SKILL程序收集

[复制链接]
发表于 2020-5-13 19:32:54 | 显示全部楼层
就喜欢这种直接能看到的 谢谢
 楼主| 发表于 2020-8-14 12:01:37 | 显示全部楼层
鼠标滚轮直接修改 Via 的行数和列数skill脚本
http://bbs.eetop.cn/forum.php?mo ... amp;fromuid=1573268
(出处: EETOP 创芯网论坛 (原名:电子顶级开发网))
此处增加一个





  1. ;==========================================================================
  2. ;Function:         "Ctrl" or "Shift" + mouse wheel to modify the horizontal or vertical number of through holes (Via)
  3. ;Instructions:
  4. ;                1.In the CIW window, Load this il file
  5. ;                2.In the layout window, After selecting Via,
  6. ;                  Hold down "Ctrl" or "Shift" and slide the mouse wheel
  7. ;
  8. ;Note:                When selecting Via, you may accidentally select other devices.
  9. ;                This script only modifies Via parameters, not other device parameters.
  10. ;
  11. ;==========================================================================
  12. row = "row"
  13. col = "column"
  14. hiSetBindKey("Layout" "Shift<Btn4Down>" "NewVia(row  1)")
  15. hiSetBindKey("Layout" "Shift<Btn5Down>" "NewVia(row -1)")
  16. hiSetBindKey("Layout" "Ctrl<Btn4Down>"  "NewVia(col  1)")
  17. hiSetBindKey("Layout" "Ctrl<Btn5Down>"  "NewVia(col -1)")

  18. procedure(NewVia(dir num)       
  19.         instID = geGetSelSet()        ;get via ID list
  20.         viaID = setof(obj instID obj~>objType == "stdVia")
  21.         rotation = list("R90" "R270" "MYR90" "MXR90")
  22.         foreach(via viaID
  23.                 when(dir == "row"
  24.                         if(member(via~>orient rotation) == nil then        
  25.                                 org = via~>cutRows                       
  26.                                 via~>cutRows = apply('plus list(org num))
  27.                         else                                               
  28.                                 org = via~>cutColumns                       
  29.                                 via~>cutColumns = apply('plus list(org num))
  30.                         );end if
  31.                 );end when
  32.                 when(dir == "column"
  33.                         if(member(via~>orient rotation) == nil then
  34.                                 org = via~>cutColumns
  35.                                 via~>cutColumns = apply('plus list(org num))
  36.                         else
  37.                                 org = via~>cutRows
  38.                                 via~>cutRows = apply('plus list(org num))
  39.                         );end if
  40.                 );end when
  41.         );end foreach()
  42. );end procedure



复制代码

 楼主| 发表于 2020-8-17 17:21:43 | 显示全部楼层
本帖最后由 sunxeu 于 2021-10-4 14:51 编辑

这里再增加一个,可以使用Shift+上下左右键增加已有孔的数目,使用Ctrl+上下左右来减少已有孔的数目




  1. <div>UpAdd = "UpAdd"
  2. DownAdd = "DownAdd"
  3. LeftAdd = "LeftAdd"
  4. RightAdd = "RightAdd"
  5. UpMinus = "UpMinus"
  6. DownMinus = "DownMinus"
  7. LeftMinus = "LeftMinus"
  8. RightMinus = "RightMinus"
  9. hiSetBindKey("Layout" "Shift<Key>Up" "ChangeVia(UpAdd)")
  10. hiSetBindKey("Layout" "Shift<Key>Down" "ChangeVia(DownAdd)")
  11. hiSetBindKey("Layout" "Shift<Key>Left"  "ChangeVia(LeftAdd)")
  12. hiSetBindKey("Layout" "Shift<Key>Right"  "ChangeVia(RightAdd)")
  13. hiSetBindKey("Layout" "Ctrl<Key>Up" "ChangeVia(UpMinus)")
  14. hiSetBindKey("Layout" "Ctrl<Key>Down" "ChangeVia(DownMinus)")
  15. hiSetBindKey("Layout" "Ctrl<Key>Left"  "ChangeVia(LeftMinus)")
  16. hiSetBindKey("Layout" "Ctrl<Key>Right"  "ChangeVia(RightMinus)") </div><div> </div><div>procedure(ChangeVia(change)
  17.        instID = geGetSelSet()                                                     ;get via ID list
  18.        viaID = setof(obj instID obj~>objType == "stdVia")                         ;choose Via ID list
  19.        foreach(via viaID                                                          ;loop via IDlist
  20.                   ViaOrient = via~>orient                                            ;get via Rotation
  21.                   ViaRows = via~>cutRows                                             ;get via row number
  22.                   ViaColumns = via~>cutColumns                                       ;get via column number
  23.                   viaWidth = via ~> cutWidth
  24.                   viaRowSpace = cadr(via~>cutSpacing)
  25.                   viaColumnSpace = car(via~>cutSpacing)
  26.                   layer1 = dbGetViaLayer(via "layer1")                               ;get via layer1
  27. ;~~~~~~~~~~~~~~~~~TSMC 130nm BCD+ HV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  28.                   Cont = 0.2       ;Array 4X4
  29.                   Via12 = 0.29     ;Array 3X3
  30.                   Via34 = 0.54     ;Array 3X3
  31. ;~~~~~~~~~~~~~~~~~use UpAdd/DownAdd , judge the Rows number is equal to 2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  32.                   when(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  33.                        when(ViaRows==2 && ViaColumns>=3 && change=="UpAdd" && layer1=="METAL3"
  34.                             if(viaRowSpace < Via34
  35.                                dbMoveFig(via nil list(0:Via34-viaRowSpace "R0")))
  36.                                via~>cutSpacing = (viaColumnSpace:Via34)
  37.                            );end when
  38.                        when(ViaRows==2 && ViaColumns>=3 && change=="UpAdd" && layer1=="METAL2"
  39.                             if(viaRowSpace < Via12
  40.                                dbMoveFig(via nil list(0:Via12-viaRowSpace "R0")))
  41.                                via~>cutSpacing = (viaColumnSpace:Via12)
  42.                            );end when
  43.                        when(ViaRows==2 && ViaColumns>=3 && change=="UpAdd" && layer1=="METAL1"
  44.                             if(viaRowSpace < Via12
  45.                                dbMoveFig(via nil list(0:Via12-viaRowSpace "R0")))
  46.                                via~>cutSpacing = (viaColumnSpace:Via12)
  47.                            );end when
  48.                        when(ViaRows==2 && ViaColumns>=3 && change=="UpAdd" && layer1=="POLYG"
  49.                             if(viaRowSpace < Cont
  50.                                dbMoveFig(via nil list(0:Cont-viaRowSpace "R0")))
  51.                                via~>cutSpacing = (viaColumnSpace:Cont)
  52.                            );end when
  53. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  54.                        when(ViaRows==2 && ViaColumns>=3 && change=="DownAdd" && layer1=="METAL3"
  55.                             if(viaRowSpace < Via34
  56.                                dbMoveFig(via nil list(0:-Via34+viaRowSpace "R0")))
  57.                                via~>cutSpacing = (viaColumnSpace:Via34)
  58.                            );end when
  59.                        when(ViaRows==2 && ViaColumns>=3 && change=="DownAdd" && layer1=="METAL2"
  60.                             if(viaRowSpace < Via12
  61.                                dbMoveFig(via nil list(0:-Via12+viaRowSpace "R0")))
  62.                                via~>cutSpacing = (viaColumnSpace:Via12)
  63.                            );end when
  64.                        when(ViaRows==2 && ViaColumns>=3 && change=="DownAdd" && layer1=="METAL1"
  65.                             if(viaRowSpace < Via12
  66.                                dbMoveFig(via nil list(0:-Via12+viaRowSpace "R0")))
  67.                                via~>cutSpacing = (viaColumnSpace:Via12)
  68.                            );end when
  69.                        when(ViaRows==2 && ViaColumns>=3 && change=="DownAdd" && layer1=="POLYG"
  70.                             if(viaRowSpace < Cont
  71.                                dbMoveFig(via nil list(0:-Cont+viaRowSpace "R0")))
  72.                                via~>cutSpacing = (viaColumnSpace:Cont)
  73.                            );end when
  74. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  75.                        when(ViaRows>=3 && ViaColumns==2 && change=="LeftAdd" && layer1=="METAL3"
  76.                             if(viaRowSpace < Via34
  77.                                dbMoveFig(via nil list(-Via34+viaRowSpace:0 "R0")))
  78.                                via~>cutSpacing = (Via34:viaColumnSpace)
  79.                            );end when
  80.                        when(ViaRows>=3 && ViaColumns==2 && change=="LeftAdd" && layer1=="METAL2"
  81.                             if(viaRowSpace < Via12
  82.                                dbMoveFig(via nil list(-Via12+viaRowSpace:0 "R0")))
  83.                                via~>cutSpacing = (Via12:viaColumnSpace)
  84.                            );end when
  85.                        when(ViaRows>=3 && ViaColumns==2 && change=="LeftAdd" && layer1=="METAL1"
  86.                             if(viaRowSpace < Via12
  87.                                dbMoveFig(via nil list(-Via12+viaRowSpace:0 "R0")))
  88.                                via~>cutSpacing = (Via12:viaColumnSpace)
  89.                            );end when
  90.                        when(ViaRows>=3 && ViaColumns==2 && change=="LeftAdd" && layer1=="POLYG"
  91.                             if(viaRowSpace < Cont
  92.                                dbMoveFig(via nil list(-Cont+viaRowSpace:0 "R0")))
  93.                                via~>cutSpacing = (Cont:viaColumnSpace)
  94.                            );end when
  95. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  96.                        when(ViaRows>=3 && ViaColumns==2 && change=="RightAdd" && layer1=="METAL3"
  97.                             if(viaRowSpace < Via34
  98.                                dbMoveFig(via nil list(Via34-viaRowSpace:0 "R0")))
  99.                                via~>cutSpacing = (Via34:viaColumnSpace)
  100.                            );end when
  101.                        when(ViaRows>=3 && ViaColumns==2 && change=="Rightdd" && layer1=="METAL2"
  102.                             if(viaRowSpace < Via12
  103.                                dbMoveFig(via nil list(Via12-viaRowSpace:0 "R0")))
  104.                                via~>cutSpacing = (Via12:viaColumnSpace)
  105.                            );end when
  106.                        when(ViaRows>=3 && ViaColumns==2 && change=="RightAdd" && layer1=="METAL1"
  107.                             if(viaRowSpace < Via12
  108.                                dbMoveFig(via nil list(Via12-viaRowSpace:0 "R0")))
  109.                                via~>cutSpacing = (Via12:viaColumnSpace)
  110.                            );end when
  111.                        when(ViaRows>=3 && ViaColumns==2 && change=="RightAdd" && layer1=="POLYG"
  112.                             if(viaRowSpace < Cont
  113.                                dbMoveFig(via nil list(Cont-viaRowSpace:0 "R0")))
  114.                                via~>cutSpacing = (Cont:viaColumnSpace)
  115.                            );end when
  116.                       );end when
  117. ;~~~~~~~~~~~~~~~~~use LeftAdd/RightAdd,judge the Columns number is equal to 2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  118.                   when(ViaOrient=="R90"||ViaOrient=="R270"||ViaOrient=="MYR90"||ViaOrient=="MXR90"
  119.                        when(ViaRows>=3 && ViaColumns==2 && change=="UpAdd" && layer1=="METAL3"
  120.                             if(viaRowSpace < Via34
  121.                                dbMoveFig(via nil list(0:Via34-viaRowSpace "R0")))
  122.                                via~>cutSpacing = (Via34:viaColumnSpace)
  123.                            );end when
  124.                        when(ViaRows>=3 && ViaColumns==2 && change=="UpAdd" && layer1=="METAL2"
  125.                             if(viaRowSpace < Via12
  126.                                dbMoveFig(via nil list(0:Via12-viaRowSpace "R0")))
  127.                                via~>cutSpacing = (Via12:viaColumnSpace)
  128.                            );end when
  129.                        when(ViaRows>=3 && ViaColumns==2 && change=="UpAdd" && layer1=="METAL1"
  130.                             if(viaRowSpace < Via12
  131.                                dbMoveFig(via nil list(0:Via12-viaRowSpace "R0")))
  132.                                via~>cutSpacing = (Via12:viaColumnSpace)
  133.                            );end when
  134.                        when(ViaRows>=3 && ViaColumns==2 && change=="UpAdd" && layer1=="POLYG"
  135.                             if(viaRowSpace < Cont
  136.                                dbMoveFig(via nil list(0:Cont-viaRowSpace "R0")))
  137.                                via~>cutSpacing = (Cont:viaColumnSpace)
  138.                            );end when
  139. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  140.                        when(ViaRows>=3 && ViaColumns==2 && change=="DownAdd" && layer1=="METAL3"
  141.                             if(viaRowSpace < Via34
  142.                                dbMoveFig(via nil list(0:-Via34+viaRowSpace "R0")))
  143.                                via~>cutSpacing = (Via34:viaColumnSpace)
  144.                            );end when
  145.                        when(ViaRows>=3 && ViaColumns==2 && change=="DownAdd" && layer1=="METAL2"
  146.                             if(viaRowSpace < Via12
  147.                                dbMoveFig(via nil list(0:-Via12+viaRowSpace "R0")))
  148.                                via~>cutSpacing = (Via12:viaColumnSpace)
  149.                            );end when
  150.                        when(ViaRows>=3 && ViaColumns==2 && change=="DownAdd" && layer1=="METAL1"
  151.                             if(viaRowSpace < Via12
  152.                                dbMoveFig(via nil list(0:-Via12+viaRowSpace "R0")))
  153.                                via~>cutSpacing = (Via12:viaColumnSpace)
  154.                            );end when
  155.                        when(ViaRows>=3 && ViaColumns==2 && change=="DownAdd" && layer1=="POLYG"
  156.                             if(viaRowSpace < Cont
  157.                                dbMoveFig(via nil list(0:-Cont+viaRowSpace "R0")))
  158.                                via~>cutSpacing = (Cont:viaColumnSpace)
  159.                            );end when
  160. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  161.                        when(ViaRows==2 && ViaColumns>=3 && change=="LeftAdd" && layer1=="METAL3"
  162.                             if(viaRowSpace < Via34
  163.                                dbMoveFig(via nil list(-Via34+viaRowSpace:0 "R0")))
  164.                                via~>cutSpacing = (viaColumnSpace:Via34)
  165.                            );end when
  166.                        when(ViaRows==2 && ViaColumns>=3 && change=="LeftAdd" && layer1=="METAL2"
  167.                             if(viaRowSpace < Via12
  168.                                dbMoveFig(via nil list(-Via12+viaRowSpace:0 "R0")))
  169.                                via~>cutSpacing = (viaColumnSpace:Via12)
  170.                            );end when
  171.                        when(ViaRows==2 && ViaColumns>=3 && change=="LeftAdd" && layer1=="METAL1"
  172.                             if(viaRowSpace < Via12
  173.                                dbMoveFig(via nil list(-Via12+viaRowSpace:0 "R0")))
  174.                                via~>cutSpacing = (viaColumnSpace:Via12)
  175.                            );end when
  176.                        when(ViaRows==2 && ViaColumns>=3 && change=="LeftAdd" && layer1=="POLYG"
  177.                             if(viaRowSpace < Cont
  178.                                dbMoveFig(via nil list(-Cont+viaRowSpace:0 "R0")))
  179.                                via~>cutSpacing = (viaColumnSpace:Cont)
  180.                            );end when
  181. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  182.                        when(ViaRows==2 && ViaColumns>=3 && change=="RightAdd" && layer1=="METAL3"
  183.                             if(viaRowSpace < Via34
  184.                                dbMoveFig(via nil list(Via34-viaRowSpace:0 "R0")))
  185.                                via~>cutSpacing = (viaColumnSpace:Via34)
  186.                            );end when
  187.                        when(ViaRows==2 && ViaColumns>=3 && change=="Rightdd" && layer1=="METAL2"
  188.                             if(viaRowSpace < Via12
  189.                                dbMoveFig(via nil list(Via12-viaRowSpace:0 "R0")))
  190.                                via~>cutSpacing = (viaColumnSpace:Via12)
  191.                            );end when
  192.                        when(ViaRows==2 && ViaColumns>=3 && change=="RightAdd" && layer1=="METAL1"
  193.                             if(viaRowSpace < Via12
  194.                                dbMoveFig(via nil list(Via12-viaRowSpace:0 "R0")))
  195.                                via~>cutSpacing = (viaColumnSpace:Via12)
  196.                            );end when
  197.                        when(ViaRows==2 && ViaColumns>=3 && change=="RightAdd" && layer1=="POLYG"
  198.                             if(viaRowSpace < Cont
  199.                                dbMoveFig(via nil list(Cont-viaRowSpace:0 "R0")))
  200.                                via~>cutSpacing = (viaColumnSpace:Cont)
  201.                            );end when
  202.                       );end when
  203. ;~~~~~~~~~~~~~~~~~judge the distance of Via coordinate movement~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  204.                   if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  205.                      then if(change=="UpAdd"||change=="DownAdd"||change=="UpMinus"||change=="DownMinus"  
  206.                              then MoveDistance=(viaWidth/2) + (viaRowSpace/2)
  207.                              else MoveDistance=(viaWidth/2) + (viaColumnSpace/2)
  208.                             )
  209.                      else if(change=="UpAdd"||change=="DownAdd"||change=="UpMinus"||change=="DownMinus"  
  210.                              then MoveDistance=(viaWidth/2) + (viaColumnSpace/2)
  211.                              else MoveDistance=(viaWidth/2) + (viaRowSpace/2)
  212.                             )
  213.                     )
  214. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  215.             when(change=="UpAdd"
  216.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  217.                           then via~>cutRows = ViaRows+1
  218.                           else via~>cutColumns = ViaColumns+1);end if
  219.                           dbMoveFig(via nil list(0:MoveDistance "R0")))
  220.             when(change=="DownAdd"
  221.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  222.                           then via~>cutRows = ViaRows+1
  223.                           else via~>cutColumns = ViaColumns+1);end if
  224.                           dbMoveFig(via nil list(0:-MoveDistance "R0")))
  225.             when(change=="LeftAdd"
  226.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  227.                           then via~>cutColumns = ViaColumns+1
  228.                           else via~>cutRows = ViaRows+1);end if
  229.                           dbMoveFig(via nil list(-MoveDistance:0 "R0")))
  230.             when(change=="RightAdd"
  231.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  232.                           then via~>cutColumns = ViaColumns+1
  233.                           else via~>cutRows = ViaRows+1);end if
  234.                           dbMoveFig(via nil list(MoveDistance:0 "R0")))
  235.             when(change=="UpMinus"
  236.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  237.                           then via~>cutRows = ViaRows-1
  238.                           else via~>cutColumns = ViaColumns-1);end if
  239.                           dbMoveFig(via nil list(0:-MoveDistance "R0")))
  240.             when(change=="DownMinus"
  241.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  242.                           then via~>cutRows = ViaRows-1
  243.                           else via~>cutColumns = ViaColumns-1);end if
  244.                           dbMoveFig(via nil list(0:MoveDistance "R0")))
  245.             when(change=="LeftMinus"
  246.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  247.                           then via~>cutColumns = ViaColumns-1
  248.                           else via~>cutRows = ViaRows-1);end if
  249.                           dbMoveFig(via nil list(MoveDistance:0 "R0")))
  250.             when(change=="RightMinus"
  251.               if(ViaOrient=="R0"||ViaOrient=="R180"||ViaOrient=="MY"||ViaOrient=="MX"
  252.                           then via~>cutColumns = ViaColumns-1
  253.                           else via~>cutRows = ViaRows-1);end if
  254.                           dbMoveFig(via nil list(-MoveDistance:0 "R0")))
  255. );end foreach
  256. );end procedure
  257. </div>


复制代码
 楼主| 发表于 2020-8-18 11:55:17 | 显示全部楼层
更新一下给instance打gate via的skill





  1. procedure( create_gate()
  2.            let(( cv instList inst_fl inst_l inst_fw
  3.                  fingers tech viaDefId viaParams xy cutNum via
  4.                  x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
  5.                  PolyEncloseCOUD PolyEncloseCOLR MetalEncloseCOUD MetalEncloseCOLR COSpace
  6.                  PolyExtensionOD MetalWidth COCoreSpaceOD
  7.                  PolyEncloseMetal PolyWidth FingersPolySpace )
  8. ;~~~~~~~~~~~~~~TSMC 130nm BCD+ HV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  9.                PolyEncloseCOUD = 0.07         ;contact ~> poly enclosures contact top and down
  10.                PolyEncloseCOLR = 0.12         ;contact ~> poly enclosures contact left and right
  11.                MetalEncloseCOUD = 0.07        ;contact ~> metal1 enclosures contact top and down
  12.                MetalEncloseCOLR = 0.12        ;contact ~> metal1 enclosures contact left and right
  13.                COSpace = 0.2                  ;contact ~> space
  14.                PolyExtensionOD = 0.2          ;instance ~> poly extension diffusion
  15.                MetalWidth = 0.3               ;analog ~> metal1 width
  16.                COCoreSpaceOD = 0.41           
  17.                PolyEncloseMetal = 0.25        
  18.                PolyWidth = 0.36               
  19.                FingersPolySpace = 0.42        
  20.                Polybitch = 0.36               
  21. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  22.                cv = geGetEditCellView(getCurrentWindow())
  23.                tech = techGetTechFile(cv)
  24.                instList = geGetSelSet()
  25.                foreach(inst instList
  26.                        inst_fl = atof(car(last(inst~>prop~>l)));get instance l\
  27.                                 prop=information in properties\
  28.                                 atof is change to float   from Character string\
  29.                                 atoi is change to integer from Character string
  30.                        if( (inst_fl >= 100) then inst_fl = inst_fl / 1000 )
  31.                        inst_fw = atof(car(last(inst~>prop~>fw)));get instance fw
  32.                        fingers = atof(car(last(inst~>prop~>fingers)));get instance fingers
  33.                        inst_l = inst_fl * fingers + (fingers - 1) * FingersPolySpace
  34.                        xy = inst~>xy
  35.                        cutNum = int(((inst_l - (MetalWidth * 2)) / Polybitch))
  36.                        if( (cutNum <= 2)
  37.                           then cutNum = 2
  38.                           else cutNum = cutNum
  39.                          )
  40.                        viaDefId = techFindViaDefByName(tech "M1_PO")
  41.                        viaParams = list(list("cutSpacing" list(COSpace COSpace));cont via space
  42.                                         list("layer1Enc" list(PolyEncloseCOLR PolyEncloseCOUD));POLYG enclosures cont via
  43.                                         list("layer2Enc" list(MetalEncloseCOLR MetalEncloseCOUD));METAL1 enclosures cont via
  44.                                         list("cutRows" 1) list("cutColumns" cutNum));Row=1   Column=cutNum
  45. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  46.                        case(inst~>orient
  47.                            ("R0"
  48.                             x1 = car(xy)
  49.                             y1 = cadr(xy) + inst_fw + PolyExtensionOD
  50.                             x2 = x1 + inst_l
  51.                             y2 = y1 + PolyWidth
  52.                             x3 = x1 + inst_l/2
  53.                             y3 = cadr(xy) + inst_fw + COCoreSpaceOD
  54.                             x4 = x1 + PolyEncloseMetal
  55.                             y4 = y2 - MetalWidth
  56.                             x5 = x2 - PolyEncloseMetal
  57.                             y5 = y2
  58.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  59.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  60.                             dbCreateVia( cv viaDefId list(x3 y3) "R0" viaParams)
  61.                            );end "R0"
  62.                            ("R90"
  63.                             x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)
  64.                             y1 = cadr(xy)
  65.                             x2 = car(xy) - inst_fw - PolyExtensionOD
  66.                             y2 = y1 + inst_l
  67.                             x3 = x1 + (MetalWidth / 2)
  68.                             y3 = y1 + inst_l/2
  69.                             x4 = x1
  70.                             y4 = y1 + PolyEncloseMetal
  71.                             x5 = x1 + MetalWidth
  72.                             y5 = y2 - PolyEncloseMetal
  73.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  74.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  75.                             dbCreateVia( cv viaDefId list(x3 y3) "R90" viaParams)
  76.                            );end "R90"
  77.                            ("R180"
  78.                             x1 = car(xy) - inst_l
  79.                             y1 = cadr(xy) + PolyExtensionOD
  80.                             x2 = car(xy)
  81.                             y2 = cadr(xy) + (PolyExtensionOD + PolyWidth)
  82.                             x3 = x1 + inst_l/2
  83.                             y3 = cadr(xy) + COCoreSpaceOD
  84.                             x4 = x1 + PolyEncloseMetal
  85.                             y4 = y2 - MetalWidth
  86.                             x5 = x2 - PolyEncloseMetal
  87.                             y5 = y2
  88.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  89.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  90.                             dbCreateVia( cv viaDefId list(x3 y3) "R180" viaParams)
  91.                            );end "R180"
  92.                            ("R270"
  93.                             x1 = car(xy) - (PolyExtensionOD + PolyWidth)
  94.                             y1 = cadr(xy) - inst_l
  95.                             x2 = car(xy) - PolyExtensionOD
  96.                             y2 = cadr(xy)
  97.                             x3 = x1 + (MetalWidth / 2)
  98.                             y3 = y1 + inst_l/2
  99.                             x4 = x1
  100.                             y4 = y1 + PolyEncloseMetal
  101.                             x5 = x1 + MetalWidth
  102.                             y5 = y2 - PolyEncloseMetal
  103.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  104.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  105.                             dbCreateVia( cv viaDefId list(x3 y3) "R270" viaParams)
  106.                            );end "R270"
  107.                            ("MY"
  108.                             x1 = car(xy) - inst_l
  109.                             y1 = cadr(xy) + inst_fw + PolyExtensionOD
  110.                             x2 = car(xy)
  111.                             y2 = y1 + PolyWidth
  112.                             x3 = x1 + inst_l/2
  113.                             y3 = y1 + PolyExtensionOD + 0.01
  114.                             x4 = x1 + PolyEncloseMetal
  115.                             y4 = y2 - MetalWidth
  116.                             x5 = x2 - PolyEncloseMetal
  117.                             y5 = y2
  118.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  119.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  120.                             dbCreateVia( cv viaDefId list(x3 y3) "MY" viaParams)
  121.                            );end "MY"
  122.                            ("MYR90"
  123.                             x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)
  124.                             y1 = cadr(xy) - inst_l
  125.                             x2 = car(xy) - inst_fw - PolyExtensionOD
  126.                             y2 = cadr(xy)
  127.                             x3 = x1 + (MetalWidth / 2)
  128.                             y3 = y1 + inst_l/2
  129.                             x4 = x1
  130.                             y4 = y1 + PolyEncloseMetal
  131.                             x5 = x1 + MetalWidth
  132.                             y5 = y2 - PolyEncloseMetal
  133.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  134.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  135.                             dbCreateVia( cv viaDefId list(x3 y3) "MYR90" viaParams)
  136.                            );end "MYR90"
  137.                            ("MX"
  138.                             x1 = car(xy)
  139.                             y1 = cadr(xy) + PolyExtensionOD
  140.                             x2 = x1 + inst_l
  141.                             y2 = y1 + PolyWidth
  142.                             x3 = x1 + inst_l/2
  143.                             y3 = y1 + PolyExtensionOD + 0.01
  144.                             x4 = x1 + PolyEncloseMetal
  145.                             y4 = y2 - MetalWidth
  146.                             x5 = x2 - PolyEncloseMetal
  147.                             y5 = y2
  148.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  149.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  150.                             dbCreateVia( cv viaDefId list(x3 y3) "MX" viaParams)
  151.                            );end "MX"
  152.                            ("MXR90"
  153.                             x1 = car(xy) - (PolyExtensionOD + PolyWidth)
  154.                             y1 = cadr(xy)
  155.                             x2 = car(xy) - PolyExtensionOD
  156.                             y2 = cadr(xy)+ inst_l
  157.                             x3 = x1 + (MetalWidth / 2)
  158.                             y3 = y1 + inst_l/2
  159.                             x4 = x1
  160.                             y4 = y1 + PolyEncloseMetal
  161.                             x5 = x1 + MetalWidth
  162.                             y5 = y2 - PolyEncloseMetal
  163.                             dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
  164.                             dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
  165.                             dbCreateVia( cv viaDefId list(x3 y3) "MXR90" viaParams)
  166.                            );end "MXR90"
  167.                            );end case   
  168.                        );end foreach
  169.                );end let
  170. );end procedure
  171. hiSetBindKey("Layout" "<Key>7" "create_gate()" )



复制代码

点评

根据工艺不同,atof(car(last(inst~>prop~>fw))),其中inst~>prop~>fw可能是多个list嵌套,所以要自己细改一下,atof作用(atof("1u")=1)是提取参数(string)的float值   发表于 2023-7-25 10:02
同求 也是报atof的错误  发表于 2022-10-13 10:12
为啥atof 那个函数报错  发表于 2021-3-23 12:47
发表于 2020-8-19 19:38:54 来自手机 | 显示全部楼层
非常受用
 楼主| 发表于 2020-8-20 13:42:11 | 显示全部楼层


w2313190 发表于 2020-5-12 11:22
为什么我load会报错啊


不知道你现在load成功了吗?我换了个工艺后load也会出错,后来又调整了好久。


脚本是要根据所用工艺去微调的,比如不同工艺的金属一的名字就不一样的,有叫“METAL”还有叫“metal1”,这两个是不一样的。

还有的器件的属性“w”和“l”提取出来的数组,有可能最后一位不是我们需要的值,倒数第二位是我们所需的值,这个时候可以用 “nth()”和 “length()”这两个函数去调整,CreateGate这个函数用的是 “last()” 这个函数,提取的是数组最后一位的值。

发表于 2020-8-21 10:31:10 | 显示全部楼层


一抹曾经 发表于 2020-1-20 10:54
大哥去线头那个程序要报max:can’t handle max(nil nil)错误,有大佬解惑一下吗


我也遇到这个问题,我的解决方法是下面两步
(1)
pointsA=objectA~>points 改成 pointsA=list(objectA~>beginPt objectA~>endPt)


(2)
object_Heng~>points=list(car(pointsHeng) rplaca(cadr(pointsHeng) xHeng_new))
下面加上
object_Heng~>beginPt=car(object_Heng~>points)
object_Heng~>endPt=cadr(object_Heng~>points)
发表于 2020-8-25 15:50:14 | 显示全部楼层


一抹曾经 发表于 2020-1-20 10:54
大哥去线头那个程序要报max:can’t handle max(nil nil)错误,有大佬解惑一下吗


这个只能用Path线,不能用wrie。这两个线的属性不一样
发表于 2020-9-8 15:39:28 来自手机 | 显示全部楼层
谢谢分享
发表于 2020-9-8 15:43:49 来自手机 | 显示全部楼层


sunxeu 发表于 2020-8-20 13:42
不知道你现在load成功了吗?我换了个工艺后load也会出错,后来又调整了好久。




你好,请问打散的layout里,shapes的width和height怎么获取?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-5 15:50 , Processed in 0.023731 second(s), 5 queries , Gzip On, Redis On.

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