• 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 Design
  3. Measurement of delay between change in value of two buses...

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 125
  • Views 13901
  • 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

Measurement of delay between change in value of two buses created using Analog to Digital function

prashantpd
prashantpd over 7 years ago

Please refer to the waveform shown in the attached screenshot.

bf_idx0_d1_o<31:0> is a bus where all the bits transition from high to low or low to high at roughly the same instant of time. However there is a slight spread in the exact time when each of the individual nets transition. This results in the 'digital' value of the bus obtained after Analog to Digital Conversion to toggle for some time before settling to a final value.

In my calculations I need to measure the time from the instant the bus reaches a stable value to the instant when a single bit output signal (op_ko) toggles in the same high-to-low or low-to-high direction. 

If I use the delay function in the Visualization and Analysis XL calculator, it gives me the time from when any of the bits of the bus first cross the threshold value. The formula I am using is

awvCreateBus("bfidx0" list(awvAnalog2Digital(v("/bf_idx0_d1_o<0>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<1>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<2>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<3>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<4>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<5>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<6>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<7>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<8>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<9>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<10>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<11>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<12>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<13>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<14>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<15>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<16>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<17>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<18>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<19>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<20>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<21>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<22>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<23>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<24>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<25>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<26>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<27>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<28>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<29>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<30>" ?result "tran") nil nil 0.5 nil "centre") awvAnalog2Digital(v("/bf_idx0_d1_o<31>" ?result "tran") nil nil 0.5 nil "centre") ) "Binary")

and the value I get is 238 ps at 4.235 ns. You will however see in the figure that the bus actually stabilises at 4.3 ns.

How do I modify the formula to get this functionality.

If the screenshot is not visible in the post, I have also uploaded it to my public Dropbox here

https://www.dropbox.com/s/3njgofoda3cfajt/delay_measurement_virtuoso.JPG?dl=0

Regards,

Prashant

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    Prashant,

    Apologies about your post going into moderation - it was the repeated use of awvAnalog2Digital which made the system automatically think it was spam (repeated words do that).

    Anyway, it's not entirely clear what you want to measure, but I suspect you may want to convert the bus back into an analog signal (just a single analog signal for the entire bus representing the bus value as a voltage) and maybe measure its settling time to find when it stabilises (you may need to clip it to just look at the final value you're expecting). Then subtract that from the point where the other signal (op_ko) crosses the threshold.

    Something like that...

    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