monika.er的个人空间 https://blog.eetop.cn/?1776354 [收藏] [复制] [分享] [RSS]

日志

2025-10-29

已有 150 次阅读| 2025-10-29 20:56 |系统分类:其他

;two groups bus connect by via
procedure(connectbusnets(mode)
  prog((cv objs h_bus v_bus)
  cv=geGetEditCellView()
 if(cv~>mode=="r" then
    AppMessage("Waring!!" 'Close "layout is currently in read mode!!");??jump to ask weather make edit,yes or no
    return(nil)
  );end if 
  objs=setof(x objs x~>objType=="pathSeg"||x~>objType=="path"||x~>objType=="rect")
  objs_ps=()
  foreach(obj objs
    ori=geGetSelSetFigPoint(obj)
  case(obj~>objType
     ("rect"    temp0=car(leConvertShapeToPathSeg(obj)) geSelectFigPoint(temp0 ori))
     ("path"    temp0=car(leConvertShapeToPathSeg(obj)) geSelectFigPoint(temp0 ori))
     ("pathSeg" temp0 = obj)
   );case
   objs_ps=append1(objs_ps temp0)
 );end foreach ----将select转换成pathseg
 
;create h/v bus list
  h_bus=()
  v_bus=()
  foreach(obj objs_ps
    begin_point=obj~>beginPt
    end_point=obj~>endPt
    if(yCoord(begin_point)==yCoord(end_point) then h_bus=append1(h_bus obj));end if
    if(xCoord(begin_point)==xCoord(end_point) then v_bus=append1(v_bus obj));end if
  );end for
  h_bus=sort(h_bus lambda((x y) greaterp(nth(1 car(x~>bBox)) nth(1 car(y~>bBox)))))
  v_bus=sort(v_bus lambda((x y) lessp(nth(0 car(x~>bBox)) nth(0 car(y~>bBox)))))
  
;判断选择net那一端,以及起始结束点的大小,来判断net往那边延伸
;judge select pathSeg beginPt or endPt
  len_h_bus=length(h_bus)
  len_v_bus=length(v_bus)
;h_bus
for(i 0 len_h_bus-1
    sel_hobj=nth(i h_bus)
    sel_h_part=geGetSelSetFigPoint(sel_hobj)
    reverse_hbus=nil
if(!car(sel_h_part)&&nth(1 sel_h_part) then ;select endpt
      if(car(sel_hobj~>beginPt)<caaar(v_bus~>bBox) then
        sel_hobj~>endPt=rplaca(sel_hobj~>endPt car(nth(1 car(reverse(v_bus~>bBox)))))
println("7777")
      )
if(car(sel_hobj~>beginPt)>car(nth(1 car(reverse(v_bus~>bBox)))) then
	sel_hobj~>endPt=rplaca(sel_hobj~>endPt caaar(v_bus~>bBox))
	reverse_hbus=t
println("444")
      )
    );end if
    if(car(sel_h_part)&&!nth(1 sel_h_part) then ;select beginpt
      if(car(sel_hobj~>endPt)<caaar(v_bus~>bBox) then
	sel_hobj~>beginPt=rplaca(sel_hobj~>beginPt car(nth(1 car(reverse(v_bus~>bBox)))))
println("7666")
      )
      if(car(sel_hobj~>endPt)>car(nth(1 car(reverse(v_bus~>bBox)))) then
	sel_hobj~>beginPt=rplaca(sel_hobj~>beginPt caaar(v_bus~>bBox))
	reverse_hbus=t
println("5555")
      )
    );end if
  );end for
  ;v_bus
  for(i 0 len_v_bus-1
    sel_vobj=nth(i v_bus)
    reverse_vbus=nil
    sel_v_part=geGetSelSetFigPoint(sel_vobj)
    if(!car(sel_v_part)&&nth(1 sel_v_part) then
      if(yCoord(sel_vobj~>beginPt)<yCoord(nth(1 car(reverse(h_bus~>bBox)))) then
	sel_vobj~>endPt=reverse(rplaca(reverse(sel_vobj~>endPt) nth(1 caar(h_bus~>bBox))))
	reverse_vbus=t
println("5739")
      )
      if(yCoord(sel_vobj~>beginPt)>yCoord(nth(1 car(h_bus~>bBox))) then
 	sel_vobj~>endPt=reverse(rplaca(reverse(sel_vobj~>endPt) nth(1 caar(reverse(h_bus~>bBox)))))
println("1234")
      )
    );end if
    if(yCoord(sel_vobj~>beginPt)>yCoord(nth(1 car(h_bus~>bBox))) then
 	sel_vobj~>endPt=reverse(rplaca(reverse(sel_vobj~>endPt) nth(1 caar(reverse(h_bus~>bBox)))))
println("1234")
      )
    );end if
    if(yCoord(sel_vobj~>endPt)>yCoord(nth(1 car(h_bus~>bBox))) then
 	sel_vobj~>beginPt=reverse(rplaca(reverse(sel_vobj~>beginPt) nth(1 caar(reverse(h_bus~>bBox)))))
println("4523")
      )
    );end if
  )
;judge connected type
  if(mode==1 then h_bus=h_bus else h_bus=reverse(h_bus))
  if(reverse_hbus then h_bus=reverse(h_bus) println("8367"))
if(reverse_vbus then v_bus=reverse(v_bus) println("6367"))
;判断排序方向,确保一个模式下,都是一个方式打孔
  ;find interpoint x:y
  interpts=()
  interpt_xs=()
  interpt_ys=()
  for(i 0 len_h_bus-1
    interpt_y=yCoord(nth(i h_bus)~>endPt)
    interpt_ys=append1(interpt_ys interpt_y)
    interpt_x=xCoord(nth(i v_bus)~>endPt)
    interpt_xs=append1(interpt_xs interpt_x)
    interpts=append1(interpts interpt_x:interpt_y)
  );end for
;create via in metal overlap
  techFile = techGetTechFile(cv)
  constraintGroupId = cstFindConstraintGroupIn(techFile "(virtuosoDefaultSetup)")
  myViaOptions = viaGetViaOptions(constraintGroupId)
  foreach(interpoint interpts
    vias=viaGenerateViasAtPoint(cv interpoint myViaOptions)
  );end for
  AlignNetsToVias()
  );end prog
);end proc


评论 (0 个评论)

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 2

    关注
  • 0

    粉丝
  • 1

    好友
  • 3

    获赞
  • 0

    评论
  • 47

    访问数
关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 ) |网站地图

GMT+8, 2025-11-1 17:42 , Processed in 0.029565 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部