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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

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

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

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

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

x




  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()可以自动判断


明白了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-9 11:00 , Processed in 0.028438 second(s), 8 queries , Gzip On, Redis On.

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