EDA365电子工程师网

标题: 过孔重叠检查 直接源码复制上来了 为了没有权限下载考虑 需要的可以复制去 PS 非原创 [打印本页]

作者: l8877l    时间: 2015-10-28 20:45
标题: 过孔重叠检查 直接源码复制上来了 为了没有权限下载考虑 需要的可以复制去 PS 非原创
本帖最后由 l8877l 于 2015-10-28 20:48 编辑


axlCmdRegister("sv" `Stack_Vias)        
procedure( Stack_Vias()
         let(
                    (vias
                            lx
                            ly
                            ux
                            uy
                            StackVias
                            logfile
                            rep_file
                    )
         axlClearSelSet()
         axlVisibleDesign(nil)
         axlVisibleLayer( "VIA CLASS/TOP" t)
         axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t)
         axlVisibleUpdate(t)
         axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
         vias = axlGetSelSet(axlAddSelectAll())
         StackVias=nil
         foreach( via  vias
                        axlClearSelSet()
                        axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
                        lx=car(via->xy)-8
                        ly=cadr(via->xy)-8
                        ux=car(via->xy)+8
                        uy=cadr(via->xy)+8
                 axlAddSelectBox(list(lx:ly ux:uy))
                 n=axlGetSelSetCount()
                 if( axlGetSelSetCount()>1  then
                          StackVias=cons(via StackVias)
                          ); end if
                        );end foreach
                     
                     logfile="./Stack_Vias.txt"
                     rep_file=outfile(logfile)
              fprintf(rep_file "\t Stack Vias Report\n\n Padstack Name\t\tLocation\n\n")
         foreach( via StackVias
              fprintf(rep_file "%L\t\t%L\n" via->name , via->xy )
                       );end foreach
              
         if( length(StackVias)==0 then
                    axlMsgPut("No stack via.")
          else
                   axlMsgPut("%d stack vias exist."  length(StackVias))
                  );end if
                 axlClearSelSet()
           close(rep_file)
           axlUIViewFileCreate(logfile "Stack Vias Log" t)
          );end let
        );end defun
                  
                     
                  
                  


作者: 361553894    时间: 2015-11-2 08:30
本帖最后由 361553894 于 2015-11-2 08:46 编辑

axlAddSelectBox(list(lx:ly ux:uy))
这里的bBox不太合理,实际上这个bBox是包住REGULAR的正方形框,而不是实体圆形的框,所以斜对角上并没有重叠的也会误报
而且,左下右上拓宽8mil来寻找范围内的vias不太合理,斜对角的超过8mil,你的方法会漏掉很多
要检查过孔重叠,实际上ANTIPAD有重叠也需要考虑在内
正确的应该是
vPoly1 = axlPolyFromDB(via1, ?padType 'ANTI)
axlSetFindFilter(?enabled '("all") ?onButtons '("noall" "vias"))
axlSingleSelectBox(car(vPoly1)->bBox);这里抓到的依旧是方框,而不是圆形的框,所以需要下一步进行筛选
via2s = axlGetSelSet()
foreach(via2 via2s
    unless(via2 == via1
        vPoly2 = axlPolyFromDB(via2, ?padType padType)
        ...
        ;然后通过axlPolyOperation(vPoly1 vPoly2 'And)来判断俩via是否真的有重叠(具体筛选方法就不在这展开了)






欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2