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

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

Exemplo de conversões usando Std_Logic_Arith

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);


Páginas mais populares de Nandland

VHDL

  1. Tutorial - Introdução ao VHDL
  2. Declaração de Procedimento - Exemplo de VHDL
  3. Registros - Exemplo de VHDL
  4. Assinado vs. Não assinado em VHDL
  5. Variáveis ​​- Exemplo de VHDL
  6. Verificação formal em VHDL usando PSL
  7. Como criar uma lista de strings em VHDL
  8. Como parar a simulação em um testbench VHDL
  9. Como criar um controlador PWM em VHDL
  10. Como gerar números aleatórios em VHDL