TA的每日心情 | 郁闷 2024-11-4 15:41 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RF线次层挖空
skill操作步聚:
1) 快捷键ctrl+R,在option页选择挖空层及设定间距。其中间距有两种设置方式:按线宽倍数及直接设定间距,任选一种。
2) 在板中选择次层要挖空的pin、via或chines,可单选、框选也可使用右键菜单的Temp Group命令多选(多选后必须再次右键选取complete完成;
3)点击add keepout,在选定层产生route keepout(如2)中选择不包含clines,无法判定线宽,间距设定自动跟从第二种方式)
4)选择两个pin,点击add line keepout,在两pin之间产生route keepout ,其他设置与上同。
网上搜索的代码,skill会报错,有没有大佬指点一下,跪谢
以下是原代码:
axlCmdRegister("clear_RF" `clear_RF)
axlSetAlias( "~R" "clear_RF")
defun( clear_RF ()
clear_RF_form()
axlSetFindFilter(?enabled `("NOALL" "CLINES" "pins" "vias" ) ?onButtons `("CLINES"))
axlClearSelSet()
cline_list=nil
while( axlSelect()
ls=axlGetSelSet()
a=car(ls)
if( a->objType=="path" then
a=nthelem(2 parseString(a->layer "/"))
else
a=nthelem(2 parseString(car(a->startEnd) "/"))
)
if( a=="TOP" then
layer=nthelem(2 layer_list)
axlFormListSelect(fs "layer_name" layer)
else
if( a=="BOTTOM" then
layer=nthelem(length(layer_list)-1 layer_list)
axlFormListSelect(fs "layer_name" layer)
)
)
)
axlFinishEnterFun()
)
defun( clear_RF_form ()
clear_RF_file="./clesr_RF_file.form"
p=outfile(clear_RF_file "w")
if( car(axlDBGetDesignUnits())=="mils" then
s="mil"
else
s="mm"
)
if(p != nil then
fprintf(p "FILE_TYPE=FORM_DEFN VERSION=2\n")
fprintf(p "FORM\n")
fprintf(p "FIXED\n")
fprintf(p "PORT 40 60\n")
fprintf(p "HEADER "fanout BBvia"\n")
fprintf(p "TILE\n")
fprintf(p "\n")
fprintf(p "TEXT "clear layer"\n")
fprintf(p "TLOC 1 1\n")
fprintf(p "ENDTEXT\n")
fprintf(p "\n")
fprintf(p "FIELD layer_name\n")
fprintf(p "FLOC 9 1\n")
fprintf(p "LIST "" 12 5\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "GROUP "clear space"\n")
fprintf(p "GLOC 1 11\n")
fprintf(p "GSIZE 20 7\n")
fprintf(p "ENDGROUP\n")
fprintf(p "\n")
fprintf(p "FIELD xws\n")
fprintf(p "FLOC 2 13\n")
fprintf(p "CHECKLIST " " "1"\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "FIELD width\n")
fprintf(p "FLOC 2 15\n")
fprintf(p "CHECKLIST " " "1"\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "FIELD xw\n")
fprintf(p "FLOC 5 13\n")
fprintf(p "REALFILLIN 6 3\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "FIELD um\n")
fprintf(p "FLOC 5 15\n")
fprintf(p "REALFILLIN 6 6\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "TEXT "W"\n")
fprintf(p "TLOC 13 13\n")
fprintf(p "ENDTEXT\n")
fprintf(p "\n")
fprintf(p "TEXT "%s"\n" s)
fprintf(p "TLOC 13 15\n")
fprintf(p "ENDTEXT\n")
fprintf(p "\n")
fprintf(p "FIELD add_s\n")
fprintf(p "FLOC 1 19\n")
fprintf(p "MENUBUTTON "add keepout" 15 3\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "FIELD add_L\n")
fprintf(p "FLOC 1 22\n")
fprintf(p "MENUBUTTON "add line keepout" 15 3\n")
fprintf(p "ENDFIELD\n")
fprintf(p "\n")
fprintf(p "ENDTILE\n")
fprintf(p "ENDFORM\n")
else
printf("ERROR,can't create form file!")
)
close(p)
;axlFormCreate('fs clear_RF_file '("msgLines" 0) 'do_clear_RF nil nil )
axlMiniStatusLoad( 'fs clear_RF_file 'do_clear_RF t )
a=axlLayerGet("ETCH/TOP")
s=""
layer_list=nil
while( s!=nil
s=a->name
layer_list=append1(layer_list s)
s=a->nextLayer
if( s!=nil then
nextlayer=strcat("ETCH" "/" s)
a=axlLayerGet(nextlayer)
)
)
layer=nthelem(2 layer_list)
axlFormListDeleteAll(fs "layer_name")
axlFormSetField(fs "layer_name" layer_list)
axlFormListSelect(fs "layer_name" layer)
axlFormSetField(fs "xws" t)
if( boundp('xs)==nil then
xs="2.0"
xum="0.6"
)
axlFormSetField(fs "xw" xs)
axlFormSetField(fs "um" xum)
axlFormDisplay(fs)
if(isFile( clear_RF_file) then
deleteFile(clear_RF_file)
)
)
defun( do_clear_RF (fs)
case( fs->curField
("layer_name"
layer=fs->curValue
)
("xw"
xs=fs->curValue
)
("um"
xum=fs->curValue
)
("add_s"
if( ls!=nil then
foreach(a ls
polydbid = axlPolyFromDB(a, ?layer car(a->startEnd) ?padType 'REGULAR)
if( axlFormGetField( fs "xws")=="1" then
i=1
while( nthelem(i ls)->objType!="path" && i<length(ls)
i=i+1
)
b=nthelem(i ls)
if( b->objType=="path" then
if( b->isSameWidth==t then
s=car(b->segments)->width*atof(xs)
else
s=0
foreach(c b->segments
if( c->width>s then s=c->width)
)
s=s*atof(xs)
)
else
s=atof(xum)
axlFormSetField(fs "width" t)
)
else
s=atof(xum)
)
exp_poly = (axlPolyExpand polydbid s 'ACU_ARC)
axlDBCreateShape(car(exp_poly) t strcat("ROUTE KEEPOUT/" layer))
sprintf(xum "%f" s)
axlFormSetField(fs "um" xum)
)
)
)
("add_L"
if( length(ls)==2 then
if( car(ls)->objType="pin" && cadr(ls)->objType=="pin" then
s=atof(xum)
polydbid = axlPolyFromDB(car(ls), ?layer car(car(ls)->startEnd) ?padType 'REGULAR)
exp_poly = (axlPolyExpand polydbid s 'NONE)
a=car(exp_poly)->bBox
w1=abs(caar(a)-caadr(a))/2
h1=abs(cadar(a)-cadadr(a))/2
polydbid = axlPolyFromDB(cadr(ls), ?layer car(cadr(ls)->startEnd) ?padType 'REGULAR)
exp_poly = (axlPolyExpand polydbid s 'NONE)
a=car(exp_poly)->bBox
w2=abs(caar(a)-caadr(a))/2
h2=abs(cadar(a)-cadadr(a))/2
s=atof(xum)
a=car(ls)->xy
b=cadr(ls)->xy
if( abs(car(a)-car(b))>abs(cadr(a)-cadr(b)) then
path = axlPathStart( list(car(a):cadr(a)-h1 car(a):cadr(a)+h1 car(b):cadr(b)+h2 car(b):cadr(b)-h2 car(a):cadr(a)-h1 ))
else
path = axlPathStart( list(car(a)-w1:cadr(a) car(a)+w1:cadr(a) car(b)+w2:cadr(b) car(b)-w2:cadr(b) car(a)-w1:cadr(a)))
)
axlDBCreateShape(path t strcat("ROUTE KEEPOUT/" layer))
else
print("Select two pins.")
)
else
print("Select two pins.")
)
)
)
)
|
|