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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 514|回复: 22

[求助] 求一个另存并且替换的小程序

[复制链接]
发表于 2025-12-4 14:23:00 | 显示全部楼层 |阅读模式
悬赏100资产已解决
本帖最后由 bingyue789 于 2025-12-18 17:53 编辑

     virtuoso 版图设计中, 存在一个cell: inv1 ,现在我想另存为inv2,并且把当前的 inv1 替换为 inv2。希望一个小程序一步办到。谢谢!


hiSetBindKey("Layout" "<Key>#" "SaveAsReplace()" )

procedure(SaveAsReplace()
        backupSaveAs()  ReplaceIns()
)

procedure(backupSaveAs()
                Inst = car(geGetSelectedSet())
                origLib  = Inst~>libName
                origCell = Inst~>cellName
                origView = Inst~>viewName

        cvw = hdbOpen("origLib" "origCell" "origView" "r")
        hdbSaveAs(
        cvw
        backupLib
        backupCell
        origView
        nil     ; t cover nil nocover
)
)
procedure(ReplaceIns()
        cv = geGetEditCellView()
foreach(inst dbGetInsts(cv)
        leReplaceAnyInstMaster(
            Inst~>id
            backupLib
            backupCell
            inst~>viewName
        )
    )
)

*在这里怎么定义这两个库名和cell名:  backupLib , backupCell?


最佳答案

查看完整内容

我按照你的需求写了一个,设了快捷键Ctrl+3,你试试: procedure(copy_and_replace(t_lib t_cell) let((selID selName selLib cvID) selID=car(geGetSelectedSet()) selName=selID~>cellName selLib=selID~>libName cvID=dbOpenCellViewByType(selLib selName "layout" "" "r") if(dbCopyCellView(cvID t_lib t_cell "layout" nil nil nil) then leReplaceAnyInstMaster(selID t_lib t_cell "layout ...
发表于 2025-12-4 14:23:01 | 显示全部楼层
我按照你的需求写了一个,设了快捷键Ctrl+3,你试试:


procedure(copy_and_replace(t_lib t_cell)
                let((selID selName selLib cvID)
                                selID=car(geGetSelectedSet())
                                selName=selID~>cellName
                                selLib=selID~>libName
                                cvID=dbOpenCellViewByType(selLib selName "layout" "" "r")
                                if(dbCopyCellView(cvID t_lib t_cell "layout" nil nil nil)
                                                then leReplaceAnyInstMaster(selID t_lib t_cell "layout")
                                                );if
                                );let
                        );copy_and_replace
                       
procedure(copyForm()
                let((libList crlib crcell libList_ID cellnameID copyFormID)
                                libList=ddGetLibList()~>name
                                crlib=geGetEditCellView()~>libName
                                crcell=car(geGetSelectedSet())~>cellName
                                setq(libList_ID
                                                hiCreateCyclicField(
                                                                ?name 'Lib_list
                                                                ?prompt "Copy to lib :"
                                                                ?choices libList
                                                                ?value crlib
                                                                ?defValue crlib
                                                                ?keepHistory t
                                                                )
                                                );setq
                                setq(cellnameID
                                                hiCreateStringField(
                                                                ?name 'cell_name
                                                                ?prompt "New cell name :"
                                                                ?defValue crcell
                                                                )
                                                );setq
                                setq(copyrightID
                                                hiCreateLabel(
                                                                ?name 'copyright
                                                                ?labelText "CopyRight by zfy"
                                                                )
                                                );setq
                                setq(copyFormID
                                                hiCreateAppForm(
                                                                ?name 'copy_form
                                                                ?formTitle "Copy and Replace"
                                                                ?fields
                                                                                list(
                                                                                                list(libList_ID 0:20 200:30 100)
                                                                                                list(cellnameID 0:60 280:30 100)
                                                                                                list(copyrightID 150:100 200:30)
                                                                                                );
                                                                ?callback list("copyCB()")
                                                                )
                                                );setq
                                hiDisplayForm(copyFormID)
                                );let
                );copyForm

procedure(copyCB()
                let((t_lib t_cell)
                                t_lib=copy_form->Lib_list->value
                                t_cell=copy_form->cell_name->value
                                copy_and_replace(t_lib t_cell)
                                );let
                );copyCB

hiSetBindKey("Layout" "Ctrl<key>3" "copyForm()")

回复

使用道具 举报

 楼主| 发表于 2025-12-5 15:08:16 | 显示全部楼层
版图工作中,选中一个cell ---- inv1,一个程序把它另存为inv2,并且直接把选中的inv1替换为 inv2。
回复

使用道具 举报

发表于 2025-12-5 16:58:27 | 显示全部楼层


   
bingyue789 发表于 2025-12-5 15:08
版图工作中,选中一个cell ---- inv1,一个程序把它另存为inv2,并且直接把选中的inv1替换为 inv2。 ...


要操作的多吗?
回复

使用道具 举报

 楼主| 发表于 2025-12-6 09:19:52 | 显示全部楼层


   
luwang 发表于 2025-12-5 16:58
要操作的多吗?


我希望选中 inv1 ,然后弹出窗口输入,< inv2 >, 版图中选中的inv1变为 inv2,且库中 inv1 容然存在。这样就可以了,简单说就是 “另存并替换”。
回复

使用道具 举报

发表于 2025-12-8 09:07:34 | 显示全部楼层


   
bingyue789 发表于 2025-12-6 09:19
我希望选中 inv1 ,然后弹出窗口输入,< inv2 >, 版图中选中的inv1变为 inv2,且库中 inv1 容然存在。这 ...


明白呢,我的意思是你需要经常做这个操作吗,如果只是简单的用个几次感觉没必要,如果说可能几百次等等,我可以帮你整合一下之前写的,
回复

使用道具 举报

 楼主| 发表于 2025-12-8 11:29:50 | 显示全部楼层


   
luwang 发表于 2025-12-8 09:07
明白呢,我的意思是你需要经常做这个操作吗,如果只是简单的用个几次感觉没必要,如果说可能几百次等等, ...


这个经常用啊,比如我们做standcell,使用中一不小心就忘了替换,把原cell修改了,还要再改回去。所以一步到位就很重要。谢谢
回复

使用道具 举报

发表于 2025-12-8 14:17:50 | 显示全部楼层


   
bingyue789 发表于 2025-12-8 11:29
这个经常用啊,比如我们做standcell,使用中一不小心就忘了替换,把原cell修改了,还要再改回去。所以一 ...


可以的,我之前有写过类似的,你私信给我个联系方式,我回头整合一下给你
回复

使用道具 举报

 楼主| 发表于 2025-12-17 15:49:21 | 显示全部楼层
这个程序是否可以很简单?思路如下:
leHiEditInPlace()  ;进入选定的cell内部
geSaveAs()          ;另存
leReturn()            ;返回顶层
leRePlace()           ;替换当前选定的cell

有没有大神给组合一下?

回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
在定义这两个函数 backupSaveAs(),ReplaceIns() 的时候要把你需要的这两个参数写到参数列表里,调用的时候填上需要的lib名和cell名就可以了
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-25 14:58 , Processed in 0.024030 second(s), 4 queries , Gzip On, Redis On.

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