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.
Cell name: vco
Model type: Verilog-A
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