AnsweredAssumed Answered

Small Signal Noise of Verilog-A

Question asked by TNAKA on Dec 7, 2005
Latest reply on Dec 8, 2005 by wrivas

The attached code is a simple Verilog-A code of amplifier with Noise Figure.
Here Noise Figure is implemented by equivalent input noise using "white_noise()".
We can use equivalent input current or voltage noise.

Attached code is equivalent input noise case.
If we use equivalent current noise,
activate the following two lines,
  //I(in_int) <+ white_noise(noise_current*noise_current, "LNA_PB");
  //V(in, in_int) <+ 0.0;
and comment out the following,
  V(in, in_int) <+ white_noise(noise_voltage*noise_voltage, "LNA_PB");

For current noise case, ADS sp-noise analysis gives expected NF correctly, but it doesn't expected NF for voltage noise case.
For voltage noise case, ADS gives NF=0dB regardless of noise_voltage value.

On the other hand, Cadence Spectre gives expected NF for both cases.

Why can't ADS give expected NF for equivalent voltage noise case ?

I use HPEESOFSIM (*) 2004A.501 Oct 13 2004 (built: 10/13/04 00:16:23).


`include "constants.h"
`include "discipline.h"

module LNA_PB(in, out);
inout in,out;
electrical in,out;

parameter real gain = 40 from [0:inf);
parameter real nf = 2 from [0:inf];
parameter real rin = 50 from (0:inf);
parameter real rout = 50 from (0:inf);

real a,rnf;
real noise_current,noise_voltage;

electrical in_int;

analog begin

  @(initial_step) begin
    a = sqrt(pow(10,gain/10)*rout/rin);
    rnf = pow(10,nf/10);
    noise_current = sqrt(4*(rnf-1)*`P_K*$temperature/rin);
    noise_voltage = sqrt(4*(rnf-1)*`P_K*$temperature*rin);

 I(in_int) <+ V(in_int)/rin;
 I(out) <+ (-2*a*V(in_int) + V(out))/rout;

 //I(in_int) <+ white_noise(noise_current*noise_current, "LNA_PB");
 //V(in, in_int) <+ 0.0;

 V(in, in_int) <+ white_noise(noise_voltage*noise_voltage, "LNA_PB");