`include "disciplines.vams"
// power: available power (dBm) default: 10 dBm
// freq: output frequency (Hz) default: 1 GHz
// rout: output impedance (Ohm) default: 50 Ohm
`define db10_real(x) pow(10, (x)/10)
`define dbm2pow(x) `db10_real( ((x)-30) )
`define pow2v(x,r) sqrt(8*(r)*(x))
module oscwphnoise(out, ph);
inout out;
input ph;
electrical out;
electrical ph;
electrical gnd;
ground gnd;
electrical int;
parameter real power = 10 ;
parameter real rout = 50 ;
parameter real freq = 1e+09 ;
isource #(.type("sine"), .ampl(`pow2v(`dbm2pow(power),rout)/rout), .freq(freq) ) is1(gnd,out);
vsource #(.type("sine"), .ampl(`pow2v(`dbm2pow(power),rout)/rout), .sinephase(-90), .freq(freq) ) vs1(gnd,int);
analog begin
I(out) <+ -V(int)*V(ph);
I(out) <+ V(out)/rout;
end
endmodule