El frecuencímetro digital es una de las herramientas de medición importantes en el campo de la tecnología electrónica moderna y también se utiliza ampliamente en muchos otros campos. Un frecuencímetro digital registra el número de pulsos medidos dentro de un tiempo de referencia específico, los convierte en frecuencias y los muestra en forma digital. Se utiliza un frecuencímetro digital para medir la frecuencia de una señal (onda cuadrada, onda sinusoidal u otra señal periódica) y mostrarla como un número decimal. Tiene las ventajas de alta precisión, velocidad de medición rápida, lectura intuitiva y fácil uso.
Un ejemplo implementado en lenguaje VHDL es el siguiente:
-Nombre del proyecto: Frecuencímetro de precisión constante
-Dispositivo de destino: FPGA o CPLD
- Revisión 0.01 - Archivo creado
- Notas: clk - Reloj de funcionamiento del sistema, 2MHz.
-Señal de reseteo del sistema, nivel alto activo.
- FX es la señal a probar.
-La frecuencia nx es el valor de conteo de la señal a medir.
- freqns es el valor de conteo de la señal estándar.
- freq es la frecuencia de la señal a medir.
-
-
Biblioteca IEEE
Utilizar IEEE. STD_LOGIC_1164. Todos;
Utiliza IEEE. STD_LOGIC_ARITH. Todos;
Utiliza IEEE. STD_LOGIC_UNSIGNED todos;
-
El contador de frecuencia de la entidad es
generic(clk_freq: integer: = 2000000 - frecuencia de reloj de funcionamiento del sistema
<); p >port(clk: en STD_LOGIC;Reset: en STD_LOGIC;
Fx: en STD_LOGIC; - señal a medir
freq ns :out natural ;
freq NX: salida natural);
-Freq: salida natural
Medidor de frecuencia de punto final
-
El comportamiento estructural del contador de frecuencia es
-
Inicio de señal: STD _ LOGIC - Cuando esta señal es alta, el contador comienza a contar.
Señal CTRL: STD_LOGIC; - La señal CTRL es una señal de inicio del contador generada por la señal a probar y la señal estroboscópica.
Señal CNTx: Natural; - Contador de señal en prueba
Señal CNT: Natural - Contador de señal estándar
-
Inicio
- **************************************** - p >
-Genera una señal estroboscópica, activa alta.
GateCtrl: proceso(clk)
-
Variable CNT0: rango de enteros 0 a 2_097_152 contador de señal de puerta
-; p>
Inicio
Si flanco ascendente (clk), entonces
Si reset='1', entonces
CNT 0 := 0;
Otro
CNT 0:= CNT 0 1;
Finalizar si;
-
Si restablecer= '1 ', luego
Iniciar lt= '0';
elsif CNT0 lt(clk_freq*3/4) luego
Iniciar lt= '1'
Otro
Inicio lt= '0';
Fin
Fin
p>
Finalizar proceso GateCtrl
- ********************************** ***** -
-Generar señal CTRL, una señal de inicio de contador generada por la señal medida y la señal estroboscópica.
CtrlGen: Proceso (Fx)
Inicio
Si es flanco ascendente (Fx), entonces
Si reset='1', Entonces
CTRL lt= '0';
Otros
CTRL lt=inicio;
Finalizar si;
Finalizar si;
Finalizar proceso CtrlGen
- **************************** ************ -
-Utilice dos contadores para contar la señal estándar clk y la señal a probar respectivamente.
-
-Señal estándar de conteo, válida durante el nivel alto de CTRL.
Conteo: proceso (reloj)
Inicio
Si es flanco ascendente (clk), entonces
Si reset='1', Entonces
CNTs lt= 0;
elsif CTRL='1 'Entonces
CNTs lt= CNTs 1;
Otros p>
p>
CNTs lt= 0;
Finalizar si;
Finalizar si;
Finalizar recuento de procesos
-
-La señal de conteo a medir es válida durante el nivel alto de CTRL.
CountX: Proceso (Fx)
Inicio
Si es flanco ascendente (Fx), entonces
Si reset='1', Entonces
CNTx lt= 0;
elsif CTRL='1 'Entonces
CNTx lt= CNTx 1;
Otros p>
p>
CNTx lt= 0;
Finalizar si;
Finalizar si
Finalizar proceso CountX
- ** ************************************* -
- El flanco descendente de CTRL exportará resultados técnicos y valores medidos.
Recuento: Proceso (CTRL)
Inicio
Si es borde descendente (CTRL), entonces
Si reset='1', entonces
FreqNs lt= 0;
FreqNx lt= 0;
-Freq lt;= 0
Otros
FreqNs lt= CNTs
FreqNx lt= CNTx
-Freq lt;=(clk _ freq/CNTs * CNTx);
Fin si;
Finalizar si;
Finalizar recuento de procesos;
Finalizar comportamiento;
La siguiente es una plataforma de prueba escrita para el módulo anterior. que ha pasado Simulación bajo Modelsim. Debido a la gran cantidad de datos, se recomienda no utilizar la simulación de Altera e ISE.
-
Biblioteca ieee
Utiliza IEEE .STD_Logic_1164. todos;
Utilice IEEE.STD_logic_unsigned.all;
Utilice ieee.numeric_std.
Todos;
La entidad tb es
Terminal TB;
El comportamiento arquitectónico de tb es
-Declaración unitaria del dispositivo bajo prueba (UUT )
Medidor de frecuencia de componentes
Puerto (
clk: en std_logic;
Reset: en std_logic;
Fx: en std_logic;
frecuencia ns: OUT natural;
frecuencia NX: OUT natural;
Frecuencia: más allá de lo natural
);
Fin del componente;
-entrada
Clk de señal: STD_logic:= '0';
Reset de señal: STD_logic:= '1';
Fx de señal: STD_logic:='0';
-Salida
Frecuencia de señal: Natural
<; p>FreqNx de señal: Natural-Frecuencia de señal: Natural
-Definición de período de reloj
Periodo_clk constante: tiempo:= 500 ns
Inicio
-Crear una instancia de la unidad bajo prueba (UUT)
uut: Mapeo del puerto del medidor de frecuencia (
clk = gtclk,
reset = gt reset,
Fx = gt FX,
FreqNs => frecuencia,
FreqNx = gtFreqNx,
- Freq = >Frecuencia
);
-Definición de proceso de reloj
clk_process: Proceso
Inicio
clk lt = '0';
Esperando clk_period/2;
clk lt= '1';
Esperando clk_period/2;
p>
Finalizar proceso;
-Generar señal a medir
Fx_process: Proceso
Inicio
Fx lt= ' 0';
Esperar 2 * clk _ period
Fx lt= '1';
Esperar 2 * clk _ period
Finalizar proceso;
Proceso de estimulación
Proceso de proceso
Inicio
-mantener el estado de reinicio durante 100 milisegundos.
Esperar a clk_period * 10;
Restablecer lt = '0';
-Insertar estímulo aquí
Y así sucesivamente;
Finalice el proceso;
Fin;
Consulte el método principal de medición de frecuencia M/T.