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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2059|回复: 10

[求助] SKILL 递归函数

[复制链接]
发表于 2023-4-14 10:54:20 | 显示全部楼层 |阅读模式

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

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

x
大佬们,想实现这么一个功能,打开某一个版图,将这个版图中所有的instances(包含instances里的instance)中的某一层缩小1um。
想用递归函数来实现,请问如下脚本怎么修改?谢谢。




procedure(ycRecursiveProject()
    prog((insts cv master)
        cv = geGetEditCellView()  
        insts = cv~>instances
        foreach(inst insts
            if(inst
                master = dbOpenCellViewByType( inst~>libName  inst~>cellName    inst~>viewName  nil  "a"  )
               ycRecursiveProject()
                );if
            );foreach
       ycLayerSize() ;另外一个脚本,已load.     
         dbSave(cv)
        ; dbClose(cv)
    );prog
); ycRecursiveProject


发表于 2023-4-14 16:27:37 | 显示全部楼层
我是通过inst 来判断的 但是也一堆error
发表于 2023-4-14 16:30:10 | 显示全部楼层


ljh065216 发表于 2023-4-14 16:27
我是通过inst 来判断的 但是也一堆error


file:///D:\qq文件\1716030041\Image\C2C\AAUBQJO0DNL46FCY_VAB]S9.png
发表于 2023-4-14 16:31:10 | 显示全部楼层
奇怪发布了
QQ图片20230414163027.png
发表于 2023-4-14 16:46:42 | 显示全部楼层
这个递归没有实现呀,一层一层调用之间并没有传递master参数。根源在于你开始调用这个函数之后,是用过图形界面上的geGetEditCellView()来获得cv的,这怎么行。要从层次结构的顶端开始,用dbOpenCellViewByType来获得,然后每一层往下调用的时候,需要把当前inst的master作为参数带入到递归函数中。
 楼主| 发表于 2023-4-17 16:53:43 | 显示全部楼层


amodaman 发表于 2023-4-14 16:46
这个递归没有实现呀,一层一层调用之间并没有传递master参数。根源在于你开始调用这个函数之后,是用过图形 ...


大佬 ,帮忙看看 这样可以吗? 执行起来好像还是不行,能帮忙修改一下吗,多谢。


procedure(ycRecursiveProject(@optional cv(geGetEditCellView()))
    prog((insts  master)
      ;  cv = geGetEditCellView()  
        insts = cv~>instances
        foreach(inst insts
            if(inst  then
                master = dbOpenCellViewByType( inst~>libName  inst~>cellName    inst~>viewName  nil  "a"  )
               ycRecursiveProject(master)
                );if
            );foreach
       ycLayerSize()   ;另外一个脚本,已load.     
         dbSave(cv)
        ; dbClose(cv)
    );prog
); ycRecursiveProject

发表于 2023-4-17 17:06:25 | 显示全部楼层
大致可以,不过你函数头里面 optional的 cv的括号是不是位置不对?应该是 ( cv geGetEditCellView() )这样吧,这是lisp语言的句式形式
 楼主| 发表于 2023-4-27 15:57:17 | 显示全部楼层


amodaman 发表于 2023-4-17 17:06
大致可以,不过你函数头里面 optional的 cv的括号是不是位置不对?应该是 ( cv geGetEditCellView() )这样 ...


但load时报错呢,能帮忙看看哪里有错误吗? 谢谢

procedure:formal argument must be a symbol
发表于 2023-4-27 17:29:09 | 显示全部楼层


policectsu 发表于 2023-4-27 15:57
但load时报错呢,能帮忙看看哪里有错误吗? 谢谢

procedure:formal argument must be a symbol


不是说了你调用参数的时候,optional 后面的语法写错了吗?
 楼主| 发表于 2023-6-12 16:54:06 | 显示全部楼层


amodaman 发表于 2023-4-27 17:29
不是说了你调用参数的时候,optional 后面的语法写错了吗?


这样我运行好像没啥问题了,给大佬帮忙看看:


procedure(RecursiveProject(@optional cv(geGetEditCellView()))
prog((insts master shapes masters)
if(boundp('masters) == nil then
masters = nil
else
masters
);

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shapes =cv~>shapes
if(shapes then      
foreach(shape shapes
if(shape~>layerName == "EC"  then
shape~>layerName = "BV"
);if
);foreach
);if
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
masters = append1(masters cv)

insts = cv~>instances
if( insts then
foreach(inst insts
master = dbOpenCellViewByType(inst~>libName inst~>cellName "layout"  "maskLayout" "a" )
RecursiveProject(master)
);foreach_inst
);if
         
);prog
);RecursiveProject

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

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-8 07:39 , Processed in 0.028264 second(s), 7 queries , Gzip On, Redis On.

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