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

Variáveis VHDL Explicadas: Exemplos Práticos & Regras para Design Confiável

No VHDL, variáveis comportam-se similarmente a variáveis em C: seu valor está disponível imediatamente após uma atribuição e permanece inalterado até a próxima atribuição. Isso as torna ideais para armazenamento temporário e cálculos procedurais dentro de um processo.

Regras Principais para Usar Variáveis em VHDL

O último ponto — atribuição instantânea — é frequentemente fonte de confusão. Abaixo está um exemplo conciso demonstrando como uma variável pode ser usada para concatenar dois sinais e impulsionar um case statement.

VAR_CASE : process (i_clk) variable v_Choices : std_logic_vector(1 downto 0); begin v_Choices := i_select_1 & i_select_2; -- concatenation case v_Choices is when "00" => o_data <= "0001"; when "01" => o_data <= "0010"; -- additional cases omitted for brevity end case; end process VAR_CASE;

Neste snippet, v_Choices está disponível para o case statement imediatamente após a concatenação, ilustrando a atualização instantânea da variável.

Para uma ilustração mais profunda, considere a seguinte arquitetura que rastreia um contador com duas cópias de sinal. Embora os dois sinais pareçam idênticos, apenas r_Var_Copy1 atinge o valor 5 antes do reset porque r_Var_Copy2 é atribuído após o contador já ter sido resetado no mesmo ciclo de clock.

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity variable_ex is port ( i_clk : in std_logic; o_done : out std_logic ); end variable_ex; architecture rtl of variable_ex is signal r_Done : std_logic := '0'; signal r_Var_Copy1 : natural range 0 to 5 := 0; signal r_Var_Copy2 : natural range 0 to 5 := 0; begin EX_VAR : process (i_clk) variable v_Count : natural range 0 to 5 := 0; begin if rising_edge(i_clk) then v_Count := v_Count + 1; r_Var_Copy1 <= v_Count; if v_Count = 5 then r_Done <= '1'; v_Count := 0; else r_Done <= '0'; end if; r_Var_Copy2 <= v_Count; end if; end process EX_VAR; o_done <= r_Done; end rtl;

Para observar esse comportamento em simulação, um testbench simples é fornecido. Ele alterna o clock e monitora a saída o_done. Ao usar ModelSim, lembre-se que variáveis aparecem na janela de waveform apenas se a opção de exibição de variáveis do simulador estiver habilitada.

library ieee; use ieee.std_logic_1164.all; entity variable_ex_tb is end variable_ex_tb; architecture behave of variable_ex_tb is component variable_ex port ( i_clk : in std_logic; o_done : out std_logic ); end component variable_ex; constant c_CLK_PERIOD : time := 10 ns; signal r_CLK : std_logic := '0'; signal w_DONE : std_logic; begin UUT : variable_ex port map ( i_clk => r_CLK, o_done => w_DONE ); r_CLK <= not r_CLK after c_CLK_PERIOD/2; end behave;
Variáveis VHDL Explicadas: Exemplos Práticos & Regras para Design Confiável

Este exemplo destaca os comportamentos distintos de variáveis versus sinais: enquanto r_Var_Copy1 atinge 5, r_Var_Copy2 nunca o faz porque a variável é resetada antes da atribuição do sinal.

VHDL

  1. Exemplo de Procedure VHDL: Incrementando um Standard Logic Vector
  2. Aproveitando Records VHDL para Interfaces FIFO Limpas e Reutilizáveis
  3. Configuração de Análise AC: Curvas, Pontos e Parâmetros de Varredura de Frequência
  4. Domine Variáveis e Tipos de Dados Primitivos em C#: Guia Completo
  5. Dominando Variáveis, Literais e Constantes em C++: Guia Completo
  6. Variáveis, Constantes e Literais em C: Um Guia Completo
  7. Entendendo Classes de Armazenamento em C: Escopo, Tempo de Vida e Performance
  8. Strings em C Facilitadas: Declaração, Entrada, Saída e Funções da Biblioteca
  9. Entendendo Tipos de Variáveis Java: Um Guia Abrangente
  10. Entendendo Variáveis em C: Tipos, Regras de Nomenclatura e Gerenciamento de Memória