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:
- Os registros são usados para simplificar entidades e mapas de portas em VHDL.
- Os registros podem conter elementos de diferentes tipos. (std_logic, inteiro, etc)
- Os registros são semelhantes às estruturas em C.
- Os registros usados em vários arquivos devem ser mantidos em um único arquivo de pacote.
- Sinais definidos como registros podem ser inicializados.
- É 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;
VHDL
- Tutorial - Introdução ao VHDL
- Exemplos de conversões de VHDL
- Declaração de Procedimento - Exemplo de VHDL
- Assinado vs. Não assinado em VHDL
- Variáveis - Exemplo de VHDL
- Opções de análise
- Gravação do LP
- Verificação formal em VHDL usando PSL
- Como criar uma lista de strings em VHDL
- Gerar exemplo de debouncer de declaração