The Designer's Guide Community
Forum
Welcome, Guest. Please Login or Register. Please follow the Forum guidelines.
May 20th, 2024, 3:40am
Pages: 1 2 
Send Topic Print
spectre transient noise (Read 33200 times)
Geoffrey_Coram
Senior Fellow
******
Offline



Posts: 1999
Massachusetts, USA
Re: spectre transient noise
Reply #15 - Apr 07th, 2008, 4:46am
 
HSpice has nice Verilog-A capabilities, and you could write a model to use the $rdist_ functions to generate random samples.

However, this is probably only practical for resistors and maybe diodes -- there's no good way to get the MOS/BJT internal variables that are used in the noise equations, unless you replace all the transistor built-ins with Verilog-A equivalents.  (That's simple for resistors, and only moderately difficult for diodes.)
Back to top
 
 

If at first you do succeed, STOP, raise your standards, and stop wasting your time.
View Profile WWW   IP Logged
kDaniu
New Member
*
Offline



Posts: 6

Re: spectre transient noise
Reply #16 - Apr 22nd, 2008, 10:50pm
 
Geoffrey_Coram thanks, but maybe that is not appropriate  
possible I can simplify the problem:
How I can get a new random (Gaussian distribution) value of some variable  of every TRAN step (scheme recounting time)?  
I tried to use some Monte Carlo possibilities for that, but they giving only one random varue per full TRAN simulation  
any ideas ?

thanks,  
kDaniu
Back to top
 
 
View Profile   IP Logged
Geoffrey_Coram
Senior Fellow
******
Offline



Posts: 1999
Massachusetts, USA
Re: spectre transient noise
Reply #17 - Apr 23rd, 2008, 6:12am
 
I guess you didn't understand my suggestion about Verilog-A $rdist_normal.  This module generates new a new random value each time it is called.  The trick is getting a circuit with this to converge, and deciding how often it needs to be called to accurately represent white noise of a given bandwidth.

Code:
`include "disciplines.vams"
module randomv(out);
  inout out;
  electrical out;
  parameter real mean = 0;
  parameter real stddev = 1 from (0:inf);
  integer seed;

  analog begin
    @(initial_step) seed = 1;

    V(out) <+ $rdist_normal(seed, mean, stddev);

  end

endmodule
 

Back to top
 
 

If at first you do succeed, STOP, raise your standards, and stop wasting your time.
View Profile WWW   IP Logged
kDaniu
New Member
*
Offline



Posts: 6

Re: spectre transient noise
Reply #18 - Apr 29th, 2008, 2:18am
 
Geoffrey_Coram wrote on Apr 23rd, 2008, 6:12am:
I guess you didn't understand my suggestion about Verilog-A $rdist_normal.  This module generates new a new random value each time it is called.  The trick is getting a circuit with this to converge, and deciding how often it needs to be called to accurately represent white noise of a given bandwidth.

Code:
`include "disciplines.vams"
module randomv(out);
  inout out;
  electrical out;
  parameter real mean = 0;
  parameter real stddev = 1 from (0:inf);
  integer seed;

  analog begin
    @(initial_step) seed = 1;

    V(out) <+ $rdist_normal(seed, mean, stddev);

  end

endmodule
 



Thanks a LOT for your help and example. I found the information about this verilog-A possibility, etc.
and already test the possibility of using one such noise source.
to get a good statistic during the long simulation time I was must to 'play' with a seed and in general case it's looks very well
right now I'm testing for the correlation/crosscorrelation the few noise sources which on one scheme ... hope that all will workl perfect without statistical weaknesses
again - thanks for your help,
Dan
Back to top
 
 
View Profile   IP Logged
rgcii
New Member
*
Offline



Posts: 3
SoCal
Re: spectre transient noise
Reply #19 - May 29th, 2008, 7:01pm
 
To turn off flicker noise in Spectre transient noise, just leave the noisefmin value blank.  If there's no value for noisefmin in the netlist, then only white noise will be simulated using the noisefmax value.

BTW, Berkeley Design Automation has a transient noise engine that works with both Spectre and HSPICE netlists.  It's also pretty fast.
Back to top
 
 
View Profile   IP Logged
Ken Kundert
Global Moderator
*****
Offline



Posts: 2384
Silicon Valley
Re: spectre transient noise
Reply #20 - May 29th, 2008, 9:19pm
 
I think it is important to point out again that transient noise is expensive and error prone. In general you are much better off going with SpectreRF's PNoise. It is hard to think of a situation where subjecting your self to the pain of transient noise is justified.

-Ken
Back to top
 
 
View Profile WWW   IP Logged
David Lee
Junior Member
**
Offline



Posts: 29

Re: spectre transient noise
Reply #21 - May 31st, 2008, 12:06pm
 
This Verilog-A module sets the output voltage to a random value at each Newton iteration during transient timestep integration. This will cause non-convergence.

If you need a white (or colored) noise source with a given bandwidth, you will need to know (but don't know inside Verilog-A):
i) transient integration method (trap, euler, gear, etc.)
ii) transient timesteps
iii) perform transient timestep error control for a system of noisy circuit equations
To model a white noise source, simply run transient noise, and call the $white_noise(..) function in Verilog-A or equivalent in your circuit simulator.

Behavioral noise models take tender loving care to create and it is difficult to check for their accuracy because interesting noise processes in ADCs, PLLs and oscillator transients are time-varying and correlated over time (with memory effects).

You are generally better off running transient noise (or periodic noise, when applicable) on the transistor-level netlist.

Geoffrey_Coram wrote on Apr 23rd, 2008, 6:12am:
I guess you didn't understand my suggestion about Verilog-A $rdist_normal.  This module generates new a new random value each time it is called.  The trick is getting a circuit with this to converge, and deciding how often it needs to be called to accurately represent white noise of a given bandwidth.

Code:
`include "disciplines.vams"
module randomv(out);
  inout out;
  electrical out;
  parameter real mean = 0;
  parameter real stddev = 1 from (0:inf);
  integer seed;

  analog begin
    @(initial_step) seed = 1;

    V(out) <+ $rdist_normal(seed, mean, stddev);

  end

endmodule
 

Back to top
 
« Last Edit: May 31st, 2008, 1:43pm by David Lee »  

- David
View Profile   IP Logged
Ken Kundert
Global Moderator
*****
Offline



Posts: 2384
Silicon Valley
Re: spectre transient noise
Reply #22 - May 31st, 2008, 3:38pm
 
The random number generator in Verilog-A/MS will only update at each time point, not each iteration, so the risk of non-convergence is low. However, David's point about the coloring of the noise spectrum is valid. This can be controlled by updating the random number generator at even intervals. The resulting noise is still colored, but the coloring is known. The code below passes the random value through a transition function, so all chance of convergence problems is eliminated. It produces a random triangle wave, so coloring is sin2x/x at the update rate.
Code:
module randomv(out);
  output out;
  electrical out;
  parameter real mean = 0;
  parameter real stddev = 1 from (0:inf);
  parameter real period = 1 from (0:inf);
  integer seed;
  real value;

  analog begin
    @(initial_step) seed = 1;

    @(timer(0,period))
	  value = $rdist_normal(seed, mean, stddev);
    V(out) <+ transition(value, 0, period);
  end
endmodule 


This exposes one of the three challenges with transient noise. They are ...
  • To get known coloring on the noise sources, you have to use equally spaced updates. To make the noise seem white over the bandwidth of interest, the update rate must be very high.
  • To see low frequency noise such as flicker noise, you need to simulate for a very long time. These two challenges together result in very long simulation times.
  • The noise sources generally produce signal levels that are well below the error of the simulator, so it is difficult to see the noise through the simulator error. Tightening tolerances often results in even worse simulator performance with no guarantee that the results will be correct. If you artificially make the noise bigger in order make it larger than the simulator error, you run the risk of producing a spurious nonlinear response in your circuit, which would also make the results inaccurate.
Transient noise simulations should only be undertaken by sophisticated users, and only when no other approach is suitable.

-Ken
Back to top
 
 
View Profile WWW   IP Logged
Paul Geraedts
Community Member
***
Offline

GIGO

Posts: 60
Enschede, Netherlands
Re: spectre transient noise
Reply #23 - Mar 20th, 2009, 3:07pm
 
First of all, interesting thread on transient noise. Thanks!

Quote:
It is hard to think of a situation where subjecting your self to the pain of transient noise is justified.

Ken, what about circuits like comparators? Isn't transient noise the only way to simulate their noise behavior? Pnoise does not seem appropriate, e.g. I don't see how the noise in such circuits can be accurately modeled as being small signal. Any insight on this?
Back to top
 
 
View Profile   IP Logged
Ken Kundert
Global Moderator
*****
Offline



Posts: 2384
Silicon Valley
Re: spectre transient noise
Reply #24 - Mar 21st, 2009, 6:42pm
 
I've gotten pretty good results applying pnoise to comparators. The trick is setting the tolerances tight enough so that you get several time points during the transition.

-Ken
Back to top
 
 
View Profile WWW   IP Logged
Paul Geraedts
Community Member
***
Offline

GIGO

Posts: 60
Enschede, Netherlands
Re: spectre transient noise
Reply #25 - Mar 23rd, 2009, 4:14am
 
Sorry, I don't think I fully get the picture.

Say you got a clocked comparator as used frequently in low-power ADCs that compares 2 static voltages.

How would you define your testbench when applying pnoise on such a circuit? How do you choose the large-signal voltage levels and slew-rates for PSS?

I can imagine that you can determine the noise behavior of such a comparator in time-domain (i.e. by means of strobed pnoise), but are the simulation results in that case not dependent on the (large-signal) testbench?

Thanks,

Paul

Back to top
 
 
View Profile   IP Logged
Geoffrey_Coram
Senior Fellow
******
Offline



Posts: 1999
Massachusetts, USA
Re: spectre transient noise
Reply #26 - Mar 23rd, 2009, 5:34am
 
David Lee wrote on May 31st, 2008, 12:06pm:
You are generally better off running transient noise (or periodic noise, when applicable) on the transistor-level netlist.


Yes, but the question was whether one could do anything with a simulator that doesn't support transient noise.

Are you the same David Lee from BDA who wrote this article:
http://www.scdsource.com/article.php?id=144&page=1
?

If so, can you (or can anyone else) comment on how the minimum transient analysis time (tstop in Table 2) is determined?
Back to top
 
 

If at first you do succeed, STOP, raise your standards, and stop wasting your time.
View Profile WWW   IP Logged
Pages: 1 2 
Send Topic Print
Copyright 2002-2024 Designer’s Guide Consulting, Inc. Designer’s Guide® is a registered trademark of Designer’s Guide Consulting, Inc. All rights reserved. Send comments or questions to editor@designers-guide.org. Consider submitting a paper or model.