Quelle est la différence entre l'utilisation:
ENTITY MyDemo is
PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo;
et
ENTITY MyDemo is
PORT(X: IN BIT; F: OUT BIT );
END MyDemo;
Quelles sont les limites de l'utilisation de BIT sur STD_LOGIC et vice-versa? Sont-ils totalement interchangeables? Je comprends que si j'ai défini STD_LOGIC, je ne peux pas l'utiliser avec un BIT_Vector pour accéder aux éléments du tableau. Mais je n'arrive pas à voir la différence.
Réponses:
Bit
est un type prédéfini et ne peut avoir que la valeur0
ou1
. LeBit
type est une valeur idéalisée.std_logic
fait partie dustd_logic_1164
package et fournit une modélisation plus réaliste des signaux dans un système numérique. Il est capable d'avoir neuf valeurs différentes. En règle générale au sein de votre code que vous utiliserez uniquement0
,1
etZ
(High-Z). MaisU
(non initialisé) etX
(inconnu) sont également très utiles lors de la modélisation du système dans un banc de test.Le
std_logic_1164
package fournit également des fonctions de conversion pour convertirstd_logic
àBit
.la source
La plupart des gens utilisent
std_logic
. Cela permetu
(non défini),x
(inconnu) etz
(haute impédance), ce qui n'est pas le cas. Bien que vous ne puissiez jamais tristater dans une puce et que vous n'en ayez donc pas besoinz
,u
est utile pour trouver les réinitialisations manquantes.x
est utile pour trouver plusieurs pilotes.la source
X
trouver plusieurs pilotes.std_logic
est en effet le type standard de l'industrie pour VHDL, mais il est également l'une des fonctionnalités les plus mal utilisées de VHDL.std_logic
est un signal résolu, ce qui signifie qu'une fonction est utilisée pour résoudre la valeur du signal en cas de plusieurs pilotes. Mais dans la grande majorité des cas, plusieurs pilotes sont une erreur. En utilisant un type non résolu tel questd_ulogic
celui-ci serait marqué par le compilateur comme une erreur.std_ulogic
. Mais gardez à l'esprit que de nombreux cœurs seront écrits avecstd_logic
, vous en verrez probablement une partie.std_logic
est en effet le type le plus courant; Je dis simplement que son utilisation n'est pas conforme à l'intention initiale: la modélisation de signaux multi-états. Pour les conceptions internes, nous ne considérons généralement que1
ou0
et un seul pilote. Voir electronics.stackexchange.com/questions/17524/… pour une discussion approfondie sur le sujet.std_logic
a une fonction de résolutionNon seulement il
std_logic
a des états plus utiles1
et0
il a également une fonction de résolution définie.Une fonction de résolution est un concept de langage VHDL. Il s'agit d'une fonction associée à un type et qui détermine ce qui se produit lorsque plusieurs valeurs de ce type sont appliquées à un seul signal. La syntaxe est:
où
std_ulogic
est la version non résolue (et donc beaucoup moins utile) destd_logic
.En particulier, cela implique de belles choses comme
0
et1
conduit àX
:Cela a un sens intuitif, car nous comprenons
X
qu'il s'agit de l'état dans lequel plusieurs valeurs incompatibles sont appliquées à un seul fil.std_logic
sait également comment résoudre toutes les autres paires de signaux d'entrée possibles selon un tableau présent sur le LRM.bit
d'autre part, n'a pas de fonction de résolution, et si nous l'avions utilisée dans l'exemple ci-dessus, cela conduirait à une erreur de simulation sur GHDL 0,34.Les valeurs possibles de
std_logic
sont un bon choix car elles sont normalisées par IEEE 1164 et traitent de nombreux cas d'utilisation courants.la source
std_logic est plus riche que bit et devrait être utilisé la plupart du temps.
Il y a aussi le type booléen qui, comme bit , a deux valeurs. C'est le type de résultat des comparaisons, le type attendu après un IF [bool] ou un WHEN [bool] , souvent utilisé pour les constantes de sélection:
constant ENABLE_DEBUG_INTERFACE : boolean := true;
Un endroit où le bit peut être préféré à std_logic est pour les grands tableaux, les mémoires. Lors de l'optimisation des simulateurs, le bit occupe moins de surface dans la mémoire du simulateur que std_logic . Et il peut être important que votre conception instancie un Go de RAM.
Il peut également être plus rapide pour les très grandes conceptions, par exemple quelque chose généré automatiquement à partir de la netlist au niveau de la porte post-synthèse.
Bien sûr, cet aspect de performance ne fait pas partie du langage et dépend de l'implémentation du simulateur VHDL.
la source