• 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 Design
  3. Skill code for identifying all paths in the design

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 125
  • Views 14520
  • 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

Skill code for identifying all paths in the design

sidm
sidm over 4 years ago

HI All,

I need some help on skill program. Will be helpful if anyone can point me to something that can do the following :

1. Open the layout cell view

2. Query the cellview to iterate over all the shapes in the layout design and note all the shapes that are of type = Path or Pathseg

3. If the shape is of type = Path or Pathseg then get the pointlist corresponding to this shape.

any pointers will be great help.

thanks

  • Cancel
Parents
  • ShawnLogan
    ShawnLogan over 4 years ago

    Dear sidm,

    sidm said:

    I need some help on skill program. Will be helpful if anyone can point me to something that can do the following :

    1. Open the layout cell view

    Did you happen to search on-line support?

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000002JdnmEAC&pageName=ArticleContent

    It provides links to an Adobe Portable Document and PowerPoint file with a tutorial and lab exercises. A link to a tar file with the exercises is also provided. Sample SKILL codes are provided at On-line support articles:

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od000000051iK

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O3w000009xxXdEAI&pageName=ArticleContent

    and the very recent sample GUI  SKILL code (with the same Cadence link I later added)  to get you started that was just posted.

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-design/47494/skill-gui/1372583#1372583

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • sidm
    sidm over 4 years ago in reply to ShawnLogan

    thanks for the reply Shawn, yes I have looked at these material before but if there is a sample code resembling my requirement that will be more helpful. (or atleast a code snippet looping over all the shapes in the cell view to get their pointlist).

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to sidm

    Off the top of my head (I didn't test this) - just printing the output because you didn't make it clear what you wanted:

    procedure(CCFdoStuffForSIDM(lib cell view)
      let((cv pointList)
        cv=dbOpenCellViewByType(lib cell view)
        foreach(shape cv~>shapes
          pointList=
            case(shape~>objType
              ("path" shape~>points)
              ("pathSeg" list(shape~>beginPt shape~>endPt))
            )
          when(pointList
            printf("%s: %L\n" shape~>objType pointList)
          )
        )
        dbClose(cv)
      )
    )

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • sidm
    sidm over 4 years ago in reply to Andrew Beckett

    Thank you very much Andrew , I need to delete all the path and pathsegs in the cellview after scanning the layout design and replace them with a newly drawn path using the pointlist derived earlier from the previous instance of the path/pathseg (that needs to be deleted).

    The width and pointlist derived from the original path has to be reused to construct the new path with another function. Then delete the old path.

    something like :

    cp = list(pointlist from original path/pathseg)

    newpath = Fn(cp old_path_width)

    delete_old_path

    I need to ensure that the code can be run on IC618 and later versions.

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

    HI All,

    In continuation to the previous query , what will be a good command to delete the old path and pathsegs after getting the point list from them ?

    thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • sidm
    sidm over 4 years ago in reply to sidm

    HI All,

    In continuation to the previous query , what will be a good command to delete the old path and pathsegs after getting the point list from them ?

    thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to sidm

    Since you edited your previous post after sending it, I didn't see the edited version above; I chose to delete the email notification because it didn't have any further questions in it. I though it was a particularly odd requirement, but so be it. I still don't understand why on earth you'd want to delete all the paths/pathSegs and then recreate them. I'll leave that as an exercise for you - I have a horrible feeling that this will just be a creeping set of imprecise requirements, so that's why I'm not going to attempt to write the whole code because I don't really know what you want. Presumably you'd also want to keep the layer information, width, end information - it's likely to be far more than just the width and the point list.

    To delete the original shape you'd use dbDeleteObject(shape)

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • sidm
    sidm over 4 years ago in reply to Andrew Beckett

    thanks Andrew,

    The width and pointlist derived from the original path has to be reused to construct the new path with another function. Once this function creates the new path the old one can be deleted.

    Yes I need to take care of the lpp as well as endstyle as well.

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

    Hi Andrew,

    Will the below code that you had shared earlier also take care of hierarchical layout designs / cell views ??

    procedure(CCFdoStuffForSIDM(lib cell view)
      let((cv pointList)
        cv=dbOpenCellViewByType(lib cell view)
        foreach(shape cv~>shapes
          pointList=
            case(shape~>objType
              ("path" shape~>points)
              ("pathSeg" list(shape~>beginPt shape~>endPt))
            )
          when(pointList
            printf("%s: %L\n" shape~>objType pointList)
          )
        )
        dbClose(cv)
      )
    )

    thank you

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 4 years ago in reply to sidm

    Dear sidm,

    II think Andrew's pseudocode was in response to your original request, which was:

    sidm said:

    1. Open the layout cell view

    2. Query the cellview to iterate over all the shapes in the layout design and note all the shapes that are of type = Path or Pathseg

    Hence, I believe his code is for shapes in the cell view you have open. Niote the foreach() argument. I don't see anything in the code that will descend into a shape and find paths within it. Do you?

    I might suggest if you used his code, you simply try it to save Andrew some time. He answers a tremendous number of questions - and I see you have posed more questions in your posts for him before he has even had time to provide any insight into the prior questions!

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • sidm
    sidm over 4 years ago in reply to ShawnLogan

    I have tried the suggested code and it is fine for flat cells but yes I have not been able to make it work with hier. Designs hence I asked this query as I am not an skill code expert. So i thought of confirming the same.

    There is no urgency to answer but will be helpful if some solution can be suggested for hier. Designs by Andrew whenever he has time.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to sidm
    Andrew Beckett said:
    I have a horrible feeling that this will just be a creeping set of imprecise requirements, so that's why I'm not going to attempt to write the whole code because I don't really know what you want

    No, it doesn't handle hierarchy, because you didn't ask that (and it was a very rough untested piece of code that did exactly what you asked for in your earlier post). There are numerous examples on this forum of doing hierarchy traversal, so hopefully you can find those by using the search and adapting the code appropriately. You'll learn far more by doing that and experimenting than just me writing the code for you (which I don't have time to do at the moment, especially as I'm on vacation right now. Bear in mind that I respond in these forums during my spare time - it is not actually part of my job to answer here).

    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