| 
 | 
 
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册  
 
×
 
各位大佬,这是小弟第一次从0到1自己写一个简单的脚本,(之前都是是拿来别人的脚本,一行一行看懂之后自己改一改)现在自己感觉是遇到了循环和变量如何正确应用在自己的函数中的问题了,恳请大佬们指点一下,或者丢一个类似的脚本上来,小弟自己研究也可以,不胜感激! 
 
 
自己写的这个脚本用于自动创建testkey layout,目标是load一个只有float number的定义w l的file,通过自定义函数完成每一个layout的创建。 
我自己的思路是先用skill通过坐标运算完成一个cell的生成(用的leMakeCell,已成功),并自定义为Testkey()函数。然后写一个循环,根据load进来的w l不断调用函数生成一个一个的cell。 
 
目前遇到的问题是在skill IDE中两个.il检查都没有error(但有warning,我没管),但是load这个skill的时候却不行,会报dbAddFigToFigGroup的错,实在不明白,自我感觉是传递w l的时候出现了问题,试了很多种写法都不行,求教 
 
 
SA = 0.15;follow PDK 
Y1 = 0.1 
Y2 = 0.105;follow DRC 
X = 0.105 
spacex = 0.89 
spacey = 0.71 
six = 0.525;space of n/p imp to poly,x direction 
siy = 0.495;space of n/p imp to poly,y direction 
simx = 2.7;space of n/p imp to MOX,x direction 
simy = 3.0;space of n/p imp to MOX,y direction 
subw = 1.6;n/p sub polygon width 
subaaw = 1.0;width of aa in sub 
sis = 0.4;space of n/p imp to n/p sub 
dx = (subw-subaaw)/2;space of aa to n/p sub 
 
 
/********************************/ 
 
procedure(Testkey() 
let((cv w l poly1 aa polyup polyup2 polydown fg fg2 fg3 fg7 fg8 SDN 
                                         M1insub M1inpolyup M1inaaL M1inaaR) 
        cv = geGetEditCellView() 
        w = atof(car(lineContent)) 
    l = atof(cadr(lineContent)) 
        poly1 = dbCreateRect(cv list("PO" "drawing") list(-l/2:-w/2 l/2:w/2)) 
        point1 = poly1~>bBox 
        aa = dbCreateRect(cv list("AA" "drawing") list(caar(point1)-SA:cadar(point1)-Y1 caadr(point1)+SA:cadadr(point1)+Y1)) 
        point2 = aa~>bBox 
        fet = dbCreateRect(cv list("FET" "marking42") list(caar(point1)-SA:cadar(point1)-Y1 caadr(point1)+SA:cadadr(point1)+Y1)) 
        hgate = dbCreateRect(cv list("HGATE" "marking") list(-l/2:-w/2 l/2:w/2)) 
        polyup = dbCreateRect(cv list("PO" "drawing") list(caar(point2)-X:cadadr(point2)-Y1 caadr(point2)+X:cadadr(point2)+0.12)) 
        polyup2 = dbCreateRect(cv list("PO" "drawing") list(caar(point2)-X:cadadr(point2)-Y1 caadr(point2)+X:cadadr(point2)+Y2)) 
        polydown = dbCreateRect(cv list("PO" "drawing") list(caar(point2)-X:cadar(point2)-Y2 caadr(point2)+X:cadar(point2)+Y1)) 
        fg = dbCreateFigGroup(cv "fg5" t 1:1 "R0") 
        dbAddFigToFigGroup(fg poly1) 
        dbAddFigToFigGroup(fg aa) 
        dbAddFigToFigGroup(fg polyup2) 
        dbAddFigToFigGroup(fg polydown) 
        point3 = fg~>bBox 
        fg2 = dbCopyFig(fg cv list(0:cadadr(point3)+spacex+(cadadr(point3)-cadar(point3))/2 "R0" 1.0)) 
        fg8 = dbCopyFig(fg cv list(0:cadar(point3)-spacex-(cadadr(point3)-cadar(point3))/2 "R0" 1.0)) 
        fg4 = dbCopyFig(fg cv list(caar(point3)-spacey-(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        fg6 = dbCopyFig(fg cv list(caadr(point3)+spacey+(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        fg1 = dbCopyFig(fg2 cv list(caar(point3)-spacey-(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        fg3 = dbCopyFig(fg2 cv list(caadr(point3)+spacey+(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        fg7 = dbCopyFig(fg8 cv list(caar(point3)-spacey-(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        fg9 = dbCopyFig(fg8 cv list(caadr(point3)+spacey+(caadr(point3)-caar(point3))/2:0 "R0" 1.0)) 
        point4 = fg7~>bBox 
        point5 = fg3~>bBox 
        SDN = dbCreateRect(cv list("SDN" "drawing") list(caar(point4)-six:cadar(point4)-siy caadr(point5)+six:cadadr(point5)+siy)) 
        point6 = SDN~>bBox 
        MOX = dbCreateRect(cv list("MOX" "drawing") list(caar(point6)-simx:cadar(point6)-simy caadr(point6)+simx:cadadr(point6)+simy)) 
        SDP = dbCreatePolygon(cv list("SDP" "drawing") list((caar(point6)-sis-subw:cadadr(point6)) 
                                                            (caar(point6)-sis:cadadr(point6))    
                                                            (caar(point6)-sis:cadar(point6)-sis)    
                                                            (caadr(point6)+sis:cadar(point6)-sis) 
                                                            (caadr(point6)+sis:cadadr(point6))    
                                                            (caadr(point6)+sis+subw:cadadr(point6))   
                                                            (caadr(point6)+sis+subw:cadar(point6)-sis-subw)  
                                                            (caar(point6)-sis-subw:cadar(point6)-sis-subw) 
        )) 
        aainSDP = dbCreatePolygon(cv list("AA" "drawing") list((caar(point6)-sis-dx-subaaw:cadadr(point6)-dx) 
                                                            (caar(point6)-sis-dx:cadadr(point6)-dx)    
                                                            (caar(point6)-sis-dx:cadar(point6)-sis-dx)    
                                                            (caadr(point6)+sis+dx:cadar(point6)-sis-dx) 
                                                            (caadr(point6)+sis+dx:cadadr(point6)-dx)    
                                                            (caadr(point6)+sis+dx+subaaw:cadadr(point6)-dx)   
                                                            (caadr(point6)+sis+dx+subaaw:cadar(point6)-sis-dx-subaaw)  
                                                            (caar(point6)-sis-dx-subaaw:cadar(point6)-sis-dx-subaaw) 
        )) 
        M1insub = dbCreateRect(cv list("M1" "drawing") list(-0.5:cadar(point6)-1.7 0.5:cadar(point6)-0.7)) 
        point7 = M1insub~>bBox 
        CTinsub = dbCreateViaShapeArray(cv "CT" M1insub caar(point7)+0.08 cadar(point7)+0.08 0.2 0.2 0.06 0.06 4 4) 
        point8 = polyup~>bBox 
        M1inpolyup = dbCreateRect(cv list("M1" "drawing") list(caar(point8):cadar(point8)+0.145 caadr(point8):cadadr(point8)-0.005)) 
        M1inaaL = dbCreateRect(cv list("M1" "drawing") list(caar(point2)+0.005:cadar(point2)+0.1 caar(point2)+0.075:cadadr(point2)-0.1)) 
        M1inaaR = dbCreateRect(cv list("M1" "drawing") list(caadr(point2)-0.075:cadar(point2)+0.1 caadr(point2)-0.005:cadadr(point2)-0.1)) 
        point9 = M1inaaL~>bBox 
        point10 = M1inaaR~>bBox 
        M1inSD = cadadr(point1)-cadar(point1) 
        CTpitch = 0.14 
        CTinSDm = int((M1inSD-0.2-0.06)/CTpitch)+1 
        if(evenp(CTinSDm) 
        then 
                CT1 = dbCreateViaShapeArray(cv "CT" M1inaaL caar(point9)+0.005 0.04 0.0 0.14 0.06 0.06 CTinSDm/2 1) 
                CT2 = dbCreateViaShapeArray(cv "CT" M1inaaL caar(point9)+0.005 -0.1 0.0 -0.14 0.06 0.06 CTinSDm/2 1) 
                CT3 = dbCreateViaShapeArray(cv "CT" M1inaaR caar(point10)+0.005 0.04 0.0 0.14 0.06 0.06 CTinSDm/2 1) 
                CT4 = dbCreateViaShapeArray(cv "CT" M1inaaR caar(point10)+0.005 -0.1 0.0 -0.14 0.06 0.06 CTinSDm/2 1) 
        );if 
        if(oddp(CTinSDm) 
        then 
                CT1 = dbCreateViaShapeArray(cv "CT" M1inaaL caar(point9)+0.005 -0.03 0.0 0.14 0.06 0.06 (CTinSDm+1)/2 1) 
                CT2 = dbCreateViaShapeArray(cv "CT" M1inaaL caar(point9)+0.005 -0.03 0.0 -0.14 0.06 0.06 (CTinSDm+1)/2 1) 
                CT3 = dbCreateViaShapeArray(cv "CT" M1inaaR caar(point10)+0.005 -0.03 0.0 0.14 0.06 0.06 (CTinSDm+1)/2 1) 
                CT4 = dbCreateViaShapeArray(cv "CT" M1inaaR caar(point10)+0.005 -0.03 0.0 -0.14 0.06 0.06 (CTinSDm+1)/2 1) 
        );if 
        point11 = polyup~>bBox 
        polylength = caadr(point11)-caar(point11) 
        CTinpolym = int((polylength-0.06-0.06)/CTpitch)+1 
        if(evenp(CTinpolym) 
        then 
                CT5 = dbCreateViaShapeArray(cv "CT" M1inpolyup 0.04 cadadr(point11)-0.07 0.14 0.0 0.06 0.06 1 CTinpolym/2) 
                CT6 = dbCreateViaShapeArray(cv "CT" M1inpolyup -0.1 cadadr(point11)-0.07 -0.14 0.0 0.06 0.06 1 CTinpolym/2) 
        );if 
        if(oddp(CTinpolym) 
        then 
                CT5 = dbCreateViaShapeArray(cv "CT" M1inpolyup -0.03 cadadr(point11)-0.07 0.14 0.0 0.06 0.06 1 (CTinpolym/2)+1) 
                CT6 = dbCreateViaShapeArray(cv "CT" M1inpolyup -0.03 cadadr(point11)-0.07 -0.14 0.0 0.06 0.06 1 (CTinpolym/2)+1) 
        );if 
 
        leMakeCell(cv~>shapes "lib" "test_testkey" "layout" nil) 
);let 
);procedure 
 
 
 
 
补充内容 (2024-6-7 17:03): 
20240607补充,各位大佬,现在又遇到一个问题,如何用skill调用一个pcell,并对其cdf参数进行赋值? |   
 
 
 
 |