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
- Entier à signé
- Entier à Std_Logic_Vector
- Entier à non signé
- Std_Logic_Vector en entier
- Std_Logic_Vector à signé
- Std_Logic_Vector à non signé
- Signé en nombre entier
- Signé à Std_Logic_Vector
- Signé à non signé
- Unsigned to Integer
- De non signé à signé
- Non signé à Std_Logic_Vector
Exemples de conversions utilisant Std_Logic_Arith
- Entier à signé
- Entier à Std_Logic_Vector
- Entier à non signé
- Std_Logic_Vector en entier
- Std_Logic_Vector à signé
- Std_Logic_Vector à non signé
- Signé en nombre entier
- Signé à Std_Logic_Vector
- Signé à non signé
- Unsigned to Integer
- De non signé à signé
- Non signé à Std_Logic_Vector
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);
VHDL
- Tutoriel - Introduction au VHDL
- Instruction de procédure - Exemple VHDL
- Enregistrements - Exemple VHDL
- Signé ou non signé en VHDL
- Variables - Exemple VHDL
- Vérification formelle en VHDL avec PSL
- Comment créer une liste de chaînes en VHDL
- Comment arrêter la simulation dans un testbench VHDL
- Comment créer un contrôleur PWM en VHDL