Diseño de frecuencímetro basado en tesis de graduación de FPGA. . Por favor ayuden a los expertos, muchas gracias. .
Este es un diseño de curso clásico para circuitos integrados digitales a gran escala en el campo de la programabilidad de sistemas.
El frecuencímetro digital es una de las herramientas de medición importantes en el campo de la tecnología electrónica moderna. También es un instrumento de medición ampliamente utilizado en muchos otros campos. El frecuencímetro digital registra el número de pulsos medidos dentro de un tiempo de referencia específico, lo convierte en frecuencia y lo muestra en forma digital. El frecuencímetro digital se utiliza para medir la frecuencia de una señal (onda cuadrada, onda sinusoidal u otra señal periódica) y mostrarla en dígitos decimales. 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: Medidor de frecuencia de precisión constante
-- Dispositivos de destino: FPGA o CPLD p >
-- Revisión 0.01 - Archivo creado
-- Comentarios: clk--reloj de funcionamiento del sistema, 2MHz
------------ - reset--Señal de reinicio del sistema, alto nivel efectivo
-------------Fx--es la señal a probar
--- ---------FreqNx--es el valor de conteo de la señal a probar
-------------FreqNs--es el valor de conteo de la señal estándar
-------------Freq--es la frecuencia de la señal a medir
--
-------- ---------------------------------------- ---------- --------------------------
biblioteca IEEE;
use IEEE.STD_LOGIC_1164.ALL;
p>
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
----------------- --------------------------------- -------
entidad Cymometer es
generic(clk_freq: integer: = 2000000);--Frecuencia de reloj de trabajo del sistema
Puerto (clk : en STD_LOGIC;
reset: en STD_LOGIC;
Fx: en STD_LOGIC; ----Señal a probar
FreqNs: fuera natural;
p>FreqNx: fuera natural);
--Freq: fuera natural);
final del cimómetro;
------- ----------------- --------------------------------- -
El comportamiento arquitectónico de Cymometer es
------------------------------ ----------
inicio de señal: STD_LOGIC;--El contador comienza a contar cuando esta señal tiene un nivel alto
señal CTRL: STD_LOGIC;--El CTRL señal es la señal de inicio del contador generada por la señal a medir y la señal de control de puerta
señal CNTx: natural;--contador de señales a probar
señal CNTs: natural;- -contador de señal estándar
------------- ------------------
---------
comenzar
--************************ ***************--
--Generar una señal de control de puerta, nivel alto activo
GateCtrl: proceso(clk)< / p>
---------------------------
variable CNT0: rango de enteros 0 a 2_097_152; Contador de señal de puerta
---------------------------
comenzar
si rise_edge(clk) entonces
si reset='1' entonces
CNT0:= 0;
else
CNT0 := CNT0 1;
fin si;
---------
si reset='1' entonces
iniciar lt; = '0';
elsif CNT0 lt; (clk_freq*3/4) entonces
iniciar lt; > else
iniciar lt; = '0';
finalizar si
finalizar si
finalizar el proceso GateCtrl; p>
--******************************************- -
--Generar señal CTRL, una señal de inicio de contador generada por la señal a probar y la señal de control de puerta
CtrlGen: proceso(Fx)
comenzar
si rise_edge(Fx) entonces
si reset='1' entonces
CTRL lt;= '0';
else
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
CountS: proceso(clk)
comenzar
si rise_edge(clk) entonces
si reset='1' entonces
CNTs lt;= 0;
elsif CTRL ='1' entonces
CNT lt; = CNT 1;
else
CNT lt;
final si;
finalizar si;
finalizar el proceso CountS
--------------------- - -----------
--Cuenta la señal a medir, válida durante el nivel alto de CTRL
CountX: proceso(Fx)
comenzar
si rise_edge(Fx) entonces
si reset='1' entonces
CNTx lt;= 0;
elsif CTRL='1' entonces
CNTx lt; = CNTx 1;
else
CNTx lt;
fin; if;
finalizar si
finalizar el proceso CountX
--****************** *********************--
--CTRL flanco descendente genera resultados técnicos y valores medidos
CountOut: proceso(CTRL)
comenzar
si falls_edge(CTRL) entonces
si reset='1' entonces
FreqNs lt; 0;
FreqNx lt;= 0;
-- Freq lt;= 0;
else
FreqNs lt;= CNTs ;
FreqNx lt; = CNTx;
-- Freq lt; = (clk_freq / CNTs * CNTx); p> end if;
end process CountOut;
end Behavioral;
La siguiente es una plataforma de prueba escrita para el módulo anterior, que pasó la simulación. Modelsim, porque el número
La cantidad de datos es grande, por lo que se recomienda no utilizar la simulación de Altera e ISE.
------------------------------------------- -- -------------------------------------
BIBLIOTECA ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTIDAD tb IS
END tb;
Comportamiento ARQUITECTURA DE tb IS
-- Declaración de componentes para la unidad bajo prueba (UUT)
COMPONENTE Cimómetro
PORT(
clk : IN std_logic;
reset : IN std_logic;
Fx : IN std_logic;
FreqNs: OUT natural;
FreqNx: OUT natural;
Freq: OUT natural
);
COMPONENTE FINAL;
p>
--Entradas
señal clk: std_logic:= '0';
señal reset: std_logic:= '1';
señal Fx: std_logic: = '0';
--Salidas
señal FreqNs: natural
señal FreqNx: natural;
-- frecuencia de señal: natural;
-- Definiciones del período de reloj
constante clk_period: tiempo:= 500 ns;
BEGIN
- - Crear una instancia de la unidad bajo prueba (UUT)
uut: Cymometer PORT MAP (
clk =gt; clk,
reset =gt; restablecer,
p>
Fx =gt;
FreqNs =gt;
FreqNx =gt; /p>
-- Freq =gt; Freq
);
-- Definiciones de procesos de reloj
clk_process: proceso
comenzar
> clk lt; = '0';
espera clk_period/2;
clk lt; = '1';
finalizar proceso
--Generar señal para ser probada
Fx_process: proceso
comenzar
Fx lt ;= '0';
espera 2*clk_period;
Fx lt;= '1';
espera 2*clk_period; p >
finalizar el proceso;
-- proceso de estímulo
stim_proc: proceso
comenzar
-- mantener el estado de reinicio durante 100 ms .
espere clk_period*10;
reset lt; = '0';
-- inserte el estímulo aquí
espere ;
finalizar proceso;
END;
Principio de referencia Método de medición de frecuencia M/T.