• 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 if a tool, partition, and variable are registered...

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 149
  • Views 15395
  • 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 if a tool, partition, and variable are registered before envSetVal?

drdanmc
drdanmc over 9 years ago

Is there a way to protect calls in a .cdsinit to envSetVal with something that makes sure the tool, partition, and variable are available to be set?  For example, if you launch the QRC gui (qrcui from command line) it will load your .cdsinit but doesn't like envSetVal calls for "layoutXL" (for example).  I can protect functions with things like:

when( isCallable('calRegisterSpecialFunction)

  calRegisterSpecialFunction(....)

)

The envSetVal calls just cause warnings which can be ignored but it makes me feel better to not have lots of warnings all the time.

Thanks

-Dan

  • Cancel
  • skillUser
    skillUser over 9 years ago

    Hi Dan,

    I think that 'envIsVal' is what you are looking for, e.g.

    
    envIsVal("layoutXL" "autoArrange")
    => t
    envIsVal("layoutXL" "autoOrange")
    => nil
    

    You could potentially wrap this in a function or even in a macro. I hope that this helps!

    Regards,

    Lawrence

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • drdanmc
    drdanmc over 9 years ago
    Perfect! Thanks so much.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • skillUser
    skillUser over 9 years ago

    Here's my attempt at a macro for this called "envSetValSafe":

    
    (defmacro envSetValSafe (tool var type val) `(when (envIsVal ,tool ,var) (envSetVal ,tool ,var ,type ,val)))
    envSetValSafe("layout" "drawDottedGridOn" 'boolean t)
    => t
    envSetValSafe("schematic" "madeItUp" 'boolean t)
    => nil
    (expandMacro `(envSetValSafe "layoutXL" "autoArrange" 'boolean nil))
    => when(envIsVal("layoutXL" "autoArrange") 
        envSetVal("layoutXL" "autoArrange" 'boolean nil)
      )
    

    You would still need to get the 'type' argument correct.

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Lawrence (once an AE, always an AE ;-> ),

    I should point out that there's no need for this to be a macro. A simple function would do - in general macros should only be used when you really need them (although this has conventional function call semantics). So it could have just been:

    procedure(CCFenvSetValSafe(tool var type val)
      when(envIsVal(tool var)
        envSetVal(tool var type val)
      )
    )

    (good to have a prefix so that you know who to blame when something doesn't work). 

    **Pedantry alert**. Let me give a slight convoluted reason as to why it wouldn't be a good idea to have this as a macro:

    a="auto"
    envSetValSafe("layoutXL" a=strcat(a "Arrange") 'boolean t)

    This would expand to:

    when((envIsVal "layoutXL"
        (a = strcat(a "Arrange"))
      )
      (envSetVal "layoutXL"
       (a = strcat(a "Arrange"))
       'boolean t
      )
    )

    so the variable you set wouldn't be the same as the variable you queried. I know this is fairly unlikely, but you have to be careful when you reference the same argument twice in a macro definition. The function version wouldn't have this side effect.

    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