Comment l'assignation de signal fonctionne-t-elle dans un processus?
J'ai appris qu'un signal n'est pas modifié immédiatement lors de la rencontre d'une expression, mais lorsque le processus se termine. Dans cet exemple, ici:
...
signal x,y,z : bit;
...
process (y)
begin
x<=y;
z<=not x;
end process;
L'exemple dit ceci:
Si le signal y les modifications, puis un événement sera prévue sur x pour faire la même chose que y. Aussi, une manifestation est prévue sur z pour faire le contraire de x. La question est, la valeur de z est l'inverse de y? Bien sûr, la réponse est non, car si la deuxième instruction est exécutée, l'événement sur x n'a pas encore été traitée, et la manifestation prévue sur z sera l'inverse de la valeur de x avant le début du processus.
Bien, j'ai besoin de comprendre certaines choses:
- De ce que j'ai appris, les signaux de valeurs sont mises à jour uniquement à la fin du processus de. Est-ce correct?
- Le signal
x
est mis à jour comme la première déclaration. Ce n'est pas de changer la valeur dex
ce changement est mis dans une file d'attente pour être exécuté après la fin du processus. Donc tout ce qui est après cette déclarationx <= y
va pas voir le changement et voirx
ayant son ancienne valeur. Est-ce correct? - La deuxième déclaration est une tentative de modifier la valeur du signal
z
. La même ici, z ne changera pas sa valeur, mais il dépend de la valeur d'un autre processus. Le changement surz
sera mis en file d'attente pour être exécuté à la fin du processus. Est-ce correct?
Ce qui arrive à la fin du processus?
Possibilité numéro 1) La valeur en x
est changé, alors x a sa nouvelle valeur. Le deuxième signal z
est mis à jour, le premier signal x
a été mis à jour et, étant donné que z
dépend x
sa valeur est modifiée en se basant sur la NOUVELLE mise à JOUR de la valeur de x
. Et l'exemple devrait fonctionner correctement.
Possibilité numéro 2) La valeur en x
est changé, alors x a sa nouvelle valeur. Le deuxième signal z
est mis à jour. Étant donné que z
est un vieux de la valeur de x
c'est la valeur que z
tiendra, l'ancienne valeur de x
qui a été mis à jour, mais cette mise à jour n'est pas considérée.
Pourriez-vous me dire laquelle est la bonne façon?
source d'informationauteur Andry
Vous devez vous connecter pour publier un commentaire.
Variables d'obtenir les mises à jour que vous affecter. Les signaux se mettre à jour dans la prochaine delta du cycle (au plus tôt).
Jan Decaluwe explique ça plus en détail ici: http://www.sigasi.com/content/vhdls-crown-jewel
La façon dont il fonctionne:
Y
changements et le processus commence.X
sera assigné à ce queY's value
l'est actuellement, mais pas jusqu'à la fin du processus deZ
sera affecté ànot X's old value
mais pas jusqu'à la fin du processus deLe processus se termine donc maintenant
X
etZ
sera mis à jourJe suis en désaccord avec Ashraf post. J'ai fait un code vhdl moi-même où les variables sont les fils, et les signaux sont les loquets. Exemples:
signal x,y,clk;
process(clk)
commencer
x <= y
en fin de processus
Cela crée un synchrones loquet, un flip flop.
Toute variable qui n'affecte pas sa valeur à un signal, mais seulement à d'autres variables, est parfaitement acceptable "fil".
Ma compréhension de l'ensemble du sujet est: est-ce
Une assignation du signal à l'intérieur d'un processus ne tient pas compte d'autres signaux attributions faites dans le même processus de "instanciation". Aussi, pour le même signal, seule la dernière attribution seront pris en compte.
Sur "Ok FIN DU PROCESSUS: Qu'est-il arrivé?????":
Je pense qu'un signal d'affectation aura lieu au temps le plus court possible l'utilisation du matériel de la procédure le permet. EXCEPTION: les Changements à l'intérieur d'un si(rising_edge(clk)) aura lieu au début du cycle d'horloge suivant.