• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Allegro X PCB Editor
  3. Dangling Via Report

Stats

  • State Suggested Answer
  • Replies 11
  • Answers 3
  • Subscribers 162
  • Views 8608
  • Members are here 0
More Content

Dangling Via Report

karthikeyank
karthikeyank over 2 years ago

HI,

i want to find out the dangling via location by using cadence skill program. Can anyone please help me out.

prog;

procedure(chk()
axlClearSelSet()
axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
via_data = axlGetSelSet(axlAddSelectAll())
foreach(via_data_lp via_data
                     if(via_data_lp->unconnected then
                       print(via_data_lp->net->name)
                       print(via_data_lp->xy)
                      )
)
)

  • Sign in to reply
  • Cancel
Parents
  • AsbjornEdvalds
    0 AsbjornEdvalds over 2 years ago

    Hi, 

    Like Luan said, you can get this report from the report menu. However, if you want to do this by using skill, you can use the axlDBGetConnect() command. 

    I.e. replace your

    via_data_lp->unconnected

    with

    length(axlDBGetConnect(via_data_lp t))<2

    which finds all vias with less than two connections

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • karishma
    0 karishma over 1 year ago in reply to AsbjornEdvalds

    length(axlDBGetConnect(via_data_lp t))<2 using this code I was able to get the vias with single connection. When I try this code the dangling vias are getting deleted but some unintentional vias are also getting deleted. I want to find the list of dangling vias from the vias list and delete them.If any suggestions .Please help me.

    foreach(via l_vias
        len = length(axlDBGetConnect(via)); connections connected to via
        if(len == 1 then ; checks if via has 1 connection
                if(via->net->name != nil then ;checks if via has net name
                      via_loc = via->xy
                      axlDeleteObject(via)
                  );endif
           );endif
    );end foreach

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • AsbjornEdvalds
    0 AsbjornEdvalds 10 months ago in reply to karishma

    Hi, 

    The DRC>0 condition is to only generate and show a window that shows the report "dangling_via_report" generated above. If there are no errors, there is no reason to show the file. 

    The deleteFile can be found in the sklanguser documentation under the I/O and File Handling chapter. 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • karishma
    0 karishma 10 months ago in reply to AsbjornEdvalds

    Hi,

    I need to get dangling vias list same as the dangling vias quick report using allegro skill.I have below code but it's not working.I am new to skill Please help me.

    foreach(via l_vias
    len = length(axlDBGetConnect(via)); connections connected to via
    ;fprintf(repfile "Found Via %L with Net name %L connections %d\n" via->xy via->net->name len)
    if(len == 1 then ; a lonely cline is connected to a via
    conn_obj = car(axlDBGetConnect(via))
    if(conn_obj->net->name == nil then
    via_loc = via->xy
    fprintf(repfile "Found Via with one connection at %L on a net %L \n" via_loc via->net->name)
    ;axlDeleteObject(via)
    );endif
    );endif
    );end foreach

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • eDave
    0 eDave 10 months ago in reply to karishma

    You have changed != to == so you will never see vias with a net.

    Your simplified code would be:

    foreach(via l_vias
      when(onep(length(axlDBGetConnect(via))) ; a lonely cline is connected to a via
        fprintf(repfile "Found Via with one connection at %L on a net %L \n" via->xy via->net->name)
      );end when
    );end foreach

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • karishma
    0 karishma 10 months ago in reply to eDave

    Hi Dave,

    I need to get dangling vias list same as it's generated using quick reports 

    Using the above code I am able to get the vias with one connection, but some other vias are also getting listed apart from dangling vias list from quick reports.

    how can we get the dangling vias list same as quick reports. Please suggest

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • eDave
    0 eDave 10 months ago in reply to karishma

    Try this:

    foreach(via, l_vias
    n = length(axlDBGetConnect(via))
    when(n < 2 ; Fewer than two clines are connected to a via
    viaPads = setof(pad, via ->pads, car(parseString(pad ->layer, "/")) == "ETCH" && pad ->type == "REGULAR")
    viaPadsInPlanes = setof(pad, viaPads, exists(shp, axlDBGetShapes(pad ->layer), shp ->net == via ->net && axlGeoPointInShape(via ->xy, shp)))
    n = n + length(viaPadsInPlanes)
    when(n < 2; Fewer than two clines or etch shapes are connected to a via
    pins = axlPinsOfNet(via ->net, 'pin)
    viaPads = setof(pad, viaPads, !member(pad, viaPadsInPlanes))
    viaPadsInPinPads = setof(viaPad, viaPads, exists(pin, pins, axlGeoPointInShape(via ->xy, car(axlPolyFromDB(pin, ?layer viaPad ->layer, ?padType "REGULAR")))))
    n = n + length(viaPadsInPinPads)
    when(n < 2; Fewer than two clines, etch shapes or pins are connected to a via
    printf("Found Via with one connection at %L on a net %L \n", via->xy, via->net->name)
    ;fprintf(repfile "Found Via with one connection at %L on a net %L \n", via->xy, via->net->name)
    )
    )
    );end when
    );end foreach

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Reply
  • eDave
    0 eDave 10 months ago in reply to karishma

    Try this:

    foreach(via, l_vias
    n = length(axlDBGetConnect(via))
    when(n < 2 ; Fewer than two clines are connected to a via
    viaPads = setof(pad, via ->pads, car(parseString(pad ->layer, "/")) == "ETCH" && pad ->type == "REGULAR")
    viaPadsInPlanes = setof(pad, viaPads, exists(shp, axlDBGetShapes(pad ->layer), shp ->net == via ->net && axlGeoPointInShape(via ->xy, shp)))
    n = n + length(viaPadsInPlanes)
    when(n < 2; Fewer than two clines or etch shapes are connected to a via
    pins = axlPinsOfNet(via ->net, 'pin)
    viaPads = setof(pad, viaPads, !member(pad, viaPadsInPlanes))
    viaPadsInPinPads = setof(viaPad, viaPads, exists(pin, pins, axlGeoPointInShape(via ->xy, car(axlPolyFromDB(pin, ?layer viaPad ->layer, ?padType "REGULAR")))))
    n = n + length(viaPadsInPinPads)
    when(n < 2; Fewer than two clines, etch shapes or pins are connected to a via
    printf("Found Via with one connection at %L on a net %L \n", via->xy, via->net->name)
    ;fprintf(repfile "Found Via with one connection at %L on a net %L \n", via->xy, via->net->name)
    )
    )
    );end when
    );end foreach

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Children
No Data
Cadence Guidelines

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information