Voltage-controlled oscillator model (VCO)

This article contains two models:

Model 1: Gain (V/Hz) is set directly

Model 2: Gain (V/Hz) is set through start/stop frequency

Tunable parameters:

  • [1] Gain (in V/Hz) [2] Start/Stop frequency;
  • DC offset;
  • Amplitude;
  • Start frequency;
  • Number of points per period - can be useful for FFT simulations etc.
1// VCO model 2// Contains two models: 3// Model 1: Gain (V/Hz) is set directly 4// Model 2: Gain (V/Hz) is set through start/stop frequency 5// Author: A. Sidun 6// Source: AnalogHub.ie 7 8`include "constants.vams" 9`include "disciplines.vams" 10 11// Model 1: Gain (V/Hz) is set directly 12module vco(out,in); 13voltage out,in; 14parameter real Gain_Hz_per_V = 1e6; 15parameter real DC_offset = 1; 16parameter real Amplitude = 1; 17parameter real Points_per_period = 100; 18parameter real Start_freq = 1e6; 19real phase, freq; 20 21 analog begin 22 freq = Start_freq+Gain_Hz_per_V*V(in); 23 phase = idtmod(freq,0,1); 24 V(out) <+ DC_offset+Amplitude*cos(2*`M_PI*phase); 25 $bound_step(1/(Points_per_period*freq)); 26 end 27endmodule 28 29// Model 2: Gain (V/Hz) is set through start/stop frequency 30module vco(out,in); 31voltage out,in; 32parameter real DC_offset = 1; 33parameter real Amplitude = 1; 34parameter real Points_per_period = 100; 35parameter real Start_frequency = 1e6; 36parameter real Stop_frequency = 10e6; 37real phase, freq, gain; 38 39 analog begin 40 gain = Stop_frequency/Start_frequency; 41 freq = Start_frequency+gain*V(in); 42 phase = idtmod(freq,0,1); 43 V(out) <+ DC_offset+Amplitude*cos(2*`M_PI*phase); 44 $bound_step(1/(Points_per_period*freq)); 45 end 46endmodule