Red de conocimiento del abogados - Respuesta jurídica de la empresa - Diseño de frecuencímetro basado en tesis de graduación de FPGA. . Por favor ayuden a los expertos, muchas gracias. .

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

-- 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;

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.