• 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. Transient Sim Accuracy

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 126
  • Views 14704
  • 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

Transient Sim Accuracy

IMIL
IMIL over 4 years ago

Hi,

I am simulating a delay line made of 10 inverters (transient simulation with errpreset = conservative, and no transient noise).

The input clock to the delay line uses vpulse from analoglib with 100MHz frequency and 10p rise-time/fall-time.

I am measuring the delay (using calculator delay: rising to rising at Threshold = VDD/2) between the 2nd inverter and 4th inverter outputs and the delay between 4th inverter and 6th inverter outputs and I noticed the following:

1) The two delays are slightly different which should not be the case (2.248ps versus 2.25ps)

2) The results are again slightly different when I compare Spectre to APS

3) The clock at the output of the 2nd inverter for example has around 50fs jitter (when using APS) and this should not be the case.

What would be the best setting in order to get an accuracy within 10fs for example?

Thanks,

Imil

  • Cancel
Parents
  • IMIL
    IMIL over 4 years ago

    Hi Andrew,

    I added the below VerilogA block to each inverter output.

    The results are still not accurate. I tried computing the dealy using the VerliogA block outputs as well, and  they are still inaccurate.

    Thanks,

    Imil


    `include "constants.vams"
    `include "disciplines.vams"

    module vLimiter(vi,vo);

    inout      vi,vo;
    electrical vi,vo;
    parameter  vth=0.5;
    real       vo_val;

      analog begin

        @ (initial_step) begin
          vo_val = 0.0;
        end

        @ (cross(V(vi) - vth, +1)) begin
          vo_val = 2.0*vth;
        end

        @ (cross(V(vi) - vth, -1)) begin
          vo_val = 0.0;
        end

        V(vo) <+ transition(vo_val,1f,1f,1f);

      end

    endmodule

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

    Dear IMIL,

    IMIL said:

    I am simulating a delay line made of 10 inverters (transient simulation with errpreset = conservative, and no transient noise).

    The input clock to the delay line uses vpulse from analoglib with 100MHz frequency and 10p rise-time/fall-time.

    I am measuring the delay (using calculator delay: rising to rising at Threshold = VDD/2) between the 2nd inverter and 4th inverter outputs and the delay between 4th inverter and 6th inverter outputs and I noticed the following:

    1) The two delays are slightly different which should not be the case (2.248ps versus 2.25ps)

    2) The results are again slightly different when I compare Spectre to APS

    3) The clock at the output of the 2nd inverter for example has around 50fs jitter (when using APS) and this should not be the case.

    Assuming you are using schematic views of identical inverters for your netlist creation, believe the results you are observing are indeed accurate and not a result of simulator accuracy. I just tested my hypothesis in a similar circuit and found the results differ as I expected they would using highly accurate simulation settings. Why do the propagation delay times vary between the 2nd and 4th inverter from those between the 6th and 4th? This is a result of the fact that the propagation delay of an inverter is not only a function of device sizes and load impedance, but also a function of the transition times of its inputs. With an ideal 100 MHz input waveform from a 10 ps transition time analogLib vpulse, your input transition times to the first inverter contain far more harmonic content than those from all other output inverters. As a result, the transition times and feedthrough due to its input transition times and feedthrough capacitance will produce a different propagation time than that for the second inverter. As a result, the net propagation time of the 4th to 2nd will differ from the 6th and 4th. The screen capture below indeed shows this effect. For this test, I am only examining the last transitions in a 10 period, 100 MHz inpiut clock simulation. If you examine the 10th to 8th and 8th to 6th propagation delay times, the impact of the radically different vin transition time is no longer signficant and their propagation delays times are identical to within 1 ps.

    A number of suggestions:

    1. Measure the propagation delay of series inverter combinations after 6 or 8 inverters after the source.

    2. Consider averaging the propagation delay times over a number of clock periods.

    3. Reduce the parameter "maxstep" in your simulation setup to say, 1 ps

    I hope this helps!

    Shawn

    Figure 1

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

    Thanks Shawn,

    The simulations I reported in my original email are 32 cycles long. The delay and jitter are computed using the last 16 cycles (i.e. ignore the first 16 cycles).

    I assumed that 2 inverters are enough to have equal delays (and you pointed out in your email that I might need more) and I agree with you.

    Nevertheless, the problem remains regarding simulation accuracy.

    Using "maxstep" of 100f and spectre (4 hours per simulation run) yield equal delays if I start from inverter #4 (in my case) and yield almost zero jitter.

    Using APS (20 minutes per simulation run) I see almost equal delays, but unfortunately, I still see jitter up to 30fs.

    Furthermore, reducing reltol from default of 1e-3 to 1e-4 seems to affect rise-time measurements.

    So my question remains regarding recommended settings (with fast simulation time if possible) if I am interested in accuracy down to 10fs in delay, rise-time, and jitter.

    Thanks again for your helpful suggestions.

    Imil

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

    Dear IMIL,

    Thank you for your added information regarding the length of your simulation and the positional dependence of your calculations - it was quite useful and helped my understanding!

    IMIL said:
    I assumed that 2 inverters are enough to have equal delays (and you pointed out in your email that I might need more) and I agree with you.

    Great!

    IMIL said:
    So my question remains regarding recommended settings (with fast simulation time if possible) if I am interested in accuracy down to 10fs in delay, rise-time, and jitter.



    Assuming you are using schematic views to generate your netlist, then I can add a bit more information to your added comments regarding the simulation acurracies you report.

    1. Spectre, without its +aps nor its ++aps settings, is the most "accurate" simulator for a given set of accuracy settings (i.e, "errpreset" or their equivalently reltol/abstol... settings. However, a simulation using spectre witjout its +aps or its ++aps settings will  require more simulation time than its +aps/++aps versions. This is a conventional trade-off between simulation time and simulation accuracy and is totally expected.

    This is covered in the basic spectre manual from the On-line Support URL:

    support.cadence.com/.../techpubDocViewerPage

    with some added information in the accuracy application note at URL:

    support.cadence.com/.../ArticleAttachmentPortal

    and a video at URL:

    support.cadence.com/.../ArticleAttachmentPortal


    2. The use of parameter "maxstep" or "strobepoints/period" can be helpful in providing greater accuracy of the period of a waveform as the former forces the simulator time step to a smaller value than its accuracy settings require and hence the period estimate requires less or no interpolation. The latter is useful if you know the period apriori and will not slow down the simulator as much as parameter "maxstep". Our team enforces the value of parameter "maxstep" in most all simulations where waveform period accuracy is necessary beyond the values provided by "errpreset" and the period is not known.

    3. My experience with the type of issue you are wrestling with is that the actual simulator settings to assure the accuracy you need are quite netlist (i.e., circuit topology) dependent. Hence, there is no single "optimal" set of settings for all simulations where one desires "highly accurate results with less than 10 fs numerical variation". As a result, some experimentation is required. Nevertheless, simulation time is, unfortunately adversely impacted as the accuracy requirements are tightened.

    Other experts who monitor this forum probably have other and better comments, but these represent my thoughts as an effort to provide you with some help - hopefully!

    Shawn

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

    I don't entirely agree with the use of maxstep to control accuracy (strobeperiod is certainly useful if you know you need to sample at a precise time point; less useful if the edges may move around a bit). maxstep is generally an inefficient way of controling accuracy - it has its uses (e.g. in help oscillators to start up) but should be used with caution as it can seriously slow down simulation when often there are better approaches. Also, in general the expectation is that +aps should give equivalent accuracy to spectre (the results may not be identical, but they should also be within the specified tolerances). ++aps may not be so appropriate because it is a bit more agressive about timestep placement and so that may not be so good if you need very precise time accuracy.

    It's very hard to comment more specifically (as Shawn has mentioned) as I think this needs visibility of the netlist. I would suggest that you contact customer support and share the specific example with us so that we can explore more thoroughly.

    Thanks,

    Andrew

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

    Andrew, could this issue be connected to CCR 2278367 in any way?

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

    Frank, 

    It's possible. Probably a good idea to check with SPECTRE 19.1 ISR12 or SPECTRE 20.1 ISR2 or later when the CCR that Frank mentioned was fixed (which was related to accuracy of resolving @cross events in Verilog-A). Apparently it only affected Spectre X and ++aps though, not normal APS - and the issue was that the analysis-level tolerances we not affecting the tolerances of the cross function (if explicit tolerances were given to the cross, then they did work). At least that's my understanding from a quick read of the CCR (and no experiments to check for certain...)

    Andrew.

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

    Thanks everyone. I will contact customer support.

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

    Thanks everyone. I will contact customer support.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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