Papel en el mostrador

Este es un diseño de curso clásico en el campo de la programación de sistemas para circuitos integrados digitales a gran escala.

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

- **************************************** -

-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

-

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>

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>

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.