Hi.
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);
 end
 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");
end
endmodule
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);
 end
 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");
end
endmodule
The workaround for earlier versions is to add a parallel contribution (that is electrically insignificant) to the noise source.
 V(inn,in) <+ I(inn,in)*1e99;
 V(inn,in) <+ white_noise(noise_voltage*noise_voltage, "LNA_PB");