• 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. How to check PDK path in cadence shell window?

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 143
  • Views 13784
  • 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

How to check PDK path in cadence shell window?

saurabh96
saurabh96 over 3 years ago

Hi there,

is there a way to check the PDK directory in cadence shell window using skill-

Suppose when i do echo $ROOT_PDK in cadence shell window...when path is found then ,path should assign to particular string box...if the $ROOT_PDK is undefined or doesn't found path in shell window....then it should assign null value to same string box?

Also, when i run script, shell window should not open...its checks in background and and print results in string box

Regards,

Thomas

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago

    Well, this rather depends on the PDK you're using, but if it's just about getting a UNIX env var, then getShellEnvVar("ROOT_PDK") would return the value of the environment variable, or nil if it's not set.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • saurabh96
    saurabh96 over 3 years ago in reply to Andrew Beckett

    Thanks andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • saurabh96
    saurabh96 over 3 years ago in reply to Andrew Beckett

    Hello Andrew,
    few doubts related to above ques-

    when am doing simplifyFilename("ROOT_PDK/mentor_calibre/*/source.added") in CIW

    am getting /test/pdk/thomas/link/mentor_calibre/*/source.added   

    and when am doing ls $ROOT_PDK/mentor_calibre/*/source.added  in cadence shell window am getting -> /test/pdk/thomas/link/mentor_calibre/190/source.added ->which is correct.

    I want to get full realpath of file i.e /test/pdk/thomas/link/mentor_calibre/190/source.added

    how i can do using skill...

    One way i have tried -

    if(getShellEnvVar("ROOT_PDK") == nil then
    form->enter->value = ""
    else
    added = ipcBeginProcess("ls $ROOT_PDK/mentor_calibre/*/source.added")
    ipcWait(added)
    file = ipcReadProcess(added)
    form->enter->value = file
    )

    when am running above script output am getting correct but-

    am getting warning message as- *WARNING* 1 unprintable character passed as a field string value was changed to a space

    Regards,

    Thomas

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to saurabh96

    Whilst simplifyFilename does handle environment variable expansion nowadays (so simplifyFilename("$ROOT_PDK/mentor_calibre") would work if the env var was set), it wouldn't handle wildcards because those are a shell feature. It would be a bit odd, since the wildcard could return multiple matches so simplifyFilename would be a misnomer in that case. 

    You could use getDirFiles to read the directory up to the point with the wild card to find what's in the directory - getDirFiles(simplifyFilename("$ROOT_PDK/mentor_calibre")) and based on what that returns build the rest of the path.

    Using the ipcBeginProcess approach is presumably because you have something set in your environment to run ls with --color (my guess is that LS_COLORS env var is set). So perhaps you should run "/bin/ls --color=never" or better still just use:

    added = ipcBeginProcess("echo -n $ROOT_PDK/mentor_calibre/*/source.added")

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • saurabh96
    saurabh96 over 3 years ago in reply to Andrew Beckett

    Hello Andrew,
    Thanks for suggestion...

    ipcBeginProcess("echo -n $ROOT_PDK/mentor_calibre/*/source.added") is working fine & charm.

    but its getting struck for one or two seconds(run-time extends)...
    is it fine to happens?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to saurabh96

    There's some overhead in starting external processes via IPC (I wouldn't normally expect it to take that long though) - it's normally intended for bigger processes than starting "echo". That's why it would be better to use something like:

    dirName="$ROOT_PDK/mentor_calibre"
    fileName="source.added"
    expDirName=simplifyFilename(dirName)
    ; filter out anything beginning with dot (which is what "*" would do)
    filesInDir=pcreMatchList("^[^.]" getDirFiles(simplifyFilename(expDirName)))
    fullPaths=foreach(mapcar file filesInDir strcat(expDirName "/" file "/" fileName))
    ; find the first file in the expanded list that exists
    matchedFile=car(exists(fullPath fullPaths isFile(fullPath)))

    Yes, it's a few lines of code, but not really that complicated.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • saurabh96
    saurabh96 over 3 years ago in reply to Andrew Beckett

    Thanks Andrew,
    Andrew is there any doc related to pcre functions....i didn't find much in skill pdf.

    Regards,

    Thomas

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to saurabh96

    Absolutely. They've been documented in the SKILL Language Reference manual for at least the last 15 years (if my memory is correct - it's certainly in a release I have handy from over 10 years ago; they were introduced in IC6.1.0 I think). The pcreCompile function is the place to start and it points you there at http://pcre.org which documents the Perl Compatible Regular Expressions that are supported by the pcre family of functions in SKILL.

    So I'm not sure where you were looking, but they are documented.

    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