version IC 6.1.7-64b.500.23
I had a skill script created some time ago and it works, but starting with this version above, i find the ade-xl windows doesn't show the value any more.
After some debugging, I find the root cause is floating-point value. %g doesn't show the floating point value anymore, but something like an address is returend. When I try to compare the address with 0 in the if statement, the if statement will give me an error.
Below is the test script defined. The line of printf will shows the returned value if proper x waveforms are given, I expect to have a floating point number returned as the average of the waveform, however, an address of
"avg_x=srrWave:0x3bb0a780" was returned to the CIW windows. Un-comment the three lines I mentioned will results in an error for the if statement.
expression evaluation failed: val is not legal.expression evaluation failed: MYrms(IT("/R10/PLUS") )("greaterp" 0 t nil ("*Error* greaterp: can't handle (srrWave:0x3bb0a7a0 > 0)"))
skill script is defined below
procedure(MYrms(x) poport=stdout printf("enter procedure\n") printf("avg_x=%g \n",average(x));;un-comment the below three lines to re-run and have the error; if((average(x) > 0) then; printf("%g \n",average(x)); ) rms(x - average(x)) )
Case Number: Case 46360242
Since you've created this as a case, I won't duplicate effort and answer it here, other than to say that it would appear that the input waveform is a family rather than a single waveform, and your function has not been designed to cope with that.
I'll leave it to my colleagues in customer support to follow up with you.
Thanks for your reply, Andrew.
The part that I don't understand is that this script works OK previously, but suddently, it shows like that. Does that mean skill interpreter has changed? Or the way how I code it previously was wrong?
The SKILL "interpreter" (it's compiled, so isn't really an interpreter) hasn't changed. It's always been wise to make sure calculator functions can handle family data - and I don't believe anything changed in ADE (you didn't say how you're calling it) in the specific version you mention.
Anyway, as I said, I'm not going to duplicate the efforts of my colleagues in customer support (I don't have the bandwidth to do that anyway, and it's not fair on whoever else is working on it if we double up our work).
We ran into a very similar problem two years ago, which was examined in Case 46064308. Your Cadence AE might want to take a look at it in order to give you some background information about this problem. The solution is to rewrite your SKILL code as explained in Solution 20467133. We have also filed CCR 1703070 requesting all SKILL functions to work for waveform families automatically in ADE-XL, but this has been in Inactive state ever since and will not get implemented because ADE-XL is in sunset mode. I don't know if the same situation exists in Assembler and if there are any plans to change it.
Thanks, but my input is not a family waveform, just one waveform with X axis as time and Y axis as current. I try to switch to assembler but assembler doesn't handle viva correctly when I try to replace/append waveforms into viva.
Well, if you are doing sweeps of any kind in ADE-XL (including corners and Monte Carlo), you will be working with waveform families. That is what Solution 20467133 is all about.