• 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. Customised Unconnected net report

Stats

  • Replies 11
  • Subscribers 161
  • Views 13673
  • Members are here 0
More Content

Customised Unconnected net report

tmd63
tmd63 over 4 years ago

Does anyone have or know how to make a customised unconnected net report?

I need to have a report that shows similar to the 'unconnected pins report'. But it also shows the distance of the unconnected pins (X1-X2 and Y1-Y2 for example, or even further [[X1-X2]^2+[Y1-Y2}^2]^0.5 so it gives the distance between the X1,Y1 and X2,Y2 positions).

I could import into excel and extract the information but this is long and involved and prone to errors, if there is an easier report method I would like to know how.

  • Sign in to reply
  • Cancel
  • oldmouldy
    oldmouldy over 4 years ago in reply to tmd63

    There isn't a license required for SKILL, you can create SKILL scripts with a text editor and load them with any license level of PCB Editor. "skill" in PCB Editor Command Window will start the SKILL Command function and SKILL scripts can be, "carefully", experimented with from there. Check the PCB SKILL forum and resources on the Cadence Support site for documentation, examples, and so on.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • tmd63
    tmd63 over 4 years ago in reply to oldmouldy

    It appears to be a sub-set of Virtuoso??

    SKILL uses the Cadence Design Framework II license (License Number 111), which is checked out at the launch of the skill executable or the workbench.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • DavidJHutchins
    DavidJHutchins over 4 years ago

    below is an example skill file 'custom_ucn.il"

    procedure((custom_ucn \@optional FileName)
    prog((outport OutputName NetCnt RatCnt Total startPin endPin String)
    if( FileName then
    (OutputName = strcat(simplifyFilename(".") "/" FileName))
    (OutputName = FileName)
    else
    (OutputName = strcat(simplifyFilename(".") "/ucn.rpt"))
    )
    if(isFile(OutputName) then
    unless(deleteFile(OutputName)
    (axlMsgPut "ERROR: could not remove existing file %s" OutputName)
    return()
    )
    )
    if((outport = outfile(OutputName)) then
    (Total = 0)
    foreach(net ((axlDBGetDesign)->nets)
    (RatCnt = 0)
    foreach(rat (net->ratsnest)
    unless( rat->pinsConnected
    (RatCnt++)
    when( eq(RatCnt 1)
    fprintf(outport "%s\n" net->name)
    )
    (startPin = car(rat->pins))
    (endPin = cadr(rat->pins))
    when(startPin && endPin
    fprintf(outport "From: %s.%s (%f %f) " startPin->component->name startPin->number xCoord(startPin->xy) yCoord(startPin->xy))
    fprintf(outport "To: %s.%s (%f %f) " endPin->component->name endPin->number xCoord(endPin->xy) yCoord(endPin->xy))
    fprintf(outport "Delta: (%f %f)\n" difference(xCoord(startPin->xy) xCoord(endPin->xy)) difference(yCoord(startPin->xy) yCoord(endPin->xy)))
    )
    )
    )
    (Total = Total + RatCnt)
    )
    (axlMsgPut "%d ratsnests written to %s" Total OutputName)
    else
    (axlMsgPut "ERROR: could not open output file %s" OutputName)
    return()
    )
    )
    )
    axlCmdRegister("custom_ucn" 'custom_ucn)


    Below is the allegro.jrl file showing how to load & run it:

    \i (00:00:06) generaledit
    \i (00:00:09) skill '`'load "custom_ucn.il"`''
    (00:00:09) t
    \i (00:00:15) custom_ucn
    \t (00:00:15) 2 ratsnests written to C:\Temp/ucn.rpt
    \i (00:00:16) generaledit

    and below is the output file contents:

    XDMA_EVENT_INTR0
    From: P2.17 (1281.000000 687.500000) To: R18.2 (1650.000000 430.000000) Delta: (-369.000000 257.500000)
    DGND
    From: P2.12 (1494.000000 537.500000) To: P2.10 (1494.000000 487.500000) Delta: (0.000000 50.000000)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • tmd63
    tmd63 over 4 years ago in reply to DavidJHutchins

    Thank you.

    I take it this is a SKILL file and not a Common LISP file as some of the operations are not know by Common LISP interpreters.

    On the lines
    (startPin = car(rat->pins))
    (endPin = cadr(rat->pins))
    Should they both read cadr(rat->pins)?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • tmd63
    tmd63 over 4 years ago in reply to DavidJHutchins

    Would this work?

    (diffX = difference(xCoord(startPin->xy) xCoord(endPin->xy)))
    (diffY = difference(yCoord(startPin->xy) yCoord(endPin->xy)))
    (startPin = cadr(rat->pins))
    (endPin = cadr(rat->pins))
    when(startPin && endPin
    fprintf(outport "From: %s.%s (%f %f) " startPin->component->name startPin->number xCoord(startPin->xy) yCoord(startPin->xy))
    fprintf(outport "To: %s.%s (%f %f) " endPin->component->name endPin->number xCoord(endPin->xy) yCoord(endPin->xy))
    fprintf(outport "Delta: (%f %f) " diffX diffY
    fprintf(outport "Length: (%f)\n " sqrt( ( diffX * diffX) + ( diffY * diffY))

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
<>
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