Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Registros - Exemplo de VHDL


A construção Record em VHDL pode ser usada para simplificar seu código. Os registros são semelhantes a estruturas em C . Os registros são usados ​​com mais frequência para definir um novo tipo de VHDL. Este novo tipo contém qualquer grupo de sinais que o usuário desejar. Na maioria das vezes, isso é usado para simplificar as interfaces. Isso é muito útil com interfaces que possuem uma grande lista de sinais que são sempre os mesmos. Por exemplo, as interfaces para uma memória fora do chip podem ser grandes e ter os mesmos sinais repetidamente em todo o projeto. Os registros podem ser usados ​​para reduzir o tamanho do código e ter menos sinais em sua entidade para manter. O designer simplesmente precisa definir o tipo de registro em um único arquivo de pacote e, em seguida, usar o arquivo de pacote para qualquer entidade que faça uso desse tipo de registro.

O exemplo abaixo cria dois tipos de registro em um arquivo de pacote (example_record_pkg.vhd). Esses tipos são usados ​​em example_record.vhd para simplificar uma interface FIFO. Um sinal do tipo t_FROM_FIFO é criado para todas as entradas do FIFO e um sinal separado do tipo t_TO_FIFO é criado para todas as saídas para o FIFO .

Resumo:
  1. Os registros são usados ​​para simplificar entidades e mapas de portas em VHDL.
  2. Os registros podem conter elementos de diferentes tipos. (std_logic, inteiro, etc)
  3. Os registros são semelhantes às estruturas em C.
  4. Os registros usados ​​em vários arquivos devem ser mantidos em um único arquivo de pacote.
  5. Sinais definidos como registros podem ser inicializados.
  6. É possível criar uma matriz de registros.


library ieee;
use ieee.std_logic_1164.all;

package example_record_pkg is

  -- Outputs from the FIFO.
  type t_FROM_FIFO is record
    wr_full  : std_logic;                -- FIFO Full Flag
    rd_empty : std_logic;                -- FIFO Empty Flag
    rd_dv    : std_logic;
    rd_data  : std_logic_vector(7 downto 0);
  end record t_FROM_FIFO;  

  -- Inputs to the FIFO.
  type t_TO_FIFO is record
    wr_en    : std_logic;
    wr_data  : std_logic_vector(7 downto 0);
    rd_en    : std_logic;
  end record t_TO_FIFO;

  constant c_FROM_FIFO_INIT : t_FROM_FIFO := (wr_full => '0',
                                              rd_empty => '1',
                                              rd_dv => '0',
                                              rd_data => (others => '0'));

  constant c_TO_FIFO_INIT : t_TO_FIFO := (wr_en => '0',
                                          wr_data => (others => '0'),
                                          rd_en => '0');
  
  
end package example_record_pkg;



library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use work.example_record_pkg.all; -- USING PACKAGE HERE!

entity example_record is
  port (
    i_clk  : in  std_logic;
    i_fifo : in  t_FROM_FIFO;
    o_fifo : out t_TO_FIFO := c_TO_FIFO_INIT  -- intialize output record
    );
end example_record;

architecture behave of example_record is

  signal r_WR_DATA : unsigned(7 downto 0) := (others => '0');
  
begin

  -- Handles writes to the FIFO
  p_FIFO_WR : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.wr_full = '0' then
        o_fifo.wr_en   <= '1';
        o_fifo.wr_data <= std_logic_vector(r_WR_DATA + 1);
      end if;
    end if;
  end process p_FIFO_WR;
  
  -- Handles reads from the FIFO
  p_FIFO_RD : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.rd_empty = '0' then
        o_fifo.rd_en <= '1';
      end if;
    end if;
  end process p_FIFO_RD;
  
end behave;


Páginas mais populares de Nandland

VHDL

  1. Tutorial - Introdução ao VHDL
  2. Exemplos de conversões de VHDL
  3. Declaração de Procedimento - Exemplo de VHDL
  4. Assinado vs. Não assinado em VHDL
  5. Variáveis ​​- Exemplo de VHDL
  6. Opções de análise
  7. Gravação do LP
  8. Verificação formal em VHDL usando PSL
  9. Como criar uma lista de strings em VHDL
  10. Gerar exemplo de debouncer de declaração