You are on page 1of 6

DISEÑO DIGITAL UNMSM

UNIVERSIDAD NACIONAL MAYOR DE SAN


MARCOS
(Universidad del Perú, DECANA DE AMÉRICA)
FACULTAD DE INGENIERIA ELECTRÓNICA Y ELÉCTRICA
E.A.P DE INGENIERÍA ELECTRÓNICA

Tema: Diseño de un Contador de 0 a


9999 usando FPGA

Alumno: Jhonatan Alexander Juño Garcia

Código: 12190016

Profesor: Ing. Alfredo Granados Ly


DISEÑO DIGITAL 3-5-2016

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


(Universidad del Perú, DECANA DE AMÉRICA)
FACULTAD DE INGENIERIA ELECTRÓNICA Y ELÉCTRICA
E.A.P DE INGENIERÍA ELECTRÓNICA

INFORME FINA # 1
CONTADOR DE 0-9999 EN FPGA

I. OBJETIVO
 Conocer el VHDL como lenguaje de descripción de hardware para el diseño de
sistemas digitales
 Conocer la estructura del lenguaje VHDL y su aplicación en FPGA

II. MATERIALES Y EQUIPOS


 Placa modulo con FPGA Altera Cyclone I
 PC con la herramienta de síntesis MAX Plus II y el entorno de desarrollo
Quartus II de Altera

III. PROCEDIMIENTO DE DISEÑO


1. Análisis del problema

El problema plateado es diseñar un contador de 0 a 9999, el mismo que deberá ser


probado en la placa del FPGA. Para este diseño vamos a considerar que la cuenta
se realizará cada segundo, además una vez iniciada la cuenta y llegado al final, el
contador se reiniciará y volverá a realizar la cuenta.

La cuanta se visualizará en un display de 7 segmentos multiplexado, lo que hace


que nuestro circuito además contenga un multiplexor para seleccionar la cuenta y
poder activar uno a uno los display a cierta frecuencia de tal manera que se pueda
apreciar la cuenta en todos los displays.

Básicamente nuestro circuito tendrá divisores de frecuencia (para reducir la


frecuencia del clock y usarlo para nuestro propósito) contador BCD de 0 a 9999 a
4 bits por digito, un bloque de multiplexor y un bloque de decodificadores.

2. Diagrama de bloques del circuito

Una vez hecho el análisis se propone el siguiente diagrama de bloques del circuito
a implementar:

1
DISEÑO DIGITAL 3-5-2016

2
DISEÑO DIGITAL 3-5-2016

3. Implementación del Circuito en VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity contador_9999 is
port( clk: in std_logic;
display: out std_logic_vector(7 downto 0);
ena: out std_logic_vector(3 downto 0));
end contador_9999;

architecture circuito of contador_9999 is


signal clk_1hz: std_logic;
signal clk_mux: std_logic;
signal cuenta1: std_logic_vector(24 downto 0);
signal cuenta2: std_logic_vector(17 downto 0);
signal sel: std_logic_vector(1 downto 0);
signal Q: std_logic_vector(3 downto 0);
signal q1:std_logic_vector(3 downto 0);
signal q2:std_logic_vector(3 downto 0);
signal q3:std_logic_vector(3 downto 0);
signal q4:std_logic_vector(3 downto 0);

begin
--Primer divisor, divide la frecuencia hasta 1Hz
process(clk)
begin
if clk='1' and clk'event then
cuenta1<=cuenta1+1;
if cuenta1=23999999 then
cuenta1<=(others=>'0');
clk_1hz<= not clk_1hz;
end if;
end if;
end process;
--Segundo divisor, divide la frecuencia para al multiplexado, se eligió 100Hz con
buenos
--resultados

process(clk)
begin
if clk='1' and clk'event then
cuenta2<=cuenta2+1;
if cuenta2=23999 then
cuenta2<=(others=>'0');
clk_mux<= not clk_mux;
end if;
end if;
end process;
--Process del contador, contador de 0 a 9999 con clock de 1hz

process(clk_1hz)
begin
if clk_1hz='1' and clk_1hz'event then

3
DISEÑO DIGITAL 3-5-2016

q1<=q1+1;
if q1=9 then
q1<="0000";
q2<=q2+1;
if q2=9 then
q2<="0000";
q3<=q3+1;
if q3=9 then
q3<="0000";
q4<=q4+1;
if q4=9 then
q4<="0000";
end if;
end if;
end if;
end if;
end if;
end process;

--Contador para el multiplexado sel con clock de 100Hz

process(clk_mux)
begin
if clk_mux='1' and clk_mux'event then
sel<=sel+1;
if sel=3 then
sel<="00";
end if;
end if;
end process;

--Multiplexor
with sel select Q<= q1 when "00",
q2 when "01",
q3 when "10",
q4 when others;
-- Decodificador de enable
with sel select ena<="1110" when "00",
"1101" when "01",
"1011" when "10",
"0111" when others;
--Decodificador a 7 segmentos

with Q select display <= "00000011" when "0000",


"10011111" when "0001",
"00100101" when "0010",
"00001101" when "0011",
"10011001" when "0100",
"01001001" when "0101",
"01000001" when "0110",
"00011111" when "0111",
"00000001" when "1000",
"00001001" when "1001",
"11111111" when others;

end circuito;

4
DISEÑO DIGITAL 3-5-2016

4. Prueba del circuito en módulo FPGA Altera Cyclone I


.

You might also like