Circuitos Digitales - Ayuda con arquitectura estructural en VHDL

 
Vista:

Ayuda con arquitectura estructural en VHDL

Publicado por ricardo (1 intervención) el 29/03/2011 15:52:46
Ola, estoy con la arquitectura estructural de la siquiente maquina en VHDL nose si alguien me podria ayudar. EL funcionamiento de la maquina es la siguiente:

Del estado S0 con salida 0 con un 1 pasamos de nuevo al estado S0 y con un 0 pasamos al estado S1.

En el estado S1 de salida 0 con un 0 pasamos al estado S1 y con un 1 al estado S2

En el estado S2 de salida 0 con un 0 pasamos al estado S1 y con un 1 al estado S3

En S3 con salida 0 con un 1 pasamos a S0 y con un 0 pasamos a S4

Y en el estado S4 con salida 1 con un 1 pasamos a S0 y con un 0 a SI.

Alguien me podria ayudar con la arquitectura estructural en VHDL? gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Arquitectura estructural en VHDL para máquina de estados

Publicado por Alejandro (117 intervenciones) el 28/08/2023 21:37:02
Aquí tienes la arquitectura estructural en VHDL para implementar la máquina de estados que has descrito:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity MaquinaEstados is
    Port ( clk : in STD_LOGIC;
           reset : in STD_LOGIC;
           entrada : in STD_LOGIC;
           salida : out STD_LOGIC);
end MaquinaEstados;
 
architecture Behavioral of MaquinaEstados is
    signal estado_actual, estado_siguiente : STD_LOGIC_VECTOR(2 downto 0) := "000";
begin
    proceso_estado : process(clk, reset)
    begin
        if reset = '1' then
            estado_actual <= "000";
        elsif rising_edge(clk) then
            estado_actual <= estado_siguiente;
        end if;
    end process proceso_estado;
 
    proceso_salida : process(estado_actual, entrada)
    begin
        case estado_actual is
            when "000" =>
                if entrada = '1' then
                    estado_siguiente <= "000";
                    salida <= '0';
                else
                    estado_siguiente <= "001";
                    salida <= '1';
                end if;
            when "001" =>
                if entrada = '0' then
                    estado_siguiente <= "001";
                    salida <= '0';
                else
                    estado_siguiente <= "010";
                    salida <= '0';
                end if;
            when "010" =>
                if entrada = '0' then
                    estado_siguiente <= "001";
                    salida <= '0';
                else
                    estado_siguiente <= "011";
                    salida <= '1';
                end if;
            when "011" =>
                if entrada = '1' then
                    estado_siguiente <= "000";
                    salida <= '0';
                else
                    estado_siguiente <= "100";
                    salida <= '0';
                end if;
            when "100" =>
                if entrada = '1' then
                    estado_siguiente <= "000";
                    salida <= '1';
                else
                    estado_siguiente <= "101";
                    salida <= '1';
                end if;
            when others =>
                estado_siguiente <= "000"; -- Estado de reinicio por defecto
                salida <= '0'; -- Salida de reinicio por defecto
        end case;
    end process proceso_salida;
end Behavioral;

Asegúrate de adaptar las señales de entrada y salida según tus necesidades y conectar el reloj (clk) y la señal de reinicio (reset) adecuadamente en tu entorno de diseño. Esta implementación se basa en la descripción de tu máquina de estados y debería proporcionar la funcionalidad deseada en VHDL.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar