Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library ieee;
- use ieee.std_logic_1164.all;
- entity BlocodeControle is
- port
- (--Vem de Fora
- clk : in std_logic;
- rst : in std_logic;
- B0 : in std_logic;
- B1 : in std_logic;
- B2 : in std_logic;
- B3 : in std_logic;
- W_addr_pessoa : in std_logic_vector(1 downto 0);
- W_data_pessoa : in std_logic_vector(3 downto 0);
- --VĂŁo para o Caminho da Dados
- Ra_rd : out std_logic;
- W_clr : out std_logic;
- W_data : out std_logic_vector(3 downto 0);
- W_wr : out std_logic;
- S_Mux2 : out std_logic;
- W_addr : out std_logic_vector(1 downto 0);
- Ra_addr : out std_logic_vector(1 downto 0);
- S_Mux3 : out std_logic;
- S_Mux1: out std_logic;
- RMM_ld : out std_logic;
- RMM_clr : out std_logic;
- N_clr : out std_logic;
- N_count : out std_logic;
- --Vem do Caminho de Dados
- agtb : in std_logic;
- altb : in std_logic;
- eq : in std_logic
- --Ra_addr_debug : in std_logic_vector(1 downto 0)
- );
- end entity BlocodeControle;
- architecture Comportamento of BlocodeControle is
- type estado is (Inicio, Escrita, Limpar, Zerar, Adicionar, G_Zerar, G_Zerar_n,
- G_aux1, G_InicioIf, G_Atribuir, G_FimIf, G_Incrementa, G_Aux2, G_Fim,
- L_Zerar, L_Zerar_n, L_aux1, L_InicioIf, L_Atribuir, L_FimIf, L_Incrementa, L_Aux2, L_Fim, L_aux3);
- signal Estado_Atual, Prox_Estado : estado;
- begin
- Reg_Estado : process (clk, rst) is
- begin
- if (rst = '1') then
- Estado_Atual <= Inicio;
- elsif(rising_edge(clk))then
- Estado_Atual <= Prox_Estado;
- end if;
- end process Reg_Estado;
- Proximo_Estado : process (clk, B3, B0, B1, B2, altb) is
- begin
- case Estado_Atual is
- when Inicio =>
- if (B3 = '1') then
- Prox_Estado <= Escrita;
- elsif (B0 = '1') then
- Prox_Estado <= Limpar;
- elsif (B1 = '1') then
- Prox_Estado <= G_Zerar;
- elsif (B2 = '1') then
- Prox_Estado <= L_Zerar;
- else
- Prox_Estado <= Inicio;
- end if;
- --Estados Referentes a Escrita
- when Escrita =>
- if (B3 = '1') then
- Prox_Estado <= Escrita;
- else
- Prox_Estado <= Inicio;
- end if;
- -- Estados Referentes a Zerar
- when Limpar =>
- Prox_Estado <= Zerar;
- when Zerar =>
- if(altb = '1')then
- Prox_Estado <= Adicionar;
- elsif(altb ='0') then
- Prox_Estado <= Inicio;
- end if;
- when Adicionar =>
- Prox_Estado <= Zerar;
- --Estados Referentes a Maior
- when G_Zerar =>
- Prox_Estado <= G_Zerar_n;
- when G_Zerar_n =>
- if (altb = '1') then
- Prox_Estado <= G_aux1;
- else
- Prox_Estado <= G_Fim;
- end if;
- when G_aux1 =>
- Prox_Estado <= G_InicioIf;
- when G_InicioIf =>
- if (altb = '1') then
- Prox_Estado <= G_Atribuir;
- else
- Prox_Estado <= G_FimIf;
- end if;
- when G_Atribuir =>
- Prox_Estado <= G_FimIf;
- when G_FimIf =>
- Prox_Estado <= G_Incrementa;
- when G_Incrementa =>
- Prox_Estado <= G_Aux2;
- when G_Aux2 =>
- if(altb = '0') then
- Prox_Estado <= G_Fim;
- else
- Prox_Estado <= G_aux1;
- end if;
- when G_Fim =>
- Prox_Estado <= Inicio;
- --Estados Referentes a Menor
- when L_Zerar =>
- Prox_Estado <= L_Zerar_n;
- when L_Zerar_n =>
- if (altb = '1') then
- Prox_Estado <= L_aux1;
- else
- Prox_Estado <= L_Fim;
- end if;
- when L_aux1 =>
- Prox_Estado <= L_InicioIf;
- when L_InicioIf =>
- if (altb = '0') then
- Prox_Estado <= L_aux3;
- else
- Prox_Estado <= L_FimIf;
- end if;
- when L_aux3 =>
- Prox_Estado <= L_Atribuir;
- when L_Atribuir =>
- Prox_Estado <= L_FimIf;
- when L_FimIf =>
- Prox_Estado <= L_Incrementa;
- when L_Incrementa =>
- Prox_Estado <= L_Aux2;
- when L_Aux2 =>
- if(altb = '0') then
- Prox_Estado <= L_Fim;
- else
- Prox_Estado <= L_aux1;
- end if;
- when L_Fim =>
- Prox_Estado <= Inicio;
- end case;
- end process Proximo_Estado;
- Saida_Estado : process (Estado_Atual) is
- begin
- case Estado_Atual is
- when Inicio =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";--Ra_addr_debug;
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '1';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- --Estados Referentes a Escrita
- when Escrita =>
- W_clr <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- W_wr <= '1';
- S_Mux2 <= '1';
- W_addr <= W_addr_pessoa;
- W_data <= W_data_pessoa;
- Ra_rd <= '1';
- Ra_addr <= "00";--Ra_addr_debug;
- S_Mux3 <= '1';
- --Estados Referentes a Limpeza
- when Limpar =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '1';
- N_count <= '0';
- when Zerar =>
- Ra_rd <= '0';
- W_clr <= '1';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when Adicionar =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '1';
- --Estados Referentes a Maior
- when G_Zerar =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '1';
- N_clr <= '0';
- N_count <= '0';
- when G_Zerar_n =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '1';
- N_count <= '0';
- when G_aux1 =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when G_InicioIf =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when G_Atribuir =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '1';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when G_FimIf =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when G_Incrementa =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '1';
- when G_Aux2 =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when G_Fim =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- --Estados Referentes a Menor
- when L_Zerar =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '1';
- N_clr <= '1';
- N_count <= '0';
- when L_Zerar_n =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '1';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_aux1 =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_InicioIf =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_aux3 =>
- Ra_rd <= '1';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_Atribuir =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '1';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_FimIf =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_Incrementa =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '1';
- when L_Aux2 =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '1';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- when L_Fim =>
- Ra_rd <= '0';
- W_clr <= '0';
- Ra_addr <= "00";
- W_data <= "0000";
- W_wr <= '0';
- S_Mux2 <= '0';
- W_addr <= "00";
- S_Mux3 <= '0';
- S_Mux1 <= '0';
- RMM_ld <= '0';
- RMM_clr <= '0';
- N_clr <= '0';
- N_count <= '0';
- end case;
- end process Saida_Estado;
- end architecture Comportamento;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement