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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9230|回复: 23

[原创] mos管gate打孔skill

[复制链接]
发表于 2020-8-7 10:04:16 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xtj1204 于 2020-8-7 10:25 编辑

工艺:PSMC 0.18um,平台:IC51
参考链接http://bbs.eetop.cn/thread-873609-1-1.html修改,原理是获取mos管的xy,l,fw,fingers,计算打孔和补poly所需的坐标并生成孔和poly不同工艺的需要自行修改相关参数
使用方法:
1.load此文件
2.选择mos管,按下快捷键,快捷键可根据自己的需求更改
3.生成孔
优点:生成的孔和poly自动attach在mos管上
缺点:对于array的mos管,无法生成孔
代码:
附件内容与以下代码一致,愿意资助楼主的可以下载附件,没积分的直接复制以下代码即可




  1. procedure( polycont()
  2.         let((contWidth poEnclosureCont polyExtensionAA contCenterToPoly fingerSpace polyWidth cvId objList
  3.         instList fw l fingerPitch xy fingers contNum x1 y1 cont llx_poly lly_poly urx_poly polyrect)
  4.                 contWidth=0.24
  5.                 poEnclosureCont=0.07
  6.                 contPitch=0.52
  7.                 polyExtensionAA=0.22
  8.                 contCenterToPoly=0.23
  9.                 fingerSpace=0.54
  10.                 polyWidth=0.42
  11.                 cvId=getEditRep(hiGetCurrentWindow())
  12.                 objList=geGetSelSet(cvId)
  13.                 instList=setof(x objList x~>objType=="inst")
  14.                 foreach(inst instList
  15.                         fw=inst~>fw*1e6
  16.                         l=inst~>l*1e6
  17.                         fingerPitch=l+fingerSpace
  18.                         xy=inst~>xy
  19.                         fingers=int(inst~>fingers)
  20.                         contNum=int((l-2*poEnclosureCont-contWidth)/contPitch+1)
  21.                         if(contNum<2 then contNum=2)
  22.                         case(inst~>orient
  23.                                 ("R0"
  24.                                         x1=car(xy)+l/2
  25.                                         y1=cadr(xy)+fw+polyExtensionAA+contCenterToPoly
  26.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "R0" contWidth contWidth 1 contNum contPitch contPitch "center" "bottom")
  27.                                         leAttachFig(cont inst)
  28.                                         llx_poly=car(xy) lly_poly=cadr(xy)+fw+polyExtensionAA
  29.                                         urx_poly=car(xy)+l ury_poly=lly_poly+polyWidth
  30.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  31.                                         leAttachFig(polyrect inst)
  32.                                         if(fingers>=2 then
  33.                                                 for(i 2 fingers        
  34.                                                 cont=dbCopyFig(cont cvId list(fingerPitch:0 "R0" 1.0))
  35.                                                 leAttachFig(cont inst)
  36.                                                 polyrect=dbCopyFig(polyrect cvId list(fingerPitch:0 "R0" 1.0))
  37.                                                 leAttachFig(polyrect inst)
  38.                                                 );end for
  39.                                         );end if
  40.                                 );end R0

  41.                                 ("R90"
  42.                                         x1=car(xy)-fw-polyExtensionAA-contCenterToPoly
  43.                                         y1=cadr(xy)+l/2
  44.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "R90" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  45.                                         leAttachFig(cont inst)
  46.                                         llx_poly=car(xy)-fw-polyExtensionAA
  47.                                         lly_poly=cadr(xy)
  48.                                         urx_poly=llx_poly-polyWidth
  49.                                         ury_poly=cadr(xy)+l
  50.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  51.                                         leAttachFig(polyrect inst)
  52.                                         if(fingers>=2 then
  53.                                                 for(i 2 fingers
  54.                                                 cont=dbCopyFig(cont cvId list(0:fingerPitch "R0" 1.0))
  55.                                                 leAttachFig(cont inst)
  56.                                                 polyrect=dbCopyFig(polyrect cvId list(0:fingerPitch "R0" 1.0))
  57.                                                 leAttachFig(polyrect inst)
  58.                                                 );end for
  59.                                         );end if
  60.                                 );end R90        

  61.                                 ("R180"
  62.                                         x1=car(xy)-l/2
  63.                                         y1=cadr(xy)-fw-polyExtensionAA-contCenterToPoly
  64.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "R180" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  65.                                         leAttachFig(cont inst)
  66.                                         llx_poly=car(xy)
  67.                                         lly_poly=cadr(xy)-fw-polyExtensionAA
  68.                                         urx_poly=car(xy)-l
  69.                                         ury_poly=lly_poly-polyWidth
  70.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  71.                                         leAttachFig(polyrect inst)
  72.                                         if(fingers>=2 then
  73.                                                 for(i 2 fingers
  74.                                                 cont=dbCopyFig(cont cvId list(-fingerPitch:0 "R0" 1.0))
  75.                                                 leAttachFig(cont inst)
  76.                                                 polyrect=dbCopyFig(polyrect cvId list(-fingerPitch:0 "R0" 1.0))
  77.                                                 leAttachFig(polyrect inst)
  78.                                                 );end for        
  79.                                         );end if
  80.                                 );end R180

  81.                                 ("R270"
  82.                                         x1=car(xy)+fw+polyExtensionAA+contCenterToPoly
  83.                                         y1=cadr(xy)-l/2
  84.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "R270" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  85.                                         leAttachFig(cont inst)
  86.                                         llx_poly=car(xy)+fw+polyExtensionAA        
  87.                                         lly_poly=cadr(xy)
  88.                                         urx_poly=llx_poly+polyWidth
  89.                                         ury_poly=cadr(xy)-l
  90.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  91.                                         leAttachFig(polyrect inst)
  92.                                         if(fingers>=2 then
  93.                                                 for(i 2 fingers
  94.                                                 cont=dbCopyFig(cont cvId list(0:-fingerPitch "R0" 1.0))
  95.                                                 leAttachFig(cont inst)
  96.                                                 polyrect=dbCopyFig(polyrect cvId list(0:-fingerPitch "R0" 1.0))
  97.                                                 leAttachFig(polyrect inst)
  98.                                                 );end for        
  99.                                         );end if
  100.                                 );end R270

  101.                                 ("MY"
  102.                                         x1=car(xy)-l/2
  103.                                         y1=cadr(xy)-polyExtensionAA-contCenterToPoly
  104.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "MY" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  105.                                         leAttachFig(cont inst)
  106.                                         llx_poly=car(xy)
  107.                                         lly_poly=cadr(xy)-polyExtensionAA
  108.                                         urx_poly=car(xy)-l
  109.                                         ury_poly=cadr(xy)-polyExtensionAA-polyWidth
  110.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  111.                                         leAttachFig(polyrect inst)
  112.                                         if(fingers>=2 then
  113.                                                 for(i 2 fingers
  114.                                                 cont=dbCopyFig(cont cvId list(-fingerPitch:0 "R0" 1.0))
  115.                                                 leAttachFig(cont inst)
  116.                                                 polyrect=dbCopyFig(polyrect cvId list(-fingerPitch:0 "R0" 1.0))
  117.                                                 leAttachFig(polyrect inst)
  118.                                                 );end for        
  119.                                         );end if        
  120.                                 );end MY        

  121.                                 ("MYR90"
  122.                                         x1=car(xy)+polyExtensionAA+contCenterToPoly
  123.                                         y1=cadr(xy)-l/2
  124.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "MYR90" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  125.                                         leAttachFig(cont inst)
  126.                                         llx_poly=car(xy)+polyExtensionAA
  127.                                         lly_poly=cadr(xy)
  128.                                         urx_poly=llx_poly+polyWidth
  129.                                         ury_poly=cadr(xy)-l
  130.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  131.                                         leAttachFig(polyrect inst)
  132.                                         if(fingers>=2 then
  133.                                                 for(i 2 fingers
  134.                                                 cont=dbCopyFig(cont cvId list(0:-fingerPitch "R0" 1.0))
  135.                                                 leAttachFig(cont inst)
  136.                                                 polyrect=dbCopyFig(polyrect cvId list(0:-fingerPitch "R0" 1.0))
  137.                                                 leAttachFig(polyrect inst)
  138.                                                 );end for        
  139.                                         );end if
  140.                                 );end MYR90

  141.                                 ("MX"
  142.                                         x1=car(xy)+l/2
  143.                                         y1=cadr(xy)+polyExtensionAA+contCenterToPoly
  144.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "MX" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  145.                                         leAttachFig(cont inst)
  146.                                         llx_poly=car(xy)
  147.                                         lly_poly=cadr(xy)+polyExtensionAA
  148.                                         urx_poly=car(xy)+l
  149.                                         ury_poly=lly_poly+polyWidth
  150.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  151.                                         leAttachFig(polyrect inst)
  152.                                         if(fingers>=2 then
  153.                                                 for(i 2 fingers
  154.                                                 cont=dbCopyFig(cont cvId list(fingerPitch:0 "R0" 1.0))
  155.                                                 leAttachFig(cont inst)
  156.                                                 polyrect=dbCopyFig(polyrect cvId list(fingerPitch:0 "R0" 1.0))
  157.                                                 leAttachFig(polyrect inst)
  158.                                                 );end for        
  159.                                         );end if
  160.                                 );end MX

  161.                                 ("MXR90"
  162.                                         x1=car(xy)-polyExtensionAA-contCenterToPoly
  163.                                         y1=cadr(xy)+l/2
  164.                                         cont=leCreateContact(cvId "M1_PO" x1:y1 "MXR90" contWidth contWidth 1 contNum  contPitch contPitch "center" "bottom")
  165.                                         leAttachFig(cont inst)
  166.                                         llx_poly=car(xy)-polyExtensionAA
  167.                                         lly_poly=cadr(xy)
  168.                                         urx_poly=llx_poly-polyWidth
  169.                                         ury_poly=cadr(xy)+l
  170.                                         polyrect=dbCreateRect(cvId list("PO_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
  171.                                         leAttachFig(polyrect inst)
  172.                                         if(fingers>=2 then
  173.                                                 for(i 2 fingers
  174.                                                 cont=dbCopyFig(cont cvId list(0:fingerPitch "R0" 1.0))
  175.                                                 leAttachFig(cont inst)
  176.                                                 polyrect=dbCopyFig(polyrect cvId list(0:fingerPitch "R0" 1.0))
  177.                                                 leAttachFig(polyrect inst)
  178.                                                 );end for        
  179.                                         );end if
  180.                                 );end MXR90
  181.                         );end case
  182.                 );end foreach
  183.         );end let

  184. );end procedure
  185. hiSetBindKey("Layout" "<Key>]" "polycont()")


复制代码



polycont.rar

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

发表于 2020-9-2 15:49:35 | 显示全部楼层
谢谢分享
发表于 2020-9-7 17:26:44 | 显示全部楼层
想问下skill怎么学的呢,找不到资料。就cadence中自带的那个skill,全英文,看不懂。
 楼主| 发表于 2020-9-8 09:03:22 | 显示全部楼层


Edward_yin 发表于 2020-9-7 17:26
想问下skill怎么学的呢,找不到资料。就cadence中自带的那个skill,全英文,看不懂。 ...


这个是中文的,但是讲的不深,只是大概介绍一下基本概念,希望对你有帮助

Learning_Skill.pdf

1.22 MB, 下载次数: 314 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2020-9-8 09:36:10 | 显示全部楼层


xtj1204 发表于 2020-9-8 09:03
这个是中文的,但是讲的不深,只是大概介绍一下基本概念,希望对你有帮助
...


好的,谢谢你了。
发表于 2020-9-8 14:30:09 | 显示全部楼层
楼猪写这些代码要花多少时间呢?
 楼主| 发表于 2020-9-9 09:01:35 | 显示全部楼层


CmosLgh 发表于 2020-9-8 14:30
楼猪写这些代码要花多少时间呢?


花了好几天,我也是个初学者,大佬应该一天之内就搞定了
发表于 2020-9-9 16:01:44 | 显示全部楼层


xtj1204 发表于 2020-9-9 09:01
花了好几天,我也是个初学者,大佬应该一天之内就搞定了


已经很不错了,继续加油!
发表于 2021-9-11 12:21:42 | 显示全部楼层
不能用,提示没有定义leCreateContact
发表于 2021-9-11 19:12:35 | 显示全部楼层
http://bbs.eetop.cn/thread-898112-2-7.html---消失的7楼---深夜考古聊天专用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 10:42 , Processed in 0.022569 second(s), 6 queries , Gzip On, Redis On.

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