找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 844|回复: 5

[转帖] 鼠标滚轮直接修改 Via 的行数和列数skill脚本

[复制链接]

34

主题

8

回帖

210

积分

技术员

积分
210
发表于 2023-8-3 14:56:37 | 显示全部楼层 |阅读模式


  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


复制代码


EDA1024论坛免责声明
请勿上传侵权资料及软件! 如果发现资料侵权请及时联系,联系邮件: fenxin@fenchip.com QQ: 2322712906. 我们将在最短时间内删除。

34

主题

8

回帖

210

积分

技术员

积分
210
 楼主| 发表于 2023-8-3 14:57:20 | 显示全部楼层
再增加一个,可以使用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>

复制代码


34

主题

8

回帖

210

积分

技术员

积分
210
 楼主| 发表于 2023-8-3 14:58:08 | 显示全部楼层
更新一下给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()" )


复制代码


34

主题

8

回帖

210

积分

技术员

积分
210
 楼主| 发表于 2023-8-3 14:58:25 | 显示全部楼层
根据工艺不同,atof(car(last(inst~>prop~>fw))),其中inst~>prop~>fw可能是多个list嵌套,所以要自己细改一下,atof作用(atof("1u")=1)是提取参数(string)的float值

34

主题

8

回帖

210

积分

技术员

积分
210
 楼主| 发表于 2023-8-3 14:58:49 | 显示全部楼层


  1. procedure(CreateCrossRuler()
  2.           let( ( windowID enterpoint point cvID x y )
  3. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.                cvID = geGetEditCellView(getCurrentWindow());geGetWindowCellView()
  5.                windowID = getCurrentWindow()
  6.                enterpoint = enterPoint()
  7.                x = car(enterpoint)
  8.                y = cadr(enterpoint)
  9.                point = geWindowToEditPoint(windowID x:y)
  10. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11.                dbCreateRuler(cvID list(point xCoord(point)+100:yCoord(point)))
  12.                dbCreateRuler(cvID list(point xCoord(point)-100:yCoord(point)))
  13.                dbCreateRuler(cvID list(point xCoord(point):yCoord(point)+100))
  14.                dbCreateRuler(cvID list(point xCoord(point):yCoord(point)-100))
  15.              ); end of let
  16. ); end procedure CreateCrossRuler
  17. hiSetBindKey("Layout" "<Key>6" "CreateCrossRuler()")


复制代码


36

主题

463

回帖

1038

积分

工程师助理

积分
1038
发表于 2023-12-30 13:51:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EDA1024技术论坛

GMT+8, 2024-10-6 15:28 , Processed in 0.043477 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表