Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 11.74 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4. entity BlocodeControle is
  5.     port
  6.         (--Vem de Fora
  7.         clk : in std_logic;
  8.         rst : in std_logic;
  9.         B0 : in std_logic;
  10.         B1 : in std_logic;
  11.         B2 : in std_logic;
  12.         B3 : in std_logic;
  13.         W_addr_pessoa : in std_logic_vector(1 downto 0);
  14.         W_data_pessoa : in std_logic_vector(3 downto 0);
  15.        
  16.         --VĂŁo para o Caminho da Dados
  17.         Ra_rd : out std_logic;
  18.         W_clr : out std_logic;
  19.         W_data : out std_logic_vector(3 downto 0);
  20.         W_wr : out std_logic;
  21.         S_Mux2 : out std_logic;
  22.         W_addr : out std_logic_vector(1 downto 0);
  23.         Ra_addr : out std_logic_vector(1 downto 0);
  24.         S_Mux3 : out std_logic;
  25.         S_Mux1: out std_logic;
  26.         RMM_ld : out std_logic;
  27.         RMM_clr : out std_logic;
  28.         N_clr : out std_logic;
  29.         N_count : out std_logic;
  30.        
  31.         --Vem do Caminho de Dados
  32.         agtb : in std_logic;
  33.         altb : in std_logic;
  34.         eq : in std_logic
  35.        
  36.         --Ra_addr_debug : in std_logic_vector(1 downto 0)
  37.         );
  38.     end entity BlocodeControle;
  39.    
  40. architecture Comportamento of BlocodeControle is
  41.         type estado is (Inicio, Escrita, Limpar, Zerar, Adicionar, G_Zerar, G_Zerar_n,
  42.         G_aux1, G_InicioIf, G_Atribuir, G_FimIf, G_Incrementa, G_Aux2, G_Fim,
  43.         L_Zerar, L_Zerar_n, L_aux1, L_InicioIf, L_Atribuir, L_FimIf, L_Incrementa, L_Aux2, L_Fim, L_aux3);
  44.         signal Estado_Atual, Prox_Estado : estado;
  45.    
  46.         begin
  47.        
  48.         Reg_Estado : process (clk, rst) is
  49.             begin
  50.                 if (rst = '1') then
  51.                     Estado_Atual <= Inicio;
  52.                 elsif(rising_edge(clk))then
  53.                     Estado_Atual <= Prox_Estado;
  54.                 end if;
  55.             end process Reg_Estado;
  56.        
  57.         Proximo_Estado : process (clk, B3, B0, B1, B2, altb) is
  58.             begin
  59.                 case Estado_Atual is
  60.                     when Inicio =>
  61.                         if (B3 = '1') then
  62.                             Prox_Estado <= Escrita;
  63.                         elsif (B0 = '1') then
  64.                             Prox_Estado <= Limpar;
  65.                         elsif (B1 = '1') then
  66.                             Prox_Estado <= G_Zerar;
  67.                         elsif (B2 = '1') then
  68.                             Prox_Estado <= L_Zerar;
  69.                         else
  70.                             Prox_Estado <= Inicio;
  71.                         end if;
  72.                    
  73.                     --Estados Referentes a Escrita
  74.                     when Escrita =>
  75.                         if (B3 = '1') then
  76.                             Prox_Estado <= Escrita;
  77.                         else
  78.                             Prox_Estado <= Inicio;
  79.                         end if;
  80.                    
  81.                     -- Estados Referentes a Zerar
  82.                     when Limpar =>
  83.                         Prox_Estado <= Zerar;
  84.                     when Zerar =>
  85.                         if(altb = '1')then
  86.                             Prox_Estado <= Adicionar;
  87.                         elsif(altb ='0') then
  88.                             Prox_Estado <= Inicio;
  89.                         end if;
  90.                     when Adicionar =>
  91.                         Prox_Estado <= Zerar;
  92.                    
  93.                     --Estados Referentes a Maior
  94.                     when G_Zerar =>
  95.                         Prox_Estado <= G_Zerar_n;
  96.                     when G_Zerar_n =>
  97.                         if (altb = '1') then
  98.                             Prox_Estado <= G_aux1;
  99.                         else
  100.                             Prox_Estado <= G_Fim;
  101.                         end if;
  102.                     when G_aux1 =>
  103.                         Prox_Estado <= G_InicioIf;
  104.                     when G_InicioIf =>
  105.                         if (altb = '1') then
  106.                             Prox_Estado <= G_Atribuir;
  107.                         else
  108.                             Prox_Estado <= G_FimIf;
  109.                         end if;
  110.                     when G_Atribuir =>
  111.                         Prox_Estado <= G_FimIf;
  112.                     when G_FimIf =>
  113.                         Prox_Estado <= G_Incrementa;
  114.                     when G_Incrementa =>
  115.                         Prox_Estado <= G_Aux2;
  116.                     when G_Aux2 =>
  117.                         if(altb = '0') then
  118.                             Prox_Estado <= G_Fim;
  119.                         else
  120.                             Prox_Estado <= G_aux1;
  121.                         end if;
  122.                     when G_Fim =>
  123.                         Prox_Estado <= Inicio;
  124.                    
  125.                     --Estados Referentes a Menor
  126.                     when L_Zerar =>
  127.                         Prox_Estado <= L_Zerar_n;
  128.                     when L_Zerar_n =>
  129.                         if (altb = '1') then
  130.                             Prox_Estado <= L_aux1;
  131.                         else
  132.                             Prox_Estado <= L_Fim;
  133.                         end if;
  134.                     when L_aux1 =>
  135.                         Prox_Estado <= L_InicioIf;
  136.                     when L_InicioIf =>
  137.                         if (altb = '0') then
  138.                             Prox_Estado <= L_aux3;
  139.                         else
  140.                             Prox_Estado <= L_FimIf;
  141.                         end if;
  142.                     when L_aux3 =>
  143.                         Prox_Estado <= L_Atribuir;
  144.                     when L_Atribuir =>
  145.                         Prox_Estado <= L_FimIf;
  146.                     when L_FimIf =>
  147.                         Prox_Estado <= L_Incrementa;
  148.                     when L_Incrementa =>
  149.                         Prox_Estado <= L_Aux2;
  150.                     when L_Aux2 =>
  151.                         if(altb = '0') then
  152.                             Prox_Estado <= L_Fim;
  153.                         else
  154.                             Prox_Estado <= L_aux1;
  155.                         end if;
  156.                     when L_Fim =>
  157.                         Prox_Estado <= Inicio;
  158.                     end case;
  159.                 end process Proximo_Estado;
  160.            
  161.         Saida_Estado : process (Estado_Atual) is
  162.             begin
  163.                 case Estado_Atual is
  164.                     when Inicio =>
  165.                         Ra_rd <= '1';
  166.                         W_clr <= '0';
  167.                         Ra_addr <= "00";--Ra_addr_debug;
  168.                         W_data <= "0000";
  169.                         W_wr <= '0';
  170.                         S_Mux2 <= '0';
  171.                         W_addr <= "00";
  172.                         S_Mux3 <= '1';
  173.                         S_Mux1 <= '0';
  174.                         RMM_ld <= '0';
  175.                         RMM_clr <= '0';
  176.                         N_clr <= '0';
  177.                         N_count <= '0';
  178.                        
  179.                     --Estados Referentes a Escrita
  180.                     when Escrita =>
  181.                         W_clr  <= '0';
  182.                         S_Mux1  <= '0';
  183.                         RMM_ld  <= '0';
  184.                         RMM_clr <= '0';
  185.                         N_clr <= '0';
  186.                         N_count <= '0';
  187.                         W_wr <= '1';
  188.                         S_Mux2 <= '1';
  189.                         W_addr <= W_addr_pessoa;
  190.                         W_data <= W_data_pessoa;
  191.                         Ra_rd <= '1';
  192.                         Ra_addr <= "00";--Ra_addr_debug;
  193.                         S_Mux3 <= '1';
  194.                        
  195.                     --Estados Referentes a Limpeza
  196.                     when Limpar =>
  197.                         Ra_rd <= '0';
  198.                         W_clr <= '0';
  199.                         Ra_addr <= "00";
  200.                         W_data <= "0000";
  201.                         W_wr <= '0';
  202.                         S_Mux2 <= '0';
  203.                         W_addr <= "00";
  204.                         S_Mux3 <= '0';
  205.                         S_Mux1 <= '0';
  206.                         RMM_ld <= '0';
  207.                         RMM_clr <= '0';
  208.                         N_clr <= '1';
  209.                         N_count <= '0';
  210.                     when Zerar =>
  211.                         Ra_rd <= '0';
  212.                         W_clr <= '1';
  213.                         Ra_addr <= "00";
  214.                         W_data <= "0000";
  215.                         W_wr <= '0';
  216.                         S_Mux2 <= '0';
  217.                         W_addr <= "00";
  218.                         S_Mux3 <= '0';
  219.                         S_Mux1 <= '1';
  220.                         RMM_ld <= '0';
  221.                         RMM_clr <= '0';
  222.                         N_clr <= '0';
  223.                         N_count <= '0';
  224.                     when Adicionar =>
  225.                         Ra_rd <= '0';
  226.                         W_clr <= '0';
  227.                         Ra_addr <= "00";
  228.                         W_data <= "0000";
  229.                         W_wr <= '0';
  230.                         S_Mux2 <= '0';
  231.                         W_addr <= "00";
  232.                         S_Mux3 <= '0';
  233.                         S_Mux1 <= '1';
  234.                         RMM_ld <= '0';
  235.                         RMM_clr <= '0';
  236.                         N_clr <= '0';
  237.                         N_count <= '1';
  238.                        
  239.                     --Estados Referentes a Maior
  240.                     when G_Zerar =>
  241.                         Ra_rd <= '0';
  242.                         W_clr <= '0';
  243.                         Ra_addr <= "00";
  244.                         W_data <= "0000";
  245.                         W_wr <= '0';
  246.                         S_Mux2 <= '0';
  247.                         W_addr <= "00";
  248.                         S_Mux3 <= '0';
  249.                         S_Mux1 <= '1';
  250.                         RMM_ld <= '0';
  251.                         RMM_clr <= '1';
  252.                         N_clr <= '0';
  253.                         N_count <= '0';
  254.                     when G_Zerar_n =>
  255.                         Ra_rd <= '0';
  256.                         W_clr <= '0';
  257.                         Ra_addr <= "00";
  258.                         W_data <= "0000";
  259.                         W_wr <= '0';
  260.                         S_Mux2 <= '0';
  261.                         W_addr <= "00";
  262.                         S_Mux3 <= '0';
  263.                         S_Mux1 <= '1';
  264.                         RMM_ld <= '0';
  265.                         RMM_clr <= '0';
  266.                         N_clr <= '1';
  267.                         N_count <= '0';
  268.                     when G_aux1 =>
  269.                         Ra_rd <= '1';
  270.                         W_clr <= '0';
  271.                         Ra_addr <= "00";
  272.                         W_data <= "0000";
  273.                         W_wr <= '0';
  274.                         S_Mux2 <= '0';
  275.                         W_addr <= "00";
  276.                         S_Mux3 <= '0';
  277.                         S_Mux1 <= '0';
  278.                         RMM_ld <= '0';
  279.                         RMM_clr <= '0';
  280.                         N_clr <= '0';
  281.                         N_count <= '0';
  282.                     when G_InicioIf =>
  283.                         Ra_rd <= '1';
  284.                         W_clr <= '0';
  285.                         Ra_addr <= "00";
  286.                         W_data <= "0000";
  287.                         W_wr <= '0';
  288.                         S_Mux2 <= '0';
  289.                         W_addr <= "00";
  290.                         S_Mux3 <= '0';
  291.                         S_Mux1 <= '0';
  292.                         RMM_ld <= '0';
  293.                         RMM_clr <= '0';
  294.                         N_clr <= '0';
  295.                         N_count <= '0';
  296.                     when G_Atribuir =>
  297.                         Ra_rd <= '0';
  298.                         W_clr <= '0';
  299.                         Ra_addr <= "00";
  300.                         W_data <= "0000";
  301.                         W_wr <= '0';
  302.                         S_Mux2 <= '0';
  303.                         W_addr <= "00";
  304.                         S_Mux3 <= '0';
  305.                         S_Mux1 <= '0';
  306.                         RMM_ld <= '1';
  307.                         RMM_clr <= '0';
  308.                         N_clr <= '0';
  309.                         N_count <= '0';
  310.                     when G_FimIf =>
  311.                         Ra_rd <= '0';
  312.                         W_clr <= '0';
  313.                         Ra_addr <= "00";
  314.                         W_data <= "0000";
  315.                         W_wr <= '0';
  316.                         S_Mux2 <= '0';
  317.                         W_addr <= "00";
  318.                         S_Mux3 <= '0';
  319.                         S_Mux1 <= '0';
  320.                         RMM_ld <= '0';
  321.                         RMM_clr <= '0';
  322.                         N_clr <= '0';
  323.                         N_count <= '0';
  324.                     when G_Incrementa =>
  325.                         Ra_rd <= '0';
  326.                         W_clr <= '0';
  327.                         Ra_addr <= "00";
  328.                         W_data <= "0000";
  329.                         W_wr <= '0';
  330.                         S_Mux2 <= '0';
  331.                         W_addr <= "00";
  332.                         S_Mux3 <= '0';
  333.                         S_Mux1 <= '1';
  334.                         RMM_ld <= '0';
  335.                         RMM_clr <= '0';
  336.                         N_clr <= '0';
  337.                         N_count <= '1';
  338.                     when G_Aux2 =>
  339.                         Ra_rd <= '0';
  340.                         W_clr <= '0';
  341.                         Ra_addr <= "00";
  342.                         W_data <= "0000";
  343.                         W_wr <= '0';
  344.                         S_Mux2 <= '0';
  345.                         W_addr <= "00";
  346.                         S_Mux3 <= '0';
  347.                         S_Mux1 <= '1';
  348.                         RMM_ld <= '0';
  349.                         RMM_clr <= '0';
  350.                         N_clr <= '0';
  351.                         N_count <= '0';
  352.                     when G_Fim =>
  353.                         Ra_rd <= '0';
  354.                         W_clr <= '0';
  355.                         Ra_addr <= "00";
  356.                         W_data <= "0000";
  357.                         W_wr <= '0';
  358.                         S_Mux2 <= '0';
  359.                         W_addr <= "00";
  360.                         S_Mux3 <= '0';
  361.                         S_Mux1 <= '0';
  362.                         RMM_ld <= '0';
  363.                         RMM_clr <= '0';
  364.                         N_clr <= '0';
  365.                         N_count <= '0';
  366.                    
  367.                     --Estados Referentes a Menor
  368.                     when L_Zerar =>
  369.                         Ra_rd <= '0';
  370.                         W_clr <= '0';
  371.                         Ra_addr <= "00";
  372.                         W_data <= "0000";
  373.                         W_wr <= '0';
  374.                         S_Mux2 <= '0';
  375.                         W_addr <= "00";
  376.                         S_Mux3 <= '0';
  377.                         S_Mux1 <= '1';
  378.                         RMM_ld <= '0';
  379.                         RMM_clr <= '1';
  380.                         N_clr <= '1';
  381.                         N_count <= '0';
  382.                     when L_Zerar_n =>
  383.                         Ra_rd <= '1';
  384.                         W_clr <= '0';
  385.                         Ra_addr <= "00";
  386.                         W_data <= "0000";
  387.                         W_wr <= '0';
  388.                         S_Mux2 <= '0';
  389.                         W_addr <= "00";
  390.                         S_Mux3 <= '0';
  391.                         S_Mux1 <= '1';
  392.                         RMM_ld <= '1';
  393.                         RMM_clr <= '0';
  394.                         N_clr <= '0';
  395.                         N_count <= '0';
  396.                     when L_aux1 =>
  397.                         Ra_rd <= '1';
  398.                         W_clr <= '0';
  399.                         Ra_addr <= "00";
  400.                         W_data <= "0000";
  401.                         W_wr <= '0';
  402.                         S_Mux2 <= '0';
  403.                         W_addr <= "00";
  404.                         S_Mux3 <= '0';
  405.                         S_Mux1 <= '0';
  406.                         RMM_ld <= '0';
  407.                         RMM_clr <= '0';
  408.                         N_clr <= '0';
  409.                         N_count <= '0';
  410.                     when L_InicioIf =>
  411.                         Ra_rd <= '1';
  412.                         W_clr <= '0';
  413.                         Ra_addr <= "00";
  414.                         W_data <= "0000";
  415.                         W_wr <= '0';
  416.                         S_Mux2 <= '0';
  417.                         W_addr <= "00";
  418.                         S_Mux3 <= '0';
  419.                         S_Mux1 <= '0';
  420.                         RMM_ld <= '0';
  421.                         RMM_clr <= '0';
  422.                         N_clr <= '0';
  423.                         N_count <= '0';
  424.                     when L_aux3 =>
  425.                         Ra_rd <= '1';
  426.                         W_clr <= '0';
  427.                         Ra_addr <= "00";
  428.                         W_data <= "0000";
  429.                         W_wr <= '0';
  430.                         S_Mux2 <= '0';
  431.                         W_addr <= "00";
  432.                         S_Mux3 <= '0';
  433.                         S_Mux1 <= '0';
  434.                         RMM_ld <= '0';
  435.                         RMM_clr <= '0';
  436.                         N_clr <= '0';
  437.                         N_count <= '0';
  438.                     when L_Atribuir =>
  439.                         Ra_rd <= '0';
  440.                         W_clr <= '0';
  441.                         Ra_addr <= "00";
  442.                         W_data <= "0000";
  443.                         W_wr <= '0';
  444.                         S_Mux2 <= '0';
  445.                         W_addr <= "00";
  446.                         S_Mux3 <= '0';
  447.                         S_Mux1 <= '0';
  448.                         RMM_ld <= '1';
  449.                         RMM_clr <= '0';
  450.                         N_clr <= '0';
  451.                         N_count <= '0';
  452.                     when L_FimIf =>
  453.                         Ra_rd <= '0';
  454.                         W_clr <= '0';
  455.                         Ra_addr <= "00";
  456.                         W_data <= "0000";
  457.                         W_wr <= '0';
  458.                         S_Mux2 <= '0';
  459.                         W_addr <= "00";
  460.                         S_Mux3 <= '0';
  461.                         S_Mux1 <= '0';
  462.                         RMM_ld <= '0';
  463.                         RMM_clr <= '0';
  464.                         N_clr <= '0';
  465.                         N_count <= '0';
  466.                     when L_Incrementa =>
  467.                         Ra_rd <= '0';
  468.                         W_clr <= '0';
  469.                         Ra_addr <= "00";
  470.                         W_data <= "0000";
  471.                         W_wr <= '0';
  472.                         S_Mux2 <= '0';
  473.                         W_addr <= "00";
  474.                         S_Mux3 <= '0';
  475.                         S_Mux1 <= '1';
  476.                         RMM_ld <= '0';
  477.                         RMM_clr <= '0';
  478.                         N_clr <= '0';
  479.                         N_count <= '1';
  480.                     when L_Aux2 =>
  481.                         Ra_rd <= '0';
  482.                         W_clr <= '0';
  483.                         Ra_addr <= "00";
  484.                         W_data <= "0000";
  485.                         W_wr <= '0';
  486.                         S_Mux2 <= '0';
  487.                         W_addr <= "00";
  488.                         S_Mux3 <= '0';
  489.                         S_Mux1 <= '1';
  490.                         RMM_ld <= '0';
  491.                         RMM_clr <= '0';
  492.                         N_clr <= '0';
  493.                         N_count <= '0';
  494.                     when L_Fim =>
  495.                         Ra_rd <= '0';
  496.                         W_clr <= '0';
  497.                         Ra_addr <= "00";
  498.                         W_data <= "0000";
  499.                         W_wr <= '0';
  500.                         S_Mux2 <= '0';
  501.                         W_addr <= "00";
  502.                         S_Mux3 <= '0';
  503.                         S_Mux1 <= '0';
  504.                         RMM_ld <= '0';
  505.                         RMM_clr <= '0';
  506.                         N_clr <= '0';
  507.                         N_count <= '0';
  508.                     end case;
  509.                 end process Saida_Estado;
  510.         end architecture Comportamento;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement