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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 324|回复: 4

[原创] 为选中的inst或mosaic加宽metal1

[复制链接]
发表于 2025-1-4 17:56:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 络绎不绝 于 2025-1-4 17:58 编辑

算是站在前辈的肩膀上略微改进吧

首先鸣谢 okfunny 大佬的 skill 教程,真的在我当前入门 skill 帮助莫大(不是很好意思 @ ,只是学了点皮毛)

Skill教程  https://bbs.eetop.cn/thread-921362-1-1.html (出处: EETOP 创芯网论坛 (原名:电子顶级开发网))

该脚本是在 chinarml 大佬的同名脚本上略微改善,修正了下 mosaic 的 transform 提取

自己写的一些非常好用的skill脚本 https://bbs.eetop.cn/thread-878287-1-1.html (出处: EETOP 创芯网论坛 (原名:电子顶级开发网))



                               
登录/注册后可看大图

这两个参数可以根据自己使用的工艺不同自行调整

主要的思路为由函数 dbGetOverlaps() 而来,该函数的第五个参数如果为 t ,则会将 mosaic 的 row 及 column 的值返回出来

搭配 dbGetHierPathTransform() 即可提取出 mosaic 每个 MOS 正确的 transform 参数

我在脚本中将 level 的值设为 1到4层,就不会提取到当前 0 层的 m1


目前没有写判断是否为 MOS 器件的语句,基本没什么必要,有需要可以自行加个判断 cellname 的词条。

当然这个脚本实用性也是见仁见智,因为这么搞出来的 layout 会很乱,我这一般是调用 pcell 的 array 来加宽,就不会这么散,至于怎么跟 pcell 联动还没有深入了解,所以就先不展开说了。

欢迎大家多多发表看法讨论,共同进步!

AddMosM1.docx (10.98 KB, 下载次数: 13 )




补充内容 (2025-1-16 11:24):
最开始的文件是修改不了了,楼下直接把代码贴出来了,返回值也改成了所有生成 metal 的地址以便调用
 楼主| 发表于 2025-1-15 19:51:36 | 显示全部楼层
本帖最后由 络绎不绝 于 2025-1-16 12:20 编辑


陈卫霖 发表于 2025-1-14 16:07
大佬,请教一个问题:想把增加的metal  attach在器件上面,要怎么写,我在最后的foreach循环中加了leAttach ...


更新了下,加了两个变量,顺便加了个判断有没有选中有效器件

attach 我直接在 copy 操作完成后就搞了,因为发现后面 merge 后,list 中 fig 的顺序会变,导致 attach 到的器件会乱,所以干脆提前搞了

后面还有个 leSizeShape ,是用来把 metal 的上下两头扩到跟 diff 一样长,如下图,需要用就删掉注释



                               
登录/注册后可看大图







  1. procedure(AddMosM1(@optional (lpp list("METAL1" "drawing")) (m1_width 0.38))
  2. prog((cv selMos bbox m1query m1trans m1objs m1list figNum m1)
  3. cv=geGetEditCellView()
  4. if(cv~>mode != "a" then
  5.     warn(" Not Editable. ")
  6.     return(nil)
  7. else
  8.     selMos=setof(x geGetSelSet() x~>objType=="inst"||x~>objType=="mosaic")

  9. when(selMos==nil
  10.     warn(" No inst or mosaic been selected. ")
  11.     return(nil))

  12. bbox=selMos~>bBox
  13. m1query=nil
  14. foreach(obj bbox
  15.     m1query=nconc(m1query dbGetOverlaps(cv obj lpp 1:4 t)))
  16. m1trans=nil
  17. foreach(obj m1query
  18.     m1trans=nconc(m1trans list(dbGetHierPathTransform(obj))))
  19. m1objs=nil
  20. foreach(obj m1query
  21.     m1objs=nconc(m1objs last(obj)))
  22. m1list=mapcar('list m1objs m1trans)
  23. m1=foreach(mapcar obj m1list
  24.     dbCopyFig(car(obj) cv cadr(obj)))

  25. ;attach
  26. figNum=length(m1)/length(selMos)
  27. for(a 0 length(selMos)-1
  28.     for(b a*figNum a*figNum+figNum-1
  29.         leAttachFig(nth(b m1) nth(a selMos)));end for
  30. );end for

  31. m1=foreach(mapcar obj m1
  32.     ;leSizeShape(obj 0.04)
  33.     leConvertPolygonToPath(obj))
  34. foreach(obj m1
  35.     obj~>width=m1_width)

  36. ;merge
  37. m1=leMergeShapes(m1)
  38. return(m1)
  39. );end if
  40. ))


复制代码

发表于 2025-1-14 16:07:56 | 显示全部楼层
大佬,请教一个问题:想把增加的metal  attach在器件上面,要怎么写,我在最后的foreach循环中加了leAttachFig(temp trans),会报错,不会解决。
发表于 2025-1-15 09:39:13 | 显示全部楼层


陈卫霖 发表于 2025-1-14 16:07
大佬,请教一个问题:想把增加的metal  attach在器件上面,要怎么写,我在最后的foreach循环中加了leAttach ...


没下楼主的code,盲猜和我们用的差不太多(都源自同一位大佬)
前面

objs = geGetSelSet()
后会有第一个大循环
foreach(obj objs    <-  或者其他什么变量名

试试 leAttachFig(temp obj)  ?

 楼主| 发表于 2025-1-16 10:56:08 | 显示全部楼层


陈卫霖 发表于 2025-1-14 16:07
大佬,请教一个问题:想把增加的metal  attach在器件上面,要怎么写,我在最后的foreach循环中加了leAttach ...


我是第一次发帖回复,不知道为什么发出去后排版总是会乱,加的代码也缺了很多,见谅
又重新编辑了下,应该可以了,待审核通过就可以看到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-2-22 21:59 , Processed in 0.021268 second(s), 10 queries , Gzip On, Redis On.

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