• 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. Custom IC SKILL
  3. Script for finding same Metal type Shape Overlapping a ...

Stats

  • Locked Locked
  • Replies 23
  • Subscribers 146
  • Views 26242
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Script for finding same Metal type Shape Overlapping a Trace

RFStuff
RFStuff over 12 years ago

Dear All,

I want to find whether same metal type shape  is overlapping another shape of the same metal.

If it is overlapping, then the overlap area should blink.

Basically this I need for finding SHORT with undesired trace.

For example: I have a trace ( may be a Rectangle/Path). I select this. Then an enabled SKILL script should find a same metal type shape overlapping with the trace and highligting the overlapped area with the trace.

Can anybody show me some light  for this.

Kind Regards,

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago
    I'd probably use dbGetOverlaps to find the shapes (on the layer of interest) within the bBox of the selected trace, and then use dbLayerAnd to produce the shapes on a dummy layer to find the precise interactions. Then create markers with the same coordinates as the polygons coming from dbLayerAnd, and delete the dbLayerAnd result shapes.

    There's also a set of functions (dbPointAnd or something like that - I'm in an airport and can't check) which don't need to actually create any shapes in the database, but those could be harder to use if you've got a variety of different source shape types.

    Regards,
    Andrew
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • theopaone
    theopaone over 12 years ago

     Andrew is correct, dbLayerAnd is the easiest to use to create the overlapping areas but the dbPointArrayAnd (I'm away from Virtuoso so check the name) may be easier to use if you find shapes in the hierarchy. Transform the points to the current cellView, perform the AND and create a marker. If using dbLayerAnd, output the shapes to a layer like "y0" and then turn them into markers. Be sure to delete the new shapes.

    Ted

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

     dear andrew & ted,

     thanks alot for your replies.

    could you please tell th function for creating a marker around the polygon.

    is odcRegMarker() the right one ?

    kind regards,

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • berndfi
    berndfi over 12 years ago

     For that purpose I would try "geCreateMarkerByBBox".

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Bernd's right - that's what I was going to suggest (or any of the geCreateMarker family). Note that when you move to IC61, these functions are obsolete - they create markers using the "old" way of a shape on the marker layer, compared with the new OpenAccess marker objects. So in IC61 you should use dbCreateMarker (this didn't exist in IC5141).

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

    Dear Andrew,

    I tried with dbGetOverlaps(). But it did NOT work

    The test scenario is as follows:-

    I am in the toplevel and I have the hierarchy level of 5.In level 4 only 3 shapes (paths) are overlapping with the trace.

    But if you see it is actually showing me 6 shapes. Which is NOT correct.

     shapeList = dbGetOverlaps(cv obj1~>bBox obj1~>layer 0:5)
    \t (db:217705012
    \t     (db:217517248 db:262161624)
    \t     (db:217517248 db:262161472)
    \t     (db:217517248 db:262161312)
    \t     (db:217517248 db:261977724)
    \t     (db:217517248 db:261977644)
    \t     (db:217517248 db:261977564)
    \t )

    Then for dbLayerAnd() the following returned nil

    dbLayerAnd(cv "ME7" list(car(cdr(shapeList))) list(obj1))

     Kind Regards,

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • theopaone
    theopaone over 12 years ago

    1. Before IC6, dbGetOverlaps returned the value of any shape whose Bounding Box intersected with the search bounding box. dbGetTrueOverlaps found shapes that only physically overlapped the search box.

    2. The shapes in the hierarchy have to be transformed to the current coordinate space before passing into dbLayerAnd. The shapes that are returned as a list are hierarchical shapes, you have to transform their points into the current coordinate space and then either create new shapes (usually on a layer like y0) or use the point list in the dbPointArray functions. If doing the former, be sure to delete the new shapes after you are done with them. If the latter, you have to transform rectangles into 4 points and paths have to be transformed into their outlines.

    Commands to look up: dbConcatTransform,  dbTransformPoint.

    Ted

    RFStuff said:

    DI tried with dbGetOverlaps(). But it did NOT work

    The test scenario is as follows:-

    I am in the toplevel and I have the hierarchy level of 5.In level 4 only 3 shapes (paths) are overlapping with the trace.

    But if you see it is actually showing me 6 shapes. Which is NOT correct.

     shapeList = dbGetOverlaps(cv obj1~>bBox obj1~>layer 0:5)
    \t (db:217705012
    \t     (db:217517248 db:262161624)
    \t     (db:217517248 db:262161472)
    \t     (db:217517248 db:262161312)
    \t     (db:217517248 db:261977724)
    \t     (db:217517248 db:261977644)
    \t     (db:217517248 db:261977564)
    \t )

    Then for dbLayerAnd() the following returned nil

    dbLayerAnd(cv "ME7" list(car(cdr(shapeList))) list(obj1))

     Kind Regards,

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

    1) The guide says that usage of dbGetTrueOverlaps() should be avoided

     

    2) I couldn't get about your point transformation idea.

    1st of all dbLayerAnd() needs the list of shape IDs not the list of POINTS.

    2nd if you know the exact points of overlap ( which you think can be transformed), then why one needs the ANDing operation.

    It is a chicken egg dilema.

    Kind Regards,

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • theopaone
    theopaone over 12 years ago

    Disregard the warning. It may have performance problems in IC5141 but it is the only way you will get the answer you want.

    The shape ID's that are being returned are hierarchical. The dbLayer functions only take shapes defined in the local coordinate space. If you just get the shape from the hierarchical list, you are getting the shape in the local coordinate space for the shape's master cellView. You have to get the points of that shape and then transform them to the current coordinate space (in you open cellView) and then create a new shape with those transformed points. Pass that new shape into  the dbLayer functions. You are not transforming the overlap, you are transforming the original points to the current coordinate space, creating a new shape and using that shape to determine the overlap points.

     Which came first? The rooster.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago
    I've posted an example in the last few days called something like abGetOverlapTransform which will take one of the results from dbGetOverlaps and give you the overall transform. Then you could use dbCopyFig to copy the original shape using abGetOverlapShape - I may have posted that too, I can't remember - I'll check, using the combined transform into the current cellview. Do the dbLayetAnd on this new shape and then delete it when you're done.

    Slight performance penalty when using dbGetTrueOverlaps but you don't really need to worry about using that because any false hits will return nil from the layer and.

    Andrew
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
>

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