S
spectrallypure
Guest
Hi all!
I would like to share an enquiry that has been twisting my mind for
some time now, and which I cannot put off any longer (for the sake of
my mental sanity!). It goes as follows...
I've heard many times that all the actions the Cadence tools receive
and process are performed internally by means of SKILL calls. This
appears mostly true to me, and for instance when one sets the log
filter with the more relaxed options, one can see all the commands in
the CIW going in and out, performing the actions required by the user.
However, I have noticed that most of the time what appears in the CIW
is not really the most low-level SKILL code of what the user does. For
instance. I know that in order to set the infix option one can use the
following code:
Code #1:
envSetVal( "ui" "infix" 'boolean t)
However, if one sets this option through the GUI, al what one gets in
the CIW (filtering relaxed to the most) is the following:
Code #2:
hiSetUserPreferences()
hiiSetCurrentForm('hiSysProps)
hiSysProps->hiSetMouseStyle->value = t
hiFormDone(hiSysProps)
Clearly, one cannot deduct from the Code #2 above what the user did,
nor reuse this code in any practical SKILL function in order to set,
like in this example, the infix mode. I suspect that in the end these
4 lines of code, along with the code regarding the GUI forms that
appear, result in the calling of other more low-level functions, like
the one in Code #1.
A second example. I know how to set bindkeys, but unfortunately the
templates and the documentation doesn't cover all the possible actions
a user can be interested in. For instance, I needed to define a
bindkey for selecting in Wavescan all the waveforms in the current
plot. I searched extensively all the template files I could possibly
find, all the documentation, and the internet, but I was unable to
determine what was the appropriate setting needed to be made. After
some guessing and by trial and error, I discovered that the following
entry worked fine:
hiSetBindKey("wavescan" "ctrl<key>a" "graph.trace.selectall")
Once again, the problem would have been resolved very easily if there
was some way of spying the SKILL code behind of what happens when one
does the GUI equivalent of this simple task (menu "Trace", option
"Select All").
Basically my question is then if it is possible to configure Cadence/
CIW/whatever in some way in order to see the code that is behind a
user action, but in a 'reusable' format. The main motivation for this
would be that then we could easily reuse the code and/or tailor it in
order to do lots of things such as defining more complex functions,
automating repetitive tasks or setting bindkey to actions for easy
access.
A) If the answer is yes, then... how can this be done?!!!
B) If the answer is no, then, how is a user supposed to determine what
is the right SKILL code/function/variable setting/etc needed to be
used in order to perform a task readily available in the GUI menus? I
mean, what is the 'official' way of learning what is the SKILL code
for a specific task (since the code for every single possible task
cannot be possibly documented, right?)?
Just two final examples to make my point (btw, I am in the need of
elucidating these two, sorry for the cheating!):
-How can I know what is the SKILL code/functions I need to call in
order to print the design variables and their values in the current
plot (i.e., to achieve the same effect of choosing in the ADE menu
"Results" the "Printing/Plotting Options" option and then setting the
"Annotations: Design Variables" checkbox)?
-How can I know what is the SKILL code that I need to put in
my .cdsinit / cdsenv in order to define a bindkey for sending the
active schematic to the plotter? OK, maybe this cannot be done
directly and one needs first to define a function and then associate a
bindkey for calling the function, but, how can I define the function
if I don't know the required code?
Well, thanks so much in advance for any help/ideas/comments/solutions;
and sorry once again for the long posts!
Regards,
Jorge Luis.
I would like to share an enquiry that has been twisting my mind for
some time now, and which I cannot put off any longer (for the sake of
my mental sanity!). It goes as follows...
I've heard many times that all the actions the Cadence tools receive
and process are performed internally by means of SKILL calls. This
appears mostly true to me, and for instance when one sets the log
filter with the more relaxed options, one can see all the commands in
the CIW going in and out, performing the actions required by the user.
However, I have noticed that most of the time what appears in the CIW
is not really the most low-level SKILL code of what the user does. For
instance. I know that in order to set the infix option one can use the
following code:
Code #1:
envSetVal( "ui" "infix" 'boolean t)
However, if one sets this option through the GUI, al what one gets in
the CIW (filtering relaxed to the most) is the following:
Code #2:
hiSetUserPreferences()
hiiSetCurrentForm('hiSysProps)
hiSysProps->hiSetMouseStyle->value = t
hiFormDone(hiSysProps)
Clearly, one cannot deduct from the Code #2 above what the user did,
nor reuse this code in any practical SKILL function in order to set,
like in this example, the infix mode. I suspect that in the end these
4 lines of code, along with the code regarding the GUI forms that
appear, result in the calling of other more low-level functions, like
the one in Code #1.
A second example. I know how to set bindkeys, but unfortunately the
templates and the documentation doesn't cover all the possible actions
a user can be interested in. For instance, I needed to define a
bindkey for selecting in Wavescan all the waveforms in the current
plot. I searched extensively all the template files I could possibly
find, all the documentation, and the internet, but I was unable to
determine what was the appropriate setting needed to be made. After
some guessing and by trial and error, I discovered that the following
entry worked fine:
hiSetBindKey("wavescan" "ctrl<key>a" "graph.trace.selectall")
Once again, the problem would have been resolved very easily if there
was some way of spying the SKILL code behind of what happens when one
does the GUI equivalent of this simple task (menu "Trace", option
"Select All").
Basically my question is then if it is possible to configure Cadence/
CIW/whatever in some way in order to see the code that is behind a
user action, but in a 'reusable' format. The main motivation for this
would be that then we could easily reuse the code and/or tailor it in
order to do lots of things such as defining more complex functions,
automating repetitive tasks or setting bindkey to actions for easy
access.
A) If the answer is yes, then... how can this be done?!!!
B) If the answer is no, then, how is a user supposed to determine what
is the right SKILL code/function/variable setting/etc needed to be
used in order to perform a task readily available in the GUI menus? I
mean, what is the 'official' way of learning what is the SKILL code
for a specific task (since the code for every single possible task
cannot be possibly documented, right?)?
Just two final examples to make my point (btw, I am in the need of
elucidating these two, sorry for the cheating!):
-How can I know what is the SKILL code/functions I need to call in
order to print the design variables and their values in the current
plot (i.e., to achieve the same effect of choosing in the ADE menu
"Results" the "Printing/Plotting Options" option and then setting the
"Annotations: Design Variables" checkbox)?
-How can I know what is the SKILL code that I need to put in
my .cdsinit / cdsenv in order to define a bindkey for sending the
active schematic to the plotter? OK, maybe this cannot be done
directly and one needs first to define a function and then associate a
bindkey for calling the function, but, how can I define the function
if I don't know the required code?
Well, thanks so much in advance for any help/ideas/comments/solutions;
and sorry once again for the long posts!
Regards,
Jorge Luis.