• 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. Merging shapes non-interactively

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 17615
  • 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

Merging shapes non-interactively

LostInRTN
LostInRTN over 14 years ago

I need to use the merge function in a layout via a SKILL program. Doing this interactively is easy- select everything and select "merge" from the menus. How is this done without opening a window? I don't see the merge function in the db or dd functions reference. I can open it with dbOpenCellViewByType, then what?

 Thanks,

Tom Spargo

  • Cancel
  • skillUser
    skillUser over 14 years ago

     Hi Tom,

    Although I have already answered this for you via a Service Request, I will answer this here for the benefit of others.

    The leMergeShapes command can be used in a non-graphical fashion, here is what I did to test this. First I created the cellview "leMerge" in library "test" and then created some overlapping shapes. I interactively tried the command and then reverted to the previously saved version and closed the cellview. Then I performed the commands non-graphically:

    
    ;; open the cellview in virtual memory, non-graphically
    cv = dbOpenCellViewByType("test" "leMerge" "layout" "maskLayout" "a")
    =>  db:243736620
    ;; perform the merge command on all of the shapes
    leMergeShapes(cv~>shapes)
    =>  (db:243736828)
    

    You might want to only merge certain shapes rather than all of them, in which case it would be useful to apply a pre-filter, for example to merge only the shapes on the metal1 layer:

    
    leMergeShapes(
      ;; take the first (hopefully the only) result from 'setof'
      car(
        ;; filter through the layer-purpose pairs to find the "metal1"
        ;; layer - here I'm assuming only one purpose is used, but the
        ;; purpose can be matched explicitly also by adding to the
        ;; condition:  && purpose=="drawing"
        setof(lp cv~>lpps lp~>layerName=="metal1")
      )~>shapes
    )
    

    Best regards,

    Lawrence.

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

    Hi Tom,

    I've also found that sometimes it's better to use dbLayerOr() (with a single list of layers) to merge the shapes, and then discard the originals - in some trials I did a while ago, this had better performance than leMergeShapes with a large number of shapes.

    I used this approach in solution 11328674 

    Best Regards,

    Andrew.

    • Cancel
    • Vote Up +1 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