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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1395|回复: 8

[求助] 请教有没有可以在mos的gate端自动生成contact的脚本

[复制链接]
发表于 2023-6-15 16:10:46 | 显示全部楼层 |阅读模式

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

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

x
请教有没有可以在mos的gate端自动生成contact的脚本?有的工艺下的PCELL的parameter里有开关可以给调出来的mos生成contact,但是是按最小规则生成的,contact与AA的距离和contact的个数不可以设定,请问谁有可以给mos自动生成contact的脚本?
发表于 2023-6-15 16:49:58 | 显示全部楼层
之前下的应该要参考改改

gate打cont.il.txt

13.08 KB, 下载次数: 90 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2023-6-15 17:48:30 | 显示全部楼层
谢谢大神!还有一些不懂请教,xy=inst~>xy这句里面的xy是什么参数,我目前使用的pdk里都没有这个参数。
 楼主| 发表于 2023-6-15 17:53:13 | 显示全部楼层
是int的坐标吗
发表于 2023-6-15 17:53:54 | 显示全部楼层


试一试 就出来了
发表于 2023-6-15 17:58:28 | 显示全部楼层
print
发表于 2024-4-11 18:11:25 | 显示全部楼层


ljh065216 发表于 2023-6-15 16:49
之前下的应该要参考改改


大佬 ,除了改一下PO还要改什么吗?我改完后load成功了但是报*error* times: can't handle(nil * 1000000.0)
发表于 2024-4-19 10:12:18 | 显示全部楼层




  1. ; Version 1.0
  2. ; only used for Multi of mos, cannot for fingers
  3. ; update idea: only cont, not need poly rectangle

  4. procedure(create_gc()
  5.         let( (cv instlist x1 y1 x2 y2 x3 y3 inst_l inst_w tech pcLayer viaDefId viaParams xy contNumi rectenc ctcenter)
  6.         cv = geGetEditCellView(getCurrentWindow())
  7.         tech = techGetTechFile(cv)
  8.         instlist = geGetSelSet()
  9.         pcLayer = polyLayer                                        ; process difference
  10.         viaDefId = techFindViaDefByName(tech contDefId)                ; process difference
  11.         rectenc = polyRectEnc                ; poly rectangle to AA        ; process difference
  12.         ctcenter = polyCtCenter                ; cont center to AA        ; process difference
  13.        
  14.         foreach(inst instlist
  15. ;                printf("l  %L %L\n" (inst~>l) type(inst~>l))        ;debug
  16. ;                printf("fw %L %L\n" (inst~>fw) type(inst~>fw))        ;debug
  17. ;                printf("w  %L %L\n" (inst~>w) type(inst~>w))        ;debug
  18.                 if(stringp(inst~>l) then       
  19.                         inst_l = cdfParseFloatString(inst~>l) * 1e6
  20.                         else if(floatp(inst~>l) then
  21.                                 inst_l = (inst~>l) * 1e6
  22.                 ))
  23.                 if(stringp(inst~>w) then
  24.                         inst_w = cdfParseFloatString(inst~>w) * 1e6
  25.                         else if(floatp(inst~>w) then
  26.                                 inst_w = (inst~>w) * 1e6
  27.                 ))               
  28.                 if(stringp(inst~>fw) then
  29.                         inst_w = cdfParseFloatString(inst~>fw) * 1e6
  30.                         else if(floatp(inst~>fw) then
  31.                                         inst_w = (inst~>fw) * 1e6
  32.                 ))
  33. ;                printf("inst_w %L\n" inst_w)        debug
  34.                 xy = inst~>xy
  35.                 contNum = fix(inst_l / contPitch) - 1
  36.                 if(contNum < 2 then contNum = 2)                ; at least 2 cont
  37.                 viaParams = list(
  38.                                 list("cutRows" contNum)
  39.                                 list("cutColumns" 1)
  40. ;                                list("layer1Enc" list(0.04 0.04))        ; enclose value (ud lr)
  41. ;                                list("layer2Enc" list(0.0 0.04))        ; default ok
  42.                                 )
  43.                 case(inst~>orient
  44.                         ("R0"
  45.                         x1 = car(xy)
  46. ;                        printf("x1 %L\n" x1)        debug
  47.                         y1 = cadr(xy) + inst_w
  48. ;                        printf("y1 %L\n" y1)        debug
  49.                         x2 = x1 + inst_l
  50.                         y2 = y1 + rectenc
  51.                         x3 = x1 + inst_l/2
  52.                         y3 = y1 + ctcenter       
  53.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  54.                         dbCreateVia(cv viaDefId list(x3 y3) "R90" viaParams)
  55.                         );end "R0"
  56.                         ("R90"
  57.                         x1 = car(xy) - inst_w
  58.                         y1 = cadr(xy)
  59.                         x2 = x1 - rectenc
  60.                         y2 = y1 + inst_l
  61.                         x3 = x1 - ctcenter
  62.                         y3 = y1 + inst_l/2               
  63.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  64.                         dbCreateVia(cv viaDefId list(x3 y3) "R0" viaParams)
  65.                         );end "R90"
  66.                         ("R180"
  67.                         x1 = car(xy)
  68.                         y1 = cadr(xy) - inst_w
  69.                         x2 = x1 - inst_l
  70.                         y2 = y1 - rectenc
  71.                         x3 = x1 - inst_l/2
  72.                         y3 = y1 - ctcenter               
  73.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  74.                         dbCreateVia(cv viaDefId list(x3 y3) "R90" viaParams)
  75.                         );end "R180"
  76.                         ("R270"
  77.                         x1 = car(xy) + inst_w
  78.                         y1 = cadr(xy)
  79.                         x2 = x1 + rectenc
  80.                         y2 = y1 - inst_l
  81.                         x3 = x1 + ctcenter
  82.                         y3 = y1 - inst_l/2               
  83.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  84.                         dbCreateVia(cv viaDefId list(x3 y3) "R0" viaParams)
  85.                         );end "R270"
  86.                         ("MY"
  87.                         x1 = car(xy) - inst_l
  88.                         y1 = cadr(xy) + inst_w
  89.                         x2 = x1 + inst_l
  90.                         y2 = y1 + rectenc
  91.                         x3 = x1 + inst_l/2
  92.                         y3 = y1 + ctcenter
  93.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  94.                         dbCreateVia(cv viaDefId list(x3 y3) "R90" viaParams)
  95.                         );end "MY"
  96.                         ("MYR90"
  97.                         x1 = car(xy) - inst_w
  98.                         y1 = cadr(xy)
  99.                         x2 = x1 - rectenc
  100.                         y2 = y1 - inst_l
  101.                         x3 = x1 - ctcenter
  102.                         y3 = y1 - inst_l/2               
  103.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  104.                         dbCreateVia(cv viaDefId list(x3 y3) "R0" viaParams)
  105.                         );end "MYR90"
  106.                         ("MX"
  107.                         x1 = car(xy)
  108.                         y1 = cadr(xy) - inst_w
  109.                         x2 = x1 + inst_l
  110.                         y2 = y1 - rectenc
  111.                         x3 = x1 + inst_l/2
  112.                         y3 = y1 - ctcenter       
  113.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  114.                         dbCreateVia(cv viaDefId list(x3 y3) "R90" viaParams)
  115.                         );end "MX"
  116.                         ("MXR90"
  117.                         x1 = car(xy) + inst_w
  118.                         y1 = cadr(xy)
  119.                         x2 = x1 + rectenc
  120.                         y2 = y1 + inst_l
  121.                         x3 = x1 + ctcenter
  122.                         y3 = y1 + inst_l/2               
  123.                         dbCreateRect(cv list(pcLayer "drawing") list(x1:y1 x2:y2))
  124.                         dbCreateVia(cv viaDefId list(x3 y3) "R0" viaParams)
  125.                         );end "MXR90"
  126.                 );end case
  127.         );end foreach
  128.         );end let
  129. );end procedure                       
  130. hiSetBindKey("Layout" "<Key>5" "create_gc()")


复制代码


几个变量自己设定
        contDefId = ""          pdk对应gate cont
        polyLayer = ""           pdk对应poly layer  
        polyRectEnc =           poly gate超过diff值
        polyCtCenter =          cont center to diff
        contPitch =               cont pitch
发表于 2024-7-3 11:05:45 | 显示全部楼层


level90 发表于 2024-4-19 10:12
几个变量自己设定
        contDefId = ""          pdk对应gate cont
        polyLayer = ""           pdk对应poly l ...


好用,赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-18 18:10 , Processed in 0.024199 second(s), 7 queries , Gzip On, Redis On.

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