Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use ieee.numeric_std.all;
- entity Main is
- Port ( reset : in STD_LOGIC;
- clk : in STD_LOGIC;
- led : out std_logic_vector (15 downto 0));
- end Main;
- architecture Behavioral of Main is
- signal ledME : bit_vector (7 downto 0);
- signal ledMD : bit_vector (7 downto 0);
- signal count : unsigned (22 downto 0) := (others=>'0');
- signal ledzero : unsigned (15 downto 0) := "0000000000000000";
- signal enable : std_logic := '0';
- signal clk05: std_logic;
- type estado is (inicio, frente, direita, esquerda, atras, low_bat);
- signal prox_estado, estado_atual : estado := inicio;
- signal count_action : unsigned (27 downto 0) := (others=>'0');
- signal count_battery : unsigned (6 downto 0) := "0000000";
- signal count_passo: integer;
- begin
- -- processo de geração de clk
- -- contador de 100 ms e criacao do enable
- process(clk,reset)
- begin
- if reset='1' then
- count <= (others=>'0');
- elsif rising_edge(clk) then
- if count = "10011000100101101000000" then
- enable <= '1';
- count <= (others=>'0');
- else
- enable <= '0';
- count <= count+1;
- end if;
- end if;
- end process;
- -- processo para registrar estado --------------------------------------------------------
- process(clk,reset)
- begin
- if reset='1' then
- estado_atual <= inicio;
- elsif rising_edge(clk) then
- estado_atual <= prox_estado;
- end if;
- end process;
- -- processo para zerar os leds -----------------------------------------------------------
- -- processo da maquina de estados --------------------------------------------------------
- process (estado_atual, clk)
- begin
- case estado_atual is
- when inicio =>
- ledMe <= (others => '0');
- ledMd <= (others => '0');
- count_passo <= 0;
- when frente =>
- ledMe <= "00000001";
- ledMd <= "00000001";
- if count_passo = 1 then
- if count_action = "0101111101011110000100000000" then
- prox_estado <= direita;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe rol 1;
- ledMd <= ledMd rol 1;
- end if;
- elsif count_passo= 3 then
- if count_action = "0010111110101111000010000000" then
- prox_estado <= direita;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe rol 1;
- ledMd <= ledMd rol 1;
- end if;
- else
- if count_action = "0010111110101111000010000000" then
- prox_estado <= esquerda;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe rol 1;
- ledMd <= ledMd rol 1;
- end if;
- end if;
- when direita =>
- ledMe <= "10000000";
- ledMd <= "00000001";
- if count_passo = 2 then
- if count_action = "0101111101011110000100000000" then
- prox_estado <= frente;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe ror 1;
- ledMd <= ledMd rol 1;
- end if;
- else
- if count_action = "0101111101011110000100000000" then
- prox_estado <= atras;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe ror 1;
- ledMd <= ledMd rol 1;
- end if;
- end if;
- when esquerda =>
- ledMe <= "00000001";
- ledMd <= "10000000";
- if count_passo = 4 then
- if count_action = "0101111101011110000100000000" then
- prox_estado <= frente;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe rol 1;
- ledMd <= ledMd ror 1;
- end if;
- else
- if count_action = "0101111101011110000100000000" then
- prox_estado <= atras;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe rol 1;
- ledMd <= ledMd ror 1;
- end if;
- end if;
- when atras =>
- ledMe <= "10000000";
- ledMd <= "10000000";
- if count_passo = 7 then
- if count_action = "1000111100001101000110000000" then
- prox_estado <= esquerda;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe ror 1;
- ledMd <= ledMd ror 1;
- end if;
- else
- if count_action = "1011111010111100001000000000" then
- prox_estado <= low_bat;
- count_passo <= count_passo + 1;
- else
- ledMe <= ledMe ror 1;
- ledMd <= ledMd ror 1;
- end if;
- end if;
- when low_bat =>
- ledMe <= (others => '0');
- ledMd <= (others => '0');
- if rising_edge(clk05) then
- ledMe <= not ledME;
- ledMd <= not ledMd;
- else
- ledMe <= ledME;
- ledMd <= ledMd;
- end if;
- end case;
- end process;
- led (15 downto 8) <= to_stdlogicvector (ledME);
- led (7 downto 0) <= to_stdlogicvector (ledMD);
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement