The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl Modeling >> Behavioral Models >> VCO behavioral model https://designers-guide.org/forum/YaBB.pl?num=1192535344 Message started by Prathap on Oct 16th, 2007, 4:49am |
Title: VCO behavioral model Post by Prathap on Oct 16th, 2007, 4:49am Hi, I am currently working on modeling a VCO. I went through this piece of code from the Designer's Guide website. module vco1 (out, in); input in; voltage in; // input terminal output out; voltage out; // output terminal parameter real vmin=0; // input voltage that corresponds to minimum output frequency parameter real vmax=vmin+1 from (vmin:inf); // input voltage that corresponds to maximum output frequency parameter real fmin=1 from (0:inf); // minimum output frequency parameter real fmax=2*fmin from (fmin:inf); // maximum output frequency parameter real vl=-1; // high output voltage parameter real vh=1; // low output voltage parameter real tt=0.01/fmax from (0:inf); // output transition time parameter real ttol=1u/fmax from (0:1/fmax); // time tolerance real freq, phase; integer n; analog begin // compute the freq from the input voltage freq = (V(in) - vmin)*(fmax - fmin) / (vmax - vmin) + fmin; // bound the frequency (this is optional) if (freq > fmax) freq = fmax; if (freq < fmin) freq = fmin; // bound the time step to assure no cycles are skipped $bound_step(0.6/freq); // phase is the integral of the freq modulo 2p phase = 2*`M_PI*idtmod(freq, 0.0, 1.0, -0.5); // identify the point where switching occurs @(cross(phase + `M_PI/2, +1, ttol) or cross(phase - `M_PI/2, +1, ttol)) n = (phase >= -`M_PI/2) && (phase < `M_PI/2); // generate the output V(out) <+ transition(n ? vh : vl, 0, tt); end endmodule In this code i couldnt understand the cross statement used for identifying the point where the switching occurs. I mean i could understand the basic functionality of a sinusoidal VCO. But since this is a VCO whose output is a square wave i couldnt understand why the phase + `M_PI/2 is used to identify the switching. Moreover why is the phase limited from -PI/2 to PI/2. Is it the characteristic of the idtmod function? Thanks. |
Title: Re: VCO behavioral model Post by Ken Kundert on Oct 16th, 2007, 12:11pm The last two arguments of the idtmod operator indicate that its output should range from -0.5 to -0.5+1.0=0.5. The return value is multiplied by 2π before it is assigned to the variable phase. Thus, phase is a sawtooth waveform that ranges from -π to π. The cross functions are set to trigger at -π/2 and π/2 to produce a square wave. You can produce a rectangular wave by changing those thresholds. -Ken |
The Designer's Guide Community Forum » Powered by YaBB 2.2.2! YaBB © 2000-2008. All Rights Reserved. |