HDL et vérification

Dans la description ci-dessus, juste avant le front montant d'horloge, a=0 et b=1. Quelles sont les valeurs de a et b après le front montant ?

always @(posedge clk) begin
    a <= b;
    b <= a;
end
  1. Aa=1, b=0 (échangées)
  2. Ba=1, b=1
  3. Ca=0, b=0
Afficher la réponse et l'explication

Réponse : A. a=1, b=0 (échangées)

Avec l'affectation non bloquante, les deux membres de droite (ancienne valeur de b, 1, et ancienne valeur de a, 0) sont d'abord évalués, puis 1 est écrit dans a et 0 dans b simultanément : les valeurs sont échangées. En circuit, cela correspond à deux bascules dont les sorties sont reliées aux entrées l'une de l'autre. Avec l'affectation bloquante (=), a devient 1 à la première ligne, et b reçoit à la deuxième la nouvelle valeur de a, 1 : les deux valent alors 1.

S'entraîner sur ce thème Retour au thème

Autres questions sur HDL et vérification

  1. Voulant un registre à décalage à deux étages, on a écrit le code ci-dessus avec des affectations bloquantes (=). Quel problème survient ?
  2. Quelle est la règle générale d'usage des types d'affectation en Verilog ?
  3. Que signifie l'écriture « always @(*) » en Verilog ?
  4. Voulant un circuit combinatoire, on a écrit le code ci-dessus. Quel problème peut survenir ?
  5. Voulant un circuit combinatoire, on a écrit le code ci-dessus. Que produit la synthèse logique ?

Comparatifs sur ce thème