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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 135|回复: 0

[资料] 分享几个版图用的skill小程序

[复制链接]
发表于 7 小时前 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 bingyue789 于 2025-12-30 11:39 编辑

分享几个版图用的skill小程序,大部分来自网络,小部分我做了精简,适合放到 .cdsinit 里面使用。
感谢 chinarml 着着着火了 pweo dcce liuliuliu66  level90 sunxeu luwang acrofoxAgain 等大神的帮助,还有一些可能没有找到名字的,也非常感谢!

第一个是米字尺,会先清除所有尺子,然后创建米字尺,如果不需要清除尺子。前面的procedure删掉就好了。
;;;<1>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

hiSetBindKey("Layout" "<Key>d" "ruler()")
procedure(ruler()
                leHiClearRuler() crossruler()
        )
procedure(crossruler()
        cv=geGetEditRep()
        vr=1000
        p0=enterPoint()
        p1=geWindowToEditPoint(hiGetCurrentWindow(),p0)
        px=xCoord(p1)
        py=yCoord(p1)
        dx=px+vr,dy=py+vr
        sx=px-vr,sy=py-vr
        leCreateRuler(cv list(px:py px:dy))
        leCreateRuler(cv list(px:py px:sy))
        leCreateRuler(cv list(px:py dx:py))
        leCreateRuler(cv list(px:py sx:py))
        leCreateRuler(cv list(px:py dx:dy))
        leCreateRuler(cv list(px:py sx:sy))
        leCreateRuler(cv list(px:py dx:sy))
        leCreateRuler(cv list(px:py sx:dy))
)

这个快捷换层是大神sunxeu 写的,把选中层换成LSW中选中的层次,非常好用
;;;<2>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKey("Layout" "<Key>@" "changeLayer2LSW()" )

procedure( changeLayer2LSW()
       let( ( ToMetal )
         ToMetal = leGetEntryLayer() ;;;;;;;;;;;;;;select LSW layer
         leReplace(geGetEditCellView(getCurrentWindow()) geGetSelSet() list(list("layer" nil list(car(ToMetal) cadr(ToMetal)))))
          );end let
     );end procedure

下面这个小程序的思路是一个快捷键对应一个固定的层次,只要我设置的足够多,我就可以不需要LSW.
下面的M1、M2、M3、GT是LayerName,需要根据工艺修改

;;;<2>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKeys( "Layout" list(
    list("<Key>["      "convertToLayer(\"M1\")")
    list("<Key>]"      "convertToLayer(\"M2\")")
    list("<Key>;"      "convertToLayer(\"M3\")")
    list("<Key>'"      "convertToLayer(\"GT\")")
)) ;; hiSetBindKeys

procedure(convertToLayer(layerN)
        cv = geGetEditCellView()
        selObjects = geGetSelectedSet(cv)
        for(i 0 length(selObjects)-1
            obj = nth(i, selObjects)
            obj~>layerName = layerN
            obj~>purpose = "drawing"
        );for
);convertToLayer

如果想用LayerNum,如下: 需要根据工艺修改。16是M1的layerNum ,17是M2的layerNum,18是M3的layerNum,9是GT的layerNum
;;;<2>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKeys( "Layout" list(
    list("<Key>["      "convertToLayer(layerN=16)")
    list("<Key>]"      "convertToLayer(layerN=17)")
    list("<Key>;"      "convertToLayer(layerN=18)")
    list("<Key>'"      "convertToLayer(layerN=9 )")
)) ;; hiSetBindKeys

procedure(convertToLayer(layerN)
        cv = geGetEditCellView()
        selObjects = geGetSelectedSet(cv)
        for(i 0 length(selObjects)-1
            obj = nth(i, selObjects)
            obj~>layerNum = layerN
            obj~>purpose = "drawing"    ;you can delete
        );for
);convertToLayer

这个是切换edit 和read only的快捷键,找不到哪位大神最先发表的了,
;;<3>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;hiSetBindKey("Layout" "<Key>F12" "changeMode())
foreach(xw list("Layout" "Schematics" "Symbol" "Command Interpreter") hiSetBindKey(xw "<Key>F12" "changeMode()"))
procedure(changeMode()
     let((cvId)
         cvId = geGetEditCellView()
        if(cvId~>mode=="a" then
             geChangeEditMode("r")
        else
             geChangeEditMode("a")


         )
     )
);changeMode

这个是另存并且替换,选中一个cell (不能是PDK),在Save As中输入新名字,可以完成另存并且替换。
感谢 pweo 大神的指导,这个程序虽小,搞了近一个月才搞定。
;;;<4>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKey("Layout" "<Key>F4" "SaveAsReplace()" )

procedure(SaveAsReplace()
        leHiEditInPlace()
        geSaveAs()
                backupLib  = geSaveAsForm->libName->value
                backupCell = geSaveAsForm->cellName->value
                backupView = geSaveAsForm->viewName->value
        leReturn()
        leReplaceAnyInstMaster(car(geGetSelectedSet()) backupLib backupCell backupView)
);SaveAsReplace

这个程序时根据chinarml 大神的AddMosM1.il 简化来的 ,可以给MOS添加Metal. M1_width = 0.24可修改
;;;<5>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKey("Layout" "<Key>!" "addMosM1()")
procedure(addMosM1()
        M1_width = 0.24
        cv = geGetEditCellView()
        objs = geGetSelSet()
foreach(obj objs
                transform = nil
        if(obj~>objType == "inst" then transform = list(obj~>transform));end if
        shapeList = obj ~>master~>shapes
        foreach(shape shapeList
                if(car(shape~>lpp) == "M1" && cadr(shape~>lpp) == "drawing"
                then    foreach(trans transform
                        metal1 = dbCopyFig(shape cv trans)
                        temp = leConvertPolygonToPath(metal1)
                        temp~>width = M1_width
                        );foreach
           );if
           );if
        );foreach
))
这个是把底层的 label copy到上一层的小程序,其实和上面那个是一样的,就是对象不同。现在是copy所有的 label.
;;;<6>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKey("Layout" "Shift<Key>l" "label2CurrentWindow()")

procedure(label2CurrentWindow()
        cv = geGetEditCellView()
        objs = geGetSelSet()
foreach(obj objs
                transform = nil
        if(obj~>objType == "inst" then transform = list(obj~>transform));end if
        shapeList = obj ~>master~>shapes
        foreach(shape shapeList
                if(shape ~> objType == "label"
;               then
;               if(nth(0 shape ~>lpp) == "MnTXT" || nth(0 shape ~>lpp) == "ALPATXT" || nth(1 shape ~>lpp) == "pin"
                then    foreach(trans transform
                        dbCopyFig(shape cv trans)
                        );foreach
;           );if
           );if
        );foreach
))

下面这个是把 polygon 和 rect 变成 path, 有三个,随便选一个用就好
感谢 liuliuliu66 acrofoxAgain 两位大神的指导
;;;<7>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hiSetBindKey("Layout" "Ctrl<key>e" "polygon2Path()")
procedure( polygon2Path()
        objs = geGetSelSet()
    foreach(obj objs
            if( obj~>objType == "polygon" || obj~>objType == "rect"
                then  leConvertPolygonToPath(obj));if
));pro
/*
hiSetBindKey("Layout" "Ctrl<key>e" "polygon2Path()")
procedure( polygon2Path()
        objs = geGetSelSet()
        for(i 0 length(objs)-1
            obj = nth(i, objs)
            if(obj~>objType == "polygon" || obj~>objType == "rect"
                then  leConvertPolygonToPath(obj));endif
        );for
);pro

hiSetBindKey("Layout" "Ctrl<key>e" "polygon2Path()")
procedure( polygon2Path()
        objs = geGetSelSet()
        objp = setof(obj objs obj~>objType == "polygon" || obj~>objType == "rect")
        for(i 0 length(objp)-1
            obj = nth(i, objp)
                leConvertPolygonToPath(obj));endfor
);pro
*/

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

手机版| 小黑屋| 关于我们| 联系我们| 用户协议&隐私声明| 版权投诉通道| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 ) |网站地图

GMT+8, 2025-12-30 19:09 , Processed in 0.012338 second(s), 3 queries , Gzip On, Redis On.

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