Guia Completo de Conversões de Tipos VHDL com Numeric_Std e Std_Logic_Arith
Usando ambos os Pacotes Numeric_Std e Std_Logic_Arith
Abaixo você encontrará as conversões de tipo VHDL mais usadas. O artigo é dividido em duas seções: a primeira mostra conversões que dependem do moderno pacote numeric_std, enquanto a segunda demonstra conversões equivalentes usando o pacote legado std_logic_arith. Embora muitos designers ainda empreguem std_logic_arith, a prática recomendada pela indústria recomenda numeric_std por sua clareza e portabilidade.
Note que muitos exemplos empregam o atributo VHDL 'length, que garante que seu código se adapte automaticamente a mudanças de largura de vetor — uma estratégia chave para designs reutilizáveis e mantíveis.
Conversões Exemplo usando Numeric_Std
- Integer para Signed
- Integer para Std_Logic_Vector
- Integer para Unsigned
- Std_Logic_Vector para Integer
- Std_Logic_Vector para Signed
- Std_Logic_Vector para Unsigned
- Signed para Integer
- Signed para Std_Logic_Vector
- Signed para Unsigned
- Unsigned para Integer
- Unsigned para Signed
- Unsigned para Std_Logic_Vector
Conversões Exemplo usando Std_Logic_Arith
- Integer para Signed
- Integer para Std_Logic_Vector
- Integer para Unsigned
- Std_Logic_Vector para Integer
- Std_Logic_Vector para Signed
- Std_Logic_Vector para Unsigned
- Signed para Integer
- Signed para Std_Logic_Vector
- Signed para Unsigned
- Unsigned para Integer
- Unsigned para Signed
- Unsigned para Std_Logic_Vector
Converter Integer para Signed usando Numeric_Std
A função to_signed requer dois argumentos: o inteiro a converter e a largura de vetor desejada. Usar o atributo 'length mantém o código flexível.
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= to_signed(input_3, output_3'length);
Converter Integer para Std_Logic_Vector usando Numeric_Std
Determine se o range do inteiro é signed ou unsigned. Para valores apenas positivos use to_unsigned; para valores signed use to_signed. Ambas funções aceitam o valor e a largura alvo.
signal input_1 : integer; signal output_1a : std_logic_vector(3 downto 0); signal output_1b : std_logic_vector(3 downto 0); -- Positive integers only output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length)); -- Signed or unsigned integers output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));
Converter Integer para Unsigned usando Numeric_Std
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= to_unsigned(input_2, output_2'length);
Converter Std_Logic_Vector para Integer usando Numeric_Std
Primeiro faça cast do vetor para unsigned ou signed dependendo da semântica dos dados, então aplique to_integer.
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- Unsigned case output_4a <= to_integer(unsigned(input_4)); -- Signed case output_4b <= to_integer(signed(input_4));
Converter Std_Logic_Vector para Signed usando Numeric_Std
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Converter Std_Logic_Vector para Unsigned usando Numeric_Std
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Converter Signed para Integer usando Numeric_Std
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= to_integer(input_10);
Converter Signed para Std_Logic_Vector usando Numeric_Std
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Converter Signed para Unsigned usando Numeric_Std
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Converter Unsigned para Integer usando Numeric_Std
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= to_integer(input_7);
Converter Unsigned para Signed usando Numeric_Std
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Converter Unsigned para Std_Logic_Vector usando Numeric_Std
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
Converter Integer para Signed usando Std_Logic_Arith
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= conv_signed(input_3, output_3'length);
Converter Integer para Std_Logic_Vector usando Std_Logic_Arith
signal input_1 : integer; signal output_1 : std_logic_vector(3 downto 0); output_1 <= conv_std_logic_vector(input_1, output_1'length);
Converter Integer para Unsigned usando Std_Logic_Arith
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= conv_unsigned(input_2, output_2'length);
Converter Std_Logic_Vector para Integer usando Std_Logic_Arith
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- Unsigned case output_4a <= conv_integer(unsigned(input_4)); -- Signed case output_4b <= conv_integer(signed(input_4));
Converter Std_Logic_Vector para Signed usando Std_Logic_Arith
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Converter Std_Logic_Vector para Unsigned usando Std_Logic_Arith
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Converter Signed para Integer usando Std_Logic_Arith
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= conv_integer(input_10);
Converter Signed para Std_Logic_Vector usando Std_Logic_Arith
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Converter Signed para Unsigned usando Std_Logic_Arith
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Converter Unsigned para Integer usando Std_Logic_Arith
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= conv_integer(input_7);
Converter Unsigned para Signed usando Std_Logic_Arith
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Converter Unsigned para Std_Logic_Vector usando Std_Logic_Arith
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
VHDL
- Introdução ao VHDL: Construindo sua Primeira Porta AND
- Exemplo de Procedure VHDL: Incrementando um Standard Logic Vector
- Aproveitando Records VHDL para Interfaces FIFO Limpas e Reutilizáveis
- Dominando Tipos Signed vs Unsigned em VHDL: Insights Práticos
- Variáveis VHDL Explicadas: Exemplos Práticos & Regras para Design Confiável
- Dominando Verificação Formal de Módulos VHDL com PSL
- Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
- Finalizando Graciosamente uma Simulação de Testbench VHDL
- Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
- Gerando Números Aleatórios em VHDL: De Uniforme a OSVVM