Exemplos de conversões de VHDL
Usando arquivos de pacote Numeric_Std e Std_Logic_Arith
Abaixo estão as conversões mais comuns usadas em VHDL. A página é dividida em duas seções. A primeira metade da página mostra as conversões usando o arquivo de pacote Numeric_Std. A segunda metade da página mostra as conversões usando o arquivo de pacote Std_Logic_Arith. É uma boa prática usar o pacote Numeric_Std, pois você não deve usar Std_Logic_Arith. Como muitas pessoas ainda insistem em usá-lo, os dois exemplos são demonstrados abaixo.
Observe que muitos dos exemplos abaixo usam o 'comprimento Atributo VHDL. Esse atributo torna seu código mais portátil e versátil, por isso deve ser usado.
Exemplo de conversões usando padrão numérico
- Inteiro para assinado
- Inteiro para Std_Logic_Vector
- Inteiro para não assinado
- Std_Logic_Vector para inteiro
- Std_Logic_Vector para assinatura
- Std_Logic_Vector para não assinado
- Assinado como inteiro
- Assinado com Std_Logic_Vector
- Assinado para Não assinado
- Não assinado para inteiro
- Não assinado para assinado
- Não assinado para Std_Logic_Vector
Exemplo de conversões usando Std_Logic_Arith
- Inteiro para assinado
- Inteiro para Std_Logic_Vector
- Inteiro para não assinado
- Std_Logic_Vector para inteiro
- Std_Logic_Vector para assinatura
- Std_Logic_Vector para não assinado
- Assinado como inteiro
- Assinado com Std_Logic_Vector
- Assinado para Não assinado
- Não assinado para inteiro
- Não assinado para assinado
- Não assinado para Std_Logic_Vector
Converter de inteiro para assinado usando Numeric_Std
O exemplo abaixo usa a conversão to_signed, que requer dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= to_signed(input_3, output_3'length);
Converter de Integer para Std_Logic_Vector usando Numeric_Std
Primeiro você precisa pensar sobre o intervalo de valores armazenados em seu inteiro. Seu número inteiro pode ser positivo e negativo? Nesse caso, você precisará usar o to_signed() conversão. Se o seu inteiro for apenas positivo, você precisará usar o to_unsigned() conversão.
Ambas as funções de conversão requerem dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
signal input_1 : integer; signal output_1a : std_logic_vector(3 downto 0); signal output_1b : std_logic_vector(3 downto 0); -- This line demonstrates how to convert positive integers output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length)); -- This line demonstrates how to convert positive or negative integers output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));
Converter de inteiro para não assinado usando Numeric_Std
O exemplo abaixo usa a conversão to_unsigned, que requer dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= to_unsigned(input_2, output_2'length);
Converter de Std_Logic_Vector para Integer usando Numeric_Std
Primeiro você precisa pensar nos dados que são representados pelo seu std_logic_vector. São dados assinados ou são dados não assinados? Dados assinados significam que seu std_logic_vector pode ser um ou positivo número negativo. Dados não assinados significam que seu std_logic_vector é somente um número positivo. O exemplo abaixo usa o unsigned() typecast, mas se seus dados podem ser negativos, você precisa usar o signed() tipografia. Depois de converter sua entrada std_logic_vector como não assinada ou assinada, você pode convertê-la em inteiro conforme mostrado abaixo:
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- This line demonstrates the unsigned case output_4a <= to_integer(unsigned(input_4)); -- This line demonstrates the signed case output_4b <= to_integer(signed(input_4));
Converter de Std_Logic_Vector para assinado usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é converter o std_logic_vector como assinado conforme mostrado abaixo:
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Converter de Std_Logic_Vector para Unsigned usando Numeric_Std
Esta é uma conversão fácil, tudo o que você precisa fazer é converter o std_logic_vector como não assinado, conforme mostrado abaixo:
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Converter de assinado para inteiro usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é usar a chamada de função to_integer de numeric_std como mostrado abaixo:
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= to_integer(input_10);
Converter de assinado para Std_Logic_Vector usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é usar o cast std_logic_vector como mostrado abaixo:
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Converter de assinado para não assinado usando Numeric_Std
Esta é uma conversão fácil, tudo o que você precisa fazer é usar a conversão não assinada, conforme mostrado abaixo:
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Converter de não assinado para inteiro usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é usar a chamada de função to_integer de numeric_std como mostrado abaixo:
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= to_integer(input_7);
Converter de não assinado para assinado usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é usar o elenco assinado conforme mostrado abaixo:
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Converter de Unsigned para Std_Logic_Vector usando Numeric_Std
Esta é uma conversão fácil, tudo que você precisa fazer é usar o cast std_logic_vector como mostrado abaixo:
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
Converter de inteiro para assinado usando Std_Logic_Arith
O exemplo abaixo usa a conversão conv_signed, que requer dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
signal input_3 : integer; signal output_3 : signed(3 downto 0); output_3 <= conv_signed(input_3, output_3'length);
Converter de inteiro para Std_Logic_Vector usando Std_Logic_Arith
O exemplo abaixo usa a conversão conv_std_logic_vector, que requer dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
Uma coisa a notar aqui é que, se você inserir um número negativo nessa conversão, sua saída std_logic_vector será representada na notação assinada de complemento de 2.
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 de inteiro para não assinado usando Std_Logic_Arith
O exemplo abaixo usa a conversão conv_unsigned, que requer dois parâmetros de entrada. O primeiro é o sinal que você deseja converter, o segundo é o comprimento do vetor resultante.
signal input_2 : integer; signal output_2 : unsigned(3 downto 0); output_2 <= conv_unsigned(input_2, output_2'length);
Converter de Std_Logic_Vector para Integer usando Std_Logic_Arith
Primeiro você precisa pensar nos dados que são representados pelo seu std_logic_vector. São dados assinados ou são dados não assinados? Dados assinados significam que seu std_logic_vector pode ser um ou positivo número negativo. Dados não assinados significam que seu std_logic_vector é somente um número positivo. O exemplo abaixo usa o unsigned() typecast, mas se seus dados podem ser negativos, você precisa usar o signed() tipografia. Depois que sua entrada std_logic_vector estiver sem assinatura ou assinada, você poderá convertê-la em inteiro conforme mostrado abaixo:
signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- This line demonstrates the unsigned case output_4a <= conv_integer(unsigned(input_4)); -- This line demonstrates the signed case output_4b <= conv_integer(signed(input_4));
Converter de Std_Logic_Vector para assinado usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é converter o std_logic_vector como assinado conforme mostrado abaixo:
signal input_6 : std_logic_vector(3 downto 0); signal output_6 : signed(3 downto 0); output_6 <= signed(input_6);
Converter de Std_Logic_Vector para Unsigned usando Std_Logic_Arith
Esta é uma conversão fácil, tudo o que você precisa fazer é converter o std_logic_vector como não assinado, conforme mostrado abaixo:
signal input_5 : std_logic_vector(3 downto 0); signal output_5 : unsigned(3 downto 0); output_5 <= unsigned(input_5);
Converter de assinado para inteiro usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é usar a chamada de função conv_integer de std_logic_arith como mostrado abaixo:
signal input_10 : signed(3 downto 0); signal output_10 : integer; output_10 <= conv_integer(input_10);
Converter de assinado para Std_Logic_Vector usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é usar o cast std_logic_vector como mostrado abaixo:
signal input_11 : signed(3 downto 0); signal output_11 : std_logic_vector(3 downto 0); output_11 <= std_logic_vector(input_11);
Converter de assinado para não assinado usando Std_Logic_Arith
Esta é uma conversão fácil, tudo o que você precisa fazer é usar a conversão não assinada, conforme mostrado abaixo:
signal input_12 : signed(3 downto 0); signal output_12 : unsigned(3 downto 0); output_12 <= unsigned(input_12);
Converter de não assinado para inteiro usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é usar a chamada de função conv_integer de std_logic_arith como mostrado abaixo:
signal input_7 : unsigned(3 downto 0); signal output_7 : integer; output_7 <= conv_integer(input_7);
Converter de não assinado para assinado usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é usar o elenco assinado conforme mostrado abaixo:
signal input_9 : unsigned(3 downto 0); signal output_9 : signed(3 downto 0); output_9 <= signed(input_9);
Converter de não assinado para Std_Logic_Vector usando Std_Logic_Arith
Esta é uma conversão fácil, tudo que você precisa fazer é usar o typecast std_logic_vector como mostrado abaixo:
signal input_8 : unsigned(3 downto 0); signal output_8 : std_logic_vector(3 downto 0); output_8 <= std_logic_vector(input_8);
VHDL
- Tutorial - Introdução ao VHDL
- Declaração de Procedimento - Exemplo de VHDL
- Registros - Exemplo de VHDL
- Assinado vs. Não assinado em VHDL
- Variáveis - Exemplo de VHDL
- Verificação formal em VHDL usando PSL
- Como criar uma lista de strings em VHDL
- Como parar a simulação em um testbench VHDL
- Como criar um controlador PWM em VHDL
- Como gerar números aleatórios em VHDL