• 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. Calculator Skill User Defined functions not updating

Stats

  • Replies 2
  • Subscribers 143
  • Views 1047
  • Members are here 0

Calculator Skill User Defined functions not updating

TF202506034656
TF202506034656 2 months ago

Good evening,

I'm creating a SUD function for the virtuoso (R) Visualization & Analysis XL Calculator, and am making edits to a form, and it isn't reflected on my loaded function until I restart cadence fully. 

Context:
I'm loading the functions locally "load("example.il"), and it all works correctly, its just if I do something as trivial as rearranging the order of fields, it isn't reflected until a full restart.
virtuoso version IC23.1-64b

Is there something I'm missing? 


Thanks,

Trevor

  • Sign in to reply
  • Cancel
  • Aurel B
    Aurel B 2 months ago

    Hi,


    It's complicated to help you without viewing your code.

    Are you re-using the same form name?

    If so, you can start by trying to use a different form name after each reload :

    hiCreateLayoutForm( gensym('custom_form) "Custom Form"
      hiCreateFormLayout
      ...
    )

    Maybe your code have a line to check if the form exists and the redisplay it.
    This is often done to keep previously typed inputs as in the following snippet : 

    procedure( display_custom_form()
    "Display new form"
    let( (form)
    ;; Try to fetch the existing form
    form = boundp('custom_form) && hiIsForm(custom_form) && custom_form
    ;; Form does not exist already, recreate it
    unless( form
    form = hiCreateLayoutForm( 'custom_form "Custom Form"
    hiCreateFormLayout( 'main_layout ?items list(
    hiCreateLabel(?name 'label0 ?labelText "<b>LABEL 0</b>")
    ));main_layout
    ));custom_form ;unless
    hiDisplayForm(form)
    ))

    display_custom_form()

    If you want to keep the same structure, you have to make the sure the form is well closed and deleted when reloading your script : 

    ;; Make sure form is erased during reload
    boundp('custom_form) && hiFormClose(custom_form) && hiDeleteForm(custom_form)

    procedure( display_custom_form()
    "Display new form"
    let( (form)
    ;; Try to fetch the existing form
    form = boundp('custom_form) && hiIsForm(custom_form) && custom_form
    ;; Form does not exist already, recreate it
    unless( form
    form = hiCreateLayoutForm( 'custom_form "Custom Form"
    hiCreateFormLayout( 'main_layout ?items list(
    hiCreateLabel(?name 'label0 ?labelText "<b>LABEL 0</b>")
    ));main_layout
    ));custom_form ;unless
    hiDisplayForm(form)
    ))

    display_custom_form()


    Another reason could be due to the SKILL IDE being open while you are editing your script in a different editor. 
    (Sometimes in debug mode, when errors occur, the SKILL IDE can pop up and try to show the error line.)
    This can lead to older code being cached in the SKILL IDE editor and loaded instead of the updated version.

    Hope this helps,

    Aurel

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Aurel B
    Aurel B 2 months ago

    Hi,


    It's complicated to help you without viewing your code.

    Are you re-using the same form name?

    If so, you can start by trying to use a different form name after each reload :

    hiCreateLayoutForm( gensym('custom_form) "Custom Form"
      hiCreateFormLayout
      ...
    )

    Maybe your code have a line to check if the form exists and the redisplay it.
    This is often done to keep previously typed inputs as in the following snippet : 

    procedure( display_custom_form()
    "Display new form"
    let( (form)
    ;; Try to fetch the existing form
    form = boundp('custom_form) && hiIsForm(custom_form) && custom_form
    ;; Form does not exist already, recreate it
    unless( form
    form = hiCreateLayoutForm( 'custom_form "Custom Form"
    hiCreateFormLayout( 'main_layout ?items list(
    hiCreateLabel(?name 'label0 ?labelText "<b>LABEL 0</b>")
    ));main_layout
    ));custom_form ;unless
    hiDisplayForm(form)
    ))

    display_custom_form()

    If you want to keep the same structure, you have to make the sure the form is well closed and deleted when reloading your script : 

    ;; Make sure form is erased during reload
    boundp('custom_form) && hiFormClose(custom_form) && hiDeleteForm(custom_form)

    procedure( display_custom_form()
    "Display new form"
    let( (form)
    ;; Try to fetch the existing form
    form = boundp('custom_form) && hiIsForm(custom_form) && custom_form
    ;; Form does not exist already, recreate it
    unless( form
    form = hiCreateLayoutForm( 'custom_form "Custom Form"
    hiCreateFormLayout( 'main_layout ?items list(
    hiCreateLabel(?name 'label0 ?labelText "<b>LABEL 0</b>")
    ));main_layout
    ));custom_form ;unless
    hiDisplayForm(form)
    ))

    display_custom_form()


    Another reason could be due to the SKILL IDE being open while you are editing your script in a different editor. 
    (Sometimes in debug mode, when errors occur, the SKILL IDE can pop up and try to show the error line.)
    This can lead to older code being cached in the SKILL IDE editor and loaded instead of the updated version.

    Hope this helps,

    Aurel

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • 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