• 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. Mixed-Signal Design
  3. can't evaluate value of a tran signal at derived value

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 64
  • Views 6757
  • 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't evaluate value of a tran signal at derived value

olalivier
olalivier over 4 years ago

Hi there,

I try to evaluate the value of a transient signal at a derived value. In my simulation, I need to get the value of the output signal when the read signal falls down. So What I do is to create the following  expression in ade-assembler:  

cross(VT("/read") 1.65 0 "falling" t "time" nil)

read is a digital signal coming from a systemverilog testbench. I call this expression time_read_t and when I launch the simulation the expression is correctly evaluated, the returned value is correct.

Now I try to get the value of my output signal using this time_read_t variable with the following expression  value(VT("/vout") time_read_t ), I get 

ERROR (VIVA-3002):expression evaluation failed: Expression evaluates to nil

ERROR (VIVA-3002):expression evaluation failed: value(VT("/vout") time_read_t )

If I try with value(VT("/vout") VAR("time_read_t") ) it does not work either and I get 

ERROR (VIVA-3002):expression evaluation failed: val is not legal.

ERROR (VIVA-3002):expression evaluation failed: value(VT("/vout") VAR("time_read_t") )

("putprop" 0 t nil ("*Error* putprop: first arg must be either symbol, list, defstruct or user type" nil))

Can you please help me, I really don't understand.

thank your for your time

Olivier

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Olivier,

    It would be useful to see a plot of /read and /vout, and your Assembler output. Which IC sub-version are you using? Help->About will tell you.

    Note that it won't be VAR("time_read_t") because time_read_t is a output name (I think) rather than a variable.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Olivier,

    It would be useful to see a plot of /read and /vout, and your Assembler output. Which IC sub-version are you using? Help->About will tell you.

    Note that it won't be VAR("time_read_t") because time_read_t is a output name (I think) rather than a variable.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • olalivier
    olalivier over 4 years ago in reply to Andrew Beckett

    Hi Andrew, 

    my setup is the following one

    * IC618 : IC6.1.8-64b.500.10

    * spectre 191

    * xcelium2003

    I want to measure the value of the vout signal when read falls down.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 4 years ago in reply to olalivier

    Dear olalivier,

    If I may comment on your question, please  allow me to!

    it appears from your helpful waveforms that your "read"'signal does not cross 1.65 V and, in fact? is limited to about 1V. If so, I believe the cross() function you provided in your initial question will evaluate to nil:

    cross(VT("/read") 1.65 0 "falling" t "time" nil)

    read < 1.65 V for 0 < time < 50 us

    Hence, it follows that using the value of this cross() function will not provide a valid argument to the value() function you used with waveform vout.

    Did I understand your plot and cross() function correctly?

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to ShawnLogan

    Shawn,

    It's not that. There's an automatic conversion of the digital signal to "analog" that goes on in the cross (and I think it will convert a logic 1 to 5V, so it will definitely cross 1.65).

    Olivier, the issue is that you are trying to find multiple crossing points, and that's not going to work. If you want just the first crossing, then use:

    time_read_t = cross(VT("/read") 1.65 1 "falling" nil nil nil)

    yourOut = value(VT("/vout") time_read_t)

    If you really want to find the value at all crossing points, I don't think there's really a way to do that right now (at least without not writing a custom function - I'll check further if that's what you''re really after). However, your example only had one transition, so I'm assuming not for now...

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • olalivier
    olalivier over 4 years ago in reply to Andrew Beckett

    Hi andrew,

    thank you very much for your answer. I actually found out myself :) !!! I came back here to write the solution but already you already did !!

    Once again thank you. 

    Olivier 

    • 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