////////////////////////////////////
// Instantaneous Frequency Meter ///
// Fuding Ge fudingge@yahoo.com ///
////////////////////////////////////
// This verilogA model will output the frequency of the input
// based on the instantaneous period of input clock siganl
// You need to change the value of hlfvcc to match the power supply
// of the clock signal. In this version vcc=2.5 and hlfvcc=1.25
// The time of the first transition is unknown, so it is discarded
// and the frequency always begin at 0 Hz
`include "constants.h"
`include "discipline.h"
nature Frequency
abstol = 1m;
access = FF;
units = "Hz";
blowup = 1.0e10;
endnature
discipline freq_current
potential Frequency;
flow Current;
enddiscipline
module Fremeter(vin,fout);
input vin;
output fout;
freq_current fout;
electrical vin;
real tlatest;
real tearly;
real fout_val;
real hlfvcc;
integer counter;
analog begin
@ ( initial_step ) begin
tearly=0;
tlatest=1.0;
hlfvcc=1.25; //Change your hlfvcc here !
counter =0;
end
@ ( cross ((V(vin)-hlfvcc),+1 )) begin
tlatest = $realtime;
fout_val = 1/(tlatest-tearly);
tearly = tlatest;
counter = counter +1;
end
if (counter == 1)
FF(fout) <+ 0.0;
else
FF(fout) <+ fout_val;
end
endmodule
               (
geocities.com/fudinggepll)