Advertisement
vmgustavo

Untitled

Nov 22nd, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 8.58 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4. entity controle is
  5.     port(
  6.         --Entradas
  7.         clk : in std_logic;
  8.             -- Clock
  9.         clear   : in std_logic;
  10.             -- Clear: define o valor inicial da máquina de estados
  11.        
  12.         b0  : in std_logic; -- Botão B0
  13.         b1  : in std_logic; -- Botão B1
  14.         b2  : in std_logic; -- Botão B2
  15.         b3  : in std_logic; -- Botão B3
  16.         addr    : in std_logic_vector(1 downto 0);
  17.             -- Endereço definido pelas chaves
  18.         num : in std_logic_vector(3 downto 0);
  19.             -- Número definido pelas chaves
  20.        
  21.         num_comp_maior : in std_logic;
  22.             -- Resultado da comparação, entrada para a saída "greater" do comparador
  23.         num_comp_menor : in std_logic;
  24.             -- Resultado da comparação, entrada para a saída "less" do comparador
  25.        
  26.         --Saidas
  27.         bdr_addr_W  : out std_logic_vector(1 downto 0);
  28.             -- Endereço de escrita no BDR (Banco de Registradores)
  29.         bdr_en_W    : out std_logic;
  30.             -- Enable para escrita no BDR
  31.         bdr_num_W   : out std_logic_vector(3 downto 0);
  32.             -- Valor para escrita no BDR
  33.         bdr_addr_R  : out std_logic_vector(1 downto 0);
  34.             -- Endereço para leitura no BDR
  35.         bdr_en_R    : out std_logic;
  36.             -- Enable para leitura no BDR
  37.        
  38.         reg_out_en  : out std_logic
  39.             -- Enable para escrita no registrador de saida
  40.         );
  41. end controle;
  42.  
  43. architecture comport of controle is
  44.     --Declaracoes
  45.     type estado is (   
  46.         --Inicial
  47.         start,
  48.         --B0
  49.         enableW, zera00, zera01, zera10, zera11,
  50.         zera_reg_out1, zera_reg_out2, zera_reg_out3,
  51.         --B1
  52.         compara_00_G, compara_01_G, compara_10_G, compara_11_G,
  53.         compara_00_P, compara_01_P, compara_10_P, compara_11_P,
  54.         --B2
  55.         salva_00_G, salva_01_G, salva_10_G, salva_11_G,
  56.         salva_00_P, salva_01_P, salva_10_P, salva_11_P,
  57.         --B3
  58.         salva_valor
  59.         );
  60.     signal estado_atual, proximo_estado: estado;
  61. begin
  62.  
  63.     process(clear, clk) is
  64.     begin
  65.         if(clear = '1') then
  66.             estado_atual <= start;
  67.         elsif(rising_edge(clk)) then
  68.             estado_atual <= proximo_estado;
  69.         end if;
  70.     end process;
  71.    
  72.     process(estado_atual, b0, b1, b2, b3, addr, num,
  73.         num_comp_maior, num_comp_menor) is
  74.     begin
  75.         case estado_atual is
  76.  
  77.         --inicio
  78.         when start =>
  79.             bdr_addr_W  <= "00";
  80.             bdr_en_W    <= '0';
  81.             bdr_num_W   <= "0000";
  82.             bdr_addr_R  <= "00";
  83.             bdr_en_R    <= '1';
  84.             reg_out_en  <= '0';
  85.            
  86.             --B0
  87.             if(b0 = '1' AND b1 = '0' AND b2 = '0' AND b3 = '0') then
  88.                 proximo_estado <= enableW;
  89.             --B1
  90.             elsif(b0 = '0' AND b1 = '1' AND b2 = '0' AND b3 = '0') then
  91.                 proximo_estado <= compara_00_G;
  92.             --B2
  93.             elsif(b0 = '0' AND b1 = '0' AND b2 = '1' AND b3 = '0') then
  94.                 proximo_estado <= compara_00_P;
  95.             --B3
  96.             elsif(b0 = '0' AND b1 = '0' AND b2 = '0' AND b3 = '1') then
  97.                 proximo_estado <= salva_valor;
  98.             else
  99.                 proximo_estado <= start;
  100.             end if;
  101.        
  102.         --B0
  103.         --zera banco
  104.         when enableW =>
  105.             bdr_addr_W  <= "00";
  106.             bdr_en_W    <= '1';
  107.             bdr_num_W   <= "0000";
  108.             bdr_addr_R  <= "00";
  109.             bdr_en_R    <= '1';
  110.             reg_out_en  <= '0';
  111.            
  112.             proximo_estado <= zera00;
  113.            
  114.         when zera00 =>
  115.             bdr_addr_W  <= "00";
  116.             bdr_en_W    <= '1';
  117.             bdr_num_W   <= "0000";
  118.             bdr_addr_R  <= "00";
  119.             bdr_en_R    <= '1';
  120.             reg_out_en  <= '0';
  121.            
  122.             proximo_estado <= zera01;
  123.            
  124.         when zera01 =>
  125.             bdr_addr_W  <= "01";
  126.             bdr_en_W    <= '1';
  127.             bdr_num_W   <= "0000";
  128.             bdr_addr_R  <= "00";
  129.             bdr_en_R    <= '1';
  130.             reg_out_en  <= '0';
  131.            
  132.             proximo_estado <= zera10;
  133.            
  134.         when zera10 =>
  135.             bdr_addr_W  <= "10";
  136.             bdr_en_W    <= '1';
  137.             bdr_num_W   <= "0000";
  138.             bdr_addr_R  <= "00";
  139.             bdr_en_R    <= '1';
  140.             reg_out_en  <= '0';
  141.            
  142.             proximo_estado <= zera11;
  143.            
  144.         when zera11 =>
  145.             bdr_addr_W  <= "11";
  146.             bdr_en_W    <= '1';
  147.             bdr_num_W   <= "0000";
  148.             bdr_addr_R  <= "00";
  149.             bdr_en_R    <= '1';
  150.             reg_out_en  <= '0';
  151.            
  152.             proximo_estado <= zera_reg_out1;
  153.        
  154.         --zera registro de saida
  155.         when zera_reg_out1 =>
  156.             bdr_addr_W  <= "00";
  157.             bdr_en_W    <= '0';
  158.             bdr_num_W   <= "0000";
  159.             bdr_addr_R  <= "00";
  160.             bdr_en_R    <= '1';
  161.             reg_out_en  <= '1';
  162.            
  163.             proximo_estado <= zera_reg_out2;
  164.            
  165.         when zera_reg_out2 =>
  166.             bdr_addr_W  <= "00";
  167.             bdr_en_W    <= '0';
  168.             bdr_num_W   <= "0000";
  169.             bdr_addr_R  <= "00";
  170.             bdr_en_R    <= '1';
  171.             reg_out_en  <= '1';
  172.            
  173.             proximo_estado <= zera_reg_out3;
  174.        
  175.         when zera_reg_out3 =>
  176.             bdr_addr_W  <= "00";
  177.             bdr_en_W    <= '0';
  178.             bdr_num_W   <= "0000";
  179.             bdr_addr_R  <= "00";
  180.             bdr_en_R    <= '1';
  181.             reg_out_en  <= '0';
  182.            
  183.             proximo_estado <= start;
  184.            
  185. -------------------------------
  186.  
  187.         --B1
  188.         --comparacoes
  189.         when compara_00_G =>
  190.             bdr_addr_W  <= "00";
  191.             bdr_en_W    <= '0';
  192.             bdr_num_W   <= "0000";
  193.             bdr_addr_R  <= "00";
  194.             bdr_en_R    <= '1';
  195.             reg_out_en  <= '0';
  196.            
  197.             proximo_estado <= salva_00_G;
  198.            
  199.         when compara_01_G =>
  200.             bdr_addr_W  <= "00";
  201.             bdr_en_W    <= '0';
  202.             bdr_num_W   <= "0000";
  203.             bdr_addr_R  <= "01";
  204.             bdr_en_R    <= '1';
  205.             reg_out_en  <= '0';
  206.            
  207.             if(num_comp_menor = '0') then
  208.                 proximo_estado <= compara_10_G;
  209.             else
  210.                 proximo_estado <= salva_01_G;
  211.             end if;
  212.            
  213.         when compara_10_G =>
  214.             bdr_addr_W  <= "00";
  215.             bdr_en_W    <= '0';
  216.             bdr_num_W   <= "0000";
  217.             bdr_addr_R  <= "10";
  218.             bdr_en_R    <= '1';
  219.             reg_out_en  <= '0';
  220.            
  221.             if(num_comp_menor = '0') then
  222.                 proximo_estado <= compara_11_G;
  223.             else
  224.                 proximo_estado <= salva_10_G;
  225.             end if;
  226.                
  227.         when compara_11_G =>
  228.             bdr_addr_W  <= "00";
  229.             bdr_en_W    <= '0';
  230.             bdr_num_W   <= "0000";
  231.             bdr_addr_R  <= "11";
  232.             bdr_en_R    <= '1';
  233.             reg_out_en  <= '0';
  234.            
  235.             if(num_comp_menor = '0') then
  236.                 proximo_estado <= start;
  237.             else
  238.                 proximo_estado <= salva_11_G;
  239.             end if;
  240.        
  241.         --registro de novo valor maior
  242.         when salva_00_G =>
  243.             bdr_addr_W  <= "00";
  244.             bdr_en_W    <= '0';
  245.             bdr_num_W   <= "0000";
  246.             bdr_addr_R  <= "00";
  247.             bdr_en_R    <= '1';
  248.             reg_out_en  <= '1';
  249.            
  250.             proximo_estado <= compara_01_G;
  251.            
  252.         when salva_01_G =>
  253.             bdr_addr_W  <= "00";
  254.             bdr_en_W    <= '0';
  255.             bdr_num_W   <= "0000";
  256.             bdr_addr_R  <= "01";
  257.             bdr_en_R    <= '1';
  258.             reg_out_en  <= '1';
  259.            
  260.             proximo_estado <= compara_10_G;
  261.        
  262.         when salva_10_G =>
  263.             bdr_addr_W  <= "00";
  264.             bdr_en_W    <= '0';
  265.             bdr_num_W   <= "0000";
  266.             bdr_addr_R  <= "10";
  267.             bdr_en_R    <= '1';
  268.             reg_out_en  <= '1';
  269.            
  270.             proximo_estado <= compara_11_G;
  271.        
  272.         when salva_11_G =>
  273.             bdr_addr_W  <= "00";
  274.             bdr_en_W    <= '0';
  275.             bdr_num_W   <= "0000";
  276.             bdr_addr_R  <= "11";
  277.             bdr_en_R    <= '1';
  278.             reg_out_en  <= '1';
  279.            
  280.             proximo_estado <= start;
  281. -------------------------------------
  282.         --B2
  283.         --comparacoes
  284.         when compara_00_P =>
  285.             bdr_addr_W  <= "00";
  286.             bdr_en_W    <= '0';
  287.             bdr_num_W   <= "0000";
  288.             bdr_addr_R  <= "00";
  289.             bdr_en_R    <= '1';
  290.             reg_out_en  <= '0';
  291.            
  292.             proximo_estado <= salva_00_P;
  293.        
  294.         when compara_01_P =>
  295.             bdr_addr_W  <= "00";
  296.             bdr_en_W    <= '0';
  297.             bdr_num_W   <= "0000";
  298.             bdr_addr_R  <= "01";
  299.             bdr_en_R    <= '1';
  300.             reg_out_en  <= '0';
  301.            
  302.             if(num_comp_maior = '0') then
  303.                 proximo_estado <= compara_10_P;
  304.             else
  305.                 proximo_estado <= salva_01_P;
  306.             end if;
  307.        
  308.        
  309.         when compara_10_P =>
  310.             bdr_addr_W  <= "00";
  311.             bdr_en_W    <= '0';
  312.             bdr_num_W   <= "0000";
  313.             bdr_addr_R  <= "10";
  314.             bdr_en_R    <= '1';
  315.             reg_out_en  <= '0';
  316.            
  317.             if(num_comp_maior = '0') then
  318.                 proximo_estado <= compara_11_P;
  319.             else
  320.                 proximo_estado <= salva_10_P;
  321.             end if;
  322.        
  323.        
  324.         when compara_11_P =>
  325.             bdr_addr_W  <= "00";
  326.             bdr_en_W    <= '0';
  327.             bdr_num_W   <= "0000";
  328.             bdr_addr_R  <= "11";
  329.             bdr_en_R    <= '1';
  330.             reg_out_en  <= '0';
  331.            
  332.             if(num_comp_maior = '0') then
  333.                 proximo_estado <= start;
  334.             else
  335.                 proximo_estado <= salva_11_P;
  336.             end if;
  337.        
  338.        
  339.         --registro de novo valor menor
  340.         when salva_00_P =>
  341.             bdr_addr_W  <= "00";
  342.             bdr_en_W    <= '0';
  343.             bdr_num_W   <= "0000";
  344.             bdr_addr_R  <= "00";
  345.             bdr_en_R    <= '1';
  346.             reg_out_en  <= '1';
  347.            
  348.             proximo_estado <= compara_01_P;
  349.        
  350.         when salva_01_P =>
  351.             bdr_addr_W  <= "00";
  352.             bdr_en_W    <= '0';
  353.             bdr_num_W   <= "0000";
  354.             bdr_addr_R  <= "01";
  355.             bdr_en_R    <= '1';
  356.             reg_out_en  <= '1';
  357.            
  358.             proximo_estado <= compara_10_P;
  359.        
  360.         when salva_10_P =>
  361.             bdr_addr_W  <= "00";
  362.             bdr_en_W    <= '0';
  363.             bdr_num_W   <= "0000";
  364.             bdr_addr_R  <= "10";
  365.             bdr_en_R    <= '1';
  366.             reg_out_en  <= '1';
  367.            
  368.             proximo_estado <= compara_11_P;
  369.        
  370.         when salva_11_P =>
  371.             bdr_addr_W  <= "00";
  372.             bdr_en_W    <= '0';
  373.             bdr_num_W   <= "0000";
  374.             bdr_addr_R  <= "11";
  375.             bdr_en_R    <= '1';
  376.             reg_out_en  <= '1';
  377.            
  378.             proximo_estado <= start;
  379.  
  380. -------------------------------------
  381.        
  382.         --B3
  383.         --insercao de novo valor
  384.         when salva_valor =>
  385.             bdr_addr_W  <= addr;
  386.             bdr_en_W    <= '1';
  387.             bdr_num_W   <= num;
  388.             bdr_addr_R  <= "00";
  389.             bdr_en_R    <= '1';
  390.             reg_out_en  <= '0';
  391.            
  392.             proximo_estado <= start;
  393.  
  394. -------------------------------------              
  395.        
  396.         end case;
  397.     end process;
  398. end comport;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement