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

[转帖] 自动POLY和METAL1打孔:(快捷键7)

[复制链接]

34

主题

8

回帖

218

积分

技术员

积分
218
发表于 2023-8-3 14:55:16 | 显示全部楼层 |阅读模式
自动POLY和METAL1打孔:(快捷键7)(需要根据不同工艺尺寸修改数据)
(缺点:不能在Convert to Mosaic下使用)



  1. procedure( create_gate()
  2.            let(( cv instList inst_fl inst_l inst_fw
  3.                  fingers tech viaDefId viaParams xy cutNum
  4.                  x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
  5.                  PolyEncloseCO MetalEncloseCO COSpace
  6.                  PolyExtensionOD MetalWidth COCoreSpaceOD
  7.                  PolyEncloseMetal PolyWidth FingersPolySpace )

  8.                PolyEncloseCO = 0.07
  9.                MetalEncloseCO = 0.07
  10.                COSpace = PolyExtensionOD

  11.                PolyExtensionOD = 0.2
  12.                MetalWidth = 0.3
  13.                COCoreSpaceOD = 0.41
  14.                PolyEncloseMetal = 0.25
  15.                PolyWidth = 0.36
  16.                FingersPolySpace = 0.42

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

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

36

主题

464

回帖

1324

积分

工程师助理

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

本版积分规则

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

GMT+8, 2024-12-21 03:47 , Processed in 0.041812 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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