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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 2510|回复: 11

[求助] 自动收边并打孔,方向控制已解决,如何判断M1、M3

[复制链接]
发表于 2023-7-13 12:02:35 | 显示全部楼层 |阅读模式

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

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

×


   

        

                
  1. procedure( ContInOrder()
  2. prog( ( OBJ1 OBJ2 obj1 obj2 Vline Hline HW VW HBP VBP xHBP yHBP xHEP yHEP xVBP yVBP xVEP yVEP
  3.       Space1 Space2 Space3 Space4 LeftDown LeftUp RightUp RightDown TechFile CGroupId
  4.       MyViaOptions Window Num1 Num2 BigNum SmallNum NEWVIAS)

  5. OBJ1 = geGetSortedSelectByLine()
  6. OBJ2 = geGetSortedSelectByLine()
  7. Setlist = mapcar('list OBJ1 OBJ2)
  8. foreach(Set Setlist
  9. if(caar(Set)~>objType == "pathSeg"
  10. then obj1 = car(leConvertShapeToPathSeg(leConvertShapeToPolygon( caar(Set))) )
  11.      dbDeleteObject(caar(Set))
  12. else obj1 = car(leConvertShapeToPathSeg(leConvertShapeToPolygon( caar(Set))) )
  13. );
  14. if(caadr(Set)~>objType == "pathSeg"
  15. then obj2 = car(leConvertShapeToPathSeg(leConvertShapeToPolygon(caadr(Set))) )
  16.      dbDeleteObject(caadr(Set))
  17. else obj2 = car(leConvertShapeToPathSeg(leConvertShapeToPolygon(caadr(Set))) )
  18. );
  19. if(xCoord(obj1~>beginPt)==xCoord(obj1~>endPt) && yCoord(obj2~>beginPt)==yCoord(obj2~>endPt)
  20. then  Vline = obj1 Hline = obj2);if
  21. if(xCoord(obj2~>beginPt)==xCoord(obj2~>endPt) && yCoord(obj1~>beginPt)==yCoord(obj1~>endPt)
  22. then  Vline = obj2 Hline = obj1);if

  23. HW  = Hline~>width/2  VW  = Vline~>width/2
  24. HBP = Hline~>beginPt  HEP = Hline~>endPt
  25. VBP = Vline~>beginPt  VEP = Vline~>endPt

  26. xHBP=xCoord(HBP) yHBP=yCoord(HBP)
  27. xHEP=xCoord(HEP) yHEP=yCoord(HEP)
  28. xVBP=xCoord(VBP) yVBP=yCoord(VBP)
  29. xVEP=xCoord(VEP) yVEP=yCoord(VEP)
  30. Space1 = expt((xHBP-xVBP) 2) + expt((yHBP - yVBP) 2)
  31. Space2 = expt((xHBP-xVEP) 2) + expt((yHBP - yVEP) 2)
  32. Space3 = expt((xHEP-xVBP) 2) + expt((yHEP - yVBP) 2)
  33. Space4 = expt((xHEP-xVEP) 2) + expt((yHEP - yVEP) 2)

  34. CorePoint = list(xVBP yHBP)
  35. LeftDown =list(xVBP-VW yHBP-HW)  LeftUp =list(xVBP-VW yHBP+HW)  
  36. RightDown=list(xVBP+VW yHBP-HW)  RightUp=list(xVBP+VW yHBP+HW)

  37. cv=geGetEditCellView(getCurrentWindow())
  38. tech=techGetTechFile(cv)
  39. viaDefId=techFindViaDefByName(tech "M1_M2")
  40. viaParams=list(list("cutSpacing" list(0.2 0.2))
  41.               list("layer1Enc"   list(0.07 0.02))
  42.               list("layer2Enc"   list(0.07 0.04))
  43.               list("cutRows"  1) list("cutColumns" 2))

  44. TechFile = techGetTechFile(geGetEditRep())
  45. CGroupId = cstFindConstraintGroupIn(TechFile "virtuosoDefaultSetup")
  46. MyViaOptions = viaGetViaOptions(CGroupId)
  47. MyViaOptions~>automatic~>minNumCuts= 2
  48. Window = deGetCellView()

  49. cond(
  50. ((min(Space1 Space2 Space3 Space4) == Space1)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11")
  51. dbCreatVia(cv viaDefId list(xVBP-VW+0.33 yHEP) "R0" viaParams)
  52. dbSetPathSegPoints(Hline list(xVBP-VW yHBP) HEP)
  53. dbSetPathSegPoints(Vline list(xVBP yHBP-HW) VEP)
  54. );
  55. ((min(Space1 Space2 Space3 Space4) == Space2)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11")
  56. OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11"
  57. dbCreatVia(cv viaDefId list(xVBP-VW+0.33 yHEP) "R0" viaParams)
  58. dbSetPathSegPoints(Hline list(xVBP-VW yHBP) HEP)
  59. dbSetPathSegPoints(Vline VBP list(xVEP yHEP+HW))
  60. );
  61. ((min(Space1 Space2 Space3 Space4) == Space3)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11")
  62. OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11"
  63. dbCreatVia(cv viaDefId list(xVBP-VW-0.09 yHEP) "R0" viaParams)
  64. dbSetPathSegPoints(Hline HBP list(xVBP+VW yHEP))
  65. dbSetPathSegPoints(Vline list(xVBP yHBP-HW) VEP)
  66. );
  67. ((min(Space1 Space2 Space3 Space4) == Space4)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11")
  68. OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11"
  69. dbCreatVia(cv viaDefId list(xVBP-VW-0.09 yHEP) "R0" viaParams)
  70. dbSetPathSegPoints(Hline HBP list(xVBP+VW yHEP))
  71. dbSetPathSegPoints(Vline VBP list(xVEP yHEP+HW))

  72. ((min(Space1 Space2 Space3 Space41) == Space1)&&(OBJ1~>layerName=="M3_L113"||OBJ2~>layerName=="M3_L113")
  73. dbSetPathSegPoints(Hline list(xVBP-VW yHBP) HEP)
  74. dbSetPathSegPoints(Vline list(xVBP yHBP-HW) VEP)
  75. NEWVIAS = viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown) MyViaOptions)
  76. );
  77. ((min(Space1 Space2 Space3 Space41) == Space2)&&(OBJ1~>layerName=="M3_L113"||OBJ2~>layerName=="M3_L113")
  78. dbSetPathSegPoints(Hline list(xVBP-VW yHBP) HEP)
  79. dbSetPathSegPoints(Vline VBP list(xVEP yHEP+HW))
  80. NEWVIAS = viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown) MyViaOptions)
  81. );
  82. ((min(Space1 Space2 Space3 Space41) == Space3)&&(OBJ1~>layerName=="M3_L113"||OBJ2~>layerName=="M3_L113")
  83. dbSetPathSegPoints(Hline HBP list(xVBP+VW yHEP))
  84. dbSetPathSegPoints(Vline list(xVBP yHBP-HW) VEP)
  85. NEWVIAS = viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown) MyViaOptions)

  86. );
  87. ((min(Space1 Space2 Space3 Space41) == Space4)&&(OBJ1~>layerName=="M3_L113"||OBJ2~>layerName=="M3_L113")
  88. dbSetPathSegPoints(Hline HBP list(xVBP+VW yHEP))
  89. dbSetPathSegPoints(Vline VBP list(xVEP yHEP+HW))
  90. NEWVIAS = viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown) MyViaOptions)
  91. )
  92. )
  93. )
  94. )
  95. )
            

   

    复制代码


 楼主| 发表于 2023-7-14 09:53:40 | 显示全部楼层
更改为((min(Space1 Space2 Space3 Space4) == Space3)&&((Hline~>layerName=="M1_L111")||(Vline~>layerName=="M1_L11"))就可以用了

另外感谢"着着着火了"博主的帮助
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:15:58 | 显示全部楼层
具体功能能描述一下吗,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 13:32:10 | 显示全部楼层


   
522526tl 发表于 2023-7-13 12:15
具体功能能描述一下吗,谢谢


判断pathseg线为metal1还是metal3?根据不同的情况,控制自动打孔的方向
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 13:39:44 | 显示全部楼层
((min(Space1 Space2 Space3 Space4) == Space3)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11")这里的与或运算不对吗?

试了一下((min(Space1 Space2 Space3 Space4) == Space3)&&((OBJ1~>layerName=="M1_L111")||(OBJ2~>layerName=="M1_L11"))还是不对
回复 支持 反对

使用道具 举报

发表于 2023-7-14 11:03:31 | 显示全部楼层


   
西瓜土豆 发表于 2023-7-13 13:39
((min(Space1 Space2 Space3 Space4) == Space3)&&(OBJ1~>layerName=="M1_L111"||OBJ2~>layerName=="M1_L11 ...


请问MyViaoptions是viaDefId还是via name("M1_M2")这种?

viaGenerateViasInArea()会自动判断层次吗?
回复 支持 反对

使用道具 举报

发表于 2023-7-14 11:15:28 | 显示全部楼层
最终的code 是怎样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-14 13:35:30 | 显示全部楼层


   
YuSHL 发表于 2023-7-14 11:03
请问MyViaoptions是viaDefId还是via name("M1_M2")这种?

viaGenerateViasInArea()会自动判断层次吗?


第一个问题我没有理解什么意思,viaGenerateViasInArea()可以自动判断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-14 13:37:59 | 显示全部楼层


   
maomao198477 发表于 2023-7-14 11:15
最终的code 是怎样?


你先自己琢磨琢磨,不同工艺有些地方不一样,这个核心代码已经有了,大家尽量还是不要做伸手党
回复 支持 反对

使用道具 举报

发表于 2023-7-14 15:20:16 | 显示全部楼层


   
西瓜土豆 发表于 2023-7-14 13:35
第一个问题我没有理解什么意思,viaGenerateViasInArea()可以自动判断


明白了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-9 02:24 , Processed in 0.127706 second(s), 9 queries , Gzip On, MemCached On.

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