ET tous les éléments d'un n-tableau de bits en VHDL
permet de dire que j'ai un n-tableau de bits. Je veux ET que tous les éléments du tableau. Similaire pour le câblage de chaque élément de n-bits ET la porte.
Comment puis-je y parvenir en VHDL?
Note: je suis en train d'utiliser réutilisables code VHDL donc je veux éviter de codage en dur quelque chose comme
result <= array(0) and array(1) and array(2)....and array(n);
Merci
Oshara
La comp.lang.vhdl FAQ peut être utile ici à l'égard de la réduction des opérateurs: eda.org/comp.lang.vhdl/FAQ1.html#reduction L' "et de" réduction de exemple devrait donner quelque chose de convenable pour votre but.
tableau est un mot réservé en VHDL.
tableau est un mot réservé en VHDL.
OriginalL'auteur | 2013-11-30
Vous devez vous connecter pour publier un commentaire.
Si vous avez VHDL-2008 disponible, puis réduction
and
est de construire dans lela langue comme David Koontz et Pedroni l'ai expliqué.
Si vous n'avez VHDL-2003 et avant disponible, vous pouvez utiliser une fonction
comme:
Vous pouvez ensuite utiliser la fonction à la fois à l'intérieur et à l'extérieur de fonctions:
OriginalL'auteur Morten Zilmer
Solution 1: Avec opérateur unaire
VHDL-2008 définit les opérateurs unaires, comme celles-ci:
Cependant, ils ne peuvent pas être pris en charge par votre compilateur.
Solution 2: Avec de la pure combinatoire (et traditionnelle) code
Parce que dans le code concurrente vous ne pouvez pas affecter une valeur à un signal plus d'une fois, vous pouvez créer un temp de signal avec un "extra" de dimension. Dans votre cas, la sortie est un peu, donc le temp signal doit être un tableau 1D, comme indiqué ci-dessous.
Présumées circuit est illustré dans la figure ci-dessous.
Solution 3: Avec le code séquentiel
C'est plus simple que la solution 2, même si vous êtes maintenant à l'aide du code séquentiel pour résoudre purement combinatoire problème (mais le matériel est le même). Vous pouvez soit écrire un code similaire à celle dans la solution 2, mais avec un processus et boucle (le dernier, en lieu et place de générer) ou à l'aide d'un fonction. Parce que dans le code séquentiel, vous êtes autorisé à attribuer une valeur à un signal plus d'une fois, la temp signal de la solution 2 n'est pas nécessaire ici.
OriginalL'auteur VAP
Mon préféré, non-VHDL-2008 solution est:
Avec VHDL-2008, je vous recommande d'utiliser le "et" la réduction intégrée (voir Pedroni du post) et l'utilisation de la norme IEEE package "de l'ieee.numeric_std_unsigned.tous les" à la place de shareware package "std_logic_unsigned".
Vous pouvez obtenir le même résultat avec moins de travail par la déclaration d'une constante std_logic_vector de 'de 1 d'à l'aide de la contrainte de plage de MyArray et à l'aide de l'opérateur d'égalité entre deux std_logic_vectors prédéfinies pour toutes les dimensions de la matrice de distincts (tableau). Cette méthode simplifiée dépend aussi de ne pas avoir besoin de passer 'X' ou 'Z',
La langue permet aussi le plus lisible expression "MyArray = (Montableau'range => '1')", cependant, tout cela est légal, VHDL, le dernier que j'ai vérifier avec Synopsys DesignCompiler il ne fonctionne pas - il n'est donc pas portable méthode. Heureusement, nous n'avons pas besoin de trop se soucier de ces choses que le VHDL-2008 a créé une solution privilégiée.
Tous ceux dans le public avec une -2008 conforme à la configuration de l'outil levez vos mains.
OriginalL'auteur Jim Lewis