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

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

Conversões Exemplo usando Std_Logic_Arith

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

  1. Introdução ao VHDL: Construindo sua Primeira Porta AND
  2. Exemplo de Procedure VHDL: Incrementando um Standard Logic Vector
  3. Aproveitando Records VHDL para Interfaces FIFO Limpas e Reutilizáveis
  4. Dominando Tipos Signed vs Unsigned em VHDL: Insights Práticos
  5. Variáveis VHDL Explicadas: Exemplos Práticos & Regras para Design Confiável
  6. Dominando Verificação Formal de Módulos VHDL com PSL
  7. Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
  8. Finalizando Graciosamente uma Simulação de Testbench VHDL
  9. Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
  10. Gerando Números Aleatórios em VHDL: De Uniforme a OSVVM