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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 139|回复: 7

[求助] 使用AddMosM1 脚本,不希望gate上生成M1

[复制链接]
发表于 6 小时前 | 显示全部楼层 |阅读模式

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

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

×
借用了大神的 AddMosM1 脚本https://bbs.eetop.cn/thread-878287-1-1.html,非常好用,但是遇到了一个问题,修改了器件的parameter,自动添加了 Gate Connection,然后运行脚本,S,D,gate上面都会生成M1,如果不需要gate上面生成M1,请问怎么修改脚本呢?谢谢!





hiSetBindKey("Layout" "<Key>F6" "AddMosM1()")

procedure(AddMosM1()
      let((cv objs metal1 temp shapes x y ux uy xy row column transform M1_width)
        testEditMode()  
          M1_width = 0.16
          cv = geGetEditCellView()
          objs = geGetSelSet()
        foreach(obj objs
             transform = nil
             if(obj~>objType == "inst" then
                     transform = list(obj~>transform));end if
             if(obj~>objType == "mosaic" then
                     x = xCoord(obj~>xy)
                     y = yCoord(obj~>xy)
                     ux = obj~>uX
                     uy = obj~>uY
                     row = obj~>rows
                     column = obj~>columns
             for(a 0 row-1
               for(b 0 column-1
                case(car(obj~>tileArray)
                    ("R0"    xy = list(x+b*ux : y+a*uy))
                    ("MXR90" xy = list(x+a*ux : y+b*uy))
                    ("R90"   xy = list(x-a*ux : y+b*uy))
                    ("MY"    xy = list(x-b*ux : y+a*uy))
                    ("R0"    xy = list(x+a*ux : y-b*uy))
                    ("MXR90" xy = list(x+b*ux : y-a*uy))
                    ("R0"    xy = list(x-b*ux : y-a*uy))
                    ("MXR90" xy = list(x-a*ux : y-b*uy))
                );end case
             transform = append1(transform list(car(xy) car(obj~>tileArray) 1.0))
               );end for
            );enf for
            );end if
           shapes = obj~>master~>shapes
         foreach(shape shapes
           ;if(car(shape~>lpp) == "M1" && cadr(shape~>lpp) == "drawing"     //add gate M1
           if(car(shape~>lpp) == "M1" && cadr(shape~>lpp) == "drawing"&& shape ~> objType == "rect"
             then
               foreach(trans transform
                  metal1 = dbCopyFig(shape cv trans)
                  temp = leConvertPolygonToPath(metal1)
                  temp~>width = M1_width
               );foreach
           );if
      );foreach
    );foreach
  );let
);proc


procedure(testEditMode()
         if(geGetEditCellView() ~> mode == "r"
         then hiDisplayMenu(hiCreateSimpleMenu(
                'menu "" list("ReadOnly!!!\n" "ReadOnly!!!\n" "ReadOnly!!!\n") list("")))
         break()
          );if
);proc


 楼主| 发表于 6 小时前 | 显示全部楼层
左边是未生长M1的mos
1234.png
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
如果pdk单元里面的金属是带net信息的,只需要把最后那条if的检测条件改改,除了检测lpp外,还检测net就行了。如果不带net信息,需要通过运算去除与多晶有交叠的金属
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
gate cont 关掉应该可以
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
我有个思路是根据器件方向,排除掉gate方向的M1的rect(定义rect长边为其方向)。一般的管子应该都可以解决,但是skill改动蛮大的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 小时前 | 显示全部楼层


   
acrofoxAgain 发表于 2025-9-8 10:47
如果pdk单元里面的金属是带net信息的,只需要把最后那条if的检测条件改改,除了检测lpp外,还检测net就行了 ...


如果if检测条件加上 能提取出来“M1”和“OD” 交叠的“M1”的语句,是否也可行?无奈skill语法能力有限,只找到了 dbGetOverlaps() 函数,请大神助我,谢谢!
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层


   
Siman2000 发表于 2025-9-8 11:42
如果if检测条件加上 能提取出来“M1”和“OD” 交叠的“M1”的语句,是否也可行?无奈skill语法能力有限 ...


没有直接检测是否交叠的语句,但是可以有运算。Overlap那个是粗略检测,只看bBox。


如果不带net信息,可以这个思路:用程序里这个方法将M1 copy到当前cellView中的y0层,并将结果记录到一个list中,我把它叫M1Shapes。把多晶copy到当前cellView的y1层,并将结果记录到另一个list中,我把它叫PolyShapes,然后用dbLayerOutside得出M1Shapes去掉与PolyShapes有关系的图形,结果保存到M1层,再删除临时数据。
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层


   
Siman2000 发表于 2025-9-8 11:42
如果if检测条件加上 能提取出来“M1”和“OD” 交叠的“M1”的语句,是否也可行?无奈skill语法能力有限 ...


可行 使用这个函数 bbox使用od的 再对得到的数据进行筛选 筛选过程可以参考alignviatonet 这个脚本是用来收线头的 直接搜索就行
或者你可以再对所有得到的m1 因为他们都是path 可以根据points来判断方向 删除横向的即可
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

X

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

GMT+8, 2025-9-8 16:36 , Processed in 0.027943 second(s), 4 queries , Gzip On, Redis On.

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