EXAMEN ORDINARIO - Dig
EXAMEN ORDINARIO - Dig
EXAMEN ORDINARIO - Dig
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
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;
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;
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;
begin
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
(calculo de division)
(Calculo de suma)
CONCLUSIÓN