Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Exemples de conversions VHDL

Utilisation des fichiers de package Numeric_Std et Std_Logic_Arith

Vous trouverez ci-dessous les conversions les plus courantes utilisées en VHDL. La page est divisée en deux sections. La première moitié de la page affiche les conversions à l'aide du fichier de package Numeric_Std. La seconde moitié de la page affiche les conversions à l'aide du fichier de package Std_Logic_Arith. Il est recommandé d'utiliser le package Numeric_Std car vous ne devez pas utiliser Std_Logic_Arith. Étant donné que de nombreuses personnes insistent encore pour l'utiliser, les deux exemples sont illustrés ci-dessous.

Notez que de nombreux exemples ci-dessous utilisent la 'longueur Attribut VHDL. Cet attribut rend votre code plus portable et polyvalent, il doit donc être utilisé.

Exemples de conversions utilisant la norme numérique

Exemples de conversions utilisant Std_Logic_Arith

Convertir d'entier en signé en utilisant Numeric_Std

L'exemple ci-dessous utilise la conversion to_signed, qui nécessite deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

signal input_3  : integer;
signal output_3 : signed(3 downto 0);
  
output_3 <= to_signed(input_3, output_3'length);

Convertir d'entier en Std_Logic_Vector en utilisant Numeric_Std

Vous devez d'abord réfléchir à la plage de valeurs stockées dans votre entier. Votre entier peut-il être positif et négatif? Si c'est le cas, vous devrez utiliser le to_signed() conversion. Si votre entier est uniquement positif, vous devrez utiliser le to_unsigned() transformation.

Ces deux fonctions de conversion nécessitent deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

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

Convertir d'entier en non signé en utilisant Numeric_Std

L'exemple ci-dessous utilise la conversion to_unsigned, qui nécessite deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

signal input_2  : integer;
signal output_2 : unsigned(3 downto 0);
  
output_2 <= to_unsigned(input_2, output_2'length);

Convertir de Std_Logic_Vector en entier en utilisant Numeric_Std

Vous devez d'abord réfléchir aux données représentées par votre std_logic_vector. S'agit-il de données signées ou de données non signées ? Les données signées signifient que votre std_logic_vector peut être un ou positif nombre négatif. Les données non signées signifient que votre std_logic_vector est seulement un nombre positif. L'exemple ci-dessous utilise le unsigned() transtypé, mais si vos données peuvent être négatives, vous devez utiliser le signed() typage. Une fois que vous avez converti votre entrée std_logic_vector en non signé ou signé, vous pouvez le convertir en entier comme indiqué ci-dessous :

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

Convertir de Std_Logic_Vector en signé en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est de convertir le std_logic_vector comme signé comme indiqué ci-dessous :

signal input_6  : std_logic_vector(3 downto 0);
signal output_6 : signed(3 downto 0);

output_6 <= signed(input_6);

Convertir de Std_Logic_Vector en Unsigned en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est de convertir le std_logic_vector en non signé, comme indiqué ci-dessous :

signal input_5  : std_logic_vector(3 downto 0);
signal output_5 : unsigned(3 downto 0);
  
output_5 <= unsigned(input_5);

Convertir de signé en entier en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser l'appel de fonction to_integer de numeric_std comme indiqué ci-dessous :

  
signal input_10  : signed(3 downto 0);
signal output_10 : integer;

output_10 <= to_integer(input_10);

Convertir de Signé en Std_Logic_Vector en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le cast std_logic_vector comme indiqué ci-dessous :

signal input_11  : signed(3 downto 0);
signal output_11 : std_logic_vector(3 downto 0);

output_11 <= std_logic_vector(input_11);

Convertir de Signé à Non signé en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le cast non signé comme indiqué ci-dessous :

signal input_12  : signed(3 downto 0);
signal output_12 : unsigned(3 downto 0);
  
output_12 <= unsigned(input_12);

Convertir de non signé en entier en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser l'appel de fonction to_integer de numeric_std comme indiqué ci-dessous :

signal input_7  : unsigned(3 downto 0);
signal output_7 : integer;

output_7 <= to_integer(input_7);

Convertir de non signé à signé en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le casting signé comme indiqué ci-dessous :

signal input_9  : unsigned(3 downto 0);
signal output_9 : signed(3 downto 0);

output_9 <= signed(input_9);

Convertir de Unsigned à Std_Logic_Vector en utilisant Numeric_Std

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le cast std_logic_vector comme indiqué ci-dessous :

  
signal input_8  : unsigned(3 downto 0);
signal output_8 : std_logic_vector(3 downto 0);

output_8 <= std_logic_vector(input_8);

Convertir d'entier en signé en utilisant Std_Logic_Arith

L'exemple ci-dessous utilise la conversion conv_signed, qui nécessite deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

signal input_3  : integer;
signal output_3 : signed(3 downto 0);
  
output_3 <= conv_signed(input_3, output_3'length);

Convertir d'entier en Std_Logic_Vector en utilisant Std_Logic_Arith

L'exemple ci-dessous utilise la conversion conv_std_logic_vector, qui nécessite deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

Une chose à noter ici est que si vous entrez un nombre négatif dans cette conversion, votre sortie std_logic_vector sera représentée en notation signée complément à 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);

Convertir d'entier en non signé à l'aide de Std_Logic_Arith

L'exemple ci-dessous utilise la conversion conv_unsigned, qui nécessite deux paramètres d'entrée. Le premier est le signal que vous souhaitez convertir, le second est la longueur du vecteur résultant.

signal input_2  : integer;
signal output_2 : unsigned(3 downto 0);
  
output_2 <= conv_unsigned(input_2, output_2'length);

Convertir de Std_Logic_Vector en entier en utilisant Std_Logic_Arith

Vous devez d'abord réfléchir aux données représentées par votre std_logic_vector. S'agit-il de données signées ou de données non signées ? Les données signées signifient que votre std_logic_vector peut être un ou positif nombre négatif. Les données non signées signifient que votre std_logic_vector est seulement un nombre positif. L'exemple ci-dessous utilise le unsigned() transtypé, mais si vos données peuvent être négatives, vous devez utiliser le signed() typage. Une fois que votre entrée std_logic_vector est non signée ou signée, vous pouvez la convertir en entier comme indiqué ci-dessous :

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

Convertir de Std_Logic_Vector en Signé en utilisant Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est de convertir le std_logic_vector comme signé comme indiqué ci-dessous :

signal input_6  : std_logic_vector(3 downto 0);
signal output_6 : signed(3 downto 0);

output_6 <= signed(input_6);

Convertir de Std_Logic_Vector en non signé à l'aide de Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est de convertir le std_logic_vector en non signé, comme indiqué ci-dessous :

signal input_5  : std_logic_vector(3 downto 0);
signal output_5 : unsigned(3 downto 0);
  
output_5 <= unsigned(input_5);

Convertir de signé en entier en utilisant Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser l'appel de fonction conv_integer de std_logic_arith comme indiqué ci-dessous :

  
signal input_10  : signed(3 downto 0);
signal output_10 : integer;

output_10 <= conv_integer(input_10);

Convertir de Signé à Std_Logic_Vector en utilisant Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le cast std_logic_vector comme indiqué ci-dessous :

signal input_11  : signed(3 downto 0);
signal output_11 : std_logic_vector(3 downto 0);

output_11 <= std_logic_vector(input_11);

Convertir de signé à non signé à l'aide de Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le cast non signé comme indiqué ci-dessous :

signal input_12  : signed(3 downto 0);
signal output_12 : unsigned(3 downto 0);
  
output_12 <= unsigned(input_12);

Convertir de non signé en entier à l'aide de Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser l'appel de fonction conv_integer de std_logic_arith comme indiqué ci-dessous :

signal input_7  : unsigned(3 downto 0);
signal output_7 : integer;

output_7 <= conv_integer(input_7);

Convertir de non signé à signé en utilisant Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le casting signé comme indiqué ci-dessous :

signal input_9  : unsigned(3 downto 0);
signal output_9 : signed(3 downto 0);

output_9 <= signed(input_9);

Convertir de Unsigned à Std_Logic_Vector en utilisant Std_Logic_Arith

Il s'agit d'une conversion facile, tout ce que vous avez à faire est d'utiliser le transtypage std_logic_vector comme indiqué ci-dessous :

  
signal input_8  : unsigned(3 downto 0);
signal output_8 : std_logic_vector(3 downto 0);

output_8 <= std_logic_vector(input_8);


Pages Nandland les plus populaires

VHDL

  1. Tutoriel - Introduction au VHDL
  2. Instruction de procédure - Exemple VHDL
  3. Enregistrements - Exemple VHDL
  4. Signé ou non signé en VHDL
  5. Variables - Exemple VHDL
  6. Vérification formelle en VHDL avec PSL
  7. Comment créer une liste de chaînes en VHDL
  8. Comment arrêter la simulation dans un testbench VHDL
  9. Comment créer un contrôleur PWM en VHDL