HDL et vérification

Quelle combinaison de cause et de remède explique l'apparition d'un verrou dans la description ci-dessus ?

always @(*) begin
    case (sel)
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
    endcase
end
  1. ALa case utilise trois entrées ; réduire à deux entrées
  2. By n'est pas affecté lorsque sel=2'b11 ; ajouter une clause default pour fixer la valeur dans tous les cas
  3. Calways @(*) est utilisé ; le remplacer par always @(posedge clk)
Afficher la réponse et l'explication

Réponse : B. y n'est pas affecté lorsque sel=2'b11 ; ajouter une clause default pour fixer la valeur dans tous les cas

sel, sur 2 bits, prend 4 valeurs, mais le cas 2'b11 n'est pas écrit ; y doit alors conserver sa valeur précédente et un verrou apparaît. En fixant la valeur pour tous les cas restants, par exemple « default: y = 0; », ou en affectant une valeur par défaut à y avant la case, on obtient un circuit combinatoire. Les verrous dus à des conditions oubliées sont une erreur fréquente chez les débutants en HDL.

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

Autres questions sur HDL et vérification

  1. Quelle écriture est couramment utilisée pour éviter les verrous non voulus dans un bloc always combinatoire ?
  2. Parmi les descriptions Verilog suivantes, laquelle ne devient pas un circuit et est ignorée par la synthèse logique (description destinée à la simulation) ?
  3. Quel circuit obtient-on en synthétisant la description ci-dessus, qui compte les 1 dans d sur 8 bits ?
  4. Quel est le type et le comportement de la réinitialisation dans la description ci-dessus ?
  5. Quelle est la différence entre réinitialisation synchrone et asynchrone ?

Comparatifs sur ce thème