|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
各位大佬,这是小弟第一次从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参数进行赋值? |
|