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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: FOREVER10

[其它] 调节metal 线宽和via个数的skill脚本(virtuoso)

[复制链接]
发表于 2024-1-9 17:13:55 | 显示全部楼层


FOREVER10 发表于 2024-1-9 17:06
不是,就是你这个脚本存放的路径 即可。


嗯嗯,感谢大佬
发表于 2024-1-14 09:07:57 | 显示全部楼层
謝謝,ˋ有點可惜被加密了~
发表于 2024-1-16 16:51:38 | 显示全部楼层
这快捷键不容易冲突,好用
 楼主| 发表于 2024-2-28 14:13:13 | 显示全部楼层


785449525 发表于 2024-1-16 16:51
这快捷键不容易冲突,好用


是的,而且 +- 这个也很直观
发表于 2024-7-30 22:26:52 | 显示全部楼层


ljh065216 发表于 2023-8-2 09:21
是否可以不加密,方便改快捷键


(procedure((TMYpathadderrinf)
        hiDisplayAppDBox(?name
            gensym('GridlogBox) ?dboxBanner "Check Your Selection" ?dboxText
            patherr ?dialogType hicWarningDialog ?dialogStyle
            'modal
            ?buttonLayout
            'Close
        )
    )
)(procedure((TMCpathwidthtoggleminus)
        (TMCREADONLY)
        let((cv geseltype pthresul pthsegresul selgroupID
                newpath
            )
            geSelObjectsPartiallySelected()
            (cv = geGetEditCellView())
            if((ref == nil) then
                sprintf(patherr "No object is selected.")
                (TMYpathadderrinf) else
                (geseltype = (ref~>objType))
                (pthresul = setof(xx geseltype
                        (xx != "path")
                    ))
                if((pthresul == nil) then
                    cond(((car(geseltype) == "path")
                            let((pthlaynmlst pthpurposelst pthpointslst pthwidthlst pthnetnmlst
                                    pthpointslst pthlaynmlst newpath pthwidthlst x
                                    y z a
                                )
                                (pthlaynmlst = (ref~>layerName))
                                (pthpurposelst = (ref~>purpose))
                                (pthpointslst = (ref~>points))
                                (pthwidthlst = (ref~>width))
                                (pthnetnmlst = ((ref~>net)~>name))
                                (selgroupID = leGetEditFigGroup((getCurrentWindow)))
                                foreach((x y z a) pthpointslst pthlaynmlst ref pthwidthlst
                                    (newpath = dbCreatePath(cv
                                            list(y
                                                car(pthpurposelst)
                                            )
                                            car(list(x))
                                            (a - 0.01)
                                        ))
                                    geSelectObject(newpath)
                                    dbDeleteObject(z)
                                )
                                if((selgroupID != nil) then
                                    dbAddFigToFigGroup(selgroupID newpath)
                                    geSelectObject(newpath)
                                )
                                printf(" ")
                            )
                        )
                    ) else
                    sprintf(patherr "Warning: Only path could be selected, please check.")
                    (TMYpathadderrinf)
                )
            )
        )
    )
)(hiSetBindKey("Layout" "<Key>KP_Subtract" "TMCpathwidthtoggleminus()"))(
    procedure((TMYpathadderrinf)
        hiDisplayAppDBox(?name
            gensym('GridlogBox) ?dboxBanner "Check Your Selection" ?dboxText
            patherr ?dialogType hicWarningDialog ?dialogStyle
            'modal
            ?buttonLayout
            'Close
        )
    )
)(procedure((TMCpathwidthtoggleplus)
        (TMCREADONLY)
        let((cv geseltype pthresul pthsegresul selgroupID
                newpath
            )
            geSelObjectsPartiallySelected()
            (cv = geGetEditCellView())
            if((ref == nil) then
                sprintf(patherr "No object is selected.")
                (TMYpathadderrinf) else
                (geseltype = (ref~>objType))
                (pthresul = setof(xx geseltype
                        (xx != "path")
                    ))
                if((pthresul == nil) then
                    cond(((car(geseltype) == "path")
                            let((pthlaynmlst pthpurposelst pthpointslst pthwidthlst pthnetnmlst
                                    pthpointslst pthlaynmlst newpath pthwidthlst x
                                    y z a
                                )
                                (pthlaynmlst = (ref~>layerName))
                                (pthpurposelst = (ref~>purpose))
                                (pthpointslst = (ref~>points))
                                (pthwidthlst = (ref~>width))
                                (pthnetnmlst = ((ref~>net)~>name))
                                (selgroupID = leGetEditFigGroup((getCurrentWindow)))
                                foreach((x y z a) pthpointslst pthlaynmlst ref pthwidthlst
                                    (newpath = dbCreatePath(cv
                                            list(y
                                                car(pthpurposelst)
                                            )
                                            car(list(x))
                                            (a + 0.01)
                                        ))
                                    geSelectObject(newpath)
                                    dbDeleteObject(z)
                                )
                                if((selgroupID != nil) then
                                    dbAddFigToFigGroup(selgroupID newpath)
                                    geSelectObject(newpath)
                                )
                                printf(" ")
                            )
                        )
                    ) else
                    sprintf(patherr "Warning: Only path could be selected, please check.")
                    (TMYpathadderrinf)
                )
            )
        )
    )
)(hiSetBindKey("Layout" "<Key>KP_Add" "TMCpathwidthtoggleplus()"))(
    procedure((TMCREADONLY)
        let((cv cellname libname n20)
            if(((geGetEditCellView()~>mode) == "r") then
                (cv = geGetWindowCellView())
                (cellname = (cv~>cellName))
                (libname = (cv~>libName))
                sprintf(n20 "\nYou couldn't run this edit command becasue (  cell: %s   lib: %s  ) layout view is currentlly in read mode.\nRun the command agian after openning the cellview in edit mode.\nAny question, don't hesitate to contact Tomic.\n\n" cellname libname)
                printf(n20)
                hiDisplayAppDBox(?name
                    gensym('trReminderDialogBox) ?dboxBanner "Layout Read Only" ?dboxText
                    n20 ?dialogType hicErrorDialog ?dialogStyle
                    'modal
                    ?buttonLayout
                    'UserDefined ?buttons
                    '("Make Editable" "Close") ?callback
                    '("TMCToggleEditReadMode()" "")
                )
                break()
            )
        )
    )
)(procedure((TMCviaColRows ref deltaRow deltaCol \@optional
            (doVerbose nil) "dnng"
        )
        (TMCREADONLY)
        let((techId mid viaHead viaParams row
                col newVia
                (thefun "TMCviaColRow")
            )
            unless(((ref~>objType) == "stdVia")
                error("%s:ERR00: Please select a standard via\n" thefun)
            )
            when(member((ref~>orient)
                    list("R90" "R270" "MYR90" "MXR90")
                )
                (row = deltaRow)
                (deltaRow = deltaCol)
                (deltaCol = row)
                when(doVerbose
                    info("[%s] Rotated - row=%L ; col=%L\n" thefun deltaRow deltaCol)
                )
            )
            (techId = techGetTechFile((ref~>cellView)))
            (viaHead = (ref~>viaHeader))
            (mid = techFindViaDefByName(techId
                    (viaHead~>viaDefName)
                ))
            (row = max(1
                    (nth(3
                            ((viaHead~>viaDef)~>params)
                        ) + deltaRow)
                ))
            (col = max(1
                    (nth(4
                            ((viaHead~>viaDef)~>params)
                        ) + deltaCol)
                ))
            foreach(par
                (viaHead~>overrideParams)
                case(car(par)
                    ("cutRows"
                        (row = max(1
                                (cadr(par) + deltaRow)
                            ))
                        (viaParams = cons(list("cutRows" row) viaParams))
                        (row = nil)
                    )
                    ("cutColumns"
                        (col = max(1
                                (cadr(par) + deltaCol)
                            ))
                        (viaParams = cons(list("cutColumns" col) viaParams))
                        (col = nil)
                    )
                    (t
                        (viaParams = cons(par viaParams))
                    )
                )
            )
            when(row
                (viaParams = cons(list("cutRows" row) viaParams))
            )
            when(col
                (viaParams = cons(list("cutColumns" col) viaParams))
            )
            (newVia = dbCreateVia((ref~>cellView) mid
                    (ref~>xy)
                    (ref~>orient) viaParams
                ))
            if(dbobjectp(newVia) then
                dbDeleteObject(ref)
                geSelectObject(newVia) else
                error("%s:ERR01: Problem during via creation\n" thefun)
            )
            (selgroupID = leGetEditFigGroup((getCurrentWindow)))
            if((selgroupID == nil) then newVia else
                dbAddFigToFigGroup(selgroupID newVia)
                geSelectObject(newVia)
            )
        )
    )
)(procedure((TMCviaColRow viaList deltaRow deltaCol)
        let(nil
            (viaList = setof(via viaList
                    ((via~>objType) == "stdVia")
                ))
            foreach(via viaList
                (TMCviaColRows via deltaRow deltaCol)
            )
        )
    )
)(procedure((tmc_toggle_obj_minus)
        let((objsel viaone)
            (objsel = geGetSelSet())
            if((objsel == nil) then
                sprintf(patherr "Warning: No object is selected, please check.")
                (TMYpathadderrinf)
                printf("%s\n\n" patherr)
                else
                foreach(Object objsel
                    if((((Object~>objType) == "path") || ((Object~>objType) == "stdVia")) then
                        cond((((Object~>objType) == "path")
                                (ref = list(Object))
                                (TMCpathwidthtoggleminus)
                            )
                            (((Object~>objType) == "stdVia")
                                (viaone = list(Object))
                                (TMCviaColRow viaone 0 -1)
                            )
                        ) else
                        sprintf(patherr "Warning: Only path/via could be selected to toggle width/number, please check.")
                        (TMYpathadderrinf)
                        printf("%s\n\n" patherr)
                        break()
                    )
                )
                printf("\nMinus one number/grid.")
            )
        )
    )
)(hiSetBindKey("Layout" "<Key>-" "tmc_toggle_obj_minus()"))(
    procedure((tmc_toggle_obj_plus)
        let((objsel viaone)
            (objsel = geGetSelSet())
            if((objsel == nil) then
                sprintf(patherr "Warning: No object is selected, please check.")
                (TMYpathadderrinf)
                printf("%s\n\n" patherr)
                else
                foreach(Object objsel
                    if((((Object~>objType) == "path") || ((Object~>objType) == "stdVia")) then
                        cond((((Object~>objType) == "path")
                                (ref = list(Object))
                                (TMCpathwidthtoggleplus)
                            )
                            (((Object~>objType) == "stdVia")
                                (viaone = list(Object))
                                (TMCviaColRow viaone 0 1)
                            )
                        ) else
                        sprintf(patherr "Warning: Only path/via could be selected to toggle width/number, please check.")
                        (TMYpathadderrinf)
                        printf("%s\n\n" patherr)
                        break()
                    )
                )
                printf("\nPlus one number/grid.")
            )
        )
    )
)(hiSetBindKey("Layout" "<Key>=" "tmc_toggle_obj_plus()"))(
    procedure((TMCToggleEditReadMode)
        let((cellnm viewnm libnm lockinfo outinfo)
            if(((geGetEditCellView()~>mode) == "r") then
                (cellnm = (geGetEditCellView()~>cellName))
                (viewnm = (geGetEditCellView()~>viewName))
                (libnm = (geGetEditCellView()~>libName))
                (lockinfo = geGetLockInfo(libnm cellnm viewnm))
                if((lockinfo != "(no data on lock available)") then
                    sprintf(outinfo "%s/%s/%s is locked by %s." libnm cellnm viewnm
                        lockinfo
                    )
                    hiDisplayAppDBox(?name
                        gensym('GridlogBox) ?dboxBanner "Layout Locked" ?dboxText
                        outinfo ?dialogType hicWarningDialog ?dialogStyle
                        'modal
                        ?buttonLayout
                        'Close
                    )
                    printf(outinfo)
                )
            )
        )
        case((geGetEditCellView()~>mode)
            ("a"
                geChangeEditMode("r")
            )
            ("r"
                geChangeEditMode("a")
            )
        )
    )
)(hiSetBindKey("Layout" "Super<Key>e" "TMCToggleEditReadMode()"))(
    hiSetBindKey("Layout" "<Key>+" "TMCviaColRow( geGetSelSet()  1  0 )")
)(hiSetBindKey("Layout" "<Key>_" "TMCviaColRow( geGetSelSet() -1  0 )"))

发表于 2024-9-4 11:29:54 | 显示全部楼层


ICguineapig 发表于 2024-7-30 22:26
(procedure((TMYpathadderrinf)
        hiDisplayAppDBox(?name
            gensym('GridlogBox) ?dboxBanner "Chec ...


大佬你是解密出来的吗?我想看看pdk里面pcell怎么写的,这个也可以解密吗?
发表于 2024-9-7 15:55:41 | 显示全部楼层


ICguineapig 发表于 2024-7-30 22:26
(procedure((TMYpathadderrinf)
        hiDisplayAppDBox(?name
            gensym('GridlogBox) ?dboxBanner "Chec ...


load这个有问题
发表于 2024-10-15 13:36:52 | 显示全部楼层
thanks
发表于 2024-10-22 09:55:33 | 显示全部楼层
哥,我这边下载下来的内容全是乱码。请问是哪一步有问题吗?看不到代码
发表于 2024-10-22 10:12:10 | 显示全部楼层


ICguineapig 发表于 2024-7-30 22:26
(procedure((TMYpathadderrinf)
        hiDisplayAppDBox(?name
            gensym('GridlogBox) ?dboxBanner "Chec ...


哥,你这个有些是乱码吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 15:27 , Processed in 0.021737 second(s), 7 queries , Gzip On, Redis On.

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