TCKG的个人空间 https://blog.eetop.cn/?1772499 [收藏] [复制] [分享] [RSS]

日志

create gate

已有 112 次阅读| 2025-8-7 14:36 |个人分类:常用脚本汇总|系统分类:芯片设计

procedure( create_gate() 

           let(( cv instList inst_fl inst_l inst_fw 

                 fingers tech viaDefId viaParams xy cutNum 

                 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 

                 PolyEncloseCT MetalEncloseCT CTSpace CTWidth 

                 PolyExtensionOD MetalWidth CTCoreSpaceOD 

                 PolyEncloseMetal PolyWidth FingersPolySpace )

               CTWidth = 0.22

               PolyEncloseCT = 0.1

               MetalEncloseCT = 0.1

               CTSpace = 0.3


               PolyExtensionOD = 0.22

               MetalWidth = 0.42

               CTCoreSpaceOD = 0.53

               PolyEncloseMetal = 0.25

               PolyWidth = 0.52

               FingersPolySpace = 0.54


               cv = geGetEditCellView(getCurrentWindow())

               tech = techGetTechFile(cv)

               instList = geGetSelSet()

               foreach(inst instList

                       inst_fl = atof(car(last(inst~>prop~>l)));get instance l\

                                prop=information in properties\

                                atof is change to float   from Character string\

                                atoi is change to integer from Character string

                       if( (inst_fl >= 100) then inst_fl = inst_fl / 1000 )

                       inst_fw = atof(car(last(inst~>prop~>fw)));get instance fw

                       fingers = atof(car(last(inst~>prop~>fingers)));get instance fingers

                       inst_l = inst_fl * fingers + (fingers - 1) * FingersPolySpace

                       xy = inst~>xy

                       cutNum = int(((inst_l - (MetalWidth * 2) ) / (CTSpace+CTWidth) ))

                       if( (cutNum <= 2) 

                          then cutNum = 2

                          else cutNum = cutNum 

                         )

                       viaDefId = techFindViaDefByName(tech "M1_GT")

                       viaParams = list(list("cutSpacing" list(CTSpace CTSpace));cont via space

                                        list("layer1Enc" list(PolyEncloseCT PolyEncloseCT));GTLYG enclosures cont via

                                        list("layer2Enc" list(MetalEncloseCT MetalEncloseCT));M1 enclosures cont via

                                        list("cutRows" 1) list("cutColumns" cutNum));Row=1   Column=cutNum

                       case(inst~>orient

                           ("R0"

                            x1 = car(xy)

                            y1 = cadr(xy) + inst_fw + PolyExtensionOD

                            x2 = x1 + inst_l

                            y2 = y1 + PolyWidth

                            x3 = x1 + inst_l/2

                            y3 = cadr(xy) + inst_fw + CTCoreSpaceOD

                            x4 = x1 + PolyEncloseMetal

                            y4 = y2 - MetalWidth

                            x5 = x2 - PolyEncloseMetal

                            y5 = y2

                            


                            

                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "R0" viaParams)

                           );end "R0"

                           ("R90"

                            x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)

                            y1 = cadr(xy)

                            x2 = car(xy) - inst_fw - PolyExtensionOD

                            y2 = y1 + inst_l

                            x3 = x1 + (MetalWidth / 2)

                            y3 = y1 + inst_l/2

                            x4 = x1 

                            y4 = y1 + PolyEncloseMetal

                            x5 = x1 + MetalWidth

                            y5 = y2 - PolyEncloseMetal



                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "R90" viaParams)

                           );end "R90"

                           ("R180"

                            x1 = car(xy) - inst_l

                            y1 = cadr(xy) + PolyExtensionOD

                            x2 = car(xy)

                            y2 = cadr(xy) + (PolyExtensionOD + PolyWidth)

                            x3 = x1 + inst_l/2

                            y3 = cadr(xy) + CTCoreSpaceOD

                            x4 = x1 + PolyEncloseMetal

                            y4 = y2 - MetalWidth

                            x5 = x2 - PolyEncloseMetal

                            y5 = y2

                            


                            

                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "R180" viaParams)

                           );end "R180"

                           ("R270"

                            x1 = car(xy) - (PolyExtensionOD + PolyWidth)

                            y1 = cadr(xy) - inst_l

                            x2 = car(xy) - PolyExtensionOD

                            y2 = cadr(xy)

                            x3 = x1 + (MetalWidth / 2)

                            y3 = y1 + inst_l/2

                            x4 = x1 

                            y4 = y1 + PolyEncloseMetal

                            x5 = x1 + MetalWidth

                            y5 = y2 - PolyEncloseMetal




                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "R270" viaParams)

                           );end "R270"

                           ("MY"

                            x1 = car(xy) - inst_l

                            y1 = cadr(xy) + inst_fw + PolyExtensionOD

                            x2 = car(xy)

                            y2 = y1 + PolyWidth

                            x3 = x1 + inst_l/2

                            y3 = y1 + PolyWidth - MetalWidth/2

                            x4 = x1 + PolyEncloseMetal

                            y4 = y2 - MetalWidth

                            x5 = x2 - PolyEncloseMetal

                            y5 = y2 




                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "MY" viaParams)

                           );end "MY"

                           ("MYR90"

                            x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)

                            y1 = cadr(xy) - inst_l

                            x2 = car(xy) - inst_fw - PolyExtensionOD

                            y2 = cadr(xy)

                            x3 = x1 + (MetalWidth / 2)

                            y3 = y1 + inst_l/2

                            x4 = x1

                            y4 = y1 + PolyEncloseMetal

                            x5 = x1 + MetalWidth

                            y5 = y2 - PolyEncloseMetal




                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "MYR90" viaParams)

                           );end "MYR90"

                           ("MX"

                            x1 = car(xy)

                            y1 = cadr(xy) + PolyExtensionOD

                            x2 = x1 + inst_l

                            y2 = y1 + PolyWidth

                            x3 = x1 + inst_l/2

                            y3 = y1 + PolyWidth - MetalWidth/2

                            x4 = x1 + PolyEncloseMetal

                            y4 = y2 - MetalWidth

                            x5 = x2 - PolyEncloseMetal

                            y5 = y2




                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "MX" viaParams)

                           );end "MX"

                           ("MXR90"

                            x1 = car(xy) - (PolyExtensionOD + PolyWidth)

                            y1 = cadr(xy) 

                            x2 = car(xy) - PolyExtensionOD

                            y2 = cadr(xy)+ inst_l

                            x3 = x1 + (MetalWidth / 2)

                            y3 = y1 + inst_l/2

                            x4 = x1

                            y4 = y1 + PolyEncloseMetal

                            x5 = x1 + MetalWidth

                            y5 = y2 - PolyEncloseMetal




                            dbCreateRect( cv list( "M1" "drawing" ) list(x4:y4 x5:y5))

                            dbCreateRect( cv list( "GT" "drawing" ) list(x1:y1 x2:y2))

                            dbCreateVia( cv viaDefId list(x3 y3) "MXR90" viaParams)

                           );end "MXR90"

                           );end case   

                       );end foreach

               );end let

);end procedure

hiSetBindKey("layout" "shift<Key>1" "create_gate()" )




点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 9

    关注
  • 0

    粉丝
  • 3

    好友
  • 0

    获赞
  • 0

    评论
  • 65

    访问数
关闭

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


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

GMT+8, 2025-8-9 19:09 , Processed in 0.012698 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部