• 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. Help on skill code for stretching of rectangle on 3 sides...

Stats

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

Help on skill code for stretching of rectangle on 3 sides for many cells

narendra046
narendra046 over 13 years ago

 Hi Friends,

       I have a library with lot of statndard cells.for every cell,it have "DNW" layer in rectangle shape.now I want to stretch NBL on right,left,bottom sides with only 2u distance . For every cell I have to do this modification. can you any body help in this by skill programme.

Thanks

Narendra 

  • Cancel
  • dmay
    dmay over 13 years ago

    Something like this should work.

    procedure(loopCells(libName @optional (viewList list("layout")))
      let((libId cvId)
        libId = ddGetObj(libName)
        foreach(cell libId~>cells
            foreach(viewName cell~>views~>name
                when(member(viewName viewList)
                    when(cvId = dbOpenCellViewByType(libId cell~>name viewName nil "a")
                        stretchDNW(cvId)
                    )
                )
            )
        )
        t
      ) ;let
    ) ;proc


    procedure(stretchDNW(@optional (cv geGetEditCellView()))
      let((lpp grow shapes bBox pt1 pt2)
        lpp = list("DNW" "drawing")
        grow = 2.0
        printf("Working on: %s %s\n" cv~>cellName cv~>viewName)
        shapes = setof(x cv~>shapes x~>lpp==lpp)
        foreach(shape shapes
            when(shape~>objType=="rect"
                bBox = shape~>bBox
                pt1 = list(leftEdge(bBox)-grow bottomEdge(bBox)-grow)
                pt2 = list(rightEdge(bBox)+grow topEdge(bBox))
                shape~>bBox = list(pt1 pt2)
            )
        )
        when(cv~>modifiedButNotSaved
            dbSave(cv)
            dbPurge(cv)
        )
      ) ;let
    ) ;proc

    Set the layer name and the value to grow by in the second procedure. Call the first procedure by passing it your library name:
    loopCells("mystdcells")

    If you need to handle more than layout views you could do this:
    loopCells("mystdcells" list("layout" "abstract"))

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • narendra046
    narendra046 over 13 years ago
    Hi Derek,

    Its working great.I done this for lot of cells in library at at time.Thank you very very much..........

    Narendra
    • 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