• 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 get the skill function about creating a new pcel...

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 143
  • Views 17966
  • 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 get the skill function about creating a new pcell

Azraelqq
Azraelqq over 4 years ago

Recently,I need to create the pcell using skill in virtuoso.

I want to know where I can understand these function,eg:dbOpenCellViewByType,dbCreateParamInst.

I have queried many docments,eg:SKILL Language Usere Guide,SKILL Language Reference.but its useless.

I also try to open 'the skill finder' from virtuoso,but its no response,maybe my cadence is not intact. 

And,I find that maybe the doc 'Design Framework IITm SKILL Functions' is useful for me.But i don't find it.

Thanks for your help.

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    You didn't mention the version of the tools you're using, but since IC617 at least you could either search from the Help menu (enter the function name, then it will bring up cdnshelp with the matches) - the blue annotation below, or you could launch cdsFinder from the command line, search and hit the More Info button (which would bring up the help page for that function - I didn't show that part) - the red annotation below:

    Alternatively, in the CIW type cdsGetInstPath() which will tell where your software installation is, and other that, look in the doc/skdfref/skdfref.pdf - for example:

    /export/home/apps/IC618_isr/doc/skdfref/skdfref.pdf

    Or look on support.cadence.com - you can search in the documentation and this would lead to (say) dbOpenCellViewByType documentation (note, I can't guarantee this link will work forever as it points to a specific version of the documentation). Make sure you don't pick the "Integrators Toolkit" documentation because that's talking about the C interface rather than the SKILL interface.

    So there are numerous ways of getting to the documentation - hopefully one of these will save you.

    Andrew

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

    Andrew,thank you for your answer.

    Sorry,I forget to show my version 617.At the very begining,I try to search my unknowing function from "Cadence Helper".But it always show "No items matching your query"

    I find that my cadence lack the file "cdsFinder" by opening the"Skill API Finder" 

    I find some useful pdf from the doc.These functions that I need are included in "Cadence® User Interface SKILL Functions Reference"

    Recently,I discover the "Log Filter" and record all skill code that the mouse action represents.Through it, I write a simply skill script.

    But when I use the command "virtuoso -nocdsinit -nograph -replay mySkill.il" on the command line,it's always running even though mySkill.il has been executed.

    I want to know how to let it automatic stop after execute mySkill.il.

    I add "exit" at the end of mySkill.il,it always useless.And "dbAccess" and "-retore" even can't execute mySkill.il.

    From your other questions' reply,I also learn a lot.Thanks again for your detailed reply. 

    Azrael

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

    That's the wrong place to search in cdnshelp - that will only search within the page. You have to use (I think - I'm not on the network so can't check with IC617 right now) View->Navigator and search from there.

    The functions in the User Interface SKILL functions are nothing you would use in a PCell, so this seems a bit of a mix of questions - it's pretty unclear as to what you're trying to find out.

    cdsFinder should be found in <ICinstDir>/tools/bin - if it's not there, somebody has messed with your installation and you should request that a new, clean installation is performed.

    You should just be able to add exit() (remember to put the parenthesis) at the end of a replay or restore file and that should cause it to exit. dbAccess may not be suitable - it depends on which functions you are calling within the replay file.

    Andrew.

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

    The exit() successfully stop myfile.il.But i need that,myfile.il file stop after all statement execute in myfile.il.Maybe myfile needs too long time,about 40s.

    Azrael

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

    Azrael,

    I'm not sure what that command you posted is intended to do - where are you invoking this from? (not sure why skillfile is inside curly parentheses. Also, the exit() on the same line won't be invoked by virtuoso - my guess is that it's probably exiting from whatever process you are running to invoke virtuoso, which might be the cause of your problem.

    The suggestion was to call exit() at the end of the file you're running. Normally (since Virtuoso is not multi-threaded), the program would then run and exit when done - since you've not explained what you're actually doing here, it's rather hard to know precisely why it doesn't work (note, one case where exit at the end is not necessarily a good idea is if you are running simulations using certain non-blocking interfaces as the simulations run in the background and you might end up exiting before they have finished).

    Andrew.

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

    Sorry for my inexact description.

    In fact, I want to use python get a gds file by telling virtuoso library,cell,cellView and other necessary parameters.

    Therefore,I write a skill script by opening "Log Filter" in virtuoso.

    Now,my problem is that when I execute the command "virtuoso -nograph -replay skill.il" at the command line.The script is successfully carried out,but the command is stuck in there like I run the virtuoso using "virtuoso&" at the command line.I have to use CTRL+Z to quit it and can continue to write other command.This is not what  I want.After all, I need to execute other command automatically at the command line. 

    I try your advice "virtuoso -nograph -replay skill.il exit()",but the skill script is executed half and virtuoso is closed.I hope that virtuoso can wait the skill script is carried out,then virtuoso is closed. 

    Funnily,I write "exit" at the end of my skill file,but it seems not to have been carried out.At least,the command line don't generate a new "(base) [xxx]$".In CIW, "exit" will close the virtuoso.

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

    ddsHiCreateLibrary() hiiSetCurrentForm('ddsCreateLibForm) ddsCreateLibForm->LibName->value="generateNeededCell3" ddsCreateLibForm->Option->value= "Attach to an existing technology library" hiFormDone(ddsCreateLibForm) hiiSetCurrentForm('tcNewLibAttachTechForm) tcNewLibAttachTechForm->attachTechLibList->value='("tsmcN65") hiFormDone(tcNewLibAttachTechForm) deNew() hiiSetCurrentForm('deNewForm) deNewForm->deLibName->value="generateNeededCell3" deNewForm->deCellName->value="cell2" deNewForm->viewType->value="layout" hiFormDone(deNewForm) leHiCreateInst() hiiSetCurrentForm('leCreateInstForm) leCreateInstForm->libName->value="tsmcN65" leCreateInstForm->cellName->value="mimMat" leCreateInstForm->leInstParamDisclosure->value=t leCreateInstForm->wr->value="4u M" leCreateInstForm->nr->value="24" mouseAddPt(t) 0:0 leHiSave() exit

    This is myskill.il

    Azrael

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

    Maybe it's more convenient to look at it this way

    ddsHiCreateLibrary()
    hiiSetCurrentForm('ddsCreateLibForm)
    ddsCreateLibForm->LibName->value="generateNeededCell3"
    ddsCreateLibForm->Option->value= "Attach to an existing technology library"
    hiFormDone(ddsCreateLibForm)

    hiiSetCurrentForm('tcNewLibAttachTechForm)
    tcNewLibAttachTechForm->attachTechLibList->value='("tsmcN65")
    hiFormDone(tcNewLibAttachTechForm)

    deNew()
    hiiSetCurrentForm('deNewForm)
    deNewForm->deLibName->value="generateNeededCell3"
    deNewForm->deCellName->value="cell2"
    deNewForm->viewType->value="layout"
    hiFormDone(deNewForm)

    leHiCreateInst()
    hiiSetCurrentForm('leCreateInstForm)
    leCreateInstForm->libName->value="tsmcN65"
    leCreateInstForm->cellName->value="mimMat"

    leCreateInstForm->leInstParamDisclosure->value=t
    leCreateInstForm->wr->value="4u M"
    leCreateInstForm->nr->value="24"
    mouseAddPt(t)
    0:0

    leHiSave()
    exit

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

    Maybe it's more convenient to look at myskill.il file this way.

     
    ddsHiCreateLibrary()
    hiiSetCurrentForm('ddsCreateLibForm)
    ddsCreateLibForm->LibName->value="generateNeededCell3"
    ddsCreateLibForm->Option->value= "Attach to an existing technology library"
    hiFormDone(ddsCreateLibForm)

    hiiSetCurrentForm('tcNewLibAttachTechForm)
    tcNewLibAttachTechForm->attachTechLibList->value='("tsmcN65")
    hiFormDone(tcNewLibAttachTechForm)

    deNew()
    hiiSetCurrentForm('deNewForm)
    deNewForm->deLibName->value="generateNeededCell3"
    deNewForm->deCellName->value="cell2"
    deNewForm->viewType->value="layout"
    hiFormDone(deNewForm)

    leHiCreateInst()
    hiiSetCurrentForm('leCreateInstForm)
    leCreateInstForm->libName->value="tsmcN65"
    leCreateInstForm->cellName->value="mimMat"

    leCreateInstForm->leInstParamDisclosure->value=t
        leCreateInstForm->wr->value="4u M"
        leCreateInstForm->nr->value="24"
        mouseAddPt(t)
        0:0
        
    leHiSave()
    exit
            
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to Azraelqq
    Azraelqq said:
    I try your advice "virtuoso -nograph -replay skill.il exit()",

    I did not advise that - that's never going to work.I actually was suggesting putting an exit() call in your SKILL code - without having seen. your SKILL code.

    You're suffering from the problems associated with capturing the log file entries and then trying to make this into a SKILL script to batch update the same thing. What goes into the log file is enough to replay the data as-is. This usually involves capturing functions to complete the interactive forms, but is absolutely not the right way to automate things. You normally would want to use a set of functions to do operations without needing any user interaction.

    For example, in your case I would anticipate that (at least) the leHiSave() is prompting you to save the layout that you've just created an instance in. Because you're running in -nograph mode, it will have displayed a dialog box (invisibly) and be waiting for somebody to click on the button to perform the save. You've not captured the function which OK's the form...

    A better approach would be to not use UI functions to do all this work. However, that's beyond the scope of what can be answered in a forum post - you could (if you have access to support.cadence.com) use the Training choices there to study the online training for SKILL Programming. Or contact customer support.

    A quick and dirty approach might be just to do:

    dbSave(geGetEditCellView())

    instead of leHiSave().

    It's also a good idea to try out your script using "virtuoso -restore script.il" (i.e. without the -nograph) to see whether it runs to completion or is prompting you to click on something.

    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