Erreur lors de l'ajout de std_logic_vectors
Je veux avoir un module simple qui ajoute deux std_logic_vectors. Cependant, lors de l'utilisation du code
ci-dessous avec l'opérateur+, il n'est pas synthétiser.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
entity add_module is
port(
pr_in1 : in std_logic_vector(31 downto 0);
pr_in2 : in std_logic_vector(31 downto 0);
pr_out : out std_logic_vector(31 downto 0)
);
end add_module;
architecture Behavior of add_module is
begin
pr_out <= pr_in1 + pr_in2;
end architecture Behavior;
Le message d'erreur que je reçois de XST
La ligne 17. + ne peut pas avoir ces opérandes dans ce contexte.
Me manque une bibliothèque? Si possible, j'veux pas convertir les données de nombres naturels.
Merci beaucoup
source d'informationauteur Mike21
Vous devez vous connecter pour publier un commentaire.
Comment voulez-vous que le compilateur de savoir si votre std_logic_vectors sont signés ou non ? Additionneur de mise en œuvre n'est pas la même dans ces deux cas, vous devez indiquer explicitement au compilateur ce que vous voulez 😉
Remarque: le VHDL, de la syntaxe dans StackOverflow est merdique. Copiez/collez ce code dans votre choix VHDL éditeur de lire plus facilement.
Ne pas utilisation
std_logic_arith
- j'ai écrit à propos de cette (à une longueur d' :).Ne utilisation numeric_std - et de ne pas utiliser le bon type de votre entité ports. Si vous faites de l'arithmétique, de l'utilisation de types numériques (entiers, ou (onu)ont signé des vecteurs, selon le cas). Ils vont synthétiser parfaitement bien.
std_logic_vector
s sont bons pourBons conseils de @Aurelien utiliser numeric_std.
Garder à l'esprit que l'ajout de deux 32 bits peut entraîner une 33 la valeur du bit et de décider comment vous voulez gérer le trop-plein.
Le moyen facile de résoudre cette erreur est:
Ajouter de la bibliothèque de unsign,
Après que votre code commence à travailler.
Utilisation