• 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. Can I execute commands with commands like bind keys?

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 143
  • Views 9041
  • 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

Can I execute commands with commands like bind keys?

Daeho
Daeho over 3 years ago

Hi.

We are currently proceeding with the setting related to streamout.

procedure(streamOut()
prog(()
topcell_st = xstGetField("topCell")
xstSetField("techLib" "techname")
xstSetField("logFile" strcat(topcell_st,".log"))
xstSetField("summaryFile" strcat(topcell_st,".sum"))
xstSetField("runDir" strcat("/user/PIPO_TEST/",topcell_st))
xstSetField("outputDir" strcat("/user/PIPO_TEST/",topcell_st))
))


Can I run the streamout() command every time a pipoDisplay (transStreamOutNewForm) command is issued?

Have a nice day, Thank you

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago

    If you define a function called "xstOutOnTranslate", it's called when you hit the Translate button on the form:

    procedure(xstOutOnTranslate()
      let((topcell_st)
        printf("Filling in some fields\n")
        topcell_st=xstGetField("topCell")
    ;    xstSetField("techLib" "techname")
        xstSetField("logFile" strcat(topcell_st,".log"))
        xstSetField("summaryFile" strcat(topcell_st,".sum"))
        xstSetField("runDir" strcat("/tmp/PIPO_TEST/",topcell_st))
        xstSetField("outputDir" strcat("/tmp/PIPO_TEST/",topcell_st))
      ))
    
    

    (note I commented out some things and changed some paths for testing). Then you can interactively choose the top cell on the form, but the other fields will be set automatically when you hit Translate.

    Andrew

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

    I don't think I explained enough.


    The move I want is When "pipoDisplay(transStreamOutNewForm)" runs, "xstOutOnTranslate()" runs automatically, which defines a new "topcell_st=xstGetField" and wants to execute the remaining commands.


    For example, if you run "pipoDisplay(transStreamOutNewForm)" just as "xstOutOnTranslate()" works when you press the binding key, you want "xstOutOnTranslate()" to work without any other buttons or clicks.

    Thank you always. Andrew

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

    Well, I'm also not sure you understood what I meant either. If you define a function called xstOutOnTranslate (see the documentation - search for this function), then it is called automatically when you press the Translate/Apply buttons on the File->Export->Stream form. The example above (based on your code) will retrieve whatever the user has set up as the top cell and set the log and summary files and run and output directory to the desired location based on the cell name.

    What you seem to be asking for is for something to run whenever the pipoDisplay(transStreamOutNewForm) is called. I'm not sure that makes sense, given that the top cell name has not been completed at that time. There's no built-in trigger or SKILL function to do that, but of course you could customise the ciw.menus to call your function before calling pipoDisplay(transStreamOutNewForm) if that's what you really want. I assumed that wasn't what you wanted since the top cell name had probably not been filled in before the form was launched!

    Regards,

    Andrew

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

    When I operated the skill you provided, it works when I click the translator. But what I want to do is, like, "pipoDisplay (transStreamOutNewForm)", every time I put up a newstreamoutform,

    procedure(streamOut()
    prog(()
    topcell_st = xstGetField("topCell")
    xstSetField("techLib" "techname")
    xstSetField("logFile" strcat(topcell_st,".log"))
    xstSetField("summaryFile" strcat(topcell_st,".sum"))
    xstSetField("runDir" strcat("/user/PIPO_TEST/",topcell_st))
    xstSetField("outputDir" strcat("/user/PIPO_TEST/",topcell_st))
    ))

    I want the above action to proceed automatically without a separate click or button and fill in the form. If you look at Andrew's answer, you can think of something as streamOut() that I defined.

    If you have topcell, streamOut() will work and fill in the forms, if topcell is blank, other forms will also fill in the blanks, and I expect that when another topcell comes, a new topcell will be applied and the forms will also be filled in to the new topcell name.

    you are always helpful to study. Very Thank you. Andrew

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

    If you want to pre-fill in the form before the form is displayed, you can call the pipoDisplay after setting the fields:

    procedure(streamOut()
     prog((topcell_st)
      topcell_st = xstGetField("topCell")
      xstSetField("techLib" "techname")
      xstSetField("logFile" strcat(topcell_st,".log"))
      xstSetField("summaryFile" strcat(topcell_st,".sum"))
      xstSetField("runDir" strcat("/user/PIPO_TEST/",topcell_st))
      xstSetField("outputDir" strcat("/user/PIPO_TEST/",topcell_st))
      pipoDisplay(transStreamOutNewForm)
    ))

    It sounds as if you're asking for some kind of callback on the top cell field so that when you change it, it will automatically fill in the other fields. That's not possible - there is no callback mechanism on this form. The only mechanism there is that's possible is the one that I proposed. That may not be what you want, but it's all that is possible, sorry.

    Regards,

    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