找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1491|回复: 11
打印 上一主题 下一主题

这里面有没有做ic版图的skill,谁会,请帮我看一个skill脚本错在哪里?(已解决)

[复制链接]

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
跳转到指定楼层
1#
发表于 2012-2-23 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
本帖最后由 kingzhaon 于 2012-2-27 13:16 编辑

求大家帮帮忙~~~我没查出来
procedure(p()      
enterBox(?prompts      
list("enter a Bbox")      
?doneProc "pointdonehw"      
)    ;enterBox end   
)    ;p() end   
      
      
procedure(pointdonehw(w done pts)      
if(done then      
xl=xCoord(lowerLeft(pts))      
yl=yCoord(lowerLeft(pts))      
xu=xCoord(upperRight(pts))      
yu=yCoord(upperRight(pts))      
)    ;if end   
)    ;pointdonehw  end
      
      
procedure(hw()      
geDeselectAllFig()      
xl=0      
yl=0      
xu=0      
yu=0        
list_m1=list()      
list_m2=list()      
list_m3=list()      
list_m4=list()      
list_top=list()      
list_bottom=list()      
contact_xl=0      
contact_yl=0      
contact_xu=0      
bottom=0      
top=0      
      
p()      
load("1");这里load的内容为{leHiYank()  addPoint(xl:yl)  addPoint(xu:yu)  leHiPaste()  addPoint(xl-1000:yl)}      
geDeselectAllFig()      
      
geSingleSelectBox(hiGetCurrentWindow() nil list(xl-1000:y1 xu-1000:yu))      
      
w=geGetSelectedSet()      
      
for(i 0 (length(w)-1)      
if((nth(i  w)~>layerName=="M1"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m1=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M2"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m2=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M3"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m3=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M4"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m4=nth(i  w)~>bBox      
)      
      
)      
      
if(list_m1!=nil then   
list_bottom=list_m1      
bottom=1      
  else if(list_m2!=nil then     
  list_bottom=list_m2     
  bottom=2     
   else if(list_m3!=nil then   
   list_bottom=list_m3   
   bottom=3   
      
   else printf("no bottom layer")   
    )   
   )   
  )     
      
      
if(list_m4!=nil then      
list_bottom=list_m1      
top=4      
  else if(list_m3!=nil then     
  list_bottom=list_m3     
  bottom=3     
   else if(list_m2!=nil then   
   list_bottom=list_m2   
   bottom=2   
      
   else printf("no top layer")   
    )   
   )   
  )     
      
if(      
caar(list_bottom)>caar(list_top)      
then      
contact_xl=caar(list_bottom)      
else      
contact_xl=caar(list_top)      
)      
      
if(      
caadr(list_bottom)>caadr(list_top)      
then      
contact_yl=caadr(list_bottom)      
else      
contact_yl=caadr(list_top)      
)      
      
if(      
cadar(list_bottom)>cadar(list_top)      
then      
contact_yl=cadar(list_bottom)      
else      
contact_yl=cadar(list_top)      
)      
      
if(      
cadadr(list_bottom)>cadadr(list_top)      
then      
contact_yl=cadadr(list_bottom)      
else      
contact_yl=cadadr(list_top)      
)      
      
      
xabs=abs(contact_xu-contact_xl)      
yabs=abs(contact_yu-contact_yl)      
      
x=xabs/2+xl      
y=yabs/2+yl      
      
rows=float(truncate((yabs-0.14+1e-6)/0.22)+1)      
cols=float(truncate((xabs-0.14+1e-6)/0.22)+1)      
      
for(i bottom+1 top      
if(i==2 then      
leCreatContact(geGetEditRep() "V2_M1" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==3 then      
leCreatContact(geGetEditRep() "V3_M2" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==4 then      
leCreatContact(geGetEditRep() "V4_M3" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
      
)      
      
leHiDelete()      
)      
      
hiSetBindKey(Layout" "Alt<key>p" "hw")
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
2#
 楼主| 发表于 2012-2-23 10:30 | 只看该作者
这个脚本是实现,4层金属自动打孔的功能,但是load之后却出来这样的错误信息:
*warning* Cancelling function exceeds nestability limit of 5
no bottom layer no top layer
*Error* greaterp: can't handle (nil > nil)

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
3#
 楼主| 发表于 2012-2-24 11:09 | 只看该作者
请大侠看到帮忙

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

4#
发表于 2012-2-24 12:51 | 只看该作者
kingzhaon 发表于 2012-2-23 10:30
这个脚本是实现,4层金属自动打孔的功能,但是load之后却出来这样的错误信息:
*warning* Cancelling func ...

代码不完整
w=geGetSelectedSet()      执行后面的操作要判断w是否为nil
list_top 无有效值
谁画出这天地 又画下我和你

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
5#
 楼主| 发表于 2012-2-24 15:45 | 只看该作者
我已经修改了一下,请帮我看看,谢谢

procedure(p()      
enterBox(?prompts      
list("enter a Bbox")      
?doneProc "pointdonehw"      
)    ;enterBox end   
)    ;p() end   
      
      
procedure(pointdonehw(w done pts)      
if(done then      
xl=xCoord(lowerLeft(pts))      
yl=yCoord(lowerLeft(pts))      
xu=xCoord(upperRight(pts))      
yu=yCoord(upperRight(pts))      
)    ;if end   
)    ;pointdonehw  end
      
      
procedure(hw()      
geDeselectAllFig()      
xl=0      
yl=0      
xu=0      
yu=0        
list_m1=list()      
list_m2=list()      
list_m3=list()      
list_m4=list()      
list_top=list()      
list_bottom=list()      
contact_xl=0      
contact_yl=0      
contact_xu=0      
bottom=0      
top=0      
      
p()      
load("1");这里load的内容为{leHiYank()  addPoint(xl:yl)  addPoint(xu:yu)  leHiPaste()  addPoint(xl-1000:yl)}      
geDeselectAllFig()      
      
geSingleSelectBox(hiGetCurrentWindow() nil list(xl-1000:y1 xu-1000:yu))      
      
w=geGetSelectedSet()      
      
for(i 0 (length(w)-1)      
if((nth(i  w)~>layerName=="M1"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m1=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M2"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m2=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M3"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m3=nth(i  w)~>bBox      
)      
      
if((nth(i  w)~>layerName=="M4"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m4=nth(i  w)~>bBox      
)      
      
)      
      
if(list_m1!=nil then   
list_bottom=list_m1      
bottom=1      
  else if(list_m2!=nil then     
  list_bottom=list_m2     
  bottom=2     
   else if(list_m3!=nil then   
   list_bottom=list_m3   
   bottom=3   
      
   else printf("no bottom layer")   
    )   
   )   
  )     
      
      
if(list_m4!=nil then      
list_top=list_m4      
top=4      
  else if(list_m3!=nil then     
  list_top=list_m3     
  top=3     
   else if(list_m2!=nil then   
   list_bottom=list_m2   
   top=2   
      
   else printf("no top layer")   
    )   
   )   
  )     
      
if(      
caar(list_bottom)>caar(list_top)      
then      
contact_xl=caar(list_bottom)      
else      
contact_xl=caar(list_top)      
)      
      
if(      
caadr(list_bottom)>caadr(list_top)      
then      
contact_xu=caadr(list_bottom)      
else      
contact_xu=caadr(list_top)      
)      
      
if(      
cadar(list_bottom)>cadar(list_top)      
then      
contact_yl=cadar(list_bottom)      
else      
contact_yl=cadar(list_top)      
)      
      
if(      
cadadr(list_bottom)>cadadr(list_top)      
then      
contact_yu=cadadr(list_bottom)      
else      
contact_yu=cadadr(list_top)      
)      
      
      
xabs=abs(contact_xu-contact_xl)      
yabs=abs(contact_yu-contact_yl)      
      
x=xabs/2+xl      
y=yabs/2+yl      
      
rows=float(truncate((yabs-0.14+1e-6)/0.22)+1)      
cols=float(truncate((xabs-0.14+1e-6)/0.22)+1)      
      
for(i bottom+1 top      
if(i==2 then      
leCreatContact(geGetEditRep() "V2_M1" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==3 then      
leCreatContact(geGetEditRep() "V3_M2" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==4 then      
leCreatContact(geGetEditRep() "V4_M3" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
      
)      
      
leHiDelete()      
)      
      
hiSetBindKey(Layout" "Alt<key>p" "hw")

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

6#
发表于 2012-2-24 16:08 | 只看该作者
kingzhaon 发表于 2012-2-24 15:45
我已经修改了一下,请帮我看看,谢谢

procedure(p()      

list_m1=list()      
....
括号应该是半角英文()
谁画出这天地 又画下我和你

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
7#
 楼主| 发表于 2012-2-24 16:21 | 只看该作者
deargds 发表于 2012-2-24 16:08
list_m1=list()      
....
括号应该是半角英文()

这个改好了,但是在执行后出现这样的错误
*Error* leCreateContact: shoul be an integer (type template = "dtltnnxxnnt") -4489.0
请你帮我看看我的数值取整哪里出问题了??

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

8#
发表于 2012-2-24 21:59 | 只看该作者
kingzhaon 发表于 2012-2-24 16:21
这个改好了,但是在执行后出现这样的错误
*Error* leCreateContact: shoul be an integer (type templat ...

这个程序应该是Cadance IC Layout环境中应用的,我没有leCreateContact这个函数的定义,不过根据错误提示应该是参数不匹配,rows cols应该为整数,
问题可能出在下面两句
  1. rows=float(truncate((yabs-0.14+1e-6)/0.22)+1)      
  2. cols=float(truncate((xabs-0.14+1e-6)/0.22)+1)   
复制代码
改为
  1. rows=round(truncate((yabs-0.14+1e-6)/0.22)+1)      
  2. cols=round(truncate((xabs-0.14+1e-6)/0.22)+1)     
复制代码
谁画出这天地 又画下我和你

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
9#
 楼主| 发表于 2012-2-27 09:06 | 只看该作者
deargds 发表于 2012-2-24 21:59
这个程序应该是Cadance IC Layout环境中应用的,我没有leCreateContact这个函数的定义,不过根据错误提示 ...

改了,但是还是不好用,难道是我的row和col值求错了?

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
10#
 楼主| 发表于 2012-2-27 09:15 | 只看该作者
我把row和col的值直接改成了1,但是还是出不来孔

1

主题

8

帖子

9

积分

初级新手(9)

Rank: 1

积分
9
11#
 楼主| 发表于 2012-2-27 11:19 | 只看该作者
已经修改好了,谢谢版主大哥。另外我把正确的贴一下吧,需要的童鞋可能会用到。
procedure(p()      
enterBox(?prompts      
list("enter a Bbox")      
?doneProc "pointdonehw"      
)    ;enterBox end   
)    ;p() end   
        
        
procedure(pointdonehw(w done pts)      
if(done then      
xl=xCoord(lowerLeft(pts))      
yl=yCoord(lowerLeft(pts))      
xu=xCoord(upperRight(pts))      
yu=yCoord(upperRight(pts))      
)    ;if end   
)    ;pointdonehw  end
        
        
procedure(hw()      
geDeselectAllFig()      
xl=0      
yl=0      
xu=0      
yu=0        
list_m1=list()      
list_m2=list()      
list_m3=list()      
list_m4=list()      
list_top=list()      
list_bottom=list()      
contact_xl=0      
contact_yl=0      
contact_xu=0
contact_yu=0      
bottom=0      
top=0      
        
p()      
;load("1");这里load的内容为{leHiYank()  addPoint(xl:yl)  addPoint(xu:yu)  leHiPaste()  addPoint(xl-1000:yl) cancelEnterFun()}  这里需要将大括号里得内容新建一个文件,用来load。     
;geDeselectAllFig()      
        
;geSingleSelectBox(hiGetCurrentWindow() nil list(xl-1000:y1 xu-1000:yu))      
        
w=geGetSelectedSet()      
        
for(i 0 (length(w)-1)      
if((nth(i  w)~>layerName=="M1"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m1=nth(i  w)~>bBox      
)      
        
if((nth(i  w)~>layerName=="M2"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m2=nth(i  w)~>bBox      
)      
        
if((nth(i  w)~>layerName=="M3"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m3=nth(i  w)~>bBox      
)      
        
if((nth(i  w)~>layerName=="M4"&&nth(i  w)~>purpose=="logic")!=nil      
then      
list_m4=nth(i  w)~>bBox      
)      
        
)      
        
if(list_m1!=nil then   
list_bottom=list_m1      
bottom=1      
   else if(list_m2!=nil then     
   list_bottom=list_m2     
   bottom=2     
    else if(list_m3!=nil then   
    list_bottom=list_m3   
    bottom=3   
        
    else printf("no bottom layer")   
     )   
    )   
   )     
        
        
if(list_m4!=nil then      
list_top=list_m4      
top=4      
   else if(list_m3!=nil then     
   list_top=list_m3     
   top=3     
    else if(list_m2!=nil then   
    list_bottom=list_m2   
    top=2   
        
    else printf("no top layer")   
     )   
    )   
   )     
        
if(      
caar(list_bottom)>caar(list_top)      
then      
contact_xl=caar(list_bottom)      
else      
contact_xl=caar(list_top)      
)      
        
if(      
caadr(list_bottom)<caadr(list_top)      
then      
contact_xu=caadr(list_bottom)      
else      
contact_xu=caadr(list_top)      
)      
        
if(      
cadar(list_bottom)>cadar(list_top)      
then      
contact_yl=cadar(list_bottom)      
else      
contact_yl=cadar(list_top)      
)      
        
if(      
cadadr(list_bottom)<cadadr(list_top)      
then      
contact_yu=cadadr(list_bottom)      
else      
contact_yu=cadadr(list_top)      
)      
        
        
xabs=contact_xu-contact_xl   
yabs=contact_yu-contact_yl   
        
x=xabs/2+contact_xl      
y=yabs/2+contact_yl      



rows=truncate(yabs/0.22)     
cols=truncate(xabs/0.22)
        
for(i bottom+1 top      
if(i==2 then      
leCreateContact(geGetEditRep() "V2_M1" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==3 then      
leCreateContact(geGetEditRep() "V3_M2" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
)      
if(i==4 then      
leCreateContact(geGetEditRep() "V4_M3" x+1000:y "R0" 0.1 0.1 rows cols 0.22 0.22 "center" "center")      
        
)      
        
leHiDelete()  ;这句还是需要留着的,应该是为了删除load里面的结果   
)      
        
hiSetBindKey(Layout" "Alt<key>p" "hw")

1

主题

11

帖子

18

积分

二级会员(20)

Rank: 2Rank: 2

积分
18
12#
发表于 2012-3-8 23:35 | 只看该作者
楼主能说明一下这个程序是干啥子的不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-24 23:45 , Processed in 0.066685 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表