• 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. pCell skill for beginners

Stats

  • Locked Locked
  • Replies 21
  • Subscribers 148
  • Views 31751
  • 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

pCell skill for beginners

stuso
stuso over 16 years ago

Hi,

i'd like some advice for creating my first simple pCell from skill. I have no skill experience so i'm looking for a good place to start.

My ultimate aim (for now) is to create a rectangular via array with X and Y stretch handles. For example you have M1->M4(the top & bottom layers would be parameters) that you can stretch in X or Y and it fills with the max vias allowed by spacing rules. However to begin with i'd be happy to create a parameterised rectangle of M1 that i can stretch in one direction & take it from there.

Pointers to on-line tutorials and very simple examples would be great, right now i am blindly searching around source-link.

Thanks

Stu

  • Cancel
Parents
  • skillUser
    skillUser over 16 years ago

    Hi Stu,

    In addition to what Andrew has said, you can also use a CDF callback for a parameter as a validation check, this is a good use of a CDF callback - please also bear in mind the advice in the following solution (written by Andrew):  The Dangers of CDF Callbacks

    If you use CDF for a parameter, you can use this to set the Display of the parameter which can appear differently to the parameter name, and you can use the CDF to control whether a parameter is displayed or not. You can create the CDF through SKILL also, so this can be in the file that is loaded by the libInit.il (or in that file directly) alongside the PCell code itself.  Depending on the amount and complexity of your code, you may wish to have multiple files to house the SKILL in, e.g. you've got multiple PCells and want one SKILL code file per cell. You might then just load all of the SKILL from the libInit.il, as in this example:

    let( ((libName "pcells") path skillPath ilFiles)
    ;; you might have the code in a subdirectory, if so, add this to the path path = ddGetObjReadPath(ddGetObj(libName))
    skillPath = getSkillPath()
    unless(member(path skillPath)
    setSkillPath(cons(path skillPath))
    )
    ilFiles = setof(files getDirFiles(path) rexMatchp("\\.il$" files))
    foreach(file ilFiles
    unless(file == "libInit.il"
    printf("Library %s libInit.il loading %s\n" libName file)
    loadi(file)
    ); unless the file is this file
    ); foreach
    t
    ); let

    An easy way to write the SKILL to create the CDF is to create the CDF using the form-driven interface and then use cdfDump() to write this to a file as SKILL code.

    Good luck!

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • skillUser
    skillUser over 16 years ago

    Hi Stu,

    In addition to what Andrew has said, you can also use a CDF callback for a parameter as a validation check, this is a good use of a CDF callback - please also bear in mind the advice in the following solution (written by Andrew):  The Dangers of CDF Callbacks

    If you use CDF for a parameter, you can use this to set the Display of the parameter which can appear differently to the parameter name, and you can use the CDF to control whether a parameter is displayed or not. You can create the CDF through SKILL also, so this can be in the file that is loaded by the libInit.il (or in that file directly) alongside the PCell code itself.  Depending on the amount and complexity of your code, you may wish to have multiple files to house the SKILL in, e.g. you've got multiple PCells and want one SKILL code file per cell. You might then just load all of the SKILL from the libInit.il, as in this example:

    let( ((libName "pcells") path skillPath ilFiles)
    ;; you might have the code in a subdirectory, if so, add this to the path path = ddGetObjReadPath(ddGetObj(libName))
    skillPath = getSkillPath()
    unless(member(path skillPath)
    setSkillPath(cons(path skillPath))
    )
    ilFiles = setof(files getDirFiles(path) rexMatchp("\\.il$" files))
    foreach(file ilFiles
    unless(file == "libInit.il"
    printf("Library %s libInit.il loading %s\n" libName file)
    loadi(file)
    ); unless the file is this file
    ); foreach
    t
    ); let

    An easy way to write the SKILL to create the CDF is to create the CDF using the form-driven interface and then use cdfDump() to write this to a file as SKILL code.

    Good luck!

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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