• 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. Allegro skill Symbols overlap

Stats

  • State Suggested Answer
  • Replies 3
  • Answers 1
  • Subscribers 159
  • Views 4352
  • Members are here 0
More Content

Allegro skill Symbols overlap

ivy372
ivy372 over 1 year ago

Hi all,

I want to check symbol's place_bound overlap value.

The check rule is when the place_bound edge on edge is ok as below:

The axlGeoIsBoxOverlap result is only show the ⇒ t/nil 

axlGeoIsBoxOverlap
axlGeolsBoxOverlap(
l_first_bbox
l_second_bbox
[t_orientation]
)
⇒ t/nil

How can I get the overlap value?

Thanks~

  • Sign in to reply
  • Cancel
  • DavidJHutchins
    0 DavidJHutchins over 1 year ago

    Why don't you use Setup>Constraints>DFA Constraint Spreadsheet ???

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

    I added some code to the original skill I provided to calculate the size of the overlap...

    procedure(Check_Overlap()
    let((Layers ShapeLayer Shapes Shape poly1 poly2 l_result bbox llx lly urx ury Dx Dy)
    (Layers = list("PLACE_BOUND_TOP" "PLACE_BOUND_BOTTOM"))
    foreach( Layer Layers
    (axlClearSelSet)
    (ShapeLayer = strcat("PACKAGE GEOMETRY/" Layer))
    axlVisibleDesign(nil)
    axlVisibleLayer(ShapeLayer t)
    axlSetFindFilter(?enabled list("noall" "shapes" ) ?onButtons list("noall" "shapes" ))
    (axlAddSelectAll)
    (Shapes = axlGetSelSet())
    (axlClearSelSet)
    (Shape = car(Shapes))
    (Shapes = cdr(Shapes))
    while( and(Shape listp(Shapes))
    foreach( Remaining Shapes
    ;axlMsgPut("Checking between %s and %s" Shape->parent->refdes Remaining->parent->refdes)
    when( axlGeoIsBoxOverlap(Shape->bBox Remaining->bBox)
    ;axlMsgPut("ERROR: Overlap between %s and %s" Shape->parent->refdes Remaining->parent->refdes)
    (poly1 = (axlPolyFromDB Shape))
    (poly2 = (axlPolyFromDB Remaining))
    (l_result = (axlPolyOperation poly1 poly2 'AND))
    if( null(l_result) then
    axlMsgPut(list axlPolyErrorGet())
    else
    foreach( poly l_result
    (bbox = (poly->bBox))
    (llx = caar(bbox))
    (lly = cadar(bbox))
    (urx = caadr(bbox))
    (ury = cadadr(bbox))
    (Dx = (urx - llx))
    (Dy = (ury - lly))
    if( Dx < Dy then
    axlMsgPut("ERROR: Overlap %f between %s and %s" Dx Shape->parent->refdes Remaining->parent->refdes)
    else
    axlMsgPut("ERROR: Overlap %f between %s and %s" Dy Shape->parent->refdes Remaining->parent->refdes)
    )
    )
    )
    )
    )
    (Shape = car(Shapes))
    (Shapes = cdr(Shapes))
    )
    )
    t
    )
    )

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • ivy372
    0 ivy372 over 1 year ago in reply to DavidJHutchins

    I will try it~

    Thanks Dave so much~

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