ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Letrero movible "Hola"


Enviado por   •  9 de Enero de 2025  •  Práctica o problema  •  4.617 Palabras (19 Páginas)  •  50 Visitas

Página 1 de 19

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity Hola is

port (

clk : in std_logic; -- Reloj principal

reset : in std_logic; -- Reinicio del sistema

led : out std_logic_vector(6 downto 0); -- Salida al display de 7 segmentos

clk_out2 : out std_logic;

clk_out1 : out std_logic;

display : out std_logic_vector(3 downto 0)

);

end Hola;

architecture arqHola of Hola is

type estados is (q1, q2, q3, q4, q5, q6, q7, q8,

a1, a2, a3, a4,

b1, b2, b3, b4,

c1, c2, c3, c4,

d1, d2, d3, d4,

e1, e2, e3, e4,

f1, f2, f3, f4,

g1, g2, g3, g4,

h1, h2, h3, h4);

signal actual, siguiente,

actual1, siguiente1,

actual2, siguiente2,

actual3, siguiente3,

actual4, siguiente4,

actual5, siguiente5,

actual6, siguiente6,

actual7, siguiente7,

actual8, siguiente8: estados;

signal detener : std_logic := '0'; -- Señal para detener el conteo

signal salida, salida1, salida2, salida3, salida4, salida5, salida6, salida7, salida8 : std_logic_vector(6 downto 0);

signal dp_aux, dp_aux1, dp_aux2, dp_aux3, dp_aux4, dp_aux5, dp_aux6, dp_aux7, dp_aux8 : std_logic_vector(3 downto 0);

signal clk_aux2: STD_LOGIC;

signal clk_aux1: STD_LOGIC;

signal contador1: integer range 0 to 10000000 := 0;

signal contador2: integer range 0 to 100000 := 0;

begin

--divisor 1

divisor_frecuencia1: process(reset, clk) BEGIN

if(reset='1') then

clk_aux1 <= '0';

contador1 <= 0 ;

elsif rising_edge(clk) then

if(contador1 = 10000000) then

clk_aux1 <= NOT(clk_aux1);

contador1 <= 0;

else

contador1 <= contador1 + 1;

end if;

end if;

end process;

clk_out1 <= clk_aux1;

--divisor 2

divisor_frecuencia2: process(reset, clk) BEGIN

if(reset='1') then

clk_aux2 <= '0';

contador2 <= 0 ;

elsif rising_edge(clk) then

if(contador2 = 100000) then

clk_aux2 <= NOT(clk_aux2);

contador2 <= 0;

else

contador2 <= contador2 + 1;

end if;

end if;

end process;

clk_out2 <= clk_aux2;

--Maquina de estados para 1

process(clk_aux2, reset)

begin

if reset = '1' then

actual1 <= a1; -- Reinicia al estado inicial

elsif rising_edge(clk_aux2) then

actual1 <= siguiente1;

end if;

end process;

process(actual1)

begin

case actual1 is

when a1 =>

siguiente1 <= a2;

salida1 <= "1111111"; -- Muestra

dp_aux1 <= "0111";

when a2 =>

siguiente1 <= a3;

salida1 <= "1111111"; -- Muestra

dp_aux1 <= "1011";

when a3 =>

siguiente1 <= a4;

salida1 <= "1111111"; -- Muestra

dp_aux1 <= "1101";

when a4 =>

siguiente1 <= a1;

salida1 <= "1111111"; -- Muestra

dp_aux1 <= "1110";

when others =>

siguiente1 <= a1; -- Valor por defecto

dp_aux1 <= "0111";

end case;

end process;

--Maquina de estados para 2

process(clk_aux2, reset)

begin

if reset = '1' then

actual2 <= b1; -- Reinicia al estado inicial

elsif rising_edge(clk_aux2) then

actual2 <= siguiente2;

end if;

end process;

process(actual2)

begin

case actual2 is

when b1 =>

siguiente2 <= b2;

salida2 <= "1111111"; -- Muestra

dp_aux2 <= "0111";

when b2 =>

siguiente2 <= b3;

salida2 <= "1111111"; -- Muestra

dp_aux2 <= "1011";

when b3 =>

siguiente2 <= b4;

salida2 <= "1111111"; -- Muestra

dp_aux2 <= "1101";

when b4 =>

siguiente2 <= b1;

salida2 <= "1001000"; -- Muestra H

dp_aux2 <= "1110";

when others =>

siguiente2 <= b1; -- Valor por defecto

dp_aux2 <= "0111";

end case;

end process;

--Maquina de estados para 3

process(clk_aux2, reset)

begin

if reset = '1' then

actual3 <= c1; -- Reinicia al estado inicial

elsif rising_edge(clk_aux2) then

actual3 <= siguiente3;

end if;

end process;

process(actual3)

begin

case actual3 is

when c1 =>

siguiente3 <= c2;

salida3 <= "1111111"; -- Muestra

dp_aux3 <= "0111";

when c2 =>

siguiente3 <= c3;

salida3 <= "1111111"; -- Muestra

dp_aux3 <= "1011";

...

Descargar como (para miembros actualizados) txt (12 Kb) pdf (53 Kb) docx (15 Kb)
Leer 18 páginas más »
Disponible sólo en Clubensayos.com