代码实现功能:
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD上
层次关系:
pad层次----PD drawing
pad的label层次----A3TEXT drawing
以text打pad label的层次-----text drawing
如果工艺不同请到这些进行对应的修改。代码实现功能:
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD上
层次关系:
pad层次----PD drawing
pad的label层次----A3TEXT drawing
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD上
层次关系:
pad层次----PD drawing
pad的label层次----A3TEXT drawing
以text打pad label的层次-----text drawing
如果工艺不同请到这些进行对应的修改。代码实现功能:
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD上
层次关系:
pad层次----PD drawing
pad的label层次----A3TEXT drawing
以text打pad label的层次-----text drawing
如果工艺不同请到这些进行对应的修改。
如果工艺不同请到这些进行对应的修改。
代码如下:(分号为注释符号)
1. printf("\nBondingPadLabel()\n")
2. printf("\nRemovePadLocation()\n")
3. hiSetBindKey("Layout" "<Key>9" "BondingPadLabel()")
4. hiSetBindKey("Layout" "<Key>0" "RemovePadLocation()")
5. procedure(RemovePadLocation()
6. printf("\nRemovePadLocation()\n")
7. cv = getEditRep(hiGetCurrentWindow())
8. deleteFile("./bondingPadLabel.info")
9. locationId=leSearchHierarchy( cv cv~>bBox 0 "label" list( list("layer" "==" list("text" "drawing") ) ) )
10. foreach(locationLabel locationId
11. dbDeleteObject(locationLabel)
12. )
13. )
14. procedure(BondingPadLabel()
15. printf("\nBondingPadLabel()\n")
16. cv = getEditRep(hiGetCurrentWindow())
17. ;cv = deGetCellView()
18. ;cv = geGetSelSet(cv)
19. deleteFile("./bondingPadLabel.info")
20. ;geDeselectAll(deGetCellView())
21. padId=leSearchHierarchy( cv cv~>bBox 0 "rectangle" list( list("layer" "==" list( "PD" "drawing" ) ) ) )
22.
23. cvrx=xCoord(upperRight(cv~>bBox))
24. cvry=yCoord(upperRight(cv~>bBox))
25. cvlx=xCoord(lowerLeft(cv~>bBox))
26. cvly=yCoord(lowerLeft(cv~>bBox))
27. dieAreax=cvrx-cvlx
28. dieAreay=cvry-cvly
fprintf作用29. printout = outfile("./bondingPadLabel.info" "a")
30. fprintf(printout "\n\ndieArea=%.2f X " dieAreax)
31. fprintf(printout "%.2f \n\n" dieAreay)
32. fprintf(printout "%13s " "PAD")
33. fprintf(printout "%13s " "X")
34. fprintf(printout "%13s " "Y")
35. fprintf(printout "%13s\n" "SIZE")
36. foreach(shape padId;cv~>shapes
37. ;if((strcmp((shape~>layerName) "PD")==0)
38. ; case(shape~>objType
39. ; ("rect"
40. urx=xCoord(upperRight(shape~>bBox))
41. ury=yCoord(upperRight(shape~>bBox))
42. ulx=xCoord(lowerLeft(shape~>bBox))
43. uly=yCoord(lowerLeft(shape~>bBox))
44. coolx=(urx+ulx)/2
45. cooly=(ury+uly)/2
46. deltaX=urx-ulx;
47. deltaY=ury-uly;
48.
49. labelId=cadr(leSearchHierarchy( cv shape~>bBox 0 "label" list( list("layer" "==" list( "A3TEXT" "drawing" ) ) ) ) )
50. if(labelId then
51. labelName=labelId~>theLabel;
52. else
53. labelName="NOPADNAME"
54. )
55. coolx_s=sprintf(nil "%.2f" coolx)
56. cooly_s=sprintf(nil "%.2f" cooly)
57. deltaX_s=sprintf(nil "%.2f" deltaX)
58. deltaY_s=sprintf(nil "%.2f" deltaY)
59. SIZE = strcat(deltaX_s "x" deltaY_s)
60. fprintf(printout "%13s " labelName)
61. fprintf(printout "%13s " coolx_s)
62. fprintf(printout "%13s " cooly_s)
63. fprintf(printout "%13s\n" SIZE)
64. CoorStr = strcat(" " coolx_s ";" cooly_s " ")
65. dbCreateLabel( cv list("text" "drawing") list(coolx uly-20) CoorStr "centerCenter" "R0" "roman" 40)
66. ;)
67. ; ); endcase
68. ; );end of if
69. ); end of foreach
70. close(printout)
71. ); end procedure
将它存储为pad.il在icfb的ciw窗口上输入load("pad.il")然后回车。打开你想要生成的padlocation的版图(PAD以及Label一定要放在TOP顶层),然后按下9调用BondingPadLabel(),这时在窗口pad层次的位置生成了以text为层次,坐标为文字的label。如果不想产生坐标信息在版图上可以用分号注释掉dbCreateLabel( cv list("text" "drawing") list(coolx uly-20) CoorStr "centerCenter" "R0" "roman" 40)
并在当前cadence运行目录下产生bondingPadLabel.info的文件,主要记录DIEAREA以及PAD坐标信息。
如果想重新生成PAD的坐标信息,先按下0清除当前的坐标信息,所以打这个坐标信息的text层最好是无关紧要的层次。再按下9即可再次生成。
(以下可认为是废话,可不看)
所以说现在主要存在以下问题:
并在当前cadence运行目录下产生bondingPadLabel.info的文件,主要记录DIEAREA以及PAD坐标信息。
如果想重新生成PAD的坐标信息,先按下0清除当前的坐标信息,所以打这个坐标信息的text层最好是无关紧要的层次。再按下9即可再次生成。
(以下可认为是废话,可不看)
所以说现在主要存在以下问题:
1. hier下不能生成pad坐标以及label,虽然我也尝试过使用leSearchHierarchy函数来搜索底层的pad坐标,但是搜索出来的坐标为模块打开的坐标并非为调用过来的实际坐标。打平之后做这个脚本是一个好的选择。有更好的方法请推荐推荐。
2. 如何才能使用选择某个选中的pad然后让它进行顺时针或者逆时针从那个pad开始搜索。就像Layout Turbo一样的感觉。(我有个想法就是先将pad坐标生成,然后再想办法读入再进行排序,但觉得麻烦就没有做尝试。我也是个懒怂。)
2. 如何才能使用选择某个选中的pad然后让它进行顺时针或者逆时针从那个pad开始搜索。就像Layout Turbo一样的感觉。(我有个想法就是先将pad坐标生成,然后再想办法读入再进行排序,但觉得麻烦就没有做尝试。我也是个懒怂。)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论