The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design Languages >> Verilog-AMS >> Noise implementation in verilog-a
https://designers-guide.org/forum/YaBB.pl?num=1049213112

Message started by Ben on Apr 1st, 2003, 8:05am

Title: Noise implementation in verilog-a
Post by Ben on Apr 1st, 2003, 8:05am

Hi All,

I am currently working on putting the channel induced gate noise source into mosfet model using verilog-a.  Such noise source has a different frequency dependence than the flicker noise provided in verilog-a.  For example, the spectral density of the noise used in the MOS!! model of Philips is like:

Sig=A*f2/(B+Cf2),

where f is the frequecy.

Do you have any suggestion on how to put this kind of noise source using verilog-a?

Thanks a lot!
Ben

Title: Re: Noise implementation in verilog-a
Post by Eugene on Apr 2nd, 2003, 1:48pm

Your power spectral density looks like it could be created by passing white noise through a simple first order filter. The filter has a zero at the origin and a pole at sqrt(B/C). For frequency domain analysis, it should be easy drive a parallel LR circuit with a white noise current source to get the desired PSD.

For time domain analysis, you will have to drive a digital filter with a Gaussian random number generator. The digital filter can be found using text book methods to map analog filters into equivalent digital filters. The sampling frequency of the filter should be at least twice any frequency of interest, probably more like 4-10 times  higher. The standard deviation of the random number generator must be scaled by the sampling frequency. Actually, to do this in the time domain, you may have to refine your PSD model to make it band limited and then set your sampling frequency well beyond that bandwidth.

Title: Re: Noise implementation in verilog-a
Post by Geoffrey_Coram on Jun 24th, 2003, 1:23pm

Ben -
Pushing Eugene's response a little further: you could implement it with an LR circuit on an internal node, but I think you can use the laplace_nd operator, also.  Depending on the simulator and how it implements Laplace transforms, this might not be computationally efficient, though.
x = white_noise(1);
I(g,s) <+ laplace_nd(x, {0, sqrt(A)}, {sqrt(B), sqrt(C)});


The Laplace transform filter I've defined is
H(s) = 0 + sqrt(A) s / (sqrt(B) + sqrt(C) s)
but you're only interested in its response on the imaginary axis, ie, s = 0 + jw = j 2 pi f.  (The mos11 equations actually have 2 pi f, so I'll leave this in terms of w.)  The output power spectral density for the current noise between gate and source is then |H(s)|^2  times the power spectral density of x (which is 1), so you get
Sig = |H(s)|^2 = sqrt(A) jw / (sqrt(B) + sqrt(C) jw) * sqrt(A) (-jw) / (sqrt(B) + sqrt(C)(-jw)) = A w^2 / (B + C w^2)

Title: Re: Noise implementation in verilog-a
Post by Geoffrey_Coram on Sep 28th, 2004, 9:31am

Ben -
I assume you are also interested in the correlation of channel and gate noises. In that case, try the implementation below.


Code:
// extra module-level declarations
electrical noi;
branch (noi) noiI, noiR, noiC;
real n1, n2, n12, rho_igth, nf1, nf2;

// behavioral code
rho_igth = 0.4;
nf1 = 40.0/27.0;
nf2 = sqrt(nf1);
n1 = white_noise(1.0 - rho_igth);
n2 = white_noise(1.0 - rho_igth);
n12 = white_noise(rho_igth);
I(d,s) <+ NT / (Gmob*Gmob) * (Rideal - Tc_square * Ids * delpsi_s) * (n1 + n12);
I(noiI) <+ NT * (3*gm) * nf1 * (n2 + n12);
I(noiR) <+ V(noiR) * (3*gm) * nf2;
I(noiC) <+ ddt(Cox * V(noiC));
I(g,s) <+ I(noiC);


The transfer function from the internal node noi to the branch (g,s) implements the filtering. The fact that the noise source n12 is used in both the gate-source and drain-source noise currents causes them to be correlated.

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.