EXAMEN ORDINARIO - Dig

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

.

UNIVERSIDAD TECNOLÓGICA
EMILIANO ZAPATA DEL ESTADO DE
MORELOS
DIVISIÓN ACADÉMICA DE MECÁNICA
INDUSTRIAL

EXAMEN ORDINARIO

DISPOSITIVOS DIGITALES

PRESENTA:
HECTOR JASSIEL GOMEZ SANCHEZ
ANA LILIA GUTIERREZ GARCIA
LUIS ANDRES HERNANDEZ HERNANDEZ
JUAN JOSUE LIMA BAUTISTA

ASESORA/ASESOR ACADÉMICO

Abraham Leyva

EMILIANO ZAPATA, MOR, OCTUBRE DE 2021


INTRODUCCIÓN

QUARTUS II
La plataforma QUARTUS integra herramientas de desarrollo necesarias para procesar diseños en forma
amigable e incluso manejar proyectos jerárquicos. También cuenta con métodos poderosos de síntesis
lógica, compilación, partición, simulación funcional, simulación en tiempo y simulación enlazada con
varios dispositivos. Para el manejo de esta plataforma se requiere introducir un diseño, sintetizarlo y
finalmente configurarlo y grabarlo en el dispositivo seleccionado; sin embargo, es recomendable, antes
de crear el diseño, que éste se simule y se analice en el tiempo.

VHDL
VHDL es un lenguaje de descripción de hardware, no es un lenguaje de programación, aunque su
sintaxis y forma de uso se asemeje mucho. Con VHDL no programamos, lo que se hace es tomar un
diseño electrónico y describirlo mediante el lenguaje, de forma que sirva como punto de entrada a
herramientas que convertirán esa descripción en una implementación real del sistema. De esta forma
las descripciones de circuitos en VHDL son siempre compatibles independientemente de las
herramientas utilizadas, ya que el lenguaje fue convertido en un standard del IEEE y el problema del
intercambio de diseños desaparece, surgiendo de esta forma todo un mercado de compra y venta
componentes electrónicos reusables
OBJETIVO

El proyecto tiene como finalidad que el alumno (a) aprenda a programar circuitos
Combinacionales y bloques funcionales (como son: codificadores, decodificadores,
multiplexores y demultiplexores, etc.) en el software QUARTUS II y el uso de la tarjeta
CYCLONE II o IV mediante programación VHDL.
CODIGOS DE PROGRAMACIÓN
(CALCULADORA)

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.NUMERIC_STD.ALL;

ENTITY CODIFICADOR IS
PORT( A : IN STD_LOGIC_VECTOR(9 DOWNTO 1); -- ENTRADAS DE LOS
NUMEROS DECIMALES
NA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -- SALIDAS EN
BINARIO DEL BLOQUE

);
END CODIFICADOR;

ARCHITECTURE B01 OF CODIFICADOR IS


BEGIN

CODIFICADOR_A: PROCESS(A)
BEGIN
IF (A(9)='1') THEN NA <= "1001"; -- 9
ELSIF (A(8)='1') THEN NA <= "1000"; -- 8
ELSIF (A(7)='1') THEN NA <= "0111"; -- 7
ELSIF (A(6)='1') THEN NA <= "0110"; -- 6
ELSIF (A(5)='1') THEN NA <= "0101"; -- 5
ELSIF (A(4)='1') THEN NA <= "0100"; -- 4
ELSIF (A(3)='1') THEN NA <= "0011"; -- 3
ELSIF (A(2)='1') THEN NA <= "0010"; -- 2
ELSIF (A(1)='1') THEN NA <= "0001"; -- 1
ELSE NA<="0000";
-- 0
END IF;
END PROCESS;
END B01;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.NUMERIC_STD.ALL;

entity DECO is
port( num : in std_logic_vector(7 downto 0); -- entradas del num
unidades, decenas : out std_logic_vector(7 downto 1) -- salidas de los
segmentos del display (a,b,c,d,e,f,g)
);
end DECO;

architecture B04 of DECO is


begin
deco_unidades: process(num)
begin
if (num=1 or num=11 or num=21 or num=31 or num=41 or num=51 or num=61 or num=71 or
num=81) then unidades <= "1001111"; -- 1
elsif (num=2 or num=12 or num=22 or num=32 or num=42 or num=52 or num=62 or num=72 or
num=82) then unidades <= "0010010"; -- 2
elsif (num=3 or num=13 or num=23 or num=33 or num=43 or num=53 or num=63 or num=73 or
num=83) then unidades <= "0000110"; -- 3
elsif (num=4 or num=14 or num=24 or num=34 or num=44 or num=54 or num=64 or num=74 or
num=84) then unidades <= "1001100"; -- 4
elsif (num=5 or num=15 or num=25 or num=35 or num=45 or num=55 or num=65 or num=75 or
num=85) then unidades <= "0100100"; -- 5
elsif (num=6 or num=16 or num=26 or num=36 or num=46 or num=56 or num=66 or num=76 or
num=86) then unidades <= "0100000"; -- 6
elsif (num=7 or num=17 or num=27 or num=37 or num=47 or num=57 or num=67 or num=77 or
num=87) then unidades <= "0001111"; -- 7
elsif (num=8 or num=18 or num=28 or num=38 or num=48 or num=58 or num=68 or num=78 or
num=88) then unidades <= "0000000"; -- 8
elsif (num=9 or num=19 or num=29 or num=39 or num=49 or num=59 or num=69 or num=79 or
num=89) then unidades <= "0001100"; -- 9
elsif (num=0 or num=10 or num=20 or num=30 or num=40 or num=50 or num=60 or num=70 or
num=80) then unidades <= "0000001"; -- 0
end if;
end process;

deco_decenas: process(num)
begin
if (num >= 10 and num < 20) then decenas <= "1001111"; -- 1
elsif (num >= 20 and num < 30) then decenas <= "0010010"; -- 2
elsif (num >= 30 and num < 40) then decenas <= "0000110"; -- 3
elsif (num >= 40 and num < 50) then decenas <= "1001100"; -- 4
elsif (num >= 50 and num < 60) then decenas <= "0100100"; -- 5
elsif (num >= 60 and num < 70) then decenas <= "0100000"; -- 6
elsif (num >= 70 and num < 80) then decenas <= "0001111"; -- 7
elsif (num >= 80 and num < 90) then decenas <= "0000000"; -- 8
elsif (num >= 90 and num < 100) then decenas <= "0001100"; -- 9
else
decenas <= "0000001"; -- 0
end if;
end process;

end b04;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.NUMERIC_STD.ALL;

entity DISPLAY is
port( unidades, decenas, numA, numB : in std_logic_vector(7 downto 1); -- entrada de 7
segmentos
CLK, reset : in std_logic; -- entrada del reloj de 50MHz
dig : out std_logic_vector(4 downto 1); -- salida para cada pantalla
segmento : out std_logic_vector(7 downto 1) -- salidas de los segmentos para el
display

);
end DISPLAY;

architecture B05 of DISPLAY is


constant N : integer :=17;
signal Q_reg, Q_next : unsigned(N-1 downto 0);
signal sel : std_logic_vector(2 downto 1);
signal total : std_logic_vector(7 downto 1);

begin

registro: process(CLK, reset)


begin
if reset = '0' then Q_reg <=(others => '0');
elsif (CLK'event and CLK = '1') then Q_reg <= Q_next;
end if;
end process;

Q_next <= Q_reg+1;


sel <= std_logic_vector(Q_reg(N-1 downto N-2)); -- Demultiplexor para el control de la
pantalla

DISPLAY: process(sel)
begin
case sel is
when "00" => dig <= "1110";
segmento <= unidades;
when "01" => dig <= "1101";
segmento <= decenas;
when "10" => dig <= "1011";
segmento <= numB;
when others => dig <= "0111";
segmento <= numA;
end case;
end process;

end B05;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.NUMERIC_STD.ALL;

entity ULA is
port( numA, numB : in std_logic_vector(7 downto 0); -- entradas de
los numeros a operar con signo
selec : in std_logic_vector(2 downto 1); --
entrada del switch selector de la operacion
total : out std_LOGIC_vector(7 downto 0);
signo : out std_logic
-- salida del signo
);
end ULA;
architecture B03 of ULA is
signal resultado : std_logic_vector(7 downto 0);
-- Selecciona la operacion
begin

seleccion: process(selec)
begin
if (selec="00") then
resultado <= STD_LOGIC_VECTOR(SIGNED(numA)+SIGNED(numB)); --- SUMA LOS BINARIOS

elsif (selec="01") then


resultado <= STD_LOGIC_VECTOR(SIGNED(numA)+SIGNED(numB)); --- resta LOS
BINARIOS

elsif (selec="10") then


resultado <= STD_LOGIC_vector(to_signed((to_integer(signed(numA)) *
to_integer(signed(numB))),8)); -- Multiplica los binarios

elsif (selec="11") then


resultado <= STD_LOGIC_vector(to_signed((to_integer(signed(numA)) /
to_integer(signed(numB))),8)); -- Divide los binarios
end if;
end process;
total <= std_logic_vector(-signed(resultado)) when resultado(7)='1' else resultado;
signo <= '0' when resultado(7)='1' else '1';
end B03;
EVIDENCIA DE LA PRACTICA

(calculo de division)

(Calculo de suma)
CONCLUSIÓN

Los dispositivos FPGA han demostrado tener una capacidad muy


amplia para cumplir funciones de alto nivel convirtiéndolos en
dispositivos muy atractivos para implementar proyectos relacionados
con la electrónica programable.

El hecho de poder incluir programación secuencial junto a la


programación concurrente hace que las FPGA sean dispositivos
aplicables a los procesos de control y automatización

La compatibilidad con múltiples voltajes convierte al FPGA en un


dispositivo versátil y adaptable a cualquier módulo programable, incluso
a aquellos originalmente destinados a otras tarjetas o plataformas.

En estas practicas que hemos realizado, pudimos ver y experimentar la


programación de una tarjeta Cyclon IV desde cero y ver la lógica
programable que pudieran tener alguno de nuestros dispositivos
digitales que utilizamos cotidianamente, esta practica se logro realizar
gracias a los consejos y enseñanzas de nuestro docente.

También podría gustarte