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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1728|回复: 11

[原创] 分享一个选中器件自动打M1_GATE孔的脚本

[复制链接]
发表于 2024-8-29 14:19:47 | 显示全部楼层 |阅读模式

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

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

x
脚本作用:

选中一组器件,自动打上M1_GATE孔,管子竖向放置会在上方打孔,管子横向放置会在右侧打孔
脚本局限
Mosaic不能使用,有待优化
脚本用法
选中一组器件,按快捷6
虚线内参数,需要根据工艺调整

图片1.png

Poly_Via.zip

973 Bytes, 下载次数: 46 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2024-8-29 15:14:38 | 显示全部楼层
不错,下来看看
发表于 2024-8-29 16:12:46 | 显示全部楼层
本帖最后由 yangbingrui 于 2024-8-29 16:16 编辑

为什么我的没有CT孔呀,就只是单纯的延长了GT 和M1
 楼主| 发表于 2024-8-29 17:16:56 | 显示全部楼层


yangbingrui 发表于 2024-8-29 16:12
为什么我的没有CT孔呀,就只是单纯的延长了GT 和M1


第48行,函数名错误
                constraintGroupId = cstFindComstraintGroupIn(techFile "virtuosoDefaultSetup")   ;正确函数应为cstFindConstraintGroupIn,我打错了,不好意思


 楼主| 发表于 2024-8-29 18:24:35 | 显示全部楼层
本帖最后由 唐亮 于 2024-8-29 18:27 编辑

修改之后,mosaic也可以正常打孔了





  1. hiSetBindKey("Layout" "<Key>6" "Poly_Via()")
  2. procedure(Poly_Via()
  3. let((Poly M1 Via_W Via_L M1_W M1_L M1_to_Poly cv polyid polyid1 lx ly rx ry poly_area techFile constraintGroupId myViaOptions listpoly listm1)
  4. ;==============================================================================================
  5.         Poly = list("Poly" "drawing")         ;poly's layerName
  6.         M1 = list("Metal1" "drawing")         ;Metal1's layerName
  7.         Via_W = 0.42                                    ;VIA:M1_GATE poly's width
  8.         Via_L = 0.89                                         ;VIA:M1_GATE poly's length
  9.         M1_W = 0.38                                                 ;VIA:M1_GATE metal1's width
  10.         M1_L = 0.71                                                  ;VIA:M1_GATE metal1's length
  11.         M1_to_Poly = 0.09                                 ;VIA:M1_GATE horizontal between poly and metal1's space
  12. ;==============================================================================================
  13.         cv = geGetEditCellView()
  14.         foreach(obj geGetSelSet()
  15.                 polyid = foreach(mapcar polyfig dbGetOverlaps(cv obj~>bBox Poly 1 t)
  16.                                                 dbCopyFig(cadr(polyfig) cv dbGetHierPathTransform(polyfig))
  17.                 )
  18.                 polyid = leMergeShapes(polyid)
  19.                 foreach(polyid1 polyid
  20.                         lx = caar(polyid1~>bBox)
  21.                         ly = cadar(polyid1~>bBox)
  22.                         rx = caadr(polyid1~>bBox)
  23.                         ry = cadadr(polyid1~>bBox)
  24.                         dbDeleteObject(polyid1)
  25.                         if(!dbShapeQuery(cv M1 list(lx:ry rx:ry+Via_W))
  26.                                 then
  27.                                         if(rx - lx > Via_L
  28.                                                 then
  29.                                                         listpoly = list(lx:ry rx:ry+Via_W)
  30.                                                         listm1 = list(lx + M1_to_Poly:ry + (Via_W - M1_W)/2 rx - M1_to_Poly:ry + (Via_W + M1_W)/2)
  31.                                                 else
  32.                                                         listpoly = list((lx + rx - Via_L)/2:ry (rx + lx + Via_L)/2:ry + Via_W)
  33.                                         )
  34.                                         poly_area = dbCreateRect(cv Poly listpoly)
  35.                                         dbCreateRect(cv M1 listm1)
  36.                                 else
  37.                                         if(ry-ly>Via_L
  38.                                                 then
  39.                                                         listpoly = list(rx:ly rx+Via_W:ry)
  40.                                                         listm1 = list(rx+(Via_W - M1_W)/2:ly+M1_to_Poly rx+(Via_W + M1_W)/2:ry - M1_to_Poly)
  41.                                                 else
  42.                                                         listpoly = list(rx:(ly + ry - Via_L)/2 rx + Via_W:(ry+ly+Via_L)/2)
  43.                                                         listm1 = list(rx + (Via_W - M1_W)/2:(ly + ry - M1_L)/2 rx + (Via_W + M1_W)/2:(ry+ly+M1_L)/2)
  44.                                                 )
  45.                                         poly_area = dbCreateRect(cv Poly listpoly)
  46.                                         dbCreateRect(cv M1 listm1)
  47.                         )
  48.                         techFile = techGetTechFile(geGetEditRep())
  49.                         constraintGroupId = cstFindConstraintGroupIn(techFile "virtuosoDefaultSetup")
  50.                         myViaOptions = viaGetViaOptions(constraintGroupId)
  51.                         myViaOptions~>createInRoute = nil
  52.                         myViaOptions~>automatic~>preventDRCWithNeighbors = nil
  53.                         viaGenerateViasInArea(cv poly_area~>bBox myViaOptions)
  54.                         )
  55.                 )
  56.         )
  57. )









复制代码








图片1.png
发表于 2024-8-29 19:49:15 | 显示全部楼层
学习学习
发表于 2024-10-23 12:48:04 来自手机 | 显示全部楼层
你好,请问这个脚本针对阵列或者finger数的mos管适用吗?
发表于 2024-11-7 17:43:48 | 显示全部楼层


嗡嗡蜜蜂仔 发表于 2024-10-23 12:48
你好,请问这个脚本针对阵列或者finger数的mos管适用吗?


管用
发表于 2024-11-8 10:16:10 | 显示全部楼层
学习
发表于 2024-11-13 09:15:28 | 显示全部楼层
mark 一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 02:00 , Processed in 0.030804 second(s), 7 queries , Gzip On, Redis On.

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