代码实现功能:
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD
层次关系:
pad层次----PD drawing
padlabel层次----A3TEXT drawing
textpad label的层次-----text drawing
如果工艺不同请到这些进行对应的修改。代码实现功能:
1.提取DIE的面积
2.提取pad坐标
3.提取pad对应的label,并将其以text层打成label放在PAD
层次关系:
pad层次----PD drawing
padlabel层次----A3TEXT drawing
textpad 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.ilicfbciw窗口上输入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即可再次生成。

(以下可认为是废话,可不看)
所以说现在主要存在以下问题:
1. hier下不能生成pad坐标以及label,虽然我也尝试过使用leSearchHierarchy函数来搜索底层的pad坐标,但是搜索出来的坐标为模块打开的坐标并非为调用过来的实际坐标。打平之后做这个脚本是一个好的选择。有更好的方法请推荐推荐。
2. 如何才能使用选择某个选中的pad然后让它进行顺时针或者逆时针从那个pad开始搜索。就像Layout Turbo一样的感觉。(我有个想法就是先将pad坐标生成,然后再想办法读入再进行排序,但觉得麻烦就没有做尝试。我也是个懒怂。)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。