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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 14246|回复: 27

[求助] 求一个可以自动生成metal、poly等layer的skill程序

[复制链接]
发表于 2013-5-13 09:41:43 | 显示全部楼层 |阅读模式
500资产
发这个贴的大意是由于virtuoso没有laker那么灵活的align功能,比如要把一个pcell mos S/D端的metal接出来,需要先path出metal,然后再放大对齐,效率非常低。之前用laker,有前辈写的tcl程序,只要框选一个区域,这个区域内的metal、poly信息就可以读取出来,并自动在pcell mos的上层生成一层metal/poly layer,非常方便。求哪位大侠帮忙研究如何写出这个skill程序,这样layout的效率肯定会提高很多。

ps: 要是没有表述清楚,欢迎疑问与讨论。

效果如下图:
111.png

另外,有没有LSW鼠标滚轮的程序,同求!

发表于 2013-5-20 20:41:06 | 显示全部楼层
偷懒,只做了方向为“R0”的。原理为找到pcell中metal,poly层的相对坐标和该pcell在当前layout的绝对坐标进行运算。
已试过,可以实现你说的功能。纯手打,有可能有变量书写笔误。你load以后,看有无低级拼写错误,可自行改正。
procedure(auto_mos_stretch()
obj_list=geGetObjectSelectedSet()
if(obj_list==nil then 1
else
for(i 0 length(obj_list)-1
inst_obj=car(nth(i obj_list))
when(inst_obj->w!=nil&&inst_obj->l!=nil
inst_center=car(inst_obj->transform)
inst_w=evalstring(inst_obj->w)*1E6
inst_l=evalstring(inst_obj->l)*1E6
layout_zero_point_x=car(inst_center)
layout_zero_point_y=cadr(inst_center)
shape_list=inst_obj->master->shapes
metal_list=nil
poly_list=nil
for(j 0 length(shape_list)-1
cond(
(nth(j shape_list)->layerName=="金属层名" metal_list=append(metal_list nth(j shape_list)->bBox))
(nth(j shape_list)->layerName=="poly层名" poly_list=append(poly_list nth(j shape_list)->bBox))
(t nil)
);end cond
);end for
if(metal_list==nil then 1
else metal_list=list(
list(car(nth(0 metal_list))+layout_zero_point_x:cadr(nth(0 metal_list))+layout_zero_point_y
      car(nth(1 metal_list))+layout_zero_point_x:cadr(nth(1 metal_list))+layout_zero_point_y)
list(car(nth(2 metal_list))+layout_zero_point_x:cadr(nth(2 metal_list))+layout_zero_point_y
      car(nth(3 metal_list))+layout_zero_point_x:cadr(nth(3 metal_list))+layout_zero_point_y)
)
rodCreateRect(?layer "金属层名" ?bBox car(metal_list) ?cvId deGetCellView())
rodCreateRect(?layer "金属层名" ?bBox cadr(metal_list) ?cvId deGetCellView())
);end metal
if(poly_list=nil then 1
else poly_list=list(nth(0 poly_list) nth(3 poly_list))
poly_list=list(caar(poly_list)+layout_zero_point_x:cadar(poly_list)+layout_zero_point_y
  caadr(poly_list)+layout_zero_point_x:cadadr(poly_list)+layout_zero_point_y)
rodCreateRect(?layer "poly层名" ?bBox poly_list ?cvId deGetCellView())
);end poly
))))
hiSetBindKey("Layout" "<key>1" "auto_mos_stretch")
发表于 2013-5-21 14:10:51 | 显示全部楼层
回复 2# babmb


    pcell的mos:
111.jpg
操作后生成的metal:
222.jpg 333.jpg

另外,CIW有error提示:

*Error* plus : can't handle (nil +3234.02)
发表于 2013-5-21 14:13:59 | 显示全部楼层
回复 2# babmb


    对于某些pcell,metal并不与diffusion完全对齐的情况,就会糟糕的多。。
444.jpg
发表于 2013-5-21 14:17:29 | 显示全部楼层
回复 2# babmb


    另外,CIW窗口会有error提示:

*ERROR* plus: can't handle (nil + 3233.35)
发表于 2013-5-22 16:55:57 | 显示全部楼层
2楼强人!
发表于 2013-7-2 17:48:02 | 显示全部楼层
回复 2# babmb


   大侠 请教你点问题
shape_list=inst_obj->master->shapes 我看你使用这条语句将选中的目标的所有layer 层的db 全部放到了列表shape_list中,我现在在考虑用另一种方式来实现metal的生成,想用你的方式来实现,但我发现这个写法真能读取到一层instance的内部layer 的db,如果有多层instance嵌套的情况,就没办法来获取了,
  想问下 在选中的instance是多层的时候如何 去获取全部的layer 层的db啊 求援助啊 亲~~~~~~~~
发表于 2013-7-4 14:25:07 | 显示全部楼层
回复 2# babmb


    谢谢,我已经找到写法了,能有办法得到我选中目标的多层instance的所有layer,但目前也只写出长出两层metal的,虽然您还没回复,但感谢你看了我的信息~~~~~~大侠 没事求多指教啊~~~~菜鸟拜过
发表于 2014-10-16 14:57:31 | 显示全部楼层
试过 POLY没有生成啊
发表于 2014-10-16 15:18:06 | 显示全部楼层
每次只能对一个管子起作用 如果能对选中的所有管子起作用就更好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-3-29 02:02 , Processed in 0.035740 second(s), 8 queries , Gzip On, Redis On.

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